Skip to content

Commit 410e8eb

Browse files
committed
CAY-2912 Compact SQL logger
cleanup
1 parent 9db4d14 commit 410e8eb

15 files changed

Lines changed: 81 additions & 57 deletions

cayenne/src/main/java/org/apache/cayenne/access/DataDomainQueryAction.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -679,11 +679,9 @@ public void nextRows(Query q, ResultIterator<?> it) {
679679
}
680680

681681
@Override
682-
public void nextGeneratedRows(Query query, ResultIterator<?> keys, List<ObjectId> idsToUpdate) {
682+
public void nextGeneratedRows(Query query, List<DataRow> keys, List<ObjectId> idsToUpdate) {
683683
if (keys != null) {
684-
try (keys) {
685-
nextRows(query, keys.allRows());
686-
}
684+
nextRows(query, keys);
687685
}
688686
}
689687

cayenne/src/main/java/org/apache/cayenne/access/LoggingObserver.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
package org.apache.cayenne.access;
2121

22+
import org.apache.cayenne.DataRow;
2223
import org.apache.cayenne.ObjectId;
2324
import org.apache.cayenne.ResultIterator;
2425
import org.apache.cayenne.access.translator.TranslatedBatch;
@@ -150,7 +151,10 @@ public void nextRows(Query q, ResultIterator<?> it) {
150151
}
151152

152153
@Override
153-
public void nextGeneratedRows(Query query, ResultIterator<?> keys, List<ObjectId> idsToUpdate) {
154+
public void nextGeneratedRows(Query query, List<DataRow> keys, List<ObjectId> idsToUpdate) {
155+
for (DataRow key : keys) {
156+
logger.logGeneratedKey(key);
157+
}
154158
delegate.nextGeneratedRows(query, keys, idsToUpdate);
155159
}
156160

cayenne/src/main/java/org/apache/cayenne/access/OperationObserver.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
package org.apache.cayenne.access;
2121

2222
import org.apache.cayenne.CayenneRuntimeException;
23+
import org.apache.cayenne.DataRow;
2324
import org.apache.cayenne.ObjectId;
2425
import org.apache.cayenne.ResultIterator;
2526
import org.apache.cayenne.access.translator.TranslatedStatement;
@@ -96,9 +97,9 @@ default void nextRows(Query q, ResultIterator<?> it) {
9697
/**
9798
* Callback method invoked after each batch of generated values is read during an update.
9899
*
99-
* @since 4.2
100+
* @since 5.0
100101
*/
101-
default void nextGeneratedRows(Query query, ResultIterator<?> keys, List<ObjectId> idsToUpdate) {
102+
default void nextGeneratedRows(Query query, List<DataRow> keys, List<ObjectId> idsToUpdate) {
102103
}
103104

104105
/**

cayenne/src/main/java/org/apache/cayenne/access/flush/DefaultDataDomainFlushAction.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@
3838
import org.apache.cayenne.access.flush.operation.UpdateDbRowOp;
3939
import org.apache.cayenne.graph.CompoundDiff;
4040
import org.apache.cayenne.graph.GraphDiff;
41-
import org.apache.cayenne.log.SqlLogger;
4241
import org.apache.cayenne.map.EntityResolver;
4342
import org.apache.cayenne.query.Query;
4443

@@ -61,16 +60,14 @@ public class DefaultDataDomainFlushAction implements DataDomainFlushAction {
6160

6261
protected final DataDomain dataDomain;
6362
protected final DbRowOpSorter dbRowOpSorter;
64-
protected final SqlLogger sqlLogger;
6563
protected final OperationObserver observer;
6664
protected final DeleteDbRowOpFactory deleteDbRowOpFactory;
6765

6866
protected DefaultDataDomainFlushAction(DataDomain dataDomain, DbRowOpSorter dbRowOpSorter,
69-
SqlLogger sqlLogger, DeleteDbRowOpFactory deleteDbRowOpFactory) {
67+
DeleteDbRowOpFactory deleteDbRowOpFactory) {
7068
this.dataDomain = dataDomain;
7169
this.dbRowOpSorter = dbRowOpSorter;
72-
this.sqlLogger = sqlLogger;
73-
this.observer = new FlushObserver(sqlLogger);
70+
this.observer = new FlushObserver();
7471
this.deleteDbRowOpFactory = deleteDbRowOpFactory;
7572
}
7673

cayenne/src/main/java/org/apache/cayenne/access/flush/DefaultDataDomainFlushActionFactory.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import org.apache.cayenne.access.flush.operation.DbRowOpSorter;
2424
import org.apache.cayenne.access.flush.operation.DeleteDbRowOpFactory;
2525
import org.apache.cayenne.di.Inject;
26-
import org.apache.cayenne.log.SqlLogger;
2726

2827
/**
2928
* Factory that produces {@link DefaultDataDomainFlushAction}.
@@ -35,14 +34,11 @@ public class DefaultDataDomainFlushActionFactory implements DataDomainFlushActio
3534
@Inject
3635
private DbRowOpSorter operationSorter;
3736

38-
@Inject
39-
private SqlLogger sqlLogger;
40-
4137
@Inject
4238
private DeleteDbRowOpFactory deleteDbRowOpFactory;
4339

4440
@Override
4541
public DataDomainFlushAction createFlushAction(DataDomain dataDomain) {
46-
return new DefaultDataDomainFlushAction(dataDomain, operationSorter, sqlLogger, deleteDbRowOpFactory);
42+
return new DefaultDataDomainFlushAction(dataDomain, operationSorter, deleteDbRowOpFactory);
4743
}
4844
}

cayenne/src/main/java/org/apache/cayenne/access/flush/FlushObserver.java

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import org.apache.cayenne.ObjectId;
2525
import org.apache.cayenne.ResultIterator;
2626
import org.apache.cayenne.access.OperationObserver;
27-
import org.apache.cayenne.log.SqlLogger;
2827
import org.apache.cayenne.map.DbAttribute;
2928
import org.apache.cayenne.query.InsertBatchQuery;
3029
import org.apache.cayenne.query.Query;
@@ -37,12 +36,6 @@
3736
*/
3837
class FlushObserver implements OperationObserver {
3938

40-
private final SqlLogger logger;
41-
42-
public FlushObserver(SqlLogger logger) {
43-
this.logger = logger;
44-
}
45-
4639
@Override
4740
public void nextQueryException(Query query, Exception ex) {
4841
throw new CayenneRuntimeException("Raising from query exception.", Util.unwindException(ex));
@@ -57,14 +50,7 @@ public void nextGlobalException(Exception ex) {
5750
* Processes generated keys.
5851
*/
5952
@Override
60-
@SuppressWarnings("unchecked")
61-
public void nextGeneratedRows(Query query, ResultIterator<?> keysIterator, List<ObjectId> idsToUpdate) {
62-
63-
// read and close the iterator before doing anything else
64-
List<DataRow> keys;
65-
try (keysIterator) {
66-
keys = (List<DataRow>) keysIterator.allRows();
67-
}
53+
public void nextGeneratedRows(Query query, List<DataRow> keys, List<ObjectId> idsToUpdate) {
6854

6955
if (!(query instanceof InsertBatchQuery batch)) {
7056
throw new CayenneRuntimeException("Generated keys only supported for InsertBatchQuery, instead got %s", query);
@@ -104,9 +90,6 @@ public void nextGeneratedRows(Query query, ResultIterator<?> keysIterator, List<
10490
}
10591

10692

107-
// log the generated PK
108-
logger.logGeneratedKey(attribute, value);
109-
11093
// I guess we should override any existing value,
11194
// as generated key is the latest thing that exists in the DB.
11295
idToUpdate.getReplacementIdMap().put(attribute.getName(), value);

cayenne/src/main/java/org/apache/cayenne/access/jdbc/BatchAction.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
package org.apache.cayenne.access.jdbc;
2121

2222
import org.apache.cayenne.CayenneRuntimeException;
23+
import org.apache.cayenne.DataRow;
2324
import org.apache.cayenne.ObjectId;
2425
import org.apache.cayenne.ResultIterator;
2526
import org.apache.cayenne.access.DataNode;
@@ -292,13 +293,19 @@ protected void processGeneratedKeys(Statement statement, OperationObserver obser
292293

293294
RowReader<?> rowReader = dataNode.getRowReaderFactory()
294295
.rowReader(keyColumns, query.getMetaData(dataNode.getEntityResolver()), dataNode.getAdapter());
295-
ResultIterator iterator = new RSIterator(null, keysRS, rowReader);
296+
297+
// generated keys are small (one row per inserted row), so materialize them here rather than passing a live,
298+
// single-use iterator to the observer
299+
List<DataRow> keys;
300+
try (ResultIterator<?> iterator = new RSIterator(null, keysRS, rowReader)) {
301+
keys = (List<DataRow>) iterator.allRows();
302+
}
296303

297304
List<ObjectId> objectIds = new ArrayList<>(rows.size());
298305
for(BatchQueryRow row : rows) {
299306
objectIds.add(row.getObjectId());
300307
}
301-
observer.nextGeneratedRows(query, iterator, objectIds);
308+
observer.nextGeneratedRows(query, keys, objectIds);
302309
}
303310

304311
private String typeForGeneratedPK(DbAttribute key) {

cayenne/src/main/java/org/apache/cayenne/access/jdbc/EJBQLAction.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
****************************************************************/
1919
package org.apache.cayenne.access.jdbc;
2020

21+
import org.apache.cayenne.DataRow;
2122
import org.apache.cayenne.ObjectId;
2223
import org.apache.cayenne.ResultIterator;
2324
import org.apache.cayenne.access.DataNode;
@@ -161,7 +162,7 @@ public void nextRows(Query query, ResultIterator<?> it) {
161162
}
162163

163164
@Override
164-
public void nextGeneratedRows(Query query, ResultIterator<?> keys, List<ObjectId> idsToUpdate) {
165+
public void nextGeneratedRows(Query query, List<DataRow> keys, List<ObjectId> idsToUpdate) {
165166
delegate.nextGeneratedRows(originalQuery, keys, idsToUpdate);
166167
}
167168

cayenne/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerProcedureAction.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
package org.apache.cayenne.dba.sqlserver;
2121

22+
import org.apache.cayenne.DataRow;
2223
import org.apache.cayenne.ObjectId;
2324
import org.apache.cayenne.ResultIterator;
2425
import org.apache.cayenne.access.DataNode;
@@ -174,7 +175,7 @@ public void nextGlobalException(Exception ex) {
174175
}
175176

176177
@Override
177-
public void nextGeneratedRows(Query query, ResultIterator<?> keys, List<ObjectId> idsToUpdate) {
178+
public void nextGeneratedRows(Query query, List<DataRow> keys, List<ObjectId> idsToUpdate) {
178179
observer.nextGeneratedRows(query, keys, idsToUpdate);
179180
}
180181

cayenne/src/main/java/org/apache/cayenne/log/NoopSqlLogger.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@
1919
package org.apache.cayenne.log;
2020

2121
import org.apache.cayenne.access.translator.TranslatedStatement;
22-
import org.apache.cayenne.map.DbAttribute;
22+
23+
import java.util.Map;
2324

2425
/**
2526
* A no-op {@link SqlLogger}. Used as a null-object default in contexts that run without a configured logger, such as
@@ -61,7 +62,7 @@ public void logAlsoUpdate(int rowCount) {
6162
}
6263

6364
@Override
64-
public void logGeneratedKey(DbAttribute attribute, Object value) {
65+
public void logGeneratedKey(Map<String, ?> keys) {
6566
}
6667

6768
@Override

0 commit comments

Comments
 (0)