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",

Reply via email to