This is an automated email from the ASF dual-hosted git repository.

rubenql 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 0bec957071 [CALCITE-5921] SqlOperatorFixture.checkFails and 
checkAggFails don't check runtime failure
0bec957071 is described below

commit 0bec957071468a2e54a22519290ac101a752fcad
Author: Mihai Budiu <mbu...@gmail.com>
AuthorDate: Sat Oct 14 21:17:32 2023 -0700

    [CALCITE-5921] SqlOperatorFixture.checkFails and checkAggFails don't check 
runtime failure
    
    Signed-off-by: Mihai Budiu <mbu...@gmail.com>
---
 .../apache/calcite/runtime/CalciteResource.java    |  2 +-
 .../org/apache/calcite/runtime/SqlFunctions.java   | 25 +++++++++-------
 .../calcite/runtime/CalciteResource.properties     |  2 +-
 .../calcite/sql/test/SqlOperatorFixture.java       |  2 +-
 .../java/org/apache/calcite/sql/test/SqlTests.java | 12 +++++---
 .../calcite/test/SqlOperatorFixtureImpl.java       |  2 ++
 .../org/apache/calcite/test/SqlOperatorTest.java   | 34 +++++++++++-----------
 .../org/apache/calcite/test/SqlRuntimeTester.java  |  4 +--
 8 files changed, 46 insertions(+), 37 deletions(-)

