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 1c75afb2e7 Test cases for some very old bugs now fixed
1c75afb2e7 is described below
commit 1c75afb2e71191a080693e328c7dfade54fb5055
Author: Mihai Budiu <[email protected]>
AuthorDate: Wed Aug 5 09:59:43 2026 -0700
Test cases for some very old bugs now fixed
Signed-off-by: Mihai Budiu <[email protected]>
---
.../src/main/java/org/apache/calcite/util/Bug.java | 19 --------
.../apache/calcite/test/SqlToRelConverterTest.java | 5 ---
.../org/apache/calcite/test/SqlValidatorTest.java | 25 +++++++++++
.../apache/calcite/test/SqlToRelConverterTest.xml | 4 +-
.../apache/calcite/sql/parser/SqlParserTest.java | 51 +++++++++-------------
.../org/apache/calcite/test/SqlOperatorTest.java | 44 ++-----------------
6 files changed, 51 insertions(+), 97 deletions(-)
diff --git a/core/src/main/java/org/apache/calcite/util/Bug.java
b/core/src/main/java/org/apache/calcite/util/Bug.java
index 8f23ce7b1c..cbdc1980a4 100644
--- a/core/src/main/java/org/apache/calcite/util/Bug.java
+++ b/core/src/main/java/org/apache/calcite/util/Bug.java
@@ -54,8 +54,6 @@ public abstract class Bug {
public static final boolean DT239_FIXED = false;
- public static final boolean DT785_FIXED = false;
-
/**
* Whether <a href="http://issues.eigenbase.org/browse/FRG-377">issue
* FRG-377: Regular character set identifiers defined in SQL:2008 spec like
@@ -64,17 +62,6 @@ public abstract class Bug {
*/
public static final boolean FRG377_FIXED = false;
- /**
- * Whether dtbug1684 "CURRENT_DATE not implemented in fennel calc" is fixed.
- */
- public static final boolean DT1684_FIXED = false;
-
- /**
- * Whether <a href="http://issues.eigenbase.org/browse/FRG-73">issue FRG-73:
- * miscellaneous bugs with nested comments</a> is fixed.
- */
- public static final boolean FRG73_FIXED = false;
-
/**
* Whether <a href="http://issues.eigenbase.org/browse/FRG-78">issue FRG-78:
* collation clause should be on expression instead of identifier</a> is
@@ -82,12 +69,6 @@ public abstract class Bug {
*/
public static final boolean FRG78_FIXED = false;
- /**
- * Whether <a href="http://issues.eigenbase.org/browse/FRG-189">issue
- * FRG-189: FarragoAutoVmOperatorTest.testSelect fails</a> is fixed.
- */
- public static final boolean FRG189_FIXED = false;
-
/**
* Whether <a href="http://issues.eigenbase.org/browse/FRG-254">issue
* FRG-254: environment-dependent failure for
diff --git
a/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
b/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
index 6ce401502c..928c29850a 100644
--- a/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
+++ b/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
@@ -55,7 +55,6 @@
import org.apache.calcite.sql.validate.SqlValidatorUtil;
import org.apache.calcite.sql.validate.implicit.TypeCoercionImpl;
import org.apache.calcite.test.catalog.MockCatalogReaderExtended;
-import org.apache.calcite.util.Bug;
import org.apache.calcite.util.TestUtil;
import org.apache.calcite.util.Util;
@@ -3123,10 +3122,6 @@ void checkCorrelatedMapSubQuery(boolean expand) {
}
@Test void testInterval() {
- // temporarily disabled per DTbug 1212
- if (!Bug.DT785_FIXED) {
- return;
- }
final String sql =
"values(cast(interval '1' hour as interval hour to second))";
sql(sql).ok();
diff --git a/core/src/test/java/org/apache/calcite/test/SqlValidatorTest.java
b/core/src/test/java/org/apache/calcite/test/SqlValidatorTest.java
index 2e472a968c..4088b0556b 100644
--- a/core/src/test/java/org/apache/calcite/test/SqlValidatorTest.java
+++ b/core/src/test/java/org/apache/calcite/test/SqlValidatorTest.java
@@ -10506,6 +10506,31 @@ void testGroupExpressionEquivalenceParams() {
+ "on orders.productid = products_temporal.productid").ok();
}
+ /** Test cases for [FRG-189]. */
+ @Test void testScalarSubQueryTypeInSelectList() {
+ sql("SELECT *, (SELECT * FROM (VALUES(1))) FROM (VALUES(2))")
+ .type("RecordType(INTEGER NOT NULL EXPR$0, INTEGER EXPR$1) NOT NULL");
+ sql("SELECT *, (SELECT * FROM (VALUES(CAST(10 as BIGINT))))\n"
+ + "FROM (VALUES(CAST(10 as bigint)))")
+ .type("RecordType(BIGINT NOT NULL EXPR$0, BIGINT EXPR$1) NOT NULL");
+ sql("SELECT *, (SELECT * FROM (VALUES(10.5))) FROM (VALUES(10.5))")
+ .type("RecordType(DECIMAL(3, 1) NOT NULL EXPR$0,"
+ + " DECIMAL(3, 1) EXPR$1) NOT NULL");
+ sql("SELECT *, (SELECT * FROM (VALUES('this is a char')))\n"
+ + "FROM (VALUES('this is a char too'))")
+ .type("RecordType(CHAR(18) NOT NULL EXPR$0, CHAR(14) EXPR$1) NOT
NULL");
+ sql("SELECT *, (SELECT * FROM (VALUES(true))) FROM (values(false))")
+ .type("RecordType(BOOLEAN NOT NULL EXPR$0, BOOLEAN EXPR$1) NOT NULL");
+ sql("SELECT *, (SELECT * FROM (VALUES(cast('abcd' as varchar(10)))))\n"
+ + "FROM (VALUES(CAST('abcd' as varchar(10))))")
+ .type("RecordType(VARCHAR(10) NOT NULL EXPR$0,"
+ + " VARCHAR(10) EXPR$1) NOT NULL");
+ sql("SELECT *, (SELECT * FROM (VALUES(TIMESTAMP '2006-01-01 12:00:05')))\n"
+ + "FROM (VALUES(TIMESTAMP '2006-01-01 12:00:05'))")
+ .type("RecordType(TIMESTAMP(0) NOT NULL EXPR$0,"
+ + " TIMESTAMP(0) EXPR$1) NOT NULL");
+ }
+
@Test void testScalarSubQuery() {
sql("SELECT ename,(select name from dept where deptno=1) FROM emp").ok();
sql("SELECT ename,^(select losal, hisal from salgrade where grade=1)^ FROM
emp")
diff --git
a/core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
b/core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
index 6e98c11baa..2cb1a10933 100644
--- a/core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
+++ b/core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
@@ -4007,9 +4007,7 @@ LogicalProject(EXPR$0=[1])
</Resource>
<Resource name="plan">
<![CDATA[
-ProjectRel(EXPR$0=[$0])
- ProjectRel(EXPR$0=[3600000])
- OneRowRel
+LogicalValues(tuples=[[{ 3600000 }]])
]]>
</Resource>
</TestCase>
diff --git
a/testkit/src/main/java/org/apache/calcite/sql/parser/SqlParserTest.java
b/testkit/src/main/java/org/apache/calcite/sql/parser/SqlParserTest.java
index beae2eb7bf..3fbe5af9be 100644
--- a/testkit/src/main/java/org/apache/calcite/sql/parser/SqlParserTest.java
+++ b/testkit/src/main/java/org/apache/calcite/sql/parser/SqlParserTest.java
@@ -4388,10 +4388,8 @@ void checkPeriodPredicate(Checker checker) {
.ok("VALUES (ROW(2))");
// end of multiline comment without start
- if (Bug.FRG73_FIXED) {
- sql("values (1 */ 2)")
- .fails("xx");
- }
+ sql("values (1 ^*/^ 2)")
+ .fails("(?s)Encountered \"\\*/\" at .*");
// SQL:2003, 5.2, syntax rule #10 "Within a <bracket comment context>,
// any <solidus> immediately followed by an <asterisk> without any
@@ -4399,34 +4397,27 @@ void checkPeriodPredicate(Checker checker) {
// comment introducer> for a <separator> that is a <bracketed
// comment>".
- // comment inside a comment
- // Spec is unclear what should happen, but currently it crashes the
- // parser, and that's bad
- if (Bug.FRG73_FIXED) {
- sql("values (1 + /* comment /* inner comment */ */ 2)").ok("xx");
- }
-
- // single-line comment inside multiline comment is illegal
- //
- // SQL-2003, 5.2: "Note 63 - Conforming programs should not place
- // <simple comment> within a <bracketed comment> because if such a
- // <simple comment> contains the sequence of characters "*/" without
- // a preceding "/*" in the same <simple comment>, it will prematurely
- // terminate the containing <bracketed comment>.
- if (Bug.FRG73_FIXED) {
- final String sql = "values /* multiline contains -- singline */\n"
- + " (1)";
- sql(sql).fails("xxx");
- }
+ // Calcite does not nest bracketed comments (SQL:2003, 5.2, syntax rule
+ // #10 requires nesting); the first "*/" ends the comment, so the
+ // second "*/" is a stray token.
+ sql("values (1 ^+^ /* comment /* inner comment */ */ 2)")
+ .fails("(?s)Encountered \"\\+ \\*/\" at .*");
+
+ // A single-line comment within a multiline comment is treated as
+ // comment text, per SQL-2003, 5.2: "Note 63 - Conforming programs
+ // should not place <simple comment> within a <bracketed comment>
+ // because if such a <simple comment> contains the sequence of
+ // characters "*/" without a preceding "/*" in the same <simple
+ // comment>, it will prematurely terminate the containing
+ // <bracketed comment>.
+ sql("values /* multiline contains -- singline */\n"
+ + " (1)")
+ .ok("VALUES (ROW(1))");
// non-terminated multi-line comment inside single-line comment
- if (Bug.FRG73_FIXED) {
- // Test should fail, and it does, but it should give "*/" as the
- // erroneous token.
- final String sql = "values ( -- rest of line /* a comment\n"
- + " 1, ^*/^ 2)";
- sql(sql).fails("Encountered \"/\\*\" at");
- }
+ sql("values ( -- rest of line /* a comment\n"
+ + " 1, ^*/^ 2)")
+ .fails("(?s)Encountered \"\\*/\" at .*");
sql("values (1 + /* comment -- rest of line\n"
+ " rest of comment */ 2)")
diff --git a/testkit/src/main/java/org/apache/calcite/test/SqlOperatorTest.java
b/testkit/src/main/java/org/apache/calcite/test/SqlOperatorTest.java
index 387915bca6..f0ad6867fa 100644
--- a/testkit/src/main/java/org/apache/calcite/test/SqlOperatorTest.java
+++ b/testkit/src/main/java/org/apache/calcite/test/SqlOperatorTest.java
@@ -2479,40 +2479,6 @@ void testCastToBoolean(CastType castType,
SqlOperatorFixture f) {
final SqlOperatorFixture f = fixture();
f.check("select * from (values(1))", SqlTests.INTEGER_TYPE_CHECKER, 1);
- // Check return type on scalar sub-query in select list. Note return
- // type is always nullable even if sub-query select value is NOT NULL.
- // Bug FRG-189 causes this test to fail only in SqlOperatorTest; not
- // in subtypes.
- if (Bug.FRG189_FIXED) {
- f.checkType("SELECT *,\n"
- + " (SELECT * FROM (VALUES(1)))\n"
- + "FROM (VALUES(2))",
- "RecordType(INTEGER NOT NULL EXPR$0, INTEGER EXPR$1) NOT NULL");
- f.checkType("SELECT *,\n"
- + " (SELECT * FROM (VALUES(CAST(10 as BIGINT))))\n"
- + "FROM (VALUES(CAST(10 as bigint)))",
- "RecordType(BIGINT NOT NULL EXPR$0, BIGINT EXPR$1) NOT NULL");
- f.checkType("SELECT *,\n"
- + " (SELECT * FROM (VALUES(10.5)))\n"
- + "FROM (VALUES(10.5))",
- "RecordType(DECIMAL(3, 1) NOT NULL EXPR$0, DECIMAL(3, 1) EXPR$1) NOT
NULL");
- f.checkType("SELECT *,\n"
- + " (SELECT * FROM (VALUES('this is a char')))\n"
- + "FROM (VALUES('this is a char too'))",
- "RecordType(CHAR(18) NOT NULL EXPR$0, CHAR(14) EXPR$1) NOT NULL");
- f.checkType("SELECT *,\n"
- + " (SELECT * FROM (VALUES(true)))\n"
- + "FROM (values(false))",
- "RecordType(BOOLEAN NOT NULL EXPR$0, BOOLEAN EXPR$1) NOT NULL");
- f.checkType(" SELECT *,\n"
- + " (SELECT * FROM (VALUES(cast('abcd' as varchar(10)))))\n"
- + "FROM (VALUES(CAST('abcd' as varchar(10))))",
- "RecordType(VARCHAR(10) NOT NULL EXPR$0, VARCHAR(10) EXPR$1) NOT
NULL");
- f.checkType("SELECT *,\n"
- + " (SELECT * FROM (VALUES(TIMESTAMP '2006-01-01 12:00:05')))\n"
- + "FROM (VALUES(TIMESTAMP '2006-01-01 12:00:05'))",
- "RecordType(TIMESTAMP(0) NOT NULL EXPR$0, TIMESTAMP(0) EXPR$1) NOT
NULL");
- }
}
@Test void testLiteralChain() {
@@ -3653,12 +3619,10 @@ static void checkOverlaps(OverlapChecker c) {
+ " time '01:23:44') hour to second / 2",
"08:25:52", "TIME(0) NOT NULL");
- if (Bug.DT1684_FIXED) {
- f.checkBoolean("(date '1969-04-29' +"
- + " (CURRENT_DATE - "
- + " date '1969-04-29') day / 2) is not null",
- true);
- }
+ f.checkBoolean("(date '1969-04-29' +"
+ + " (CURRENT_DATE - "
+ + " date '1969-04-29') day / 2) is not null",
+ true);
f.checkScalar("(date '2023-12-01' - date '2022-12-01') year",
"+1", "INTERVAL YEAR NOT NULL");
f.checkScalar("(date '2022-12-01' - date '2023-12-01') year",