Skip to content

Commit 5a42c2e

Browse files
authored
Perfect errMsg of unsupported join criteria in JoinNode
1 parent 8fb0b46 commit 5a42c2e

5 files changed

Lines changed: 26 additions & 15 deletions

File tree

integration-test/src/test/java/org/apache/iotdb/relational/it/db/it/IoTDBMultiTAGsWithAttributesTableIT.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@
4141
import static org.apache.iotdb.db.queryengine.plan.relational.planner.node.JoinNode.JoinType.INNER;
4242
import static org.apache.iotdb.db.queryengine.plan.relational.planner.node.JoinNode.JoinType.LEFT;
4343
import static org.apache.iotdb.db.queryengine.plan.relational.planner.node.JoinNode.JoinType.RIGHT;
44-
import static org.apache.iotdb.db.queryengine.plan.relational.planner.optimizations.JoinUtils.ONLY_SUPPORT_EQUI_JOIN;
4544
import static org.junit.Assert.fail;
4645

4746
/** In this IT, table has more than one TAGs and Attributes. */
@@ -2751,7 +2750,8 @@ public void asofLeftJoinTest() {
27512750

27522751
@Test
27532752
public void exceptionTest() {
2754-
String errMsg = TSStatusCode.SEMANTIC_ERROR.getStatusCode() + ": " + ONLY_SUPPORT_EQUI_JOIN;
2753+
String errMsg =
2754+
TSStatusCode.SEMANTIC_ERROR.getStatusCode() + ": " + "Unsupported Join creteria";
27552755
tableAssertTestFail(
27562756
"select * from table0 t0 full join table1 t1 on t0.num>t1.num", errMsg, DATABASE_NAME);
27572757

@@ -2773,6 +2773,15 @@ public void exceptionTest() {
27732773
errMsg,
27742774
DATABASE_NAME);
27752775

2776+
tableAssertTestFail(
2777+
"select * from table0 t0 full join table1 t1 on t0.time=4000", errMsg, DATABASE_NAME);
2778+
2779+
tableAssertTestFail(
2780+
"select * from table0 t0 left join table1 t1 on t0.time=4000", errMsg, DATABASE_NAME);
2781+
2782+
tableAssertTestFail(
2783+
"select * from table0 t0 right join table1 t1 on t0.time=4000", errMsg, DATABASE_NAME);
2784+
27762785
tableAssertTestFail(
27772786
"select * from table0 asof (tolerance 1s) left join table1 on table0.time<=table1.time",
27782787
"Tolerance in ASOF JOIN only supports INNER type now",

integration-test/src/test/java/org/apache/iotdb/relational/it/query/recent/subquery/correlated/IoTDBCorrelatedExistsSubqueryIT.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@
3434
import static org.apache.iotdb.db.it.utils.TestUtils.prepareTableData;
3535
import static org.apache.iotdb.db.it.utils.TestUtils.tableAssertTestFail;
3636
import static org.apache.iotdb.db.it.utils.TestUtils.tableResultSetEqualTest;
37-
import static org.apache.iotdb.db.queryengine.plan.relational.planner.optimizations.JoinUtils.ONLY_SUPPORT_EQUI_JOIN;
3837
import static org.apache.iotdb.relational.it.query.recent.subquery.SubqueryDataSetUtils.CREATE_SQLS;
3938
import static org.apache.iotdb.relational.it.query.recent.subquery.SubqueryDataSetUtils.DATABASE_NAME;
4039
import static org.apache.iotdb.relational.it.query.recent.subquery.SubqueryDataSetUtils.NUMERIC_MEASUREMENTS;
@@ -389,8 +388,8 @@ public void testCorrelatedExistsSubqueryInSelectClause() {
389388

390389
@Test
391390
public void testNonComparisonFilterInCorrelatedExistsSubquery() {
392-
String errMsg = TSStatusCode.SEMANTIC_ERROR.getStatusCode() + ": " + ONLY_SUPPORT_EQUI_JOIN;
393-
// Legality check: Correlated subquery with Non-equality comparison is not support for now.
391+
String errMsg =
392+
TSStatusCode.SEMANTIC_ERROR.getStatusCode() + ": " + "Unsupported Join creteria";
394393
tableAssertTestFail(
395394
"select s1 from table1 t1 where exists(select s1 from table3 t3 where t1.s1 > t3.s1)",
396395
errMsg,

integration-test/src/test/java/org/apache/iotdb/relational/it/query/recent/subquery/correlated/IoTDBCorrelatedScalarSubqueryIT.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.apache.iotdb.it.framework.IoTDBTestRunner;
2424
import org.apache.iotdb.itbase.category.TableClusterIT;
2525
import org.apache.iotdb.itbase.category.TableLocalStandaloneIT;
26+
import org.apache.iotdb.rpc.TSStatusCode;
2627

2728
import org.junit.AfterClass;
2829
import org.junit.BeforeClass;
@@ -369,26 +370,28 @@ public void testCorrelatedScalarSubqueryInSelectClause() {
369370

370371
@Test
371372
public void testNonEqualityComparisonFilterInCorrelatedScalarSubquery() {
373+
String errMsg =
374+
TSStatusCode.SEMANTIC_ERROR.getStatusCode() + ": " + "Unsupported Join creteria";
372375
// Legality check: Correlated subquery with Non-equality comparison is not support for now.
373376
tableAssertTestFail(
374377
"select s1 from table1 t1 where s1 > (select max(s1) from table3 t3 where t1.s1 > t3.s1)",
375-
"For now, FullOuterJoin and LeftJoin only support EquiJoinClauses",
378+
errMsg,
376379
DATABASE_NAME);
377380
tableAssertTestFail(
378381
"select s1 from table1 t1 where s1 > (select max(s1) from table3 t3 where t1.s1 >= t3.s1)",
379-
"For now, FullOuterJoin and LeftJoin only support EquiJoinClauses",
382+
errMsg,
380383
DATABASE_NAME);
381384
tableAssertTestFail(
382385
"select s1 from table1 t1 where s1 > (select max(s1) from table3 t3 where t1.s1 < t3.s1)",
383-
"For now, FullOuterJoin and LeftJoin only support EquiJoinClauses",
386+
errMsg,
384387
DATABASE_NAME);
385388
tableAssertTestFail(
386389
"select s1 from table1 t1 where s1 > (select max(s1) from table3 t3 where t1.s1 <= t3.s1)",
387-
"For now, FullOuterJoin and LeftJoin only support EquiJoinClauses",
390+
errMsg,
388391
DATABASE_NAME);
389392
tableAssertTestFail(
390393
"select s1 from table1 t1 where s1 > (select max(s1) from table3 t3 where t1.s1 != t3.s1)",
391-
"For now, FullOuterJoin and LeftJoin only support EquiJoinClauses",
394+
errMsg,
392395
DATABASE_NAME);
393396
}
394397

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/JoinUtils.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@
4242
import static org.apache.iotdb.db.queryengine.plan.relational.sql.ast.BooleanLiteral.TRUE_LITERAL;
4343

4444
public class JoinUtils {
45-
public static final String ONLY_SUPPORT_EQUI_JOIN =
46-
"For now, FullOuterJoin and LeftJoin only support EquiJoinClauses";
45+
public static final String UNSUPPORTED_JOIN_CRITERIA =
46+
"Unsupported Join creteria [%s] after predicate push down";
4747

4848
private JoinUtils() {}
4949

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/PushPredicateIntoTableScan.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@
120120
import static org.apache.iotdb.db.queryengine.plan.relational.planner.node.JoinNode.JoinType.INNER;
121121
import static org.apache.iotdb.db.queryengine.plan.relational.planner.node.JoinNode.JoinType.LEFT;
122122
import static org.apache.iotdb.db.queryengine.plan.relational.planner.node.JoinNode.JoinType.RIGHT;
123-
import static org.apache.iotdb.db.queryengine.plan.relational.planner.optimizations.JoinUtils.ONLY_SUPPORT_EQUI_JOIN;
123+
import static org.apache.iotdb.db.queryengine.plan.relational.planner.optimizations.JoinUtils.UNSUPPORTED_JOIN_CRITERIA;
124124
import static org.apache.iotdb.db.queryengine.plan.relational.planner.optimizations.JoinUtils.extractJoinPredicate;
125125
import static org.apache.iotdb.db.queryengine.plan.relational.planner.optimizations.JoinUtils.joinEqualityExpression;
126126
import static org.apache.iotdb.db.queryengine.plan.relational.planner.optimizations.JoinUtils.processInnerJoin;
@@ -753,11 +753,11 @@ public PlanNode visitJoin(JoinNode node, RewriteContext context) {
753753

754754
equiJoinClauses.add(new JoinNode.EquiJoinClause(leftSymbol, rightSymbol));
755755
} else {
756-
if (conjunct.equals(TRUE_LITERAL)) {
756+
if (conjunct.equals(TRUE_LITERAL) && node.getAsofCriteria().isPresent()) {
757757
continue;
758758
}
759759
if (node.getJoinType() != INNER) {
760-
throw new SemanticException(ONLY_SUPPORT_EQUI_JOIN);
760+
throw new SemanticException(String.format(UNSUPPORTED_JOIN_CRITERIA, conjunct));
761761
}
762762
joinFilterBuilder.add(conjunct);
763763
}

0 commit comments

Comments
 (0)