From 526fc50f2e0e19d5985156bf733b34833d76d1f1 Mon Sep 17 00:00:00 2001 From: evan-miller-jumpmind <70151986+evan-miller-jumpmind@users.noreply.github.com> Date: Mon, 3 Oct 2022 13:15:24 -0400 Subject: [PATCH] 0005497: Fixed NPE in DbFill --- .../jumpmind/symmetric/io/data/DbFill.java | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/DbFill.java b/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/DbFill.java index 1d98ba777e..cbf167a1a2 100644 --- a/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/DbFill.java +++ b/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/DbFill.java @@ -284,9 +284,10 @@ protected void buildDependentColumnValues(List tables) { List commonValue = new ArrayList(); StringBuilder sb = null; for (ForeignKeyReference fkr : references) { + ForeignKey fk = fkr.getForeignKey(); String key = table.getFullyQualifiedTableName() + "." + fkr.getReference().getForeignColumnName(); commonDependencyValues.put(key, commonValue); - commonDependencyTables.add(getDbTable(fkr.getForeignKey().getForeignTableName())); + commonDependencyTables.add(getDbTable(fk.getForeignTableCatalog(), fk.getForeignTableSchema(), fk.getForeignTableName())); if (verbose) { sb = (sb == null) ? new StringBuilder() : sb.append(", "); sb.append(fkr.getReference().getLocalColumnName() + " -> " + fkr.getForeignKey().getForeignTableName() + "." + fkr.getReference() @@ -329,7 +330,8 @@ protected int buildMinColumnSize(Table table, Column column, Set related for (ForeignKey fk : table.getForeignKeys()) { for (Reference ref : fk.getReferences()) { if (ref.getLocalColumnName().equals(column.getName())) { - Table foreignTable = getDbTable(fk.getForeignTableName()); + Table foreignTable = getDbTable(fk.getForeignTableCatalog(), fk.getForeignTableSchema(), + fk.getForeignTableName()); Column foreignColumn = foreignTable.findColumn(ref.getForeignColumnName()); size = buildMinColumnSize(foreignTable, foreignColumn, relatedTableColumns, size); } @@ -356,9 +358,10 @@ protected List
getForeignKeyTables(List
tables, Set
visited Set
fkDepSet = new HashSet
(tables); List
fkDepList = new ArrayList
(); for (Table table : tables) { - if (visited.add(table)) { + if (table != null && visited.add(table)) { for (ForeignKey fk : table.getForeignKeys()) { - Table foreignTable = getDbTable(fk.getForeignTableName()); + Table foreignTable = getDbTable(fk.getForeignTableCatalog(), fk.getForeignTableSchema(), + fk.getForeignTableName()); if (fkDepSet.add(foreignTable)) { fkDepList.add(foreignTable); } @@ -375,7 +378,7 @@ protected List
getForeignKeyTables(List
tables, Set
visited protected List
getForeignKeyTablesReversed(List
tables, Set
visited) { List
fkDepList = new ArrayList
(); for (Table table : tables) { - if (visited.add(table)) { + if (table != null && visited.add(table)) { String parentTableName = table.getName(); for (Table child : getAllDbTables().values()) { for (ForeignKey fk : child.getForeignKeys()) { @@ -1057,8 +1060,12 @@ protected Map getAllDbTables() { return allDbTablesCache; } - protected Table getDbTable(String tableName) { - return getAllDbTables().get(tableName); + protected Table getDbTable(String catalogName, String schemaName, String tableName) { + Table table = getAllDbTables().get(tableName); + if (table == null) { + table = platform.readTableFromDatabase(catalogName, schemaName, tableName); + } + return table; } public DmlStatement createInsertDmlStatement(Table table) {