This is an automated email from the ASF dual-hosted git repository.

stariy95 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cayenne.git


The following commit(s) were added to refs/heads/master by this push:
     new a4dd27097 CAY-2992 dbimport: support posgres drivers newer than 42.7.4
a4dd27097 is described below

commit a4dd27097f11a6200ca269f06167e6dbbae4344e
Author: ntimofeev <[email protected]>
AuthorDate: Wed Aug 19 16:02:53 2026 +0300

    CAY-2992 dbimport: support posgres drivers newer than 42.7.4
---
 RELEASE-NOTES.txt                                  |   1 +
 .../cayenne/dbsync/reverse/dbload/DbLoader.java    |  16 +++
 .../dbsync/reverse/dbload/DbLoaderTest.java        | 139 +++++++++++++++++++++
 .../dbsync/reverse/dbload/ExportedKeyLoaderIT.java |  12 +-
 pom.xml                                            |   2 +-
 5 files changed, 160 insertions(+), 10 deletions(-)

diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index e77def223..c302b95fd 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -37,6 +37,7 @@ CAY-2985 DataDomain init and structure cleanup
 CAY-2986 Cgen to run unconditionally
 CAY-2987 DataNode to own PkGenerator
 CAY-2989 Upgrade MCP SDK to 2.0
+CAY-2992 dbimport: support posgres drivers newer than 42.7.4
 
 Bug Fixes:
 
diff --git 
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbload/DbLoader.java
 
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbload/DbLoader.java
index 90e53eef4..f352a81bc 100644
--- 
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbload/DbLoader.java
+++ 
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbload/DbLoader.java
@@ -21,6 +21,8 @@ package org.apache.cayenne.dbsync.reverse.dbload;
 import org.apache.cayenne.dba.DbAdapter;
 import org.apache.cayenne.dbsync.naming.ObjectNameGenerator;
 import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.map.DbEntity;
+import org.apache.cayenne.map.Procedure;
 
 import java.sql.Connection;
 import java.sql.DatabaseMetaData;
@@ -82,9 +84,23 @@ public class DbLoader {
         for(AbstractLoader loader : loaders) {
             loader.load(metaData, loadedData);
         }
+
+        if (!adapter.supportsCatalogsOnReverseEngineering()) {
+            stripCatalogs(loadedData);
+        }
+
         return loadedData;
     }
 
