diff --git a/pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/queries/ResourceBasedQueriesTest.java b/pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/queries/ResourceBasedQueriesTest.java index 9e6daa294f33..b14e0dc10fbf 100644 --- a/pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/queries/ResourceBasedQueriesTest.java +++ b/pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/queries/ResourceBasedQueriesTest.java @@ -66,6 +66,7 @@ public class ResourceBasedQueriesTest extends QueryRunnerTestBase { "SelectExpressions.json", "ValueExpressions.json", "NumericTypes.json", + "TableExpressions.json", "CharacterTypes.json", "BinaryTypes.json", "TimeTypes.json", diff --git a/pinot-query-runtime/src/test/resources/queries/TableExpressions.json b/pinot-query-runtime/src/test/resources/queries/TableExpressions.json new file mode 100644 index 000000000000..a722a7bd9342 --- /dev/null +++ b/pinot-query-runtime/src/test/resources/queries/TableExpressions.json @@ -0,0 +1,110 @@ +{ + "where_clause_tests": { + "psql": "7.2.2", + "tables": { + "tbl": { + "schema": [ + {"name": "strCol", "type": "STRING"}, + {"name": "intCol", "type": "INT"} + ], + "inputs": [ + ["foo", 1], + ["bar", 2], + ["alice", 42], + ["bob", 196883] + ] + } + }, + "queries": [ + { "sql": "SELECT * FROM {tbl} WHERE intCol > 5" }, + { "sql": "SELECT * FROM {tbl} WHERE strCol IN ('foo', 'bar')" }, + { "sql": "SELECT * FROM {tbl} WHERE intCol IN (196883, 42)" }, + { "sql": "SELECT * FROM {tbl} WHERE intCol NOT IN (196883, 42) AND strCol IN ('alice')" }, + { "sql": "SELECT * FROM {tbl} WHERE strCol IN (SELECT strCol FROM {tbl} WHERE intCol > 100)" }, + { "sql": "SELECT * FROM {tbl} WHERE intCol < (SELECT SUM(intCol) FROM {tbl} AS b WHERE strCol BETWEEN 'bar' AND 'foo')" }, + { "sql": "SELECT * FROM {tbl} WHERE intCol BETWEEN 0 AND 100 AND strCol BETWEEN 'bar' AND 'foo'" }, + { "sql": "SELECT * FROM {tbl} WHERE intCol IN (SELECT a.intCol FROM {tbl} AS a JOIN {tbl} AS b ON a.strCol = b.strCol WHERE MOD(a.intCol, 2) = MOD(b.intCol, 2))" }, + { + "ignored": true, + "comments": "Relation Decorrelator not supported", + "sql": "SELECT * FROM {tbl} AS a WHERE a.strCol IN (SELECT b.strCol FROM {tbl} AS b WHERE b.intCol = a.intCol + 1)" + }, + { + "ignored": true, + "comments": "BETWEEN with a non-deterministic single-value result from sub-query is not supported", + "sql": "SELECT * FROM {tbl} AS a WHERE a.intCol BETWEEN (SELECT b.intCol FROM {tbl} AS b WHERE b.intCol = a.intCol + 1) AND 100" + }, + { + "ignored": true, + "comments": "Relation Decorrelator not supported", + "sql": "SELECT * FROM {tbl} AS a WHERE a.intCol BETWEEN (SELECT MIN(b.intCol) FROM {tbl} AS b WHERE b.intCol = a.intCol + 1) AND 100" + }, + { + "ignored": true, + "comments": "Relation Decorrelator not supported", + "sql": "SELECT * FROM {tbl} AS a WHERE EXISTS (SELECT strCol FROM {tbl} AS b WHERE b.intCol = a.intCol + 1)" + }, + { + "ignored": true, + "comments": "Relation Decorrelator not supported", + "sql": "SELECT * FROM {tbl} AS a WHERE NOT EXISTS (SELECT strCol FROM {tbl} AS b WHERE b.intCol = a.intCol + 1)" + }, + { + "ignored": true, + "comments": "Relation Decorrelator not supported", + "sql": "SELECT * FROM {tbl} AS a WHERE (SELECT count(*) FROM {tbl} AS b WHERE b.intCol = a.intCol + 1) > 0" + } + ] + }, + "group_by_and_having_tests": { + "psql": "7.2.3", + "tables": { + "tbl1": { + "schema": [ + {"name": "strCol", "type": "STRING"}, + {"name": "intCol", "type": "INT"} + ], + "inputs": [ + ["a", 3], + ["b", 2], + ["c", 5], + ["a", 1] + ] + }, + "tbl2": { + "schema": [ + {"name": "strCol1", "type": "STRING"}, + {"name": "strCol2", "type": "STRING"}, + {"name": "intCol", "type": "INT"} + ], + "inputs": [ + ["a", "foo", 1], + ["a", "bar", 2], + ["b", "alice", 42], + ["b", "bob", 196883] + ] + } + }, + "queries": [ + { "sql": "SELECT strCol FROM {tbl1} GROUP BY strCol" }, + { "sql": "SELECT strCol FROM {tbl1} GROUP BY strCol, intCol" }, + { "sql": "SELECT strCol, intCol FROM {tbl1} GROUP BY strCol, intCol" }, + { "sql": "SELECT strCol, SUM(intCol) FROM {tbl1} GROUP BY strCol" }, + { "sql": "SELECT strCol, b.strCol2, (sum(a.intCol) * b.intCol) AS colAlias FROM {tbl1} a INNER JOIN {tbl2} b ON a.strCol = b.strCol1 GROUP BY strCol, b.strCol2, b.intCol" }, + { "sql": "SELECT MOD(b.intCol, 2), sum(a.intCol) AS colAlias FROM {tbl1} a INNER JOIN {tbl2} b ON a.strCol = b.strCol1 GROUP BY MOD(b.intCol, 2)" }, + { "sql": "SELECT strCol, SUM(intCol) FROM {tbl1} GROUP BY strCol HAVING SUM(intCol) > 3" }, + { "sql": "SELECT strCol, SUM(intCol) FROM {tbl1} GROUP BY strCol HAVING AVG(intCol) > 1 AND MIN(intCol) < 10" }, + { "sql": "SELECT strCol, b.strCol2, (sum(a.intCol) * b.intCol) AS colAlias FROM {tbl1} a INNER JOIN {tbl2} b ON a.strCol = b.strCol1 GROUP BY strCol, b.strCol2, b.intCol HAVING avg(a.intCol) < 100" }, + { + "ignored": true, + "comment": "correlation is not supported. ALL is only supported if expand = false", + "sql": "SELECT strCol, SUM(intCol) FROM {tbl1} GROUP BY strCol HAVING AVG(intCol) >= ALL (SELECT AVG(intCol) FROM {tbl1} GROUP BY strCol)" + }, + { + "ignored": true, + "comment": "correlation is not supported. SOME is only supported if expand = false", + "sql": "SELECT strCol, SUM(intCol) FROM {tbl1} GROUP BY strCol HAVING AVG(intCol) >= ANY (SELECT AVG(intCol) FROM {tbl1} GROUP BY strCol)" + } + ] + } +}