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 2023/05/08 01:27:44 UTC
[calcite] branch main updated (6f10c132be -> 5b73f3665a)
This is an automated email from the ASF dual-hosted git repository.
jhyde pushed a change to branch main
in repository https://gitbox.apache.org/repos/asf/calcite.git
from 6f10c132be [CALCITE-5506] RelToSqlConverter should retain the aggregation logic when Project without RexInputRef on the Aggregate
new 74a2a18bcb Code style: disallow '))' and ').' at the start of a line
new 5b73f3665a In tests, don't allow multi-line strings as argument to CalciteAssert.returnsUnordered
The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
build.gradle.kts | 3 +-
.../adapter/cassandra/CassandraEnumerator.java | 4 +-
.../calcite/adapter/cassandra/CassandraSchema.java | 14 +-
.../calcite/sql/validate/DelegatingScope.java | 6 +-
.../calcite/sql/validate/SqlValidatorUtil.java | 4 +-
.../calcite/rel/rel2sql/RelToSqlConverterTest.java | 8 +-
.../calcite/sql2rel/RelFieldTrimmerTest.java | 14 +-
.../java/org/apache/calcite/test/JdbcTest.java | 4 +-
.../apache/calcite/test/ReflectiveSchemaTest.java | 4 +-
.../org/apache/calcite/test/TableFunctionTest.java | 4 +-
.../test/enumerable/EnumerableCalcTest.java | 50 ++++---
.../test/enumerable/EnumerableJoinTest.java | 29 ++--
.../test/enumerable/EnumerableRepeatUnionTest.java | 7 +-
.../enumerable/EnumerableStringComparisonTest.java | 34 ++---
.../org/apache/calcite/test/DruidAdapter2IT.java | 90 +++++++-----
.../org/apache/calcite/test/DruidAdapterIT.java | 94 +++++++------
.../apache/calcite/adapter/spark/SparkRules.java | 9 +-
.../org/apache/calcite/test/SparkAdapterTest.java | 154 +++++++++++++--------
.../org/apache/calcite/test/CalciteAssert.java | 23 +++
19 files changed, 326 insertions(+), 229 deletions(-)
[calcite] 02/02: In tests, don't allow multi-line strings as argument to CalciteAssert.returnsUnordered
Posted by jh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
jhyde pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/calcite.git
commit 5b73f3665a762006d41c3aac6a05437e2ccdded3
Author: Julian Hyde <jh...@apache.org>
AuthorDate: Sat May 6 14:44:28 2023 -0700
In tests, don't allow multi-line strings as argument to CalciteAssert.returnsUnordered
`CalciteAssert` sorts the lines (for `returnsUnordered`, but
not for `returnsOrdered`) and joins them using '\n', so if
each 'line' is actually multiple lines the sort does not have
the desired effect.
The simplest solution is to require the 'lines' to be just
single lines, for both `returnsUnordered` and
`returnsOrdered`. If this breaks one of your tests, just
change the concatenated strings to a comma-separated list.
---
.../java/org/apache/calcite/test/JdbcTest.java | 4 +-
.../apache/calcite/test/ReflectiveSchemaTest.java | 4 +-
.../org/apache/calcite/test/TableFunctionTest.java | 4 +-
.../test/enumerable/EnumerableCalcTest.java | 50 ++++---
.../test/enumerable/EnumerableJoinTest.java | 17 +--
.../test/enumerable/EnumerableRepeatUnionTest.java | 7 +-
.../enumerable/EnumerableStringComparisonTest.java | 34 ++---
.../org/apache/calcite/test/DruidAdapter2IT.java | 90 +++++++-----
.../org/apache/calcite/test/DruidAdapterIT.java | 94 +++++++------
.../org/apache/calcite/test/SparkAdapterTest.java | 154 +++++++++++++--------
.../org/apache/calcite/test/CalciteAssert.java | 23 +++
11 files changed, 289 insertions(+), 192 deletions(-)
diff --git a/core/src/test/java/org/apache/calcite/test/JdbcTest.java b/core/src/test/java/org/apache/calcite/test/JdbcTest.java
index 4a5425bf4a..ec94130431 100644
--- a/core/src/test/java/org/apache/calcite/test/JdbcTest.java
+++ b/core/src/test/java/org/apache/calcite/test/JdbcTest.java
@@ -7772,7 +7772,9 @@ public class JdbcTest {
+ " EnumerableValues(tuples=[[{ 1, 2 }]])\n"
+ " EnumerableCalc(expr#0..1=[{inputs}], expr#2=[+($t0, $t1)], expr#3=[-($t0, $t1)], EXPR$0=[$t2], EXPR$1=[$t3])\n"
+ " EnumerableValues(tuples=[[{ 3, 4 }, { 5, 6 }]])\n")
- .returnsUnordered("X=11; Y=-1\nX=1; Y=2\nX=7; Y=-1");
+ .returnsUnordered("X=11; Y=-1",
+ "X=1; Y=2",
+ "X=7; Y=-1");
}
/** Test case for
diff --git a/core/src/test/java/org/apache/calcite/test/ReflectiveSchemaTest.java b/core/src/test/java/org/apache/calcite/test/ReflectiveSchemaTest.java
index 36bffc61b6..d6d15d92b9 100644
--- a/core/src/test/java/org/apache/calcite/test/ReflectiveSchemaTest.java
+++ b/core/src/test/java/org/apache/calcite/test/ReflectiveSchemaTest.java
@@ -904,7 +904,9 @@ public class ReflectiveSchemaTest {
.withSchema("s", CATCHALL)
.query("select (\"value\" = 3 and unknown) or ( \"value\" = 3 ) "
+ "from \"s\".\"primesCustomBoxed\"")
- .returnsUnordered("EXPR$0=false\nEXPR$0=false\nEXPR$0=true");
+ .returnsUnordered("EXPR$0=false",
+ "EXPR$0=false",
+ "EXPR$0=true");
}
@Test void testDecimalNegate() {
diff --git a/core/src/test/java/org/apache/calcite/test/TableFunctionTest.java b/core/src/test/java/org/apache/calcite/test/TableFunctionTest.java
index ab50be530c..2ac6a96d72 100644
--- a/core/src/test/java/org/apache/calcite/test/TableFunctionTest.java
+++ b/core/src/test/java/org/apache/calcite/test/TableFunctionTest.java
@@ -480,7 +480,9 @@ class TableFunctionTest {
final String q = "select \"N\" + 1 as c\n"
+ "from table(\"s\".\"fibonacci2\"(3))\n"
+ "group by \"N\"";
- with().query(q).returnsUnordered("C=2\nC=3\nC=4");
+ with().query(q).returnsUnordered("C=2",
+ "C=3",
+ "C=4");
}
@Test void testCrossApply() {
diff --git a/core/src/test/java/org/apache/calcite/test/enumerable/EnumerableCalcTest.java b/core/src/test/java/org/apache/calcite/test/enumerable/EnumerableCalcTest.java
index 42b8c3123f..7e801e18f8 100644
--- a/core/src/test/java/org/apache/calcite/test/enumerable/EnumerableCalcTest.java
+++ b/core/src/test/java/org/apache/calcite/test/enumerable/EnumerableCalcTest.java
@@ -61,37 +61,46 @@ class EnumerableCalcTest {
* Posix regex operators cannot be used within RelBuilder</a>.
*/
@Test void testPosixRegexCaseSensitive() {
- checkPosixRegex("E..c", SqlStdOperatorTable.POSIX_REGEX_CASE_SENSITIVE,
- "empid=200; name=Eric");
- checkPosixRegex("e..c", SqlStdOperatorTable.POSIX_REGEX_CASE_SENSITIVE, "");
+ checkPosixRegex("E..c", SqlStdOperatorTable.POSIX_REGEX_CASE_SENSITIVE)
+ .returnsUnordered("empid=200; name=Eric");
+ checkPosixRegex("e..c", SqlStdOperatorTable.POSIX_REGEX_CASE_SENSITIVE)
+ .returnsUnordered();
}
@Test void testPosixRegexCaseInsensitive() {
- checkPosixRegex("E..c", SqlStdOperatorTable.POSIX_REGEX_CASE_INSENSITIVE,
- "empid=200; name=Eric");
- checkPosixRegex("e..c", SqlStdOperatorTable.POSIX_REGEX_CASE_INSENSITIVE,
- "empid=200; name=Eric");
+ checkPosixRegex("E..c", SqlStdOperatorTable.POSIX_REGEX_CASE_INSENSITIVE)
+ .returnsUnordered("empid=200; name=Eric");
+ checkPosixRegex("e..c", SqlStdOperatorTable.POSIX_REGEX_CASE_INSENSITIVE)
+ .returnsUnordered("empid=200; name=Eric");
}
@Test void testNegatedPosixRegexCaseSensitive() {
- checkPosixRegex("E..c", SqlStdOperatorTable.NEGATED_POSIX_REGEX_CASE_SENSITIVE,
- "empid=100; name=Bill", "empid=110; name=Theodore", "empid=150; name=Sebastian");
- checkPosixRegex("e..c", SqlStdOperatorTable.NEGATED_POSIX_REGEX_CASE_SENSITIVE,
- "empid=100; name=Bill", "empid=110; name=Theodore", "empid=150; name=Sebastian", "empid=200; name=Eric");
+ checkPosixRegex("E..c", SqlStdOperatorTable.NEGATED_POSIX_REGEX_CASE_SENSITIVE)
+ .returnsUnordered("empid=100; name=Bill",
+ "empid=110; name=Theodore",
+ "empid=150; name=Sebastian");
+ checkPosixRegex("e..c", SqlStdOperatorTable.NEGATED_POSIX_REGEX_CASE_SENSITIVE)
+ .returnsUnordered("empid=100; name=Bill",
+ "empid=110; name=Theodore",
+ "empid=150; name=Sebastian",
+ "empid=200; name=Eric");
}
@Test void testNegatedPosixRegexCaseInsensitive() {
- checkPosixRegex("E..c", SqlStdOperatorTable.NEGATED_POSIX_REGEX_CASE_INSENSITIVE,
- "empid=100; name=Bill", "empid=110; name=Theodore", "empid=150; name=Sebastian");
- checkPosixRegex("e..c", SqlStdOperatorTable.NEGATED_POSIX_REGEX_CASE_INSENSITIVE,
- "empid=100; name=Bill", "empid=110; name=Theodore", "empid=150; name=Sebastian");
+ checkPosixRegex("E..c", SqlStdOperatorTable.NEGATED_POSIX_REGEX_CASE_INSENSITIVE)
+ .returnsUnordered("empid=100; name=Bill",
+ "empid=110; name=Theodore",
+ "empid=150; name=Sebastian");
+ checkPosixRegex("e..c", SqlStdOperatorTable.NEGATED_POSIX_REGEX_CASE_INSENSITIVE)
+ .returnsUnordered("empid=100; name=Bill",
+ "empid=110; name=Theodore",
+ "empid=150; name=Sebastian");
}
- private void checkPosixRegex(
+ private CalciteAssert.AssertQuery checkPosixRegex(
String literalValue,
- SqlOperator operator,
- String... expectedResult) {
- CalciteAssert.that()
+ SqlOperator operator) {
+ return CalciteAssert.that()
.withSchema("s", new ReflectiveSchema(new HrSchema()))
.withRel(
builder -> builder
@@ -104,7 +113,6 @@ class EnumerableCalcTest {
.project(
builder.field("empid"),
builder.field("name"))
- .build())
- .returnsUnordered(expectedResult);
+ .build());
}
}
diff --git a/core/src/test/java/org/apache/calcite/test/enumerable/EnumerableJoinTest.java b/core/src/test/java/org/apache/calcite/test/enumerable/EnumerableJoinTest.java
index 81aef12448..30f69f1034 100644
--- a/core/src/test/java/org/apache/calcite/test/enumerable/EnumerableJoinTest.java
+++ b/core/src/test/java/org/apache/calcite/test/enumerable/EnumerableJoinTest.java
@@ -211,9 +211,8 @@ class EnumerableJoinTest {
+ " EnumerableSort(sort0=[$0], dir0=[ASC])\n"
+ " EnumerableCalc(expr#0..3=[{inputs}], proj#0..1=[{exprs}])\n"
+ " EnumerableTableScan(table=[[s, depts]])\n")
- .returnsUnordered(""
- + "empid=110; name=Theodore; dept_name=Sales; e_deptno=10; d_deptno=10\n"
- + "empid=150; name=Sebastian; dept_name=Sales; e_deptno=10; d_deptno=10");
+ .returnsUnordered("empid=110; name=Theodore; dept_name=Sales; e_deptno=10; d_deptno=10",
+ "empid=150; name=Sebastian; dept_name=Sales; e_deptno=10; d_deptno=10");
}
/** Test case for
@@ -250,7 +249,10 @@ class EnumerableJoinTest {
+ " EnumerableSort(sort0=[$0], sort1=[$1], dir0=[ASC], dir1=[ASC])\n"
+ " EnumerableCalc(expr#0..4=[{inputs}], deptno=[$t1], commission=[$t4])\n"
+ " EnumerableTableScan(table=[[s, emps]])\n")
- .returnsUnordered("empid=100\nempid=110\nempid=150\nempid=200");
+ .returnsUnordered("empid=100",
+ "empid=110",
+ "empid=150",
+ "empid=200");
}
/** Test case for
@@ -326,10 +328,9 @@ class EnumerableJoinTest {
+ " EnumerableSort(sort0=[$0], dir0=[ASC])\n"
+ " EnumerableCalc(expr#0..4=[{inputs}], empid=[$t0], name=[$t2])\n"
+ " EnumerableTableScan(table=[[s, emps]])\n")
- .returnsUnordered(""
- + "empid=2; name=Emp2\n"
- + "empid=3; name=Emp3\n"
- + "empid=5; name=Emp5");
+ .returnsUnordered("empid=2; name=Emp2",
+ "empid=3; name=Emp3",
+ "empid=5; name=Emp5");
}
private CalciteAssert.AssertThat tester(boolean forceDecorrelate,
diff --git a/core/src/test/java/org/apache/calcite/test/enumerable/EnumerableRepeatUnionTest.java b/core/src/test/java/org/apache/calcite/test/enumerable/EnumerableRepeatUnionTest.java
index b7c18f4a33..4ee3f51cee 100644
--- a/core/src/test/java/org/apache/calcite/test/enumerable/EnumerableRepeatUnionTest.java
+++ b/core/src/test/java/org/apache/calcite/test/enumerable/EnumerableRepeatUnionTest.java
@@ -313,9 +313,8 @@ class EnumerableRepeatUnionTest {
+ " BindableTableScan(table=[[#DELTA#]])\n"
+ " EnumerableCalc(expr#0..4=[{inputs}], expr#5=[$cor1], expr#6=[$t5.subordinateid], expr#7=[=($t6, $t0)], empid=[$t0], name=[$t2], $condition=[$t7])\n"
+ " EnumerableTableScan(table=[[s, emps]])\n")
- .returnsUnordered(""
- + "empid=2; name=Emp2\n"
- + "empid=3; name=Emp3\n"
- + "empid=5; name=Emp5");
+ .returnsUnordered("empid=2; name=Emp2",
+ "empid=3; name=Emp3",
+ "empid=5; name=Emp5");
}
}
diff --git a/core/src/test/java/org/apache/calcite/test/enumerable/EnumerableStringComparisonTest.java b/core/src/test/java/org/apache/calcite/test/enumerable/EnumerableStringComparisonTest.java
index 6f0fd0273a..fd12311b49 100644
--- a/core/src/test/java/org/apache/calcite/test/enumerable/EnumerableStringComparisonTest.java
+++ b/core/src/test/java/org/apache/calcite/test/enumerable/EnumerableStringComparisonTest.java
@@ -111,11 +111,11 @@ class EnumerableStringComparisonTest {
.explainHookMatches(""
+ "EnumerableSort(sort0=[$0], dir0=[ASC])\n"
+ " EnumerableValues(tuples=[[{ 'Legal' }, { 'presales' }, { 'hr' }, { 'Administration' }, { 'MARKETING' }]])\n")
- .returnsOrdered("name=Administration\n"
- + "name=Legal\n"
- + "name=MARKETING\n"
- + "name=hr\n"
- + "name=presales");
+ .returnsOrdered("name=Administration",
+ "name=Legal",
+ "name=MARKETING",
+ "name=hr",
+ "name=presales");
}
@Test void testSortStringSpecialCollation() {
@@ -130,11 +130,11 @@ class EnumerableStringComparisonTest {
.explainHookMatches(""
+ "EnumerableSort(sort0=[$0], dir0=[ASC])\n"
+ " EnumerableValues(tuples=[[{ 'Legal' }, { 'presales' }, { 'hr' }, { 'Administration' }, { 'MARKETING' }]])\n")
- .returnsOrdered("name=Administration\n"
- + "name=hr\n"
- + "name=Legal\n"
- + "name=MARKETING\n"
- + "name=presales");
+ .returnsOrdered("name=Administration",
+ "name=hr",
+ "name=Legal",
+ "name=MARKETING",
+ "name=presales");
}
@Test void testMergeJoinOnStringSpecialCollation() {
@@ -162,8 +162,8 @@ class EnumerableStringComparisonTest {
+ " EnumerableValues(tuples=[[{ 'Legal' }, { 'presales' }, { 'HR' }, { 'Administration' }, { 'Marketing' }]])\n"
+ " EnumerableSort(sort0=[$0], dir0=[ASC])\n"
+ " EnumerableValues(tuples=[[{ 'Marketing' }, { 'bureaucracy' }, { 'Sales' }, { 'HR' }]])\n")
- .returnsOrdered("name=HR; name0=HR\n"
- + "name=Marketing; name0=Marketing");
+ .returnsOrdered("name=HR; name0=HR",
+ "name=Marketing; name0=Marketing");
}
/** Test case for
@@ -193,11 +193,11 @@ class EnumerableStringComparisonTest {
+ " EnumerableValues(tuples=[[{ 'facilities' }, { 'HR' }, { 'administration' }, { 'Marketing' }]])\n"
+ " EnumerableSort(sort0=[$0], dir0=[ASC])\n"
+ " EnumerableValues(tuples=[[{ 'Marketing' }, { 'administration' }, { 'presales' }, { 'HR' }]])\n")
- .returnsOrdered("name=administration\n"
- + "name=facilities\n"
- + "name=HR\n"
- + "name=Marketing\n"
- + "name=presales");
+ .returnsOrdered("name=administration",
+ "name=facilities",
+ "name=HR",
+ "name=Marketing",
+ "name=presales");
}
/** Test case for
diff --git a/druid/src/test/java/org/apache/calcite/test/DruidAdapter2IT.java b/druid/src/test/java/org/apache/calcite/test/DruidAdapter2IT.java
index a98ba3998d..021a9d0041 100644
--- a/druid/src/test/java/org/apache/calcite/test/DruidAdapter2IT.java
+++ b/druid/src/test/java/org/apache/calcite/test/DruidAdapter2IT.java
@@ -650,7 +650,7 @@ public class DruidAdapter2IT {
+ " DruidQuery(table=[[foodmart, foodmart]], intervals=[[1900-01-09T00:00:00.000Z/2992-01-10T00:00:00.000Z]], groups=[{}], aggs=[[COUNT()]])";
final String sql = "select count(*) from \"foodmart\"";
sql(sql)
- .returns("EXPR$0=86829\n")
+ .returnsUnordered("EXPR$0=86829")
.queryContains(new DruidChecker(druidQuery))
.explainContains(explain);
}
@@ -1562,11 +1562,13 @@ public class DruidAdapter2IT {
+ "'direction':'ascending','dimensionOrder':'numeric'}]},"
+ "'aggregations':[{'type':'count','name':'C'},{'type':'longSum',"
+ "'name':'S','fieldName':'unit_sales'}]";
- sql(sqlQuery).returnsOrdered("timestamp=1997-12-30 00:00:00; C=22; S=36\ntimestamp=1997-12-29"
- + " 00:00:00; C=321; S=982\ntimestamp=1997-12-28 00:00:00; C=480; "
- + "S=1496\ntimestamp=1997-12-27 00:00:00; C=363; S=1156\ntimestamp=1997-12-26 00:00:00; "
- + "C=144; S=420").queryContains(new DruidChecker(druidSubQuery));
-
+ sql(sqlQuery)
+ .returnsOrdered("timestamp=1997-12-30 00:00:00; C=22; S=36",
+ "timestamp=1997-12-29 00:00:00; C=321; S=982",
+ "timestamp=1997-12-28 00:00:00; C=480; S=1496",
+ "timestamp=1997-12-27 00:00:00; C=363; S=1156",
+ "timestamp=1997-12-26 00:00:00; C=144; S=420")
+ .queryContains(new DruidChecker(druidSubQuery));
}
@Test void testNumericOrderingOfOrderByOperatorTimeExtract() {
@@ -1581,10 +1583,13 @@ public class DruidAdapter2IT {
+ "'direction':'ascending','dimensionOrder':'numeric'},"
+ "{'dimension':'extract_year','direction':'descending',"
+ "'dimensionOrder':'numeric'}]}";
- sql(sqlQuery).returnsOrdered("D=30; M=3; Y=1997; C=114; S=351\nD=30; M=5; Y=1997; "
- + "C=24; S=34\nD=30; M=6; Y=1997; C=73; S=183\nD=30; M=7; Y=1997; C=29; S=54\nD=30; M=8; "
- + "Y=1997; C=137; S=422").queryContains(new DruidChecker(druidSubQuery));
-
+ sql(sqlQuery)
+ .returnsOrdered("D=30; M=3; Y=1997; C=114; S=351",
+ "D=30; M=5; Y=1997; C=24; S=34",
+ "D=30; M=6; Y=1997; C=73; S=183",
+ "D=30; M=7; Y=1997; C=29; S=54",
+ "D=30; M=8; Y=1997; C=137; S=422")
+ .queryContains(new DruidChecker(druidSubQuery));
}
@Test void testNumericOrderingOfOrderByOperatorStringDims() {
@@ -1594,10 +1599,13 @@ public class DruidAdapter2IT {
final String druidSubQuery = "'limitSpec':{'type':'default','limit':5,"
+ "'columns':[{'dimension':'brand_name','direction':'descending',"
+ "'dimensionOrder':'lexicographic'}]}";
- sql(sqlQuery).returnsOrdered("brand_name=Washington; C=576; S=1775\nbrand_name=Walrus; C=457;"
- + " S=1399\nbrand_name=Urban; C=299; S=924\nbrand_name=Tri-State; C=2339; "
- + "S=7270\nbrand_name=Toucan; C=123; S=380").queryContains(new DruidChecker(druidSubQuery));
-
+ sql(sqlQuery)
+ .returnsOrdered("brand_name=Washington; C=576; S=1775",
+ "brand_name=Walrus; C=457; S=1399",
+ "brand_name=Urban; C=299; S=924",
+ "brand_name=Tri-State; C=2339; S=7270",
+ "brand_name=Toucan; C=123; S=380")
+ .queryContains(new DruidChecker(druidSubQuery));
}
@Test void testGroupByWeekExtract() {
@@ -1622,7 +1630,10 @@ public class DruidAdapter2IT {
+ "'timeZone':'UTC','locale':'en-US'}}]}]},"
+ "'aggregations':[],"
+ "'intervals':['1900-01-09T00:00:00.000Z/2992-01-10T00:00:00.000Z']}";
- sql(sql).returnsOrdered("EXPR$0=10\nEXPR$0=11").queryContains(new DruidChecker(druidQuery));
+ sql(sql)
+ .returnsOrdered("EXPR$0=10",
+ "EXPR$0=11")
+ .queryContains(new DruidChecker(druidQuery));
}
/** Test case for
@@ -2388,9 +2399,9 @@ public class DruidAdapter2IT {
new DruidChecker("\"queryType\":\"groupBy\"", "{\"type\":\"bound\","
+ "\"dimension\":\"store_cost\",\"lower\":\"5\",\"lowerStrict\":true,"
+ "\"ordering\":\"numeric\"}"));
- q.returnsUnordered("EXPR$0=10.16; product_id=1554\n"
- + "EXPR$0=45.05; product_id=1556\n"
- + "EXPR$0=88.5; product_id=1555");
+ q.returnsUnordered("EXPR$0=10.16; product_id=1554",
+ "EXPR$0=45.05; product_id=1556",
+ "EXPR$0=88.5; product_id=1555");
}
@Test void testFilterClauseWithMetricAndTimeAndAggregates() {
@@ -2403,10 +2414,10 @@ public class DruidAdapter2IT {
new DruidChecker("\"queryType\":\"groupBy\"", "{\"type\":\"bound\","
+ "\"dimension\":\"store_cost\",\"lower\":\"5\",\"lowerStrict\":true,"
+ "\"ordering\":\"numeric\"}"))
- .returnsUnordered("EXPR$0=10.6; product_id=1556\n"
- + "EXPR$0=10.6; product_id=1556\n"
- + "EXPR$0=10.6; product_id=1556\n"
- + "EXPR$0=13.25; product_id=1556");
+ .returnsUnordered("EXPR$0=10.6; product_id=1556",
+ "EXPR$0=10.6; product_id=1556",
+ "EXPR$0=10.6; product_id=1556",
+ "EXPR$0=13.25; product_id=1556");
}
/** Tests that an aggregate with a nested filter clause has its filter
@@ -3331,9 +3342,9 @@ public class DruidAdapter2IT {
+ FOODMART_TABLE + "WHERE \"store_sales\" < 20 order by D limit 3";
sql(sql)
.runs()
- .returnsOrdered("EXPR$0=1.060758881219386; EXPR$1=0.5172204046388567; D=2\n"
- + "EXPR$0=0.8316025520509229; EXPR$1=0.6544084288365644; D=2\n"
- + "EXPR$0=0.24267723077545622; EXPR$1=0.9286289016881148; D=2")
+ .returnsOrdered("EXPR$0=1.060758881219386; EXPR$1=0.5172204046388567; D=2",
+ "EXPR$0=0.8316025520509229; EXPR$1=0.6544084288365644; D=2",
+ "EXPR$0=0.24267723077545622; EXPR$1=0.9286289016881148; D=2")
.explainContains("PLAN=EnumerableInterpreter\n"
+ " BindableSort(sort0=[$2], dir0=[ASC], fetch=[3])\n"
+ " DruidQuery(table=[[foodmart, foodmart]], intervals=[[1900-01-09T00:00:00.000Z/"
@@ -3347,9 +3358,9 @@ public class DruidAdapter2IT {
+ FOODMART_TABLE + "WHERE \"store_sales\" < 20 order by D limit 3";
sql(sql)
.runs()
- .returnsOrdered("EXPR$0=0.5357357987441458; D=2\n"
- + "EXPR$0=0.22760480207557643; D=2\n"
- + "EXPR$0=0.11259322182897047; D=2")
+ .returnsOrdered("EXPR$0=0.5357357987441458; D=2",
+ "EXPR$0=0.22760480207557643; D=2",
+ "EXPR$0=0.11259322182897047; D=2")
.explainContains("PLAN=EnumerableInterpreter\n"
+ " BindableSort(sort0=[$1], dir0=[ASC], fetch=[3])\n"
+ " DruidQuery(table=[[foodmart, foodmart]], intervals=[[1900-01-09T00:00:00.000Z/"
@@ -3511,8 +3522,11 @@ public class DruidAdapter2IT {
final String sql =
"SELECT \"product_id\", SUBSTRING(\"product_id\" from 1 for 2) FROM " + FOODMART_TABLE
+ " GROUP BY \"product_id\"";
- sql(sql).limit(3).returnsOrdered(
- "product_id=1; EXPR$1=1\nproduct_id=10; EXPR$1=10\nproduct_id=100; EXPR$1=10")
+ sql(sql)
+ .limit(3)
+ .returnsOrdered("product_id=1; EXPR$1=1",
+ "product_id=10; EXPR$1=10",
+ "product_id=100; EXPR$1=10")
.explainContains("PLAN=EnumerableInterpreter\n"
+ " DruidQuery(table=[[foodmart, foodmart]], intervals=[[1900-01-09T00:00:00.000Z/"
+ "2992-01-10T00:00:00.000Z]], projects=[[$1]], groups=[{0}], aggs=[[]], "
@@ -3755,10 +3769,10 @@ public class DruidAdapter2IT {
+ "{\"type\":\"default\",\"dimension\":\"product_id\",\"outputName\":\"product_id\",\"outputType\":\"STRING\"}],"
+ "\"virtualColumns\":[{\"type\":\"expression\",\"name\":\"vc\",\"expression\":\"timestamp_extract(\\\"__time\\\",",
"QUARTER"));
- q.returnsOrdered("EXPR$0=1; product_id=1; EXPR$2=37.05\n"
- + "EXPR$0=2; product_id=1; EXPR$2=62.7\n"
- + "EXPR$0=3; product_id=1; EXPR$2=88.35\n"
- + "EXPR$0=4; product_id=1; EXPR$2=48.45");
+ q.returnsOrdered("EXPR$0=1; product_id=1; EXPR$2=37.05",
+ "EXPR$0=2; product_id=1; EXPR$2=62.7",
+ "EXPR$0=3; product_id=1; EXPR$2=88.35",
+ "EXPR$0=4; product_id=1; EXPR$2=48.45");
}
@Test void testExtractQuarter() {
@@ -3773,10 +3787,10 @@ public class DruidAdapter2IT {
+ "\"dimensions\":[{\"type\":\"default\",\"dimension\":\"vc\",\"outputName\":\"vc\",\"outputType\":\"LONG\"}],"
+ "\"virtualColumns\":[{\"type\":\"expression\",\"name\":\"vc\",\"expression\":\"timestamp_extract(\\\"__time\\\",",
"QUARTER"));
- q.returnsOrdered("EXPR$0=1; EXPR$1=139628.35\n"
- + "EXPR$0=2; EXPR$1=132666.27\n"
- + "EXPR$0=3; EXPR$1=140271.89\n"
- + "EXPR$0=4; EXPR$1=152671.62");
+ q.returnsOrdered("EXPR$0=1; EXPR$1=139628.35",
+ "EXPR$0=2; EXPR$1=132666.27",
+ "EXPR$0=3; EXPR$1=140271.89",
+ "EXPR$0=4; EXPR$1=152671.62");
}
@Test void testCastTimestamp1() {
diff --git a/druid/src/test/java/org/apache/calcite/test/DruidAdapterIT.java b/druid/src/test/java/org/apache/calcite/test/DruidAdapterIT.java
index 6aab15f328..d45f4169a8 100644
--- a/druid/src/test/java/org/apache/calcite/test/DruidAdapterIT.java
+++ b/druid/src/test/java/org/apache/calcite/test/DruidAdapterIT.java
@@ -920,7 +920,7 @@ public class DruidAdapterIT {
+ "2992-01-10T00:00:00.000Z]], groups=[{}], aggs=[[COUNT()]])";
final String sql = "select count(*) from \"foodmart\"";
sql(sql)
- .returns("EXPR$0=86829\n")
+ .returnsUnordered("EXPR$0=86829")
.queryContains(new DruidChecker(druidQuery))
.explainContains(explain);
}
@@ -1859,11 +1859,13 @@ public class DruidAdapterIT {
+ "'direction':'ascending','dimensionOrder':'numeric'}]},"
+ "'aggregations':[{'type':'count','name':'C'},{'type':'longSum',"
+ "'name':'S','fieldName':'unit_sales'}]";
- sql(sqlQuery).returnsOrdered("timestamp=1997-12-30 00:00:00; C=22; S=36\ntimestamp=1997-12-29"
- + " 00:00:00; C=321; S=982\ntimestamp=1997-12-28 00:00:00; C=480; "
- + "S=1496\ntimestamp=1997-12-27 00:00:00; C=363; S=1156\ntimestamp=1997-12-26 00:00:00; "
- + "C=144; S=420").queryContains(new DruidChecker(druidSubQuery));
-
+ sql(sqlQuery)
+ .returnsOrdered("timestamp=1997-12-30 00:00:00; C=22; S=36",
+ "timestamp=1997-12-29 00:00:00; C=321; S=982",
+ "timestamp=1997-12-28 00:00:00; C=480; S=1496",
+ "timestamp=1997-12-27 00:00:00; C=363; S=1156",
+ "timestamp=1997-12-26 00:00:00; C=144; S=420")
+ .queryContains(new DruidChecker(druidSubQuery));
}
@Test void testNumericOrderingOfOrderByOperatorTimeExtract() {
@@ -1878,10 +1880,13 @@ public class DruidAdapterIT {
+ "'direction':'ascending','dimensionOrder':'numeric'},"
+ "{'dimension':'extract_year','direction':'descending',"
+ "'dimensionOrder':'numeric'}]}";
- sql(sqlQuery).returnsOrdered("D=30; M=3; Y=1997; C=114; S=351\nD=30; M=5; Y=1997; "
- + "C=24; S=34\nD=30; M=6; Y=1997; C=73; S=183\nD=30; M=7; Y=1997; C=29; S=54\nD=30; M=8; "
- + "Y=1997; C=137; S=422").queryContains(new DruidChecker(druidSubQuery));
-
+ sql(sqlQuery)
+ .returnsOrdered("D=30; M=3; Y=1997; C=114; S=351",
+ "D=30; M=5; Y=1997; C=24; S=34",
+ "D=30; M=6; Y=1997; C=73; S=183",
+ "D=30; M=7; Y=1997; C=29; S=54",
+ "D=30; M=8; Y=1997; C=137; S=422")
+ .queryContains(new DruidChecker(druidSubQuery));
}
@Test void testNumericOrderingOfOrderByOperatorStringDims() {
@@ -1891,10 +1896,13 @@ public class DruidAdapterIT {
final String druidSubQuery = "'limitSpec':{'type':'default','limit':5,"
+ "'columns':[{'dimension':'brand_name','direction':'descending',"
+ "'dimensionOrder':'lexicographic'}]}";
- sql(sqlQuery).returnsOrdered("brand_name=Washington; C=576; S=1775\nbrand_name=Walrus; C=457;"
- + " S=1399\nbrand_name=Urban; C=299; S=924\nbrand_name=Tri-State; C=2339; "
- + "S=7270\nbrand_name=Toucan; C=123; S=380").queryContains(new DruidChecker(druidSubQuery));
-
+ sql(sqlQuery)
+ .returnsOrdered("brand_name=Washington; C=576; S=1775",
+ "brand_name=Walrus; C=457; S=1399",
+ "brand_name=Urban; C=299; S=924",
+ "brand_name=Tri-State; C=2339; S=7270",
+ "brand_name=Toucan; C=123; S=380")
+ .queryContains(new DruidChecker(druidSubQuery));
}
@Test void testGroupByWeekExtract() {
@@ -1919,7 +1927,10 @@ public class DruidAdapterIT {
+ "'timeZone':'UTC','locale':'en-US'}}]}]},"
+ "'aggregations':[],"
+ "'intervals':['1900-01-09T00:00:00.000Z/2992-01-10T00:00:00.000Z']}";
- sql(sql).returnsOrdered("EXPR$0=10\nEXPR$0=11").queryContains(new DruidChecker(druidQuery));
+ sql(sql)
+ .returnsOrdered("EXPR$0=10",
+ "EXPR$0=11")
+ .queryContains(new DruidChecker(druidQuery));
}
/** Test case for
@@ -2708,9 +2719,9 @@ public class DruidAdapterIT {
new DruidChecker("\"queryType\":\"groupBy\"", "{\"type\":\"bound\","
+ "\"dimension\":\"store_cost\",\"lower\":\"5\",\"lowerStrict\":true,"
+ "\"ordering\":\"numeric\"}"));
- q.returnsUnordered("EXPR$0=10.16; product_id=1554\n"
- + "EXPR$0=45.05; product_id=1556\n"
- + "EXPR$0=88.5; product_id=1555");
+ q.returnsUnordered("EXPR$0=10.16; product_id=1554",
+ "EXPR$0=45.05; product_id=1556",
+ "EXPR$0=88.5; product_id=1555");
}
@Test void testFilterClauseWithMetricAndTimeAndAggregates() {
@@ -2725,10 +2736,10 @@ public class DruidAdapterIT {
new DruidChecker("\"queryType\":\"groupBy\"", "{\"type\":\"bound\","
+ "\"dimension\":\"store_cost\",\"lower\":\"5\",\"lowerStrict\":true,"
+ "\"ordering\":\"numeric\"}"))
- .returnsUnordered("EXPR$0=10.6; product_id=1556\n"
- + "EXPR$0=10.6; product_id=1556\n"
- + "EXPR$0=10.6; product_id=1556\n"
- + "EXPR$0=13.25; product_id=1556");
+ .returnsUnordered("EXPR$0=10.6; product_id=1556",
+ "EXPR$0=10.6; product_id=1556",
+ "EXPR$0=10.6; product_id=1556",
+ "EXPR$0=13.25; product_id=1556");
}
/** Tests that an aggregate with a nested filter clause has its filter
@@ -3991,9 +4002,9 @@ public class DruidAdapterIT {
+ FOODMART_TABLE + "WHERE \"store_sales\" < 20 order by D limit 3";
sql(sql, FOODMART)
.runs()
- .returnsOrdered("EXPR$0=1.060758881219386; EXPR$1=0.5172204046388567; D=2\n"
- + "EXPR$0=0.8316025520509229; EXPR$1=0.6544084288365644; D=2\n"
- + "EXPR$0=0.24267723077545622; EXPR$1=0.9286289016881148; D=2")
+ .returnsOrdered("EXPR$0=1.060758881219386; EXPR$1=0.5172204046388567; D=2",
+ "EXPR$0=0.8316025520509229; EXPR$1=0.6544084288365644; D=2",
+ "EXPR$0=0.24267723077545622; EXPR$1=0.9286289016881148; D=2")
.explainContains("PLAN=EnumerableInterpreter\n"
+ " BindableSort(sort0=[$2], dir0=[ASC], fetch=[3])\n"
+ " DruidQuery(table=[[foodmart, foodmart]], intervals=[[1900-01-09T00:00:00.000Z/"
@@ -4007,9 +4018,9 @@ public class DruidAdapterIT {
+ FOODMART_TABLE + "WHERE \"store_sales\" < 20 order by D limit 3";
sql(sql, FOODMART)
.runs()
- .returnsOrdered("EXPR$0=0.5357357987441458; D=2\n"
- + "EXPR$0=0.22760480207557643; D=2\n"
- + "EXPR$0=0.11259322182897047; D=2")
+ .returnsOrdered("EXPR$0=0.5357357987441458; D=2",
+ "EXPR$0=0.22760480207557643; D=2",
+ "EXPR$0=0.11259322182897047; D=2")
.explainContains("PLAN=EnumerableInterpreter\n"
+ " BindableSort(sort0=[$1], dir0=[ASC], fetch=[3])\n"
+ " DruidQuery(table=[[foodmart, foodmart]], intervals=[[1900-01-09T00:00:00.000Z/"
@@ -4047,8 +4058,8 @@ public class DruidAdapterIT {
final String sql = "SELECT SUM(-\"store_sales\" * 2) as S FROM " + FOODMART_TABLE
+ "Group by \"timestamp\" order by s LIMIT 2";
sql(sql, FOODMART)
- .returnsOrdered("S=-15918.02\n"
- + "S=-14115.96")
+ .returnsOrdered("S=-15918.02",
+ "S=-14115.96")
.explainContains("PLAN=EnumerableCalc(expr#0..1=[{inputs}], S=[$t1])\n"
+ " EnumerableInterpreter\n"
+ " DruidQuery(table=[[foodmart, foodmart]], intervals=[[1900-01-09T00:00:00.000Z/"
@@ -4181,8 +4192,11 @@ public class DruidAdapterIT {
final String sql =
"SELECT \"product_id\", SUBSTRING(\"product_id\" from 1 for 2) FROM " + FOODMART_TABLE
+ " GROUP BY \"product_id\"";
- sql(sql, FOODMART).limit(3).returnsOrdered(
- "product_id=1; EXPR$1=1\nproduct_id=10; EXPR$1=10\nproduct_id=100; EXPR$1=10")
+ sql(sql, FOODMART)
+ .limit(3)
+ .returnsOrdered("product_id=1; EXPR$1=1",
+ "product_id=10; EXPR$1=10",
+ "product_id=100; EXPR$1=10")
.explainContains("PLAN=EnumerableInterpreter\n"
+ " DruidQuery(table=[[foodmart, foodmart]], intervals=[[1900-01-09T00:00:00.000Z/"
+ "2992-01-10T00:00:00.000Z]], projects=[[$1]], groups=[{0}], aggs=[[]], "
@@ -4449,10 +4463,10 @@ public class DruidAdapterIT {
+ "{\"type\":\"default\",\"dimension\":\"product_id\",\"outputName\":\"product_id\",\"outputType\":\"STRING\"}],"
+ "\"virtualColumns\":[{\"type\":\"expression\",\"name\":\"vc\",\"expression\":\"timestamp_extract(\\\"__time\\\",",
"QUARTER"));
- q.returnsOrdered("EXPR$0=1; product_id=1; EXPR$2=37.05\n"
- + "EXPR$0=2; product_id=1; EXPR$2=62.7\n"
- + "EXPR$0=3; product_id=1; EXPR$2=88.35\n"
- + "EXPR$0=4; product_id=1; EXPR$2=48.45");
+ q.returnsOrdered("EXPR$0=1; product_id=1; EXPR$2=37.05",
+ "EXPR$0=2; product_id=1; EXPR$2=62.7",
+ "EXPR$0=3; product_id=1; EXPR$2=88.35",
+ "EXPR$0=4; product_id=1; EXPR$2=48.45");
}
@Test void testExtractQuarter() {
@@ -4467,10 +4481,10 @@ public class DruidAdapterIT {
+ "\"dimensions\":[{\"type\":\"default\",\"dimension\":\"vc\",\"outputName\":\"vc\",\"outputType\":\"LONG\"}],"
+ "\"virtualColumns\":[{\"type\":\"expression\",\"name\":\"vc\",\"expression\":\"timestamp_extract(\\\"__time\\\",",
"QUARTER"));
- q.returnsOrdered("EXPR$0=1; EXPR$1=139628.35\n"
- + "EXPR$0=2; EXPR$1=132666.27\n"
- + "EXPR$0=3; EXPR$1=140271.89\n"
- + "EXPR$0=4; EXPR$1=152671.62");
+ q.returnsOrdered("EXPR$0=1; EXPR$1=139628.35",
+ "EXPR$0=2; EXPR$1=132666.27",
+ "EXPR$0=3; EXPR$1=140271.89",
+ "EXPR$0=4; EXPR$1=152671.62");
}
diff --git a/spark/src/test/java/org/apache/calcite/test/SparkAdapterTest.java b/spark/src/test/java/org/apache/calcite/test/SparkAdapterTest.java
index 559ee34135..468dee9463 100644
--- a/spark/src/test/java/org/apache/calcite/test/SparkAdapterTest.java
+++ b/spark/src/test/java/org/apache/calcite/test/SparkAdapterTest.java
@@ -63,10 +63,12 @@ class SparkAdapterTest {
final String plan = "PLAN="
+ "EnumerableValues(tuples=[[{ 1, 'a' }, { 2, 'b' }]])";
- final String expectedResult = "EXPR$0=1; EXPR$1=a\n"
- + "EXPR$0=2; EXPR$1=b\n";
+ final String[] expectedResult = {
+ "EXPR$0=1; EXPR$1=a",
+ "EXPR$0=2; EXPR$1=b"
+ };
- sql(sql).returns(expectedResult)
+ sql(sql).returnsOrdered(expectedResult)
.explainContains(plan);
}
@@ -76,13 +78,13 @@ class SparkAdapterTest {
+ "from " + VALUES1 + "\n"
+ "where x < 2";
- final String expectedResult = "X=1; Y=a\n";
+ final String[] expectedResult = {"X=1; Y=a"};
final String plan = "PLAN="
+ "EnumerableCalc(expr#0..1=[{inputs}], expr#2=[2], expr#3=[<($t0, $t2)], proj#0..1=[{exprs}], $condition=[$t3])\n"
+ " EnumerableValues(tuples=[[{ 1, 'a' }, { 2, 'b' }]])\n";
- sql(sql).returns(expectedResult)
+ sql(sql).returnsUnordered(expectedResult)
.explainContains(plan);
}
@@ -94,10 +96,12 @@ class SparkAdapterTest {
+ "EnumerableAggregate(group=[{0, 1}])\n"
+ " EnumerableValues(tuples=[[{ 1, 'a' }, { 2, 'b' }, { 1, 'b' }, { 2, 'c' }, { 2, 'c' }]])\n\n";
- final String expectedResult = "X=1; Y=a\n"
- + "X=1; Y=b\n"
- + "X=2; Y=b\n"
- + "X=2; Y=c";
+ final String[] expectedResult = {
+ "X=1; Y=a",
+ "X=1; Y=b",
+ "X=2; Y=b",
+ "X=2; Y=c"
+ };
sql(sql).returnsUnordered(expectedResult)
.explainContains(plan);
@@ -118,8 +122,10 @@ class SparkAdapterTest {
+ " EnumerableAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}]], SUM_X=[$SUM0($0)], MIN_Y=[MIN($1)], MAX_Y=[MAX($1)], CNT_Y=[COUNT()], $g=[GROUPING($0, $1)])\n"
+ " EnumerableValues(tuples=[[{ 1, 'a' }, { 2, 'b' }, { 1, 'b' }, { 2, 'c' }, { 2, 'c' }]])\n";
- final String expectedResult = "SUM_X=2; MIN_Y=a; MAX_Y=b; CNT_Y=2; CNT_DIST_Y=2\n"
- + "SUM_X=6; MIN_Y=b; MAX_Y=c; CNT_Y=3; CNT_DIST_Y=2";
+ final String[] expectedResult = {
+ "SUM_X=2; MIN_Y=a; MAX_Y=b; CNT_Y=2; CNT_DIST_Y=2",
+ "SUM_X=6; MIN_Y=b; MAX_Y=c; CNT_Y=3; CNT_DIST_Y=2"
+ };
sql(sql).returnsUnordered(expectedResult)
.explainContains(plan);
@@ -233,13 +239,15 @@ class SparkAdapterTest {
+ " EnumerableValues(tuples=[[{ 1, 'a' }, { 2, 'b' }]])\n"
+ " EnumerableValues(tuples=[[{ 1, 'a' }, { 2, 'b' }, { 1, 'b' }, { 2, 'c' }, { 2, 'c' }]])\n";
- final String expectedResult = "X=1; Y=a\n"
- + "X=1; Y=a\n"
- + "X=1; Y=b\n"
- + "X=2; Y=b\n"
- + "X=2; Y=b\n"
- + "X=2; Y=c\n"
- + "X=2; Y=c";
+ final String[] expectedResult = {
+ "X=1; Y=a",
+ "X=1; Y=a",
+ "X=1; Y=b",
+ "X=2; Y=b",
+ "X=2; Y=b",
+ "X=2; Y=c",
+ "X=2; Y=c"
+ };
sql(sql).returnsUnordered(expectedResult)
.explainContains(plan);
@@ -257,10 +265,12 @@ class SparkAdapterTest {
+ " EnumerableValues(tuples=[[{ 1, 'a' }, { 2, 'b' }]])\n"
+ " EnumerableValues(tuples=[[{ 1, 'a' }, { 2, 'b' }, { 1, 'b' }, { 2, 'c' }, { 2, 'c' }]])\n";
- final String expectedResult = "X=1; Y=a\n"
- + "X=1; Y=b\n"
- + "X=2; Y=b\n"
- + "X=2; Y=c";
+ final String[] expectedResult = {
+ "X=1; Y=a",
+ "X=1; Y=b",
+ "X=2; Y=b",
+ "X=2; Y=c"
+ };
sql(sql).returnsUnordered(expectedResult)
.explainContains(plan);
@@ -278,8 +288,10 @@ class SparkAdapterTest {
+ " EnumerableValues(tuples=[[{ 1, 'a' }, { 2, 'b' }]])\n"
+ " EnumerableValues(tuples=[[{ 1, 'a' }, { 2, 'b' }, { 1, 'b' }, { 2, 'c' }, { 2, 'c' }]])\n";
- final String expectedResult = "X=1; Y=a\n"
- + "X=2; Y=b";
+ final String[] expectedResult = {
+ "X=1; Y=a",
+ "X=2; Y=b"
+ };
sql(sql).returnsUnordered(expectedResult)
.explainContains(plan);
@@ -380,11 +392,13 @@ class SparkAdapterTest {
+ " EnumerableValues(tuples=[[{ 1, 'a' }, { 2, 'b' }]])\n"
+ " EnumerableValues(tuples=[[{ 1, 'a' }, { 2, 'b' }, { 1, 'b' }, { 2, 'c' }, { 2, 'c' }]])\n\n";
- final String expectedResult = "Y=a; Z=a\n"
- + "Y=b; Z=a\n"
- + "Y=b; Z=b\n"
- + "Y=c; Z=b\n"
- + "Y=c; Z=b";
+ final String[] expectedResult = {
+ "Y=a; Z=a",
+ "Y=b; Z=a",
+ "Y=b; Z=b",
+ "Y=c; Z=b",
+ "Y=c; Z=b"
+ };
sql(sql).returnsUnordered(expectedResult)
.explainContains(plan);
@@ -403,11 +417,13 @@ class SparkAdapterTest {
+ " EnumerableValues(tuples=[[{ 1, 'a' }, { 2, 'b' }]])\n"
+ " EnumerableValues(tuples=[[{ 1, 'a' }, { 2, 'b' }, { 1, 'b' }, { 2, 'c' }, { 2, 'c' }]])\n\n";
- final String expectedResult = "Z=a\n"
- + "Z=a\n"
- + "Z=b\n"
- + "Z=b\n"
- + "Z=b";
+ final String[] expectedResult = {
+ "Z=a",
+ "Z=a",
+ "Z=b",
+ "Z=b",
+ "Z=b"
+ };
sql(sql).returnsUnordered(expectedResult)
.explainContains(plan);
@@ -477,8 +493,10 @@ class SparkAdapterTest {
+ "EnumerableCalc(expr#0..1=[{inputs}], expr#2=[Sarg[[3..4]]], expr#3=[SEARCH($t0, $t2)], proj#0..1=[{exprs}], $condition=[$t3])\n"
+ " EnumerableValues(tuples=[[{ 1, 'a' }, { 2, 'b' }, { 3, 'b' }, { 4, 'c' }, { 2, 'c' }]])\n\n";
- final String expectedResult = "X=3; Y=b\n"
- + "X=4; Y=c";
+ final String[] expectedResult = {
+ "X=3; Y=b",
+ "X=4; Y=c"
+ };
sql(sql).returnsUnordered(expectedResult)
.explainContains(plan);
@@ -493,8 +511,10 @@ class SparkAdapterTest {
+ "EnumerableCalc(expr#0..1=[{inputs}], expr#2=[Sarg[3, 4]], expr#3=[SEARCH($t0, $t2)], proj#0..1=[{exprs}], $condition=[$t3])\n"
+ " EnumerableValues(tuples=[[{ 1, 'a' }, { 2, 'b' }, { 3, 'b' }, { 4, 'c' }, { 2, 'c' }]])\n\n";
- final String expectedResult = "X=3; Y=b\n"
- + "X=4; Y=c";
+ final String[] expectedResult = {
+ "X=3; Y=b",
+ "X=4; Y=c"
+ };
sql(sql).returnsUnordered(expectedResult)
.explainContains(plan);
@@ -508,11 +528,13 @@ class SparkAdapterTest {
final String plan = "PLAN="
+ "EnumerableValues(tuples=[[{ 1, 'a' }, { 2, 'b' }, { 1, 'b' }, { 2, 'c' }, { 2, 'c' }]])\n\n";
- final String expectedResult = "X=1; Y=a\n"
- + "X=1; Y=b\n"
- + "X=2; Y=b\n"
- + "X=2; Y=c\n"
- + "X=2; Y=c";
+ final String[] expectedResult = {
+ "X=1; Y=a",
+ "X=1; Y=b",
+ "X=2; Y=b",
+ "X=2; Y=c",
+ "X=2; Y=c"
+ };
sql(sql).returnsUnordered(expectedResult)
.explainContains(plan);
@@ -541,11 +563,13 @@ class SparkAdapterTest {
+ "EnumerableCalc(expr#0..1=[{inputs}], expr#2=[Sarg[1, 2]], expr#3=[SEARCH($t0, $t2)], proj#0..1=[{exprs}], $condition=[$t3])\n"
+ " EnumerableValues(tuples=[[{ 1, 'a' }, { 2, 'b' }, { 1, 'b' }, { 2, 'c' }, { 2, 'c' }]])\n\n";
- final String expectedResult = "X=1; Y=a\n"
- + "X=1; Y=b\n"
- + "X=2; Y=b\n"
- + "X=2; Y=c\n"
- + "X=2; Y=c";
+ final String[] expectedResult = {
+ "X=1; Y=a",
+ "X=1; Y=b",
+ "X=2; Y=b",
+ "X=2; Y=c",
+ "X=2; Y=c"
+ };
sql(sql).returnsUnordered(expectedResult)
.explainContains(plan);
@@ -559,11 +583,13 @@ class SparkAdapterTest {
final String plan = "PLAN="
+ "EnumerableValues(tuples=[[{ 1, 'a' }, { 2, 'b' }, { 1, 'b' }, { 2, 'c' }, { 2, 'c' }]])\n\n";
- final String expectedResult = "X=1; Y=a\n"
- + "X=1; Y=b\n"
- + "X=2; Y=b\n"
- + "X=2; Y=c\n"
- + "X=2; Y=c";
+ final String[] expectedResult = {
+ "X=1; Y=a",
+ "X=1; Y=b",
+ "X=2; Y=b",
+ "X=2; Y=c",
+ "X=2; Y=c"
+ };
sql(sql).returnsUnordered(expectedResult)
.explainContains(plan);
@@ -601,10 +627,12 @@ class SparkAdapterTest {
+ " EnumerableCalc(expr#0..1=[{inputs}], expr#2=[1], expr#3=[>($t0, $t2)], proj#0..1=[{exprs}], $condition=[$t3])\n"
+ " EnumerableValues(tuples=[[{ 1, 'a' }, { 2, 'b' }, { 1, 'b' }, { 2, 'c' }, { 2, 'c' }]])\n";
- final String expectedResult = "X=2; Y=b\n"
- + "X=2; Y=b\n"
- + "X=2; Y=c\n"
- + "X=2; Y=c";
+ final String[] expectedResult = {
+ "X=2; Y=b",
+ "X=2; Y=b",
+ "X=2; Y=c",
+ "X=2; Y=c"
+ };
sql(sql).returnsUnordered(expectedResult)
.explainContains(plan);
@@ -643,8 +671,10 @@ class SparkAdapterTest {
+ "EnumerableCalc(expr#0..1=[{inputs}], expr#2=[1], expr#3=[+($t0, $t2)], expr#4=[>($t3, $t2)], X=[$t0], $condition=[$t4])\n"
+ " EnumerableValues(tuples=[[{ 1, 'a' }, { 2, 'b' }]])\n\n";
- final String expectedResult = "X=1\n"
- + "X=2";
+ final String[] expectedResult = {
+ "X=1",
+ "X=2"
+ };
sql(sql).returnsUnordered(expectedResult)
.explainContains(plan);
@@ -689,8 +719,10 @@ class SparkAdapterTest {
+ "EnumerableCalc(expr#0..1=[{inputs}], expr#2=[/($t0, $t0)], expr#3=[1], expr#4=[=($t2, $t3)], X=[$t0], $condition=[$t4])\n"
+ " EnumerableValues(tuples=[[{ 1, 'a' }, { 2, 'b' }]])\n\n";
- final String expectedResult = "X=1\n"
- + "X=2";
+ final String[] expectedResult = {
+ "X=1",
+ "X=2"
+ };
sql(sql).returnsUnordered(expectedResult)
.explainContains(plan);
diff --git a/testkit/src/main/java/org/apache/calcite/test/CalciteAssert.java b/testkit/src/main/java/org/apache/calcite/test/CalciteAssert.java
index b5a0adaf57..2d72e41447 100644
--- a/testkit/src/main/java/org/apache/calcite/test/CalciteAssert.java
+++ b/testkit/src/main/java/org/apache/calcite/test/CalciteAssert.java
@@ -406,9 +406,32 @@ public class CalciteAssert {
/** Checks that the {@link ResultSet} returns the given set of lines,
* optionally sorting.
*
+ * <p>The lines must not contain line breaks. If you have written
+ *
+ * <pre>{@code
+ * checkUnordered("line1\n"
+ * + "line2")
+ * }</pre>
+ *
+ * <p>you should instead write
+ *
+ * <pre>{@code
+ * checkUnordered("line1",
+ * "line2")
+ * }</pre>
+ *
+ * <p>so that result-checking is order-independent.
+ *
* @see Matchers#returnsUnordered(String...) */
static Consumer<ResultSet> checkResult(final boolean sort,
final boolean head, final String... lines) {
+ // Check that none of the lines contains a line break.
+ for (String line : lines) {
+ if (line.contains("\n")) {
+ throw new AssertionError("expected line has line breaks: " + line);
+ }
+ }
+
return resultSet -> {
try {
final List<String> expectedList = Lists.newArrayList(lines);
[calcite] 01/02: Code style: disallow '))' and ').' at the start of a line
Posted by jh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
jhyde pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/calcite.git
commit 74a2a18bcb87987e8cfc4e07df135ebae6f19b4c
Author: Julian Hyde <jh...@apache.org>
AuthorDate: Sat May 6 12:41:28 2023 -0700
Code style: disallow '))' and ').' at the start of a line
Disallow '))' and ').' at the start of a line (or preceded
only by whitespace); we already disallow '),' and ');'.
Autostyle now corrects
foo(1
).bar()
to
foo(1)
.bar()
Re-enable autostyle in test Java files.
---
build.gradle.kts | 3 ++-
.../calcite/adapter/cassandra/CassandraEnumerator.java | 4 ++--
.../apache/calcite/adapter/cassandra/CassandraSchema.java | 14 +++++++-------
.../org/apache/calcite/sql/validate/DelegatingScope.java | 6 ++----
.../org/apache/calcite/sql/validate/SqlValidatorUtil.java | 4 ++--
.../apache/calcite/rel/rel2sql/RelToSqlConverterTest.java | 8 ++++----
.../org/apache/calcite/sql2rel/RelFieldTrimmerTest.java | 14 ++++++--------
.../apache/calcite/test/enumerable/EnumerableJoinTest.java | 12 ++++++------
.../java/org/apache/calcite/adapter/spark/SparkRules.java | 9 ++++++---
9 files changed, 37 insertions(+), 37 deletions(-)
diff --git a/build.gradle.kts b/build.gradle.kts
index 7f3499e43b..38fa25f546 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -590,7 +590,8 @@ allprojects {
replaceRegex("Remove '// End file.java' trailer", "(?-m)\n// End [^\n]+\\.\\w+\\s*$", "")
replaceRegex("<p> should not be placed at the end of the line", "(?-m)\\s*+<p> *+\n \\* ", "\n *\n * <p>")
replaceRegex("Method parameter list should not end in whitespace or newline", "(?<!;)\\s+\\) \\{", ") {")
- replaceRegex("Method argument list should not end in whitespace or newline", "(?<!;)\\s+(\\)+[;,])", "$1")
+ replaceRegex("Method argument list should not end in whitespace or newline", "(?<!;)\\s+(\\)[);,])", "$1")
+ replaceRegex("Method argument list should not end in whitespace or newline", "(?<!;)(\\s+)(\\)+)[.]", "$2$1.")
replaceRegex("Long assignment should be broken after '='", "^([^/*\"\\n]*) = ([^@\\n]*)\\(\n( *)", "$1 =\n$3$2(")
replaceRegex("Long assignment should be broken after '='", "^([^/*\"\\n]*) = ([^@\\n]*)\\((.*,)\n( *)", "$1 =\n$4$2($3 ")
// Assume developer copy-pasted the link, and updated text only, so the url is old, and we replace it with the proper one
diff --git a/cassandra/src/main/java/org/apache/calcite/adapter/cassandra/CassandraEnumerator.java b/cassandra/src/main/java/org/apache/calcite/adapter/cassandra/CassandraEnumerator.java
index 98d30664a7..817c7c7126 100644
--- a/cassandra/src/main/java/org/apache/calcite/adapter/cassandra/CassandraEnumerator.java
+++ b/cassandra/src/main/java/org/apache/calcite/adapter/cassandra/CassandraEnumerator.java
@@ -127,8 +127,8 @@ class CassandraEnumerator implements Enumerator<Object> {
.mapToObj(i ->
tupleValue.get(i,
CodecRegistry.DEFAULT.codecFor(
- tupleValue.getType().getComponentTypes().get(i)))
- ).map(this::convertToEnumeratorObject)
+ tupleValue.getType().getComponentTypes().get(i))))
+ .map(this::convertToEnumeratorObject)
.map(Objects::requireNonNull) // "null" cannot appear inside collections
.toArray();
}
diff --git a/cassandra/src/main/java/org/apache/calcite/adapter/cassandra/CassandraSchema.java b/cassandra/src/main/java/org/apache/calcite/adapter/cassandra/CassandraSchema.java
index e5b4d8aa3a..31e22b0e3e 100644
--- a/cassandra/src/main/java/org/apache/calcite/adapter/cassandra/CassandraSchema.java
+++ b/cassandra/src/main/java/org/apache/calcite/adapter/cassandra/CassandraSchema.java
@@ -171,19 +171,19 @@ public class CassandraSchema extends AbstractSchema {
CQL_TO_SQL_TYPE.lookup(((SetType) dataType).getElementType());
fieldInfo.add(columnName,
- typeFactory.createMultisetType(
- typeFactory.createSqlType(multiSetInnerType), -1)
- ).nullable(true);
+ typeFactory.createMultisetType(
+ typeFactory.createSqlType(multiSetInnerType), -1))
+ .nullable(true);
} else if (dataType instanceof MapType) {
MapType columnType = (MapType) dataType;
SqlTypeName keyType = CQL_TO_SQL_TYPE.lookup(columnType.getKeyType());
SqlTypeName valueType = CQL_TO_SQL_TYPE.lookup(columnType.getValueType());
fieldInfo.add(columnName,
- typeFactory.createMapType(
- typeFactory.createSqlType(keyType),
- typeFactory.createSqlType(valueType))
- ).nullable(true);
+ typeFactory.createMapType(
+ typeFactory.createSqlType(keyType),
+ typeFactory.createSqlType(valueType)))
+ .nullable(true);
} else if (dataType instanceof TupleType) {
List<DataType> typeArgs = ((TupleType) dataType).getComponentTypes();
List<Map.Entry<String, RelDataType>> typesList =
diff --git a/core/src/main/java/org/apache/calcite/sql/validate/DelegatingScope.java b/core/src/main/java/org/apache/calcite/sql/validate/DelegatingScope.java
index aa079cb71a..13ebd978c7 100644
--- a/core/src/main/java/org/apache/calcite/sql/validate/DelegatingScope.java
+++ b/core/src/main/java/org/apache/calcite/sql/validate/DelegatingScope.java
@@ -510,10 +510,8 @@ public abstract class DelegatingScope implements SqlValidatorScope {
identifier, RESOURCE.columnNotFound(name));
}
final RelDataTypeField field0 =
- requireNonNull(
- step.rowType,
- () -> "rowType of step " + step.name
- ).getFieldList().get(step.i);
+ requireNonNull(step.rowType, () -> "rowType of step " + step.name)
+ .getFieldList().get(step.i);
final String fieldName = field0.getName();
switch (step.kind) {
case PEEK_FIELDS:
diff --git a/core/src/main/java/org/apache/calcite/sql/validate/SqlValidatorUtil.java b/core/src/main/java/org/apache/calcite/sql/validate/SqlValidatorUtil.java
index 53d2111ba3..ef52904d0d 100644
--- a/core/src/main/java/org/apache/calcite/sql/validate/SqlValidatorUtil.java
+++ b/core/src/main/java/org/apache/calcite/sql/validate/SqlValidatorUtil.java
@@ -829,9 +829,9 @@ public class SqlValidatorUtil {
return;
case ROLLUP:
case CUBE: {
- // GROUPING SETS ( (a), ROLLUP(c,b), CUBE(d,e) )
+ // GROUPING SETS ((a), ROLLUP(c,b), CUBE(d,e))
// is EQUIVALENT to
- // GROUPING SETS ( (a), (c,b), (b) ,(), (d,e), (d), (e) ).
+ // GROUPING SETS ((a), (c,b), (b) ,(), (d,e), (d), (e)).
// Expand all ROLLUP/CUBE nodes
List<ImmutableBitSet> operandBitSet =
analyzeGroupTuple(scope, groupAnalyzer,
diff --git a/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java b/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java
index cbc52712fc..f57c251a72 100644
--- a/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java
+++ b/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java
@@ -675,9 +675,8 @@ class RelToSqlConverterTest {
.join(JoinRelType.INNER,
b.call(SqlStdOperatorTable.EQUALS,
b.field(2, 0, "K"),
- b.field(2, 1, "K")
- )
- ).project(b.alias(b.field(1), "l_v"))
+ b.field(2, 1, "K")))
+ .project(b.alias(b.field(1), "l_v"))
.build();
// RelFieldTrimmer maybe build the RelNode.
relFn(fn).ok("SELECT \"t\".\"V\" AS \"l_v\"\n"
@@ -4218,7 +4217,8 @@ class RelToSqlConverterTest {
final String expectedClickHouse = "SELECT toMonday(`hire_date`)\n"
+ "FROM `foodmart`.`employee`";
final String expectedMssql = "SELECT CONVERT(DATETIME, CONVERT(VARCHAR(10), "
- + "DATEADD(day, - (6 + DATEPART(weekday, [hire_date] )) % 7, [hire_date] "
+ + "DATEADD(day, - (6 + DATEPART(weekday, [hire_date] "
+ + ")) % 7, [hire_date] "
+ "), 126))\n"
+ "FROM [foodmart].[employee]";
final String expectedMysql = "SELECT STR_TO_DATE(DATE_FORMAT(`hire_date` , '%x%v-1'), "
diff --git a/core/src/test/java/org/apache/calcite/sql2rel/RelFieldTrimmerTest.java b/core/src/test/java/org/apache/calcite/sql2rel/RelFieldTrimmerTest.java
index 8f10a2cef7..618e2d93b9 100644
--- a/core/src/test/java/org/apache/calcite/sql2rel/RelFieldTrimmerTest.java
+++ b/core/src/test/java/org/apache/calcite/sql2rel/RelFieldTrimmerTest.java
@@ -285,11 +285,10 @@ class RelFieldTrimmerTest {
HintStrategyTable.builder().hintStrategy("resource", HintPredicates.PROJECT).build());
final RelNode original =
builder.scan("EMP")
- .project(
- builder.field("EMPNO"),
+ .project(builder.field("EMPNO"),
builder.field("ENAME"),
- builder.field("DEPTNO")
- ).hints(projectHint)
+ builder.field("DEPTNO"))
+ .hints(projectHint)
.sort(builder.field("EMPNO"))
.project(builder.field("EMPNO"))
.build();
@@ -412,11 +411,10 @@ class RelFieldTrimmerTest {
HintStrategyTable.builder().hintStrategy("resource", HintPredicates.CALC).build());
final RelNode original =
builder.scan("EMP")
- .project(
- builder.field("EMPNO"),
+ .project(builder.field("EMPNO"),
builder.field("ENAME"),
- builder.field("DEPTNO")
- ).hints(calcHint)
+ builder.field("DEPTNO"))
+ .hints(calcHint)
.sort(builder.field("EMPNO"))
.project(builder.field("EMPNO"))
.build();
diff --git a/core/src/test/java/org/apache/calcite/test/enumerable/EnumerableJoinTest.java b/core/src/test/java/org/apache/calcite/test/enumerable/EnumerableJoinTest.java
index ccd311c831..81aef12448 100644
--- a/core/src/test/java/org/apache/calcite/test/enumerable/EnumerableJoinTest.java
+++ b/core/src/test/java/org/apache/calcite/test/enumerable/EnumerableJoinTest.java
@@ -156,12 +156,12 @@ class EnumerableJoinTest {
builder.equals(builder.field(2, 0, "name"),
builder.literal("ddd")))
.project(builder.field(0))
- .build()
- ).returnsUnordered(
- "empid=100",
- "empid=110",
- "empid=150",
- "empid=200");
+ .build())
+ .returnsUnordered(
+ "empid=100",
+ "empid=110",
+ "empid=150",
+ "empid=200");
}
/**
diff --git a/spark/src/main/java/org/apache/calcite/adapter/spark/SparkRules.java b/spark/src/main/java/org/apache/calcite/adapter/spark/SparkRules.java
index 1d8e0404cc..2ebda2879c 100644
--- a/spark/src/main/java/org/apache/calcite/adapter/spark/SparkRules.java
+++ b/spark/src/main/java/org/apache/calcite/adapter/spark/SparkRules.java
@@ -430,10 +430,13 @@ public abstract class SparkRules {
.distinct().count());
file.cache();
String s =
- file.groupBy((Function<String, String>) s1 -> s1.substring(0, Math.min(s1.length(), 1))
+ file.groupBy((Function<String, String>) s1 ->
+ s1.substring(0, Math.min(s1.length(), 1)))
//CHECKSTYLE: IGNORE 1
- ).map((Function<Tuple2<String, Iterable<String>>, Object>) pair ->
- pair._1() + ":" + Iterables.size(pair._2())).collect().toString();
+ .map((Function<Tuple2<String, Iterable<String>>, Object>) pair ->
+ pair._1() + ":" + Iterables.size(pair._2()))
+ .collect()
+ .toString();
System.out.print(s);
final JavaRDD<Integer> rdd =