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());
+ }
}