You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by jh...@apache.org on 2020/06/01 17:16:54 UTC
[calcite] 05/06: Refactor SqlToRelConverterTest to configure by
transforming ConfigBuilder whenever possible
This is an automated email from the ASF dual-hosted git repository.
jhyde pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/calcite.git
commit 0d5e4bc556bb4e0cec6f376f395337ccfdf9c91c
Author: Julian Hyde <jh...@apache.org>
AuthorDate: Tue May 19 17:59:23 2020 -0700
Refactor SqlToRelConverterTest to configure by transforming ConfigBuilder whenever possible
---
.../apache/calcite/sql2rel/SqlToRelConverter.java | 19 +++++++-
.../apache/calcite/test/SqlToRelConverterTest.java | 53 ++++++++++++----------
.../org/apache/calcite/test/SqlToRelTestBase.java | 14 +++---
3 files changed, 52 insertions(+), 34 deletions(-)
diff --git a/core/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java b/core/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java
index eaa6d88..a340b80 100644
--- a/core/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java
+++ b/core/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java
@@ -5973,8 +5973,23 @@ public class SqlToRelConverter {
this.hintStrategyTable = hintStrategyTable;
}
- public boolean isConvertTableAccess() {
- return true;
+ @Override public boolean equals(Object obj) {
+ return this == obj
+ || obj instanceof ConfigImpl
+ && decorrelationEnabled == ((ConfigImpl) obj).decorrelationEnabled
+ && trimUnusedFields == ((ConfigImpl) obj).trimUnusedFields
+ && createValuesRel == ((ConfigImpl) obj).createValuesRel
+ && explain == ((ConfigImpl) obj).explain
+ && expand == ((ConfigImpl) obj).expand
+ && inSubQueryThreshold == ((ConfigImpl) obj).inSubQueryThreshold
+ && relBuilderFactory == ((ConfigImpl) obj).relBuilderFactory
+ && hintStrategyTable == ((ConfigImpl) obj).hintStrategyTable;
+ }
+
+ @Override public int hashCode() {
+ return Objects.hash(decorrelationEnabled, trimUnusedFields,
+ createValuesRel, explain, expand, inSubQueryThreshold,
+ relBuilderFactory, hintStrategyTable);
}
public boolean isDecorrelationEnabled() {
diff --git a/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java b/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
index 3144d1e..979e6fe 100644
--- a/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
+++ b/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
@@ -65,8 +65,10 @@ import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Deque;
import java.util.List;
+import java.util.Objects;
import java.util.Properties;
import java.util.Set;
+import java.util.function.UnaryOperator;
import static org.hamcrest.CoreMatchers.notNullValue;
import static org.hamcrest.MatcherAssert.assertThat;
@@ -84,8 +86,8 @@ class SqlToRelConverterTest extends SqlToRelTestBase {
/** Sets the SQL statement for a test. */
public final Sql sql(String sql) {
- return new Sql(sql, true, true, tester, false,
- SqlToRelConverter.Config.DEFAULT, tester.getConformance());
+ return new Sql(sql, true, tester, false,
+ b -> b.withExpand(true), tester.getConformance());
}
@Test void testDotLiteralAfterNestedRow() {
@@ -3261,13 +3263,11 @@ class SqlToRelConverterTest extends SqlToRelTestBase {
+ "FROM emp AS e\n"
+ "WHERE cast(e.empno as bigint) in (130, 131, 132, 133, 134)";
// No conversion to join since less than IN-list size threshold 10
- SqlToRelConverter.Config noConvertConfig =
- SqlToRelConverter.configBuilder().withInSubQueryThreshold(10).build();
- sql(sql).withConfig(noConvertConfig).convertsTo("${planNotConverted}");
+ sql(sql).withConfig(b -> b.withInSubQueryThreshold(10))
+ .convertsTo("${planNotConverted}");
// Conversion to join since greater than IN-list size threshold 2
- SqlToRelConverter.Config convertConfig =
- SqlToRelConverter.configBuilder().withInSubQueryThreshold(2).build();
- sql(sql).withConfig(convertConfig).convertsTo("${planConverted}");
+ sql(sql).withConfig(b -> b.withInSubQueryThreshold(2))
+ .convertsTo("${planConverted}");
}
/** Test case for
@@ -3806,6 +3806,9 @@ class SqlToRelConverterTest extends SqlToRelTestBase {
sql(sql).ok();
}
+ /** Test case for
+ * <a href="https://issues.apache.org/jira/browse/CALCITE-3575">[CALCITE-3575]
+ * IndexOutOfBoundsException when converting SQL to rel</a>. */
@Test void testPushDownJoinConditionWithProjectMerge() {
final String sql = "select * from\n"
+ " (select empno, deptno from emp) a\n"
@@ -3868,18 +3871,16 @@ class SqlToRelConverterTest extends SqlToRelTestBase {
/** Allows fluent testing. */
public class Sql {
private final String sql;
- private final boolean expand;
private final boolean decorrelate;
private final Tester tester;
private final boolean trim;
- private final SqlToRelConverter.Config config;
+ private final UnaryOperator<SqlToRelConverter.ConfigBuilder> config;
private final SqlConformance conformance;
- Sql(String sql, boolean expand, boolean decorrelate, Tester tester,
- boolean trim, SqlToRelConverter.Config config,
+ Sql(String sql, boolean decorrelate, Tester tester,
+ boolean trim, UnaryOperator<SqlToRelConverter.ConfigBuilder> config,
SqlConformance conformance) {
this.sql = sql;
- this.expand = expand;
this.decorrelate = decorrelate;
this.tester = tester;
this.trim = trim;
@@ -3892,40 +3893,42 @@ class SqlToRelConverterTest extends SqlToRelTestBase {
}
public void convertsTo(String plan) {
- tester.withExpand(expand)
- .withDecorrelation(decorrelate)
+ final SqlToRelConverter.ConfigBuilder configBuilder =
+ SqlToRelConverter.configBuilder().withTrimUnusedFields(true);
+ tester.withDecorrelation(decorrelate)
.withConformance(conformance)
- .withConfig(config)
+ .withConfig(config.apply(configBuilder).build())
.assertConvertsTo(sql, plan, trim);
}
- public Sql withConfig(SqlToRelConverter.Config config) {
- return new Sql(sql, expand, decorrelate, tester, trim, config,
- conformance);
+ public Sql withConfig(
+ UnaryOperator<SqlToRelConverter.ConfigBuilder> config) {
+ Objects.requireNonNull(config);
+ return new Sql(sql, decorrelate, tester, trim,
+ b -> config.apply(this.config.apply(b)), conformance);
}
public Sql expand(boolean expand) {
- return new Sql(sql, expand, decorrelate, tester, trim, config,
- conformance);
+ return withConfig(b -> b.withExpand(expand));
}
public Sql decorrelate(boolean decorrelate) {
- return new Sql(sql, expand, decorrelate, tester, trim, config,
+ return new Sql(sql, decorrelate, tester, trim, config,
conformance);
}
public Sql with(Tester tester) {
- return new Sql(sql, expand, decorrelate, tester, trim, config,
+ return new Sql(sql, decorrelate, tester, trim, config,
conformance);
}
public Sql trim(boolean trim) {
- return new Sql(sql, expand, decorrelate, tester, trim, config,
+ return new Sql(sql, decorrelate, tester, trim, config,
conformance);
}
public Sql conformance(SqlConformance conformance) {
- return new Sql(sql, expand, decorrelate, tester, trim, config,
+ return new Sql(sql, decorrelate, tester, trim, config,
conformance);
}
}
diff --git a/core/src/test/java/org/apache/calcite/test/SqlToRelTestBase.java b/core/src/test/java/org/apache/calcite/test/SqlToRelTestBase.java
index e7b5028..1f1fa31 100644
--- a/core/src/test/java/org/apache/calcite/test/SqlToRelTestBase.java
+++ b/core/src/test/java/org/apache/calcite/test/SqlToRelTestBase.java
@@ -593,7 +593,6 @@ public abstract class SqlToRelTestBase {
public RelRoot convertSqlToRel(String sql) {
Objects.requireNonNull(sql);
final SqlNode sqlQuery;
- final SqlToRelConverter.Config localConfig;
try {
sqlQuery = parseQuery(sql);
} catch (RuntimeException | Error e) {
@@ -612,7 +611,8 @@ public abstract class SqlToRelTestBase {
validator.transform(config ->
config.withDefaultNullCollation(calciteConfig.defaultNullCollation()));
}
- if (config == SqlToRelConverter.Config.DEFAULT) {
+ final SqlToRelConverter.Config localConfig;
+ if (config.equals(SqlToRelConverter.Config.DEFAULT)) {
localConfig = SqlToRelConverter.configBuilder()
.withTrimUnusedFields(true).withExpand(enableExpand).build();
} else {
@@ -829,33 +829,33 @@ public abstract class SqlToRelTestBase {
}
public Tester withConformance(SqlConformance conformance) {
- return new TesterImpl(diffRepos, enableDecorrelate, false,
+ return new TesterImpl(diffRepos, enableDecorrelate, enableTrim,
enableExpand, enableLateDecorrelate, enableTypeCoercion, catalogReaderFactory,
clusterFactory, config, conformance, context);
}
public Tester enableTypeCoercion(boolean enableTypeCoercion) {
- return new TesterImpl(diffRepos, enableDecorrelate, false,
+ return new TesterImpl(diffRepos, enableDecorrelate, enableTrim,
enableExpand, enableLateDecorrelate, enableTypeCoercion, catalogReaderFactory,
clusterFactory, config, conformance, context);
}
public Tester withCatalogReaderFactory(
SqlTestFactory.MockCatalogReaderFactory factory) {
- return new TesterImpl(diffRepos, enableDecorrelate, false,
+ return new TesterImpl(diffRepos, enableDecorrelate, enableTrim,
enableExpand, enableLateDecorrelate, enableTypeCoercion, factory,
clusterFactory, config, conformance, context);
}
public Tester withClusterFactory(
Function<RelOptCluster, RelOptCluster> clusterFactory) {
- return new TesterImpl(diffRepos, enableDecorrelate, false,
+ return new TesterImpl(diffRepos, enableDecorrelate, enableTrim,
enableExpand, enableLateDecorrelate, enableTypeCoercion, catalogReaderFactory,
clusterFactory, config, conformance, context);
}
public Tester withContext(Context context) {
- return new TesterImpl(diffRepos, enableDecorrelate, false,
+ return new TesterImpl(diffRepos, enableDecorrelate, enableTrim,
enableExpand, enableLateDecorrelate, enableTypeCoercion, catalogReaderFactory,
clusterFactory, config, conformance, context);
}