This is an automated email from the ASF dual-hosted git repository.
mihaibudiu pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/calcite.git
The following commit(s) were added to refs/heads/main by this push:
new bca2eef42a [CALCITE-7681] SqlDatetimeSubtractionOperator drops
parentheses around compound interval expressions
bca2eef42a is described below
commit bca2eef42ab0208b87fcfe8e9164402c9f5e1770
Author: Matthew Bayer <[email protected]>
AuthorDate: Thu Jul 30 13:00:50 2026 -0400
[CALCITE-7681] SqlDatetimeSubtractionOperator drops parentheses around
compound interval expressions
---
core/src/main/java/org/apache/calcite/sql/SqlDialect.java | 4 ++--
.../apache/calcite/rel/rel2sql/RelToSqlConverterTest.java | 14 ++++++++++++++
2 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/core/src/main/java/org/apache/calcite/sql/SqlDialect.java
b/core/src/main/java/org/apache/calcite/sql/SqlDialect.java
index eef1c386d5..82e12c93d2 100644
--- a/core/src/main/java/org/apache/calcite/sql/SqlDialect.java
+++ b/core/src/main/java/org/apache/calcite/sql/SqlDialect.java
@@ -496,9 +496,9 @@ public void unparseNumericLiteral(SqlWriter writer,
public void unparseSqlDatetimeArithmetic(SqlWriter writer,
SqlCall call, SqlKind sqlKind, int leftPrec, int rightPrec) {
final SqlWriter.Frame frame = writer.startList("(", ")");
- call.operand(0).unparse(writer, leftPrec, rightPrec);
+ call.operand(0).unparse(writer, leftPrec,
call.getOperator().getLeftPrec());
writer.sep((SqlKind.PLUS == sqlKind) ? "+" : "-");
- call.operand(1).unparse(writer, leftPrec, rightPrec);
+ call.operand(1).unparse(writer, call.getOperator().getRightPrec(),
rightPrec);
writer.endList(frame);
// Only two parameters are present normally.
// Checking parameter count to prevent errors.
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 b09f299f84..f0103c90a7 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
@@ -836,6 +836,20 @@ private static RelNode sqlToRel(String sql, SchemaPlus
defaultSchema,
.withOracle().ok(expectedOracle);
}
+ @Test void testDatetimeSubtractionWithCompoundInterval() {
+ final String query = "select CURRENT_DATE"
+ + " - (INTERVAL '3' YEAR + INTERVAL '3' YEAR) as d";
+ final String expected = "SELECT (CURRENT_DATE"
+ + " - (INTERVAL '3' YEAR + INTERVAL '3' YEAR)) AS \"D\"\n"
+ + "FROM (VALUES (0)) AS \"t\" (\"ZERO\")";
+ final String expectedSpark = "SELECT (CURRENT_DATE"
+ + " - (INTERVAL '3' YEAR + INTERVAL '3' YEAR)) `D`\n"
+ + "FROM (VALUES (0)) `t` (`ZERO`)";
+ sql(query)
+ .ok(expected)
+ .withSpark().ok(expectedSpark);
+ }
+
@Test void testPivotToSqlFromProductTable() {
String query = "select * from (\n"
+ " select \"shelf_width\", \"net_weight\", \"product_id\"\n"