Skip to content

Commit 49bca0c

Browse files
committed
test(api): tighten lazy plan assertions and fix misplaced SHOW TABLES case
Move the SHOW TABLES case out of testNonQueryStatementsBlockedByParser and into testNonQueryStatementsBlockedByWhitelist, where its error message 'Only query statements are supported' actually belongs. The parser accepts SHOW TABLES; the whitelist blocks it. Replace trivial LogicalFilter / LogicalProject / LogicalAggregate substring checks in UnifiedSqlSpecTest with assertions that prove the specific feature under test: double-quoted string literal, MATCH as a non-reserved function, GROUP BY ordinal resolution, boolean-to-integer cast folding, and BABEL's string-to-integer coercion. Use AS aliases to pin field names and avoid Calcite's EXPR$0 placeholders. Signed-off-by: Chen Dai <daichen@amazon.com>
1 parent b0be1f6 commit 49bca0c

2 files changed

Lines changed: 13 additions & 14 deletions

File tree

api/src/test/java/org/opensearch/sql/api/UnifiedQueryPlannerSqlTest.java

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,9 @@ public void testNonQueryStatementsBlockedByWhitelist() {
237237
MERGE INTO catalog.employees AS t
238238
USING (SELECT 99 AS id) AS s ON t.id = s.id
239239
WHEN MATCHED THEN UPDATE SET name = 'hacked'\
240+
""",
241+
"""
242+
SHOW TABLES\
240243
""")
241244
.forEach(
242245
sql ->
@@ -245,7 +248,6 @@ public void testNonQueryStatementsBlockedByWhitelist() {
245248

246249
@Test
247250
public void testNonQueryStatementsBlockedByParser() {
248-
// Babel parser rejects CREATE MATERIALIZED VIEW
249251
givenInvalidQuery(
250252
"""
251253
CREATE MATERIALIZED VIEW mv AS
@@ -254,12 +256,5 @@ SELECT department, count(*)
254256
GROUP BY department\
255257
""")
256258
.assertErrorMessage("Encountered");
257-
258-
// Babel parser accepts SHOW TABLES but it's blocked by query-type whitelist
259-
givenInvalidQuery(
260-
"""
261-
SHOW TABLES\
262-
""")
263-
.assertErrorMessage("Only query statements are supported");
264259
}
265260
}

api/src/test/java/org/opensearch/sql/api/UnifiedSqlSpecTest.java

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,14 @@ public void backtickQuotedIdentifiers() {
4848

4949
@Test
5050
public void doubleQuotedStringLiteral() {
51-
givenQuery("SELECT \"Hello\" FROM employees").assertPlanContains("LogicalProject");
51+
givenQuery("SELECT \"Hello\" AS greeting FROM employees")
52+
.assertPlanContains("LogicalProject(greeting=['Hello'])");
5253
}
5354

5455
@Test
5556
public void matchNotReserved() {
5657
givenQuery("SELECT * FROM employees WHERE match(name, 'Hattie')")
57-
.assertPlanContains("LogicalFilter");
58+
.assertPlanContains("match(MAP('field', $1), MAP('query', 'Hattie'))");
5859
}
5960

6061
@Test
@@ -80,18 +81,21 @@ public void groupByAlias() {
8081

8182
@Test
8283
public void groupByOrdinal() {
83-
givenQuery("SELECT name, COUNT(*) FROM employees GROUP BY 1")
84-
.assertPlanContains("LogicalAggregate");
84+
givenQuery("SELECT name, COUNT(*) AS cnt FROM employees GROUP BY 1")
85+
.assertPlanContains("LogicalAggregate(group=[{0}], cnt=[COUNT()])")
86+
.assertPlanContains("LogicalProject(name=[$1])");
8587
}
8688

8789
@Test
8890
public void castBooleanToInteger() {
89-
givenQuery("SELECT CAST(true AS INTEGER) FROM employees").assertPlanContains("LogicalProject");
91+
givenQuery("SELECT CAST(true AS INTEGER) AS val FROM employees")
92+
.assertPlanContains("LogicalProject(val=[1])");
9093
}
9194

9295
@Test
9396
public void integerComparedToString() {
94-
givenQuery("SELECT * FROM employees WHERE age > '30'").assertPlanContains("LogicalFilter");
97+
givenQuery("SELECT * FROM employees WHERE age > '30'")
98+
.assertPlanContains("condition=[>($2, CAST('30'):INTEGER NOT NULL)]");
9599
}
96100

97101
@Test

0 commit comments

Comments
 (0)