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 2021/11/19 13:36:33 UTC
[cayenne] 01/02: count queries via custom DataNode to be able to intercept all queries
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 2d74922db903723e997d6fe9b74654a078c3c2e2
Author: Nikita Timofeev <st...@gmail.com>
AuthorDate: Fri Nov 19 16:34:42 2021 +0300
count queries via custom DataNode to be able to intercept all queries
---
.../SimpleIdIncrementalFaultListPrefetchIT.java | 3 +-
.../server/ServerCaseDataChannelInterceptor.java | 14 +++----
.../cayenne/unit/di/server/ServerCaseDataNode.java | 45 ++++++++++++++++++++++
.../unit/di/server/ServerCaseDataNodeFactory.java | 2 +-
4 files changed, 53 insertions(+), 11 deletions(-)
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/SimpleIdIncrementalFaultListPrefetchIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/SimpleIdIncrementalFaultListPrefetchIT.java
index faeb0eb..e6d1581 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/SimpleIdIncrementalFaultListPrefetchIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/access/SimpleIdIncrementalFaultListPrefetchIT.java
@@ -134,7 +134,8 @@ public class SimpleIdIncrementalFaultListPrefetchIT extends ServerCase {
});
// within the same page only one query should've been executed
- assertEquals(1, count);
+ // we expect the second one for the prefetch
+ assertEquals(2, count);
}
/**
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataChannelInterceptor.java b/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataChannelInterceptor.java
index 8ba46e9..c053077 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataChannelInterceptor.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataChannelInterceptor.java
@@ -48,20 +48,16 @@ public class ServerCaseDataChannelInterceptor implements DataChannelInterceptor
}
public int runWithQueryCounter(UnitTestClosure closure) {
+ UnitTestDomain channel = (UnitTestDomain) serverRuntimeProvider.get().getChannel();
+ ServerCaseDataNode node = (ServerCaseDataNode)channel.getDataNodes().iterator().next();
- UnitTestDomain channel = (UnitTestDomain) serverRuntimeProvider
- .get()
- .getChannel();
-
- int start = channel.getQueryCount();
+ int start = node.getQueriesCount();
int end;
try {
closure.execute();
+ } finally {
+ end = node.getQueriesCount();
}
- finally {
- end = channel.getQueryCount();
- }
-
return end - start;
}
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataNode.java b/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataNode.java
new file mode 100644
index 0000000..f14ebae
--- /dev/null
+++ b/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataNode.java
@@ -0,0 +1,45 @@
+/*****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ ****************************************************************/
+package org.apache.cayenne.unit.di.server;
+
+import java.util.Collection;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.apache.cayenne.access.DataNode;
+import org.apache.cayenne.access.OperationObserver;
+import org.apache.cayenne.query.Query;
+
+public class ServerCaseDataNode extends DataNode {
+
+ AtomicInteger queryCounter = new AtomicInteger();
+
+ public ServerCaseDataNode(String name) {
+ super(name);
+ }
+
+ @Override
+ public void performQueries(Collection<? extends Query> queries, OperationObserver callback) {
+ super.performQueries(queries, callback);
+ queryCounter.addAndGet(queries.size());
+ }
+
+ public int getQueriesCount() {
+ return queryCounter.get();
+ }
+}
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataNodeFactory.java b/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataNodeFactory.java
index 2ffdc6e..23991c0 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataNodeFactory.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataNodeFactory.java
@@ -55,7 +55,7 @@ public class ServerCaseDataNodeFactory implements DataNodeFactory {
@Override
public DataNode createDataNode(DataNodeDescriptor nodeDescriptor) throws Exception {
- DataNode dataNode = new DataNode(nodeDescriptor.getName());
+ DataNode dataNode = new ServerCaseDataNode(nodeDescriptor.getName());
dataNode.setJdbcEventLogger(jdbcEventLogger);
dataNode.setRowReaderFactory(rowReaderFactory);