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

xiong pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/calcite.git


The following commit(s) were added to refs/heads/main by this push:
     new 02c176a556 [CALCITE-7345] Quidem test support for Field Trimmer
02c176a556 is described below

commit 02c176a556a13f0a4d8f6bd33b38bd2f1496e2fa
Author: Xiong Duan <[email protected]>
AuthorDate: Thu Dec 25 17:05:14 2025 +0800

    [CALCITE-7345] Quidem test support for Field Trimmer
---
 .../java/org/apache/calcite/tools/Programs.java    |  5 +++++
 core/src/test/resources/sql/join.iq                | 26 ++++++++++++++++++++++
 .../java/org/apache/calcite/test/QuidemTest.java   | 12 ++++++++++
 3 files changed, 43 insertions(+)

diff --git a/core/src/main/java/org/apache/calcite/tools/Programs.java 
b/core/src/main/java/org/apache/calcite/tools/Programs.java
index af6d62a5cb..d473e54f4f 100644
--- a/core/src/main/java/org/apache/calcite/tools/Programs.java
+++ b/core/src/main/java/org/apache/calcite/tools/Programs.java
@@ -286,6 +286,11 @@ public static Program standard() {
     return standard(DefaultRelMetadataProvider.INSTANCE, true);
   }
 
+  /** Returns the standard program with enableFieldTrimming config. */
+  public static Program standard(Boolean enableFieldTrimming) {
+    return standard(DefaultRelMetadataProvider.INSTANCE, enableFieldTrimming);
+  }
+
   /** Returns the standard program with user metadata provider. */
   public static Program standard(RelMetadataProvider metadataProvider) {
     return standard(metadataProvider, true);
diff --git a/core/src/test/resources/sql/join.iq 
b/core/src/test/resources/sql/join.iq
index ea04212757..35363424e9 100644
--- a/core/src/test/resources/sql/join.iq
+++ b/core/src/test/resources/sql/join.iq
@@ -1137,4 +1137,30 @@ SELECT * FROM (VALUES (NULLIF(5, 5)), (NULLIF(5, 5))) a, 
(VALUES (NULLIF(5, 5)),
 
 !ok
 
+# [CALCITE-7345] Quidem test support for Field Trimmer
+!use scott
+!set trimfields false
+
+select distinct dept.deptno, emp.deptno
+from "scott".emp join "scott".dept using (deptno);
+
+EnumerableAggregate(group=[{0, 10}])
+  EnumerableHashJoin(condition=[=($0, $10)], joinType=[inner])
+    EnumerableTableScan(table=[[scott, DEPT]])
+    EnumerableTableScan(table=[[scott, EMP]])
+!plan
+
+!set trimfields true
+
+select distinct dept.deptno, emp.deptno
+from "scott".emp join "scott".dept using (deptno);
+
+EnumerableAggregate(group=[{0, 2}])
+  EnumerableHashJoin(condition=[=($0, $2)], joinType=[inner])
+    EnumerableCalc(expr#0..2=[{inputs}], DEPTNO=[$t0])
+      EnumerableTableScan(table=[[scott, DEPT]])
+    EnumerableCalc(expr#0..7=[{inputs}], EMPNO=[$t0], DEPTNO=[$t7])
+      EnumerableTableScan(table=[[scott, EMP]])
+!plan
+
 # End join.iq
diff --git a/testkit/src/main/java/org/apache/calcite/test/QuidemTest.java 
b/testkit/src/main/java/org/apache/calcite/test/QuidemTest.java
index d4ec9d2ba9..bc0b94f14f 100644
--- a/testkit/src/main/java/org/apache/calcite/test/QuidemTest.java
+++ b/testkit/src/main/java/org/apache/calcite/test/QuidemTest.java
@@ -39,6 +39,7 @@
 import org.apache.calcite.sql.parser.SqlParserImplFactory;
 import org.apache.calcite.sql.pretty.SqlPrettyWriter;
 import org.apache.calcite.sql.type.SqlTypeName;
+import org.apache.calcite.sql2rel.SqlToRelConverter;
 import org.apache.calcite.test.schemata.catchall.CatchallSchema;
 import org.apache.calcite.tools.Frameworks;
 import org.apache.calcite.tools.Planner;
@@ -246,6 +247,17 @@ protected void checkRun(String path) throws Exception {
               int thresholdValue = ((BigDecimal) value).intValue();
               
closer.add(Prepare.THREAD_INSUBQUERY_THRESHOLD.push(thresholdValue));
             }
+            if (propertyName.equals("trimfields")) {
+              final boolean b = value instanceof Boolean
+                  && (Boolean) value;
+              closer.add(
+                  Hook.SQL2REL_CONVERTER_CONFIG_BUILDER.addThread(
+                  (Consumer<Holder<SqlToRelConverter.Config>>) configHolder ->
+                      
configHolder.set(configHolder.get().withTrimUnusedFields(b))));
+              closer.add(
+                  Hook.PROGRAM.addThread((Consumer<Holder<Program>>)
+                      holder -> holder.set(Programs.standard(b))));
+            }
             // Configures query planner rules via "!set planner-rules" command.
             // The value can be set as follows:
             // - Add rule:       "+EnumerableRules.ENUMERABLE_INTERSECT_RULE"

Reply via email to