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));