You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by nt...@apache.org on 2020/04/14 10:18:53 UTC

[cayenne] branch master updated: CAY-2655 AutoAdapter missing supportsGeneratedKeysForBatchInserts() method

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

ntimofeev 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 56a5226  CAY-2655 AutoAdapter missing supportsGeneratedKeysForBatchInserts() method
56a5226 is described below

commit 56a5226af964d514c878efe1f8310d479c365ed3
Author: Nikita Timofeev <st...@gmail.com>
AuthorDate: Tue Apr 14 13:18:30 2020 +0300

    CAY-2655 AutoAdapter missing supportsGeneratedKeysForBatchInserts() method
---
 RELEASE-NOTES.txt                                  |  1 +
 .../java/org/apache/cayenne/dba/AutoAdapter.java   |  8 +++
 .../java/org/apache/cayenne/dba/DbAdapter.java     |  2 +
 .../java/org/apache/cayenne/dba/AutoAdapterIT.java | 72 +++++++++++++++++-----
 4 files changed, 67 insertions(+), 16 deletions(-)

diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index 6a88e76..63af94f 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -114,6 +114,7 @@ CAY-2647 Modeler: project upgrade from 4.0.B2 to 4.1.RC2 failure
 CAY-2648 Whitespace symbols in JDBC Driver and DB URL lines lead to incorrect driver loading
 CAY-2653 No methods for queries with qualifier parameters generated
 CAY-2654 Exception in dbimport when relationships should be imported, but no explicit configuration exists
+CAY-2655 AutoAdapter missing supportsGeneratedKeysForBatchInserts() method
 
 ----------------------------------
 Release: 4.1.B1
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/AutoAdapter.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/AutoAdapter.java
index 7c856f0..2926dbf 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/AutoAdapter.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/AutoAdapter.java
@@ -145,6 +145,14 @@ public class AutoAdapter implements DbAdapter {
 		return getAdapter().supportsGeneratedKeys();
 	}
 
