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