This is an automated email from the ASF dual-hosted git repository. abulatski pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/cayenne.git
commit 392571551e2167170eeb0a64f15ae9abf6e75687 Author: Arseni Bulatski <[email protected]> AuthorDate: Mon Sep 2 16:12:51 2019 +0300 CAY-2612 Modeler: add lazy-loading to dbImport tab --- .../cayenne/dbsync/reverse/dbload/ExportedKey.java | 16 +++++++++------- .../cayenne/dbsync/reverse/dbload/ExportedKeyLoader.java | 12 +++++++----- .../cayenne/dbsync/reverse/dbload/ExportedKeyTest.java | 10 +++++----- 3 files changed, 21 insertions(+), 17 deletions(-) diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbload/ExportedKey.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbload/ExportedKey.java index a9b9116..337acbf 100644 --- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbload/ExportedKey.java +++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbload/ExportedKey.java @@ -19,15 +19,15 @@ package org.apache.cayenne.dbsync.reverse.dbload; +import java.sql.ResultSet; +import java.sql.SQLException; + import org.apache.cayenne.map.DbEntity; +import org.apache.cayenne.util.CompareToBuilder; import org.apache.cayenne.util.EqualsBuilder; import org.apache.cayenne.util.HashCodeBuilder; -import org.apache.cayenne.util.CompareToBuilder; import org.apache.cayenne.util.Util; -import java.sql.ResultSet; -import java.sql.SQLException; - /** * A representation of relationship between two tables in database. It can be used for creating names * for relationships. @@ -46,21 +46,23 @@ public class ExportedKey implements Comparable { * * @param rs ResultSet pointing to a exported key, fetched using * DataBaseMetaData.getExportedKeys(...) + * @param catalogName use only like workaround for postgres. Postgres metadata + * returns null for getting catalogs. */ - ExportedKey(ResultSet rs) throws SQLException { + ExportedKey(ResultSet rs, String catalogName) throws SQLException { String pkCatalog = rs.getString("PKTABLE_CAT"); String pkSchema = rs.getString("PKTABLE_SCHEM"); String pkTable = rs.getString("PKTABLE_NAME"); String pkColumn = rs.getString("PKCOLUMN_NAME"); String pkName = rs.getString("PK_NAME"); - pk = new KeyData(pkCatalog, pkSchema, pkTable, pkColumn, pkName); + pk = new KeyData(pkCatalog != null ? pkCatalog : catalogName, pkSchema, pkTable, pkColumn, pkName); String fkCatalog = rs.getString("FKTABLE_CAT"); String fkSchema = rs.getString("FKTABLE_SCHEM"); String fkTable = rs.getString("FKTABLE_NAME"); String fkColumn = rs.getString("FKCOLUMN_NAME"); String fkName = rs.getString("FK_NAME"); - fk = new KeyData(fkCatalog, fkSchema, fkTable, fkColumn, fkName); + fk = new KeyData(fkCatalog != null ? fkCatalog : catalogName, fkSchema, fkTable, fkColumn, fkName); this.keySeq = rs.getShort("KEY_SEQ"); } diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbload/ExportedKeyLoader.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbload/ExportedKeyLoader.java index 2bc28b1..a868cd8 100644 --- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbload/ExportedKeyLoader.java +++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbload/ExportedKeyLoader.java @@ -19,14 +19,14 @@ package org.apache.cayenne.dbsync.reverse.dbload; -import org.apache.cayenne.map.DbEntity; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import java.sql.DatabaseMetaData; import java.sql.ResultSet; import java.sql.SQLException; +import org.apache.cayenne.map.DbEntity; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + class ExportedKeyLoader extends PerEntityLoader { private static final Logger LOGGER = LoggerFactory.getLogger(ExportedKeyLoader.class); @@ -55,7 +55,9 @@ class ExportedKeyLoader extends PerEntityLoader { @Override void processResultSet(DbEntity dbEntity, DbLoadDataStore map, ResultSet rs) throws SQLException { - ExportedKey key = new ExportedKey(rs); + // dbEntity.getCatalog() is workaround for postrgres. + // Postgres metadata returns null for getCatalog method. + ExportedKey key = new ExportedKey(rs, dbEntity.getCatalog()); DbEntity pkEntity = map.getDbEntity(key.getPk().getTable()); if (!key.getPk().validateEntity(pkEntity)) { diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbload/ExportedKeyTest.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbload/ExportedKeyTest.java index fef88e7..9520aba 100644 --- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbload/ExportedKeyTest.java +++ b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbload/ExportedKeyTest.java @@ -19,12 +19,12 @@ package org.apache.cayenne.dbsync.reverse.dbload; -import org.junit.Assert; -import org.junit.Test; - import java.sql.ResultSet; import java.sql.SQLException; +import org.junit.Assert; +import org.junit.Test; + import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -62,7 +62,7 @@ public class ExportedKeyTest { when(rs1.getShort("KEY_SEQ")).thenReturn((short) 1); - ExportedKey keyData1 = new ExportedKey(rs1); + ExportedKey keyData1 = new ExportedKey(rs1, "cat"); ResultSet rs2 = mock(ResultSet.class); when(rs2.getString("PKTABLE_CAT")).thenReturn("PKCatalog"); @@ -79,7 +79,7 @@ public class ExportedKeyTest { when(rs2.getShort("KEY_SEQ")).thenReturn((short)1); - ExportedKey keyData2 = new ExportedKey(rs2); + ExportedKey keyData2 = new ExportedKey(rs2, "cat"); Assert.assertTrue(keyData1.equals(keyData2)); Assert.assertTrue(keyData2.equals(keyData1));