+	/**
+	 * @since 4.2
+	 */
+	@Override
+	public boolean supportsGeneratedKeysForBatchInserts() {
+		return getAdapter().supportsGeneratedKeysForBatchInserts();
+	}
+
 	@Override
 	public boolean supportsBatchUpdates() {
 		return getAdapter().supportsBatchUpdates();
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/DbAdapter.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/DbAdapter.java
index c657d6d..a3e121a 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/DbAdapter.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/DbAdapter.java
@@ -104,6 +104,8 @@ public interface DbAdapter {
 	boolean supportsGeneratedKeys();
 
     /**
+	 * Returns true if a target database supports key autogeneration in a batch insert.
+	 * @see #supportsGeneratedKeys()
      * @since 4.2
      */
     default boolean supportsGeneratedKeysForBatchInserts() {
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/dba/AutoAdapterIT.java b/cayenne-server/src/test/java/org/apache/cayenne/dba/AutoAdapterIT.java
index 7f0e191..f6c0658 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/dba/AutoAdapterIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/dba/AutoAdapterIT.java
@@ -22,8 +22,8 @@ package org.apache.cayenne.dba;
 import org.apache.cayenne.access.DataNode;
 import org.apache.cayenne.access.jdbc.SQLTemplateAction;
 import org.apache.cayenne.di.Inject;
-import org.apache.cayenne.di.Provider;
 import org.apache.cayenne.log.NoopJdbcEventLogger;
+import org.apache.cayenne.query.ObjectSelect;
 import org.apache.cayenne.query.SQLTemplate;
 import org.apache.cayenne.testdo.testmap.Artist;
 import org.apache.cayenne.unit.di.server.CayenneProjects;
@@ -31,11 +31,10 @@ import org.apache.cayenne.unit.di.server.ServerCase;
 import org.apache.cayenne.unit.di.server.UseServerRuntime;
 import org.junit.Test;
 
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertSame;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
 
 @UseServerRuntime(CayenneProjects.TESTMAP_PROJECT)
 public class AutoAdapterIT extends ServerCase {
@@ -44,31 +43,72 @@ public class AutoAdapterIT extends ServerCase {
     private DataNode dataNode;
 
     @Test
-    public void testGetAdapter_Proxy() throws Exception {
-        Provider<DbAdapter> adapterProvider = mock(Provider.class);
-        when(adapterProvider.get()).thenReturn(dataNode.getAdapter());
-
-        AutoAdapter adapter = new AutoAdapter(adapterProvider, NoopJdbcEventLogger.getInstance());
+    public void testGetAdapter_Proxy() {
+        AutoAdapter adapter = new AutoAdapter(() -> dataNode.getAdapter(), NoopJdbcEventLogger.getInstance());
         DbAdapter detected = adapter.getAdapter();
         assertSame(dataNode.getAdapter(), detected);
     }
 
     @Test
     public void testCreateSQLTemplateAction() {
-
-        Provider<DbAdapter> adapterProvider = mock(Provider.class);
-        when(adapterProvider.get()).thenReturn(dataNode.getAdapter());
-
-        AutoAdapter autoAdapter = new AutoAdapter(adapterProvider, NoopJdbcEventLogger.getInstance());
+        AutoAdapter autoAdapter = new AutoAdapter(() -> dataNode.getAdapter(), NoopJdbcEventLogger.getInstance());
 
         SQLTemplateAction action = (SQLTemplateAction) autoAdapter.getAction(new SQLTemplate(Artist.class,
                 "select * from artist"), dataNode);
 
-        // it is important for SQLTemplateAction to be used with unwrapped
-        // adapter, as the
-        // adapter class name is used as a key to the correct SQL template.
+        // it is important for SQLTemplateAction to be used with unwrapped adapter,
+        // as the adapter class name is used as a key to the correct SQL template.
         assertNotNull(action.getAdapter());
         assertFalse(action.getAdapter() instanceof AutoAdapter);
         assertSame(dataNode.getAdapter(), action.getAdapter());
     }
+
+    @Test
+    public void testCorrectProxyMethods() {
+        DbAdapter adapter = dataNode.getAdapter();
+        AutoAdapter autoAdapter = new AutoAdapter(() -> adapter, NoopJdbcEventLogger.getInstance());
+
+        ObjectSelect<Artist> select = ObjectSelect.query(Artist.class);
+
+        // query related methods
+        assertEquals(adapter.supportsBatchUpdates(),
+                autoAdapter.supportsBatchUpdates());
+        assertEquals(adapter.supportsGeneratedKeys(),
+                autoAdapter.supportsGeneratedKeys());
+        assertEquals(adapter.supportsGeneratedKeysForBatchInserts(),
+                autoAdapter.supportsGeneratedKeysForBatchInserts());
+        assertSame(adapter.getBatchTerminator(),
+                autoAdapter.getBatchTerminator());
+        assertSame(adapter.getPkGenerator(),
+                autoAdapter.getPkGenerator());
+        assertSame(adapter.getQuotingStrategy(),
+                autoAdapter.getQuotingStrategy());
+        // returns a new instance for each call
+        assertSame(adapter.getSqlTreeProcessor().getClass(),
+                autoAdapter.getSqlTreeProcessor().getClass());
+        assertSame(adapter.getExtendedTypes(),
+                autoAdapter.getExtendedTypes());
+        assertSame(adapter.getEjbqlTranslatorFactory(),
+                autoAdapter.getEjbqlTranslatorFactory());
+        // returns a new instance for each call
+        assertSame(adapter.getSelectTranslator(select, dataNode.getEntityResolver()).getClass(),
+                autoAdapter.getSelectTranslator(select, dataNode.getEntityResolver()).getClass());
+
+
+        // reverse engineering related methods
+        assertEquals(adapter.supportsCatalogsOnReverseEngineering(),
+                autoAdapter.supportsCatalogsOnReverseEngineering());
+        assertSame(adapter.getSystemCatalogs(),
+                autoAdapter.getSystemCatalogs());
+        assertSame(adapter.getSystemSchemas(),
+                autoAdapter.getSystemSchemas());
+        assertSame(adapter.tableTypeForTable(),
+                autoAdapter.tableTypeForTable());
+        assertSame(adapter.tableTypeForView(),
+                autoAdapter.tableTypeForView());
+
+        // db generation related methods
+        assertEquals(adapter.supportsUniqueConstraints(),
+                autoAdapter.supportsUniqueConstraints());
+    }
 }