+    static void stripCatalogs(DataMap map) {
+        for (DbEntity entity : map.getDbEntities()) {
+            entity.setCatalog(null);
+        }
+        for (Procedure procedure : map.getProcedures()) {
+            procedure.setCatalog(null);
+        }
+    }
+
     //// Utility methods that better be moved somewhere ////
 
     /**
diff --git 
a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbload/DbLoaderTest.java
 
b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbload/DbLoaderTest.java
new file mode 100644
index 000000000..fa7f15be6
--- /dev/null
+++ 
b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbload/DbLoaderTest.java
@@ -0,0 +1,139 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ *    or more contributor license agreements.  See the NOTICE file
+ *    distributed with this work for additional information
+ *    regarding copyright ownership.  The ASF licenses this file
+ *    to you under the Apache License, Version 2.0 (the
+ *    "License"); you may not use this file except in compliance
+ *    with the License.  You may obtain a copy of the License at
+ *
+ *      https://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing,
+ *    software distributed under the License is distributed on an
+ *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *    KIND, either express or implied.  See the License for the
+ *    specific language governing permissions and limitations
+ *    under the License.
+ */
+
+package org.apache.cayenne.dbsync.reverse.dbload;
+
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+import org.apache.cayenne.dba.DbAdapter;
+import org.apache.cayenne.dbsync.naming.DefaultObjectNameGenerator;
+import org.apache.cayenne.dbsync.reverse.filters.FiltersConfig;
+import org.apache.cayenne.dbsync.reverse.filters.PatternFilter;
+import org.apache.cayenne.dbsync.reverse.filters.TableFilter;
+import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.map.DbEntity;
+import org.apache.cayenne.map.Procedure;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.*;
+
+public class DbLoaderTest {
+
+    private static final String CATALOG = "test_catalog";
+    private static final String SCHEMA = "test_schema";
+    private static final String TABLE = "ARTIST";
+    private static final String PROCEDURE = "TEST_PROCEDURE";
+
+    @Test
+    public void loadWithoutCatalogs() throws SQLException {
+        DataMap map = load(false);
+
+        assertEquals(1, map.getDbEntities().size());
+        assertEquals(1, map.getProcedures().size());
+
+        DbEntity entity = map.getDbEntity(TABLE);
+        assertNotNull(entity);
+        assertNull(entity.getCatalog());
+        assertEquals(SCHEMA, entity.getSchema());
+
+        Procedure procedure = map.getProcedure(PROCEDURE);
+        assertNotNull(procedure);
+        assertNull(procedure.getCatalog());
+        assertEquals(SCHEMA, procedure.getSchema());
+    }
+
+    @Test
+    public void loadWithCatalogs() throws SQLException {
+        DataMap map = load(true);
+
+        assertEquals(1, map.getDbEntities().size());
+        assertEquals(1, map.getProcedures().size());
+
+        DbEntity entity = map.getDbEntity(TABLE);
+        assertNotNull(entity);
+        assertEquals(CATALOG, entity.getCatalog());
+        assertEquals(SCHEMA, entity.getSchema());
+
+        Procedure procedure = map.getProcedure(PROCEDURE);
+        assertNotNull(procedure);
+        assertEquals(CATALOG, procedure.getCatalog());
+        assertEquals(SCHEMA, procedure.getSchema());
+    }
+
+    private DataMap load(boolean supportsCatalogs) throws SQLException {
+        DbAdapter adapter = mock(DbAdapter.class);
+
+        when(adapter.tableTypeForTable()).thenReturn("TABLE");
+        when(adapter.tableTypeForView()).thenReturn("VIEW");
+        
when(adapter.supportsCatalogsOnReverseEngineering()).thenReturn(supportsCatalogs);
+
+        ResultSet tables = tablesResultSet();
+        ResultSet procedures = proceduresResultSet();
+        ResultSet columns = emptyResultSet();
+        ResultSet primaryKeys = emptyResultSet();
+        ResultSet exportedKeys = emptyResultSet();
+        ResultSet procedureColumns = emptyResultSet();
+
+        DatabaseMetaData metaData = mock(DatabaseMetaData.class);
+        when(metaData.getTables(any(), any(), any(), 
any())).thenReturn(tables);
+        when(metaData.getColumns(any(), any(), any(), 
any())).thenReturn(columns);
+        when(metaData.getPrimaryKeys(any(), any(), 
any())).thenReturn(primaryKeys);
+        when(metaData.getExportedKeys(any(), any(), 
any())).thenReturn(exportedKeys);
+        when(metaData.getProcedures(any(), any(), 
any())).thenReturn(procedures);
+        when(metaData.getProcedureColumns(any(), any(), any(), 
any())).thenReturn(procedureColumns);
+
+        Connection connection = mock(Connection.class);
+        when(connection.getMetaData()).thenReturn(metaData);
+
+        DbLoaderConfiguration config = new DbLoaderConfiguration();
+        config.setFiltersConfig(FiltersConfig.create(null, null, 
TableFilter.everything(),
+                new PatternFilter().include(".*")));
+
+        return new DbLoader(adapter, connection, config, null, new 
DefaultObjectNameGenerator()).load();
+    }
+
+    private static ResultSet tablesResultSet() throws SQLException {
+        ResultSet rs = mock(ResultSet.class);
+        when(rs.next()).thenReturn(true, false);
+        when(rs.getString("TABLE_NAME")).thenReturn(TABLE);
+        when(rs.getString("TABLE_CAT")).thenReturn(CATALOG);
+        when(rs.getString("TABLE_SCHEM")).thenReturn(SCHEMA);
+        when(rs.getString("TABLE_TYPE")).thenReturn("TABLE");
+        return rs;
+    }
+
+    private static ResultSet proceduresResultSet() throws SQLException {
+        ResultSet rs = mock(ResultSet.class);
+        when(rs.next()).thenReturn(true, false);
+        when(rs.getString("PROCEDURE_NAME")).thenReturn(PROCEDURE);
+        when(rs.getString("PROCEDURE_CAT")).thenReturn(CATALOG);
+        when(rs.getString("PROCEDURE_SCHEM")).thenReturn(SCHEMA);
+        when(rs.getShort("PROCEDURE_TYPE")).thenReturn((short) 
DatabaseMetaData.procedureNoResult);
+        return rs;
+    }
+
+    private static ResultSet emptyResultSet() {
+        return mock(ResultSet.class);
+    }
+}
diff --git 
a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbload/ExportedKeyLoaderIT.java
 
b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbload/ExportedKeyLoaderIT.java
index 7f2d188c0..22aa3664e 100644
--- 
a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbload/ExportedKeyLoaderIT.java
+++ 
b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbload/ExportedKeyLoaderIT.java
@@ -46,25 +46,19 @@ public class ExportedKeyLoaderIT extends BaseLoaderIT {
         String schema = connection.getSchema();
 
         DbEntity artist = getDbEntity("ARTIST");
-        if(adapter.supportsCatalogsOnReverseEngineering()) {
-            artist.setCatalog(catalog);
-        }
+        artist.setCatalog(catalog);
         artist.setSchema(schema);
         DbAttribute artistId = new DbAttribute("ARTIST_ID");
         artist.addAttribute(artistId);
 
         DbEntity gallery = getDbEntity("GALLERY");
-        if(adapter.supportsCatalogsOnReverseEngineering()) {
-            gallery.setCatalog(catalog);
-        }
+        gallery.setCatalog(catalog);
         gallery.setSchema(schema);
         DbAttribute galleryId = new DbAttribute("GALLERY_ID");
         gallery.addAttribute(galleryId);
 
         DbEntity painting = getDbEntity("PAINTING");
-        if(adapter.supportsCatalogsOnReverseEngineering()) {
-            painting.setCatalog(catalog);
-        }
+        painting.setCatalog(catalog);
         painting.setSchema(schema);
         DbAttribute paintingId = new DbAttribute("PAINTING_ID");
         DbAttribute paintingArtistId = new DbAttribute("ARTIST_ID");
diff --git a/pom.xml b/pom.xml
index 825c31887..7a5f1e002 100644
--- a/pom.xml
+++ b/pom.xml
@@ -65,7 +65,7 @@
         <mssql.jdbc.version>12.10.2.jre11</mssql.jdbc.version>
         <mysql.connector.version>9.5.0</mysql.connector.version>
         <ojdbc.version>21.8.0.0</ojdbc.version>
-        <postgres.jdbc.version>42.7.2</postgres.jdbc.version>
+        <postgres.jdbc.version>42.7.13</postgres.jdbc.version>
         <sqlite.jdbc.version>3.46.0.1</sqlite.jdbc.version>
         <sybase.driver.version>12</sybase.driver.version>
 

Reply via email to