diff --git a/core/src/main/java/org/apache/calcite/runtime/CalciteResource.java 
b/core/src/main/java/org/apache/calcite/runtime/CalciteResource.java
index dabc84ba1f..ee03bfe959 100644
--- a/core/src/main/java/org/apache/calcite/runtime/CalciteResource.java
+++ b/core/src/main/java/org/apache/calcite/runtime/CalciteResource.java
@@ -298,7 +298,7 @@ public interface CalciteResource {
   @BaseMessage("Date literal ''{0}'' out of range")
   ExInst<SqlValidatorException> dateLiteralOutOfRange(String a0);
 
-  @BaseMessage("Input arguments of {0} out of range: {1,number,#}; should be 
in the range of {2}")
+  @BaseMessage("Input arguments of {0} out of range: {1,number,#.#}; should be 
in the range of {2}")
   ExInst<CalciteException> inputArgumentsOfFunctionOutOfRange(String a0, 
Number a1, String a2);
 
   @BaseMessage("String literal continued on same line")
diff --git a/core/src/main/java/org/apache/calcite/runtime/SqlFunctions.java 
b/core/src/main/java/org/apache/calcite/runtime/SqlFunctions.java
index 8a0e04c6d1..4ac14126fa 100644
--- a/core/src/main/java/org/apache/calcite/runtime/SqlFunctions.java
+++ b/core/src/main/java/org/apache/calcite/runtime/SqlFunctions.java
@@ -860,17 +860,22 @@ public class SqlFunctions {
     assert map != null;
     Set<String> keys = map.keySet();
     Collection<String> values = map.values();
-    switch (JsonScope.valueOf(jsonScope)) {
-    case JSON_KEYS:
-      return keys.contains(substr);
-    case JSON_KEYS_AND_VALUES:
-      return keys.contains(substr) || values.contains(substr);
-    case JSON_VALUES:
-      return values.contains(substr);
-    default:
-      throw new IllegalArgumentException("json_scope argument must be one of: 
\"JSON_KEYS\", "
-          + "\"JSON_VALUES\", \"JSON_KEYS_AND_VALUES\".");
+    try {
+      switch (JsonScope.valueOf(jsonScope)) {
+      case JSON_KEYS:
+        return keys.contains(substr);
+      case JSON_KEYS_AND_VALUES:
+        return keys.contains(substr) || values.contains(substr);
+      case JSON_VALUES:
+        return values.contains(substr);
+      default:
+        break;
+      }
+    } catch (IllegalArgumentException ignored) {
+      // Happens when jsonScope is not one of the legal enum values
     }
+    throw new IllegalArgumentException("json_scope argument must be one of: 
\"JSON_KEYS\", "
+          + "\"JSON_VALUES\", \"JSON_KEYS_AND_VALUES\".");
   }
 
   /** SQL <code>CONTAINS_SUBSTR(expr, substr)</code> operator. */
diff --git 
a/core/src/main/resources/org/apache/calcite/runtime/CalciteResource.properties 
b/core/src/main/resources/org/apache/calcite/runtime/CalciteResource.properties
index c1f28de6e8..5475f2dafd 100644
--- 
a/core/src/main/resources/org/apache/calcite/runtime/CalciteResource.properties
+++ 
b/core/src/main/resources/org/apache/calcite/runtime/CalciteResource.properties
@@ -102,7 +102,7 @@ OperandNotComparable=Operands {0} not comparable to each 
other
 TypeNotComparableEachOther=Types {0} not comparable to each other
 NumberLiteralOutOfRange=Numeric literal ''{0}'' out of range
 DateLiteralOutOfRange=Date literal ''{0}'' out of range
-InputArgumentsOfFunctionOutOfRange=Input arguments of {0} out of range: 
{1,number,#}; should be in the range of {2}
+InputArgumentsOfFunctionOutOfRange=Input arguments of {0} out of range: 
{1,number,#.#}; should be in the range of {2}
 StringFragsOnSameLine=String literal continued on same line
 AliasMustBeSimpleIdentifier=Table or column alias must be a simple identifier
 CharLiteralAliasNotValid=Expecting alias, found character literal
diff --git 
a/testkit/src/main/java/org/apache/calcite/sql/test/SqlOperatorFixture.java 
b/testkit/src/main/java/org/apache/calcite/sql/test/SqlOperatorFixture.java
index 5eb94dcbc1..3ae3a3e2bb 100644
--- a/testkit/src/main/java/org/apache/calcite/sql/test/SqlOperatorFixture.java
+++ b/testkit/src/main/java/org/apache/calcite/sql/test/SqlOperatorFixture.java
@@ -96,7 +96,7 @@ public interface SqlOperatorFixture extends AutoCloseable {
   // Error messages when an invalid time unit is given as
   // input to extract for a particular input type.
   String INVALID_EXTRACT_UNIT_CONVERTLET_ERROR =
-      "Extract.*from.*type data is not supported";
+      "Was not expecting value '.*' for enumeration.*";
 
   String INVALID_EXTRACT_UNIT_VALIDATION_ERROR =
       "Cannot apply 'EXTRACT' to arguments of type .*'\n.*";
diff --git a/testkit/src/main/java/org/apache/calcite/sql/test/SqlTests.java 
b/testkit/src/main/java/org/apache/calcite/sql/test/SqlTests.java
index 0296486c06..3c5deb5216 100644
--- a/testkit/src/main/java/org/apache/calcite/sql/test/SqlTests.java
+++ b/testkit/src/main/java/org/apache/calcite/sql/test/SqlTests.java
@@ -249,6 +249,10 @@ public abstract class SqlTests {
     int actualEndLine = 100;
     int actualEndColumn = 99;
 
+    if (ex instanceof ExceptionInInitializerError) {
+      ex = ((ExceptionInInitializerError) ex).getException();
+    }
+
     // Search for an CalciteContextException somewhere in the stack.
     CalciteContextException ece = null;
     for (Throwable x = ex; x != null; x = x.getCause()) {
@@ -294,10 +298,10 @@ public abstract class SqlTests {
         actualMessage = actualException.getMessage();
       }
     } else {
-      final String message = ex.getMessage();
-      if (message != null) {
+      actualMessage = ex.getMessage();
+      if (actualMessage != null) {
         java.util.regex.Matcher matcher =
-            LINE_COL_TWICE_PATTERN.matcher(message);
+            LINE_COL_TWICE_PATTERN.matcher(actualMessage);
         if (matcher.matches()) {
           actualLine = Integer.parseInt(matcher.group(1));
           actualColumn = Integer.parseInt(matcher.group(2));
@@ -305,7 +309,7 @@ public abstract class SqlTests {
           actualEndColumn = Integer.parseInt(matcher.group(4));
           actualMessage = matcher.group(5);
         } else {
-          matcher = LINE_COL_PATTERN.matcher(message);
+          matcher = LINE_COL_PATTERN.matcher(actualMessage);
           if (matcher.matches()) {
             actualLine = Integer.parseInt(matcher.group(1));
             actualColumn = Integer.parseInt(matcher.group(2));
diff --git 
a/testkit/src/main/java/org/apache/calcite/test/SqlOperatorFixtureImpl.java 
b/testkit/src/main/java/org/apache/calcite/test/SqlOperatorFixtureImpl.java
index 0f7a4d0e1d..b2ba7bb29e 100644
--- a/testkit/src/main/java/org/apache/calcite/test/SqlOperatorFixtureImpl.java
+++ b/testkit/src/main/java/org/apache/calcite/test/SqlOperatorFixtureImpl.java
@@ -163,6 +163,7 @@ class SqlOperatorFixtureImpl implements SqlOperatorFixture {
       SqlValidator validator = factory.createValidator();
       SqlNode n = parseAndValidate(validator, sql);
       assertNotNull(n);
+      tester.checkFails(factory, sap, expectedError, runtime);
     } else {
       checkQueryFails(StringAndPos.of(sql),
           expectedError);
@@ -185,6 +186,7 @@ class SqlOperatorFixtureImpl implements SqlOperatorFixture {
       SqlValidator validator = factory.createValidator();
       SqlNode n = parseAndValidate(validator, sql);
       assertNotNull(n);
+      tester.checkAggFails(factory, expr, inputValues, expectedError, runtime);
     } else {
       checkQueryFails(StringAndPos.of(sql), expectedError);
     }
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 bfc14daab7..a9a24cfe92 100644
--- a/testkit/src/main/java/org/apache/calcite/test/SqlOperatorTest.java
+++ b/testkit/src/main/java/org/apache/calcite/test/SqlOperatorTest.java
@@ -1438,10 +1438,10 @@ public class SqlOperatorTest {
   /** Test case for
    * <a 
href="https://issues.apache.org/jira/browse/CALCITE-4861";>[CALCITE-4861]
    * Optimization of chained CAST calls leads to unexpected behavior</a>. */
-  @Test void testChainedCast() {
+  @Test @Disabled("CALCITE-5990") void testChainedCast() {
     final SqlOperatorFixture f = fixture();
     f.checkFails("CAST(CAST(CAST(123456 AS TINYINT) AS INT) AS BIGINT)",
-        "Value out of range. Value:\"123456\"", true);
+        ".*Value 123456 out of range", true);
   }
 
   @Test void testCase() {
@@ -1866,10 +1866,10 @@ public class SqlOperatorTest {
 
     f.checkFails("code_points_to_bytes(array[-1])",
         "Input arguments of CODE_POINTS_TO_BYTES out of range: -1;"
-            + " should be in the range of [0, 255]", true);
+            + " should be in the range of \\[0, 255\\]", true);
     f.checkFails("code_points_to_bytes(array[2147483648, 1])",
         "Input arguments of CODE_POINTS_TO_BYTES out of range: 2147483648;"
-            + " should be in the range of [0, 255]", true);
+            + " should be in the range of \\[0, 255\\]", true);
 
     f.checkString("code_points_to_bytes(array[65, 66, 67, 68])", "41424344", 
"VARBINARY NOT NULL");
     f.checkString("code_points_to_bytes(array[255, 254, 65, 64])", "fffe4140",
@@ -1899,10 +1899,10 @@ public class SqlOperatorTest {
 
     f.checkFails("code_points_to_string(array[-1])",
         "Input arguments of CODE_POINTS_TO_STRING out of range: -1;"
-            + " should be in the range of [0, 0xD7FF] and [0xE000, 0x10FFFF]", 
true);
+            + " should be in the range of \\[0, 0xD7FF\\] and \\[0xE000, 
0x10FFFF\\]", true);
     f.checkFails("code_points_to_string(array[2147483648, 1])",
         "Input arguments of CODE_POINTS_TO_STRING out of range: 2147483648;"
-            + " should be in the range of [0, 0xD7FF] and [0xE000, 0x10FFFF]", 
true);
+            + " should be in the range of \\[0, 0xD7FF\\] and \\[0xE000, 
0x10FFFF\\]", true);
 
     f.checkString("code_points_to_string(array[65, 66, 67, 68])", "ABCD",
         "VARCHAR NOT NULL");
@@ -3808,7 +3808,7 @@ public class SqlOperatorTest {
 
     // some negative tests
     f.checkFails("'yd' similar to '[x-ze-a]d'",
-        "Illegal character range near index 6\n"
+        ".*Illegal character range near index 6\n"
             + "\\[x-ze-a\\]d\n"
             + "      \\^",
         true);   // illegal range
@@ -3816,10 +3816,10 @@ public class SqlOperatorTest {
     // Slightly different error message from JDK 13 onwards
     final String expectedError =
         TestUtil.getJavaMajorVersion() >= 13
-            ? "Illegal repetition near index 22\n"
+            ? ".*Illegal repetition near index 22\n"
               + "\\[\\:LOWER\\:\\]\\{2\\}\\[\\:DIGIT\\:\\]\\{,5\\}\n"
               + "                      \\^"
-            : "Illegal repetition near index 20\n"
+            : ".*Illegal repetition near index 20\n"
                 + "\\[\\:LOWER\\:\\]\\{2\\}\\[\\:DIGIT\\:\\]\\{,5\\}\n"
                 + "                    \\^";
     f.checkFails("'yd3223' similar to '[:LOWER:]{2}[:DIGIT:]{,5}'",
@@ -7229,13 +7229,13 @@ public class SqlOperatorTest {
       f.checkNull("atanh(cast(null as integer))");
       f.checkNull("atanh(cast(null as double))");
       f.checkFails("atanh(1)",
-          "Input arguments of ATANH out of range: 1; should be in the range of 
(-1, 1)",
+          "Input arguments of ATANH out of range: 1; should be in the range of 
\\(-1, 1\\)",
           true);
       f.checkFails("atanh(-1)",
-          "Input arguments of ATANH out of range: -1; should be in the range 
of (-1, 1)",
+          "Input arguments of ATANH out of range: -1; should be in the range 
of \\(-1, 1\\)",
           true);
       f.checkFails("atanh(-1.5)",
-          "Input arguments of ATANH out of range: -1.5; should be in the range 
of (-1, 1)",
+          "Input arguments of ATANH out of range: -1.5; should be in the range 
of \\(-1, 1\\)",
           true);
     };
     f0.forEachLibrary(list(SqlLibrary.ALL), consumer);
@@ -8497,7 +8497,7 @@ public class SqlOperatorTest {
     f.checkFails("lpad('12345', -3)",
         "Second argument for LPAD/RPAD must not be negative", true);
     f.checkFails("lpad('12345', 3, '')",
-        "Third argument (pad pattern) for LPAD/RPAD must not be empty", true);
+        "Third argument \\(pad pattern\\) for LPAD/RPAD must not be empty", 
true);
     f.checkString("lpad(x'aa', 4, x'bb')", "bbbbbbaa", "VARBINARY NOT NULL");
     f.checkString("lpad(x'aa', 4)", "202020aa", "VARBINARY NOT NULL");
     f.checkString("lpad(x'aaaaaa', 2)", "aaaa", "VARBINARY NOT NULL");
@@ -8507,7 +8507,7 @@ public class SqlOperatorTest {
     f.checkFails("lpad(x'aa', -3)",
         "Second argument for LPAD/RPAD must not be negative", true);
     f.checkFails("lpad(x'aa', 3, x'')",
-        "Third argument (pad pattern) for LPAD/RPAD must not be empty", true);
+        "Third argument \\(pad pattern\\) for LPAD/RPAD must not be empty", 
true);
   }
 
   @Test void testRpadFunction() {
@@ -8522,7 +8522,7 @@ public class SqlOperatorTest {
     f.checkFails("rpad('12345', -3)",
         "Second argument for LPAD/RPAD must not be negative", true);
     f.checkFails("rpad('12345', 3, '')",
-        "Third argument (pad pattern) for LPAD/RPAD must not be empty", true);
+        "Third argument \\(pad pattern\\) for LPAD/RPAD must not be empty", 
true);
 
     f.checkString("rpad(x'aa', 4, x'bb')", "aabbbbbb", "VARBINARY NOT NULL");
     f.checkString("rpad(x'aa', 4)", "aa202020", "VARBINARY NOT NULL");
@@ -8533,7 +8533,7 @@ public class SqlOperatorTest {
     f.checkFails("rpad(x'aa', -3)",
         "Second argument for LPAD/RPAD must not be negative", true);
     f.checkFails("rpad(x'aa', 3, x'')",
-        "Third argument (pad pattern) for LPAD/RPAD must not be empty", true);
+        "Third argument \\(pad pattern\\) for LPAD/RPAD must not be empty", 
true);
   }
 
   @Test void testContainsSubstrFunc() {
@@ -9110,7 +9110,7 @@ public class SqlOperatorTest {
 
       // test with illegal argument
       f.checkFails("format_number(12332.123456, -1)",
-          "Illegal arguments for 'FORMAT_NUMBER' function:"
+          "Illegal arguments for FORMAT_NUMBER function:"
               + " negative decimal value not allowed",
           true);
 
diff --git 
a/testkit/src/main/java/org/apache/calcite/test/SqlRuntimeTester.java 
b/testkit/src/main/java/org/apache/calcite/test/SqlRuntimeTester.java
index b130e828eb..2017cd9304 100644
--- a/testkit/src/main/java/org/apache/calcite/test/SqlRuntimeTester.java
+++ b/testkit/src/main/java/org/apache/calcite/test/SqlRuntimeTester.java
@@ -36,9 +36,7 @@ class SqlRuntimeTester extends AbstractSqlTester {
 
   @Override public void checkFails(SqlTestFactory factory, StringAndPos sap,
       String expectedError, boolean runtime) {
-    final StringAndPos sap2 =
-        StringAndPos.of(runtime ? buildQuery2(factory, sap.addCarets())
-            : buildQuery(sap.addCarets()));
+    final StringAndPos sap2 = StringAndPos.of(buildQuery(sap.addCarets()));
     assertExceptionIsThrown(factory, sap2, expectedError, runtime);
   }
 

Reply via email to