docs: protected boolean columnTypeMatches(ColumnType columnType, boolean allColumnsShouldMatchType,
                                          String query, boolean debugPrint, String ... groups) {
  
          // If columnType is NULL (unspecified), then no checking of column
          // types is needed
          if (columnType == null) {
              return true;
          }
  
          List<String> tableNames = null;
          if (columnType != ColumnType.INTEGER) {
              tableNames = getTableNames(query);
          }
  
          if (debugPrint) {
              System.out.println("    In NonVoltDBBackend.columnTypeMatches (1):");
              System.out.println("      columnType: " + columnType);
              System.out.println("      groups/col: " + Arrays.toString(groups));
              System.out.println("      query     : " + query);
              System.out.println("      tableNames: " + tableNames);
              System.out.println("      allColumnsShouldMatchType: " + allColumnsShouldMatchType);
          }
  
          boolean allMatch = true;
          boolean atLeastOneMatch = false;
          for (String column : groups) {
              if (column == null) {
                  continue;
              }
  
              if (columnType == ColumnType.GEO) {
                  if (isGeoColumn(column, tableNames, debugPrint)) {
                      atLeastOneMatch = true;
                  } else {
                      allMatch = false;
                  }
              } else if (columnType == ColumnType.VARCHAR) {
                  if (isVarcharColumn(column, tableNames, debugPrint)) {
                      atLeastOneMatch = true;
                  } else {
                      allMatch = false;
                  }
              } else if (columnType == ColumnType.BIGINT) {
                  if (isBigintColumn(column, tableNames, debugPrint)) {
                      atLeastOneMatch = true;
                  } else {
                      allMatch = false;
                  }
              } else if (columnType == ColumnType.INTEGER) {
                  // In this case, an integer constant is also acceptable, so we
                  // call isInteger, rather than isIntegerColumn.
                  // Also, not specifying the table name(s) here (i.e., the null
                  // second argument to isInteger) is deliberately saying to treat
                  // anything that "looks" like an integer (i.e., the column name
                  // is one that is normally used for an integer column) as an
                  // integer; this solves certain odd materialized view cases
                  // where PostgreSQL decides that the SUM of BIGINT is a DECIMAL,
                  // but VoltDB treats it as BIGINT
                  if (isInteger(column, null, debugPrint)) {
                      atLeastOneMatch = true;
                  } else {
                      allMatch = false;
                  }
              } else {
                  throw new IllegalArgumentException("Unrecognized ColumnType: " + columnType);
              }
          }
  
          if (debugPrint) {
              System.out.println("    In NonVoltDBBackend.columnTypeMatches (2):");
              System.out.println("      allMatch       : " + allMatch);
              System.out.println("      atLeastOneMatch: " + atLeastOneMatch);
              System.out.println("      returning      : " + (allColumnsShouldMatchType ? allMatch: atLeastOneMatch));
          }
  
          if (allColumnsShouldMatchType) {
              return allMatch;
          } else {
              return atLeastOneMatch;
          }
      }