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/03/10 12:57:05 UTC

[cayenne] branch master updated (4a724b8 -> 7067c43)

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

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


    from 4a724b8  Refactor cgen UI code
     add a1019c8  CAY-2650 Support using generated primary keys along with batch inserts
     add 57332e8  CAY-2650 Support using generated primary keys along with batch inserts
     new ae0aaad  Rebuild
     new 7d3b34d  Rebuild
     new 3451da7  CAY-2650 Support using generated primary keys along with batch inserts  cleanup
     new 9dacc77  Merge branch 'pull/413' into asf-master
     new 7067c43  CAY-2650 Support using generated primary keys along with batch inserts  cleanup

The 5 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 RELEASE-NOTES.txt                                  |  1 +
 .../cayenne/access/DataDomainFlushObserver.java    | 91 +++++++++++-----------
 .../access/DataDomainLegacyQueryAction.java        |  4 +-
 .../cayenne/access/DataDomainQueryAction.java      |  2 +-
 .../apache/cayenne/access/DataNodeQueryAction.java |  4 +-
 .../apache/cayenne/access/OperationObserver.java   | 16 +++-
 .../apache/cayenne/access/flush/FlushObserver.java | 87 +++++++++++----------
 .../apache/cayenne/access/jdbc/BatchAction.java    | 62 ++++++++++-----
 .../access/util/DefaultOperationObserver.java      |  2 +-
 .../access/util/DoNothingOperationObserver.java    |  2 +-
 .../java/org/apache/cayenne/dba/DbAdapter.java     |  7 ++
 .../org/apache/cayenne/dba/JdbcPkGenerator.java    |  2 +-
 .../org/apache/cayenne/dba/derby/DerbyAdapter.java |  8 ++
 .../cayenne/dba/sqlserver/SQLServerAdapter.java    |  8 ++
 .../dba/sqlserver/SQLServerProcedureAction.java    |  4 +-
 .../cayenne/access/MockOperationObserver.java      |  2 +-
 .../access/jdbc/BatchActionGeneratedIT.java        |  4 +-
 17 files changed, 181 insertions(+), 125 deletions(-)


[cayenne] 05/05: CAY-2650 Support using generated primary keys along with batch inserts cleanup

Posted by nt...@apache.org.
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

commit 7067c434c987680e43b25b3f3f5885724143e828
Author: Nikita Timofeev <st...@gmail.com>
AuthorDate: Tue Mar 10 15:46:39 2020 +0300

    CAY-2650 Support using generated primary keys along with batch inserts
     cleanup
---
 .../apache/cayenne/access/jdbc/BatchAction.java    | 55 +++-------------------
 1 file changed, 6 insertions(+), 49 deletions(-)

diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/BatchAction.java b/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/BatchAction.java
index d3a92d7..ad54cbb 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/BatchAction.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/BatchAction.java
@@ -232,55 +232,14 @@ public class BatchAction extends BaseSQLAction {
 	 * 
 	 * @since 4.0
 	 */
-	@SuppressWarnings({ "rawtypes", "unchecked" })
 	protected void processGeneratedKeys(Statement statement, OperationObserver observer, BatchQueryRow row)
 			throws SQLException {
-
-		ResultSet keysRS = statement.getGeneratedKeys();
-
-		// TODO: andrus, 7/4/2007 - (1) get the type of meaningful PK's from
-		// their
-		// ObjAttributes; (2) use a different form of Statement.execute -
-		// "execute(String,String[])" to be able to map generated column names
-		// (this way
-		// we can support multiple columns.. although need to check how well
-		// this works
-		// with most common drivers)
-
-		RowDescriptorBuilder builder = new RowDescriptorBuilder();
-
-		if (this.keyRowDescriptor == null) {
-			// attempt to figure out the right descriptor from the mapping...
-			Collection<DbAttribute> generated = query.getDbEntity().getGeneratedAttributes();
-			if (generated.size() == 1) {
-				DbAttribute key = generated.iterator().next();
-
-				ColumnDescriptor[] columns = new ColumnDescriptor[1];
-
-				// use column name from result set, but type and Java class from
-				// DB
-				// attribute
-				columns[0] = new ColumnDescriptor(keysRS.getMetaData(), 1);
-				columns[0].setJdbcType(key.getType());
-				columns[0].setJavaClass(TypesMapping.getJavaBySqlType(key.getType()));
-				builder.setColumns(columns);
-			} else {
-				builder.setResultSet(keysRS);
-			}
-
-			this.keyRowDescriptor = builder.getDescriptor(dataNode.getAdapter().getExtendedTypes());
-		}
-
-		RowReader<?> rowReader = dataNode.rowReader(
-				keyRowDescriptor,
-				query.getMetaData(dataNode.getEntityResolver()),
-				Collections.emptyMap()
-		);
-		ResultIterator iterator = new JDBCResultIterator(null, keysRS, rowReader);
-
-		observer.nextGeneratedRows(query, iterator, Collections.singletonList(row.getObjectId()));
+		processGeneratedKeys(statement, observer, Collections.singletonList(row));
 	}
-	
+
+	/**
+	 * @since 4.2
+	 */
 	@SuppressWarnings({ "rawtypes", "unchecked" })
 	protected void processGeneratedKeys(Statement statement, OperationObserver observer, List<BatchQueryRow> rows)
 			throws SQLException {
@@ -306,9 +265,7 @@ public class BatchAction extends BaseSQLAction {
 
 				ColumnDescriptor[] columns = new ColumnDescriptor[1];
 
-				// use column name from result set, but type and Java class from
-				// DB
-				// attribute
+				// use column name from result set, but type and Java class from DB attribute
 				columns[0] = new ColumnDescriptor(keysRS.getMetaData(), 1);
 				columns[0].setJdbcType(key.getType());
 				columns[0].setJavaClass(TypesMapping.getJavaBySqlType(key.getType()));


[cayenne] 01/05: Rebuild

Posted by nt...@apache.org.
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

commit ae0aaad51317d38111192d2791ae719654c50a1c
Author: John Huss <jo...@apache.org>
AuthorDate: Mon Feb 17 10:58:45 2020 -0600

    Rebuild
---
 RELEASE-NOTES.txt | 1 +
 1 file changed, 1 insertion(+)

diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index fa40183..0785b86 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -57,6 +57,7 @@ CAY-2612 Modeler: add lazy-loading to dbImport tab
 CAY-2645 Modeler: DbImport tree highlight improvement
 CAY-2650 Support using generated primary keys along with batch inserts
 
+
 Bug Fixes:
 
 CAY-2019 Optimistic locking always fails on CRYPTO columns


[cayenne] 03/05: CAY-2650 Support using generated primary keys along with batch inserts cleanup

Posted by nt...@apache.org.
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

commit 3451da78b8c05afc64c65bf6302e5405e918f349
Author: Nikita Timofeev <st...@gmail.com>
AuthorDate: Fri Mar 6 17:12:27 2020 +0300

    CAY-2650 Support using generated primary keys along with batch inserts
     cleanup
---
 .../apache/cayenne/access/OperationObserver.java   | 14 +++++++++--
 .../apache/cayenne/access/jdbc/BatchAction.java    | 28 ++++++++++++----------
 2 files changed, 28 insertions(+), 14 deletions(-)

diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/OperationObserver.java b/cayenne-server/src/main/java/org/apache/cayenne/access/OperationObserver.java
index d24ba90..9553831 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/OperationObserver.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/OperationObserver.java
@@ -19,6 +19,7 @@
 
 package org.apache.cayenne.access;
 
+import java.util.Collections;
 import java.util.List;
 
 import org.apache.cayenne.ObjectId;
@@ -58,10 +59,19 @@ public interface OperationObserver extends OperationHints {
     void nextRows(Query q, ResultIterator<?> it);
 
     /**
-     * Callback method invoked after each batch of generated values is read during an
-     * update.
+     * Callback method invoked after each batch of generated values is read during an update.
      * 
      * @since 4.0
+     * @deprecated since 4.2, use {@link #nextGeneratedRows(Query, ResultIterator, List)}
+     */
+    @Deprecated
+    default void nextGeneratedRows(Query query, ResultIterator<?> keys, ObjectId idToUpdate) {
+        nextGeneratedRows(query, keys, Collections.singletonList(idToUpdate));
+    }
+
+    /**
+     * Callback method invoked after each batch of generated values is read during an update.
+     * @since 4.2
      */
     void nextGeneratedRows(Query query, ResultIterator<?> keys, List<ObjectId> idsToUpdate);
 
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/BatchAction.java b/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/BatchAction.java
index e8ba334..d3a92d7 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/BatchAction.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/BatchAction.java
@@ -19,6 +19,7 @@
 
 package org.apache.cayenne.access.jdbc;
 
+import org.apache.cayenne.ObjectId;
 import org.apache.cayenne.ResultIterator;
 import org.apache.cayenne.access.DataNode;
 import org.apache.cayenne.access.OperationObserver;
@@ -30,7 +31,6 @@ import org.apache.cayenne.dba.DbAdapter;
 import org.apache.cayenne.dba.TypesMapping;
 import org.apache.cayenne.log.JdbcEventLogger;
 import org.apache.cayenne.map.DbAttribute;
-import org.apache.cayenne.map.ObjAttribute;
 import org.apache.cayenne.query.BatchQuery;
 import org.apache.cayenne.query.BatchQueryRow;
 import org.apache.cayenne.query.InsertBatchQuery;
@@ -38,14 +38,12 @@ import org.apache.cayenne.query.InsertBatchQuery;
 import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
-import java.sql.ResultSetMetaData;
 import java.sql.SQLException;
 import java.sql.Statement;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
-import java.util.function.Consumer;
-import java.util.stream.Collectors;
 
 /**
  * @since 1.2
@@ -117,7 +115,7 @@ public class BatchAction extends BaseSQLAction {
 
 		DbAdapter adapter = dataNode.getAdapter();
 
-		try (PreparedStatement statement = con.prepareStatement(sql, PreparedStatement.RETURN_GENERATED_KEYS)) {
+		try (PreparedStatement statement = prepareStatement(con, sql, adapter, generatesKeys)) {
 			for (BatchQueryRow row : query.getRows()) {
 
 				DbAttributeBinding[] bindings = translator.updateBindings(row);
@@ -206,10 +204,9 @@ public class BatchAction extends BaseSQLAction {
 
 	protected boolean supportsGeneratedKeys(boolean isBatch) {
 		// see if we are configured to support generated keys
-		boolean isSupported = isBatch 
-				? dataNode.getAdapter().supportsGeneratedKeysForBatchInserts() 
+		return isBatch
+				? dataNode.getAdapter().supportsGeneratedKeysForBatchInserts()
 				: dataNode.getAdapter().supportsGeneratedKeys();
-		return isSupported;
 	}
 				
 	/**
@@ -274,8 +271,11 @@ public class BatchAction extends BaseSQLAction {
 			this.keyRowDescriptor = builder.getDescriptor(dataNode.getAdapter().getExtendedTypes());
 		}
 
-		RowReader<?> rowReader = dataNode.rowReader(keyRowDescriptor, query.getMetaData(dataNode.getEntityResolver()),
-				Collections.<ObjAttribute, ColumnDescriptor> emptyMap());
+		RowReader<?> rowReader = dataNode.rowReader(
+				keyRowDescriptor,
+				query.getMetaData(dataNode.getEntityResolver()),
+				Collections.emptyMap()
+		);
 		ResultIterator iterator = new JDBCResultIterator(null, keysRS, rowReader);
 
 		observer.nextGeneratedRows(query, iterator, Collections.singletonList(row.getObjectId()));
@@ -321,9 +321,13 @@ public class BatchAction extends BaseSQLAction {
 		}
 
 		RowReader<?> rowReader = dataNode.rowReader(keyRowDescriptor, query.getMetaData(dataNode.getEntityResolver()),
-				Collections.<ObjAttribute, ColumnDescriptor> emptyMap());
+				Collections.emptyMap());
 		ResultIterator iterator = new JDBCResultIterator(null, keysRS, rowReader);
 
-		observer.nextGeneratedRows(query, iterator, rows.stream().map(r -> r.getObjectId()).collect(Collectors.toList()));
+		List<ObjectId> objectIds = new ArrayList<>(rows.size());
+		for(BatchQueryRow row : rows) {
+			objectIds.add(row.getObjectId());
+		}
+		observer.nextGeneratedRows(query, iterator, objectIds);
 	}
 }


[cayenne] 02/05: Rebuild

Posted by nt...@apache.org.
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

commit 7d3b34d970ef980b39908c930f0d83d5a031ba51
Author: John Huss <jo...@apache.org>
AuthorDate: Wed Feb 19 09:16:38 2020 -0600

    Rebuild
---
 RELEASE-NOTES.txt | 1 -
 1 file changed, 1 deletion(-)

diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index 0785b86..fa40183 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -57,7 +57,6 @@ CAY-2612 Modeler: add lazy-loading to dbImport tab
 CAY-2645 Modeler: DbImport tree highlight improvement
 CAY-2650 Support using generated primary keys along with batch inserts
 
-
 Bug Fixes:
 
 CAY-2019 Optimistic locking always fails on CRYPTO columns


[cayenne] 04/05: Merge branch 'pull/413' into asf-master

Posted by nt...@apache.org.
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

commit 9dacc77a74250cde5f85ef4afe97e5b1fb5ecbc2
Merge: 4a724b8 3451da7
Author: Nikita Timofeev <st...@gmail.com>
AuthorDate: Tue Mar 10 15:37:42 2020 +0300

    Merge branch 'pull/413' into asf-master

 RELEASE-NOTES.txt                                  |  1 +
 .../cayenne/access/DataDomainFlushObserver.java    | 91 ++++++++++-----------
 .../access/DataDomainLegacyQueryAction.java        |  4 +-
 .../cayenne/access/DataDomainQueryAction.java      |  2 +-
 .../apache/cayenne/access/DataNodeQueryAction.java |  4 +-
 .../apache/cayenne/access/OperationObserver.java   | 16 +++-
 .../apache/cayenne/access/flush/FlushObserver.java | 87 ++++++++++----------
 .../apache/cayenne/access/jdbc/BatchAction.java    | 95 ++++++++++++++++++----
 .../access/util/DefaultOperationObserver.java      |  2 +-
 .../access/util/DoNothingOperationObserver.java    |  2 +-
 .../java/org/apache/cayenne/dba/DbAdapter.java     |  7 ++
 .../org/apache/cayenne/dba/JdbcPkGenerator.java    |  2 +-
 .../org/apache/cayenne/dba/derby/DerbyAdapter.java |  8 ++
 .../cayenne/dba/sqlserver/SQLServerAdapter.java    |  8 ++
 .../dba/sqlserver/SQLServerProcedureAction.java    |  4 +-
 .../cayenne/access/MockOperationObserver.java      |  2 +-
 .../access/jdbc/BatchActionGeneratedIT.java        |  4 +-
 17 files changed, 219 insertions(+), 120 deletions(-)