docs: public List<TablePopulationRequirements> checkModifyIfTableIsEmptyWhitelist(final CatalogType suspect,
                                                                                  final CatalogType prevType,
                                                                                  final String field)
      {
          if (prevType instanceof Database) {
              return null;
          }
  
          if (prevType instanceof Table) {
              String objectName = suspect.getTypeName();
              TablePopulationRequirements entry = new TablePopulationRequirements(objectName);
  
              Table prevTable = (Table) prevType; // safe because of enclosing if-block
              Database db = (Database) prevType.getParent();
  
              // table name
              entry.addTableName(suspect.getTypeName());
  
              // allowed changes to a table
              if (field.equalsIgnoreCase("isreplicated")) {
                  // error message
                  entry.setErrorMessage(String.format(
                              "Unable to change whether table %s is replicated because it is not empty.",
                              objectName));
                  return Collections.singletonList(entry);
              }
              if (field.equalsIgnoreCase("partitioncolumn")) {
                  // error message
                  entry.setErrorMessage(String.format(
                                              "Unable to change the partition column of table %s because it is not empty.",
                                              objectName));
                  return Collections.singletonList(entry);
              }
              if (field.equalsIgnoreCase("isdred")) {
                  // error message
                  entry.setErrorMessage(String.format(
                                          "Unable to enable DR on table %s because it is not empty.",
                                          objectName));
                  return Collections.singletonList(entry);
              }
          }
  
          // handle narrowing columns and some modifications on empty tables
          if (prevType instanceof Column) {
              Table table = (Table) prevType.getParent();
              Database db = (Database) table.getParent();
  
              String tableName = table.getTypeName();
              Column column = (Column)prevType;
              String columnName = column.getTypeName();
  
              // This is just used as a key in a map which helps us keep
              // track of error messages.
              String objectName = table.getTypeName() + "." + column.getName();
              TablePopulationRequirements entry = new TablePopulationRequirements(objectName);
  
              // capture the table name
              entry.addTableName(tableName);
  
              if (field.equalsIgnoreCase("type")) {
                  // error message
                  entry.setErrorMessage(String.format(
                          "Unable to make a possibly-lossy type change to column %s in table %s because it is not empty.",
                          columnName, tableName));
                  return Collections.singletonList(entry);
              }
  
              if (field.equalsIgnoreCase("size")) {
                  // error message
                  entry.setErrorMessage(String.format(
                          "Unable to narrow the width of column %s in table %s because it is not empty.",
                          columnName, tableName));
                  return Collections.singletonList(entry);
              }
  
              // Nullability changes are allowed on empty tables.
              if (field.equalsIgnoreCase("nullable")) {
                  // Would be flipping the nullability, so invert the state for the message.
                  String alteredNullness = column.getNullable() ? "NOT NULL" : "NULL";
                  entry.setErrorMessage(String.format(
                                          "Unable to change column %s null constraint to %s in table %s because it is not empty.",
                                          columnName, alteredNullness, tableName));
                  return Collections.singletonList(entry);
              }
          }
  
          if (prevType instanceof Index) {
              Table table = (Table) prevType.getParent();
              String tableName = table.getTypeName();
              Index index = (Index)prevType;
              String indexName = index.getTypeName();
  
              // capture the table name
              TablePopulationRequirements entry = new TablePopulationRequirements(indexName);
              entry.addTableName(tableName);
              if (field.equalsIgnoreCase("expressionsjson")) {
                  // error message
                  entry.setErrorMessage(String.format(
                          "Unable to alter table %s with expression-based index %s becase table %s is not empty.",
                          tableName, indexName, tableName));
                  return Collections.singletonList(entry);
              }
  
          }
  
          return null;
      }