docs: protected TablePopulationRequirements checkAddDropIfTableIsEmptyWhitelist(final CatalogType suspect,
                                                                                 final ChangeType changeType) {
          TablePopulationRequirements retval = null;
  
          // handle adding an index - presumably unique
          if (suspect instanceof Index) {
              Index idx = (Index) suspect;
              String indexName = idx.getTypeName();
              retval = new TablePopulationRequirements(indexName);
              String tableName = idx.getParent().getTypeName();
              retval.addTableName(tableName);
  
              if (! idx.getIssafewithnonemptysources()) {
                  retval.setErrorMessage("Unable to create index " + indexName +
                                         " while the table contains data." +
                                         " The index definition uses operations that cannot be applied " +
                                         "if table " + tableName + " is not empty.");
              }
              else if (idx.getUnique()) {
                  retval.setErrorMessage(
                          String.format(
                                  "Unable to add unique index %s because table %s is not empty.",
                                  indexName,
                                  tableName));
              }
              return retval;
          }
  
          CatalogType parent = suspect.getParent();
  
          // handle changes to columns in an index - presumably drops and presumably unique
          if ((suspect instanceof ColumnRef) && (parent instanceof Index)) {
              Index idx = (Index) parent;
              assert(idx.getUnique());
              assert(changeType == ChangeType.DELETION);
              Table table = (Table) idx.getParent();
  
              String indexName = idx.getTypeName();
              String tableName = table.getTypeName();
              String errorMessage =
                      String.format(
                              "Unable to remove column %s from unique index %s because table %s is not empty.",
                              suspect.getTypeName(),
                              indexName,
                              tableName);
              retval = new TablePopulationRequirements(indexName, tableName, errorMessage);
              retval.addTableName(tableName);
              return retval;
          }
  
          if ((suspect instanceof Column) && (parent instanceof Table) && (changeType == ChangeType.ADDITION)) {
              String tableName = parent.getTypeName();
              retval = new TablePopulationRequirements(tableName);
              retval.addTableName(tableName);
              retval.setErrorMessage(
                      String.format(
                              "Unable to add NOT NULL column %s because table %s is not empty and no default value was specified.",
                              suspect.getTypeName(), tableName));
              return retval;
          }
  
          // Check to see if a table is a materialized view.  If
          // so, we want to check if the table is safe for non-empty
          // source tables, and leave the correct error message if so.
          if (suspect instanceof Table) {
              Table tbl = (Table)suspect;
              if (tbl.getMvhandlerinfo().size() > 0) {
                  MaterializedViewHandlerInfo mvhInfo = tbl.getMvhandlerinfo().get("mvhandlerinfo");
                  if ( mvhInfo != null && ( ! mvhInfo.getIssafewithnonemptysources()) ) {
                      retval = getMVHandlerInfoMessage(mvhInfo);
                      if (retval != null) {
                          return retval;
                      }
                  }
              } else {
                  MaterializedViewInfo mvInfo = MaterializedViewProcessor.getMaterializedViewInfo(tbl);
                  if (mvInfo != null && ( ! mvInfo.getIssafewithnonemptysources())) {
                      retval = getMVInfoMessage(tbl, mvInfo);
                      if (retval != null) {
                          return retval;
                      }
                  }
              }
              if (TableType.isPersistentMigrate(tbl.getTabletype())) {
                  m_requiresNewExportGeneration = true;
              }
          }
          return null;
      }