You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by ab...@apache.org on 2019/09/02 13:37:00 UTC
[cayenne] 03/05: CAY-2612 Modeler: add lazy-loading to dbImport tab
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 <an...@gmail.com>
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));