This is an automated email from the ASF dual-hosted git repository.
namelchev pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git
The following commit(s) were added to refs/heads/master by this push:
new d3af1fabf2d IGNITE-26404 Fixed H2QueryInfo#planWithoutScanCount for
UNION queries. (#12337)
d3af1fabf2d is described below
commit d3af1fabf2d520209b646d2af5355e2f4aba5ca5
Author: Aleksandr Chesnokov <[email protected]>
AuthorDate: Wed Oct 1 09:55:19 2025 +0300
IGNITE-26404 Fixed H2QueryInfo#planWithoutScanCount for UNION queries.
(#12337)
---
.../integration/SqlPlanHistoryIntegrationTest.java | 16 ++++++++++-
.../internal/processors/query/h2/H2QueryInfo.java | 32 +++++++++++++++++-----
2 files changed, 40 insertions(+), 8 deletions(-)
diff --git
a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/SqlPlanHistoryIntegrationTest.java
b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/SqlPlanHistoryIntegrationTest.java
index 179971ca7b6..0d30c3d8863 100644
---
a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/SqlPlanHistoryIntegrationTest.java
+++
b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/SqlPlanHistoryIntegrationTest.java
@@ -537,6 +537,20 @@ public class SqlPlanHistoryIntegrationTest extends
GridCommonAbstractTest {
checkSqlPlanHistory(3);
}
+ /** Tests that H2 query plans for UNION operations do not contain
'scanCount' suffix. */
+ @Test
+ public void testNoScanCountSuffixForUNION() throws Exception {
+ assumeTrue("ScanCount suffix can only be present in H2 local query
plans",
+ IndexingQueryEngineConfiguration.ENGINE_NAME.equals(sqlEngine) &&
loc);
+
+ startTestGrid();
+
+ for (int i = 0; i < 10; i++)
+ cacheQuery(new SqlFieldsQuery("SELECT * FROM A.String UNION ALL
SELECT * FROM B.String"), "A");
+
+ checkMetrics(getSqlPlanHistory());
+ }
+
/**
* @param qry Query.
*/
@@ -740,7 +754,7 @@ public class SqlPlanHistoryIntegrationTest extends
GridCommonAbstractTest {
assertTrue(plan.lastStartTime().getTime() > 0);
if (loc)
- assertFalse(plan.plan().contains("/* scanCount"));
+ assertFalse(plan.plan().contains("scanCount"));
}
}
diff --git
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2QueryInfo.java
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2QueryInfo.java
index 53d720326a2..a94d7a63861 100644
---
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2QueryInfo.java
+++
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2QueryInfo.java
@@ -236,17 +236,35 @@ public class H2QueryInfo implements TrackableQuery {
* @return SQL plan without the scanCount suffix.
*/
public String planWithoutScanCount(String plan) {
- String res = null;
+ if (plan == null || !plan.contains("scanCount:"))
+ return plan;
- int start = plan.indexOf("\n /* scanCount");
+ StringBuilder res = new StringBuilder(plan);
- if (start != -1) {
- int end = plan.indexOf("*/", start);
+ removePattern(res, "\n /* scanCount:", "*/");
+ removePattern(res, "\n /++ scanCount:", "++/");
- res = plan.substring(0, start) + plan.substring(end + 2);
- }
+ return res.toString();
+ }
+
+ /**
+ * @param sb StringBuilder.
+ * @param startPattern Start pattern.
+ * @param endMarker End marker.
+ */
+ private void removePattern(StringBuilder sb, String startPattern, String
endMarker) {
+ int start = sb.lastIndexOf(startPattern);
- return (res == null) ? plan : res;
+ while (start != -1) {
+ int end = sb.indexOf(endMarker, start);
+
+ if (end == -1)
+ break;
+
+ sb.delete(start, end + endMarker.length());
+
+ start = sb.lastIndexOf(startPattern);
+ }
}
/**