You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by da...@apache.org on 2021/01/28 02:04:15 UTC

[calcite] branch master updated: [CALCITE-4479] 'vFloat in (1.0, 2.0)' throws UnsupportedOperationException

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

danny0405 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/calcite.git


The following commit(s) were added to refs/heads/master by this push:
     new 039fe49  [CALCITE-4479] 'vFloat in (1.0, 2.0)' throws UnsupportedOperationException
039fe49 is described below

commit 039fe493e195416ee40c93b720f304ac9fc3c8c8
Author: yuzhao.cyz <yu...@gmail.com>
AuthorDate: Wed Jan 27 16:03:14 2021 +0800

    [CALCITE-4479] 'vFloat in (1.0, 2.0)' throws UnsupportedOperationException
---
 core/src/main/java/org/apache/calcite/rex/RexLiteral.java   |  8 +++++++-
 .../test/java/org/apache/calcite/rex/RexBuilderTest.java    | 13 +++++++++++++
 2 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/core/src/main/java/org/apache/calcite/rex/RexLiteral.java b/core/src/main/java/org/apache/calcite/rex/RexLiteral.java
index f84ff1e..75da3b3 100644
--- a/core/src/main/java/org/apache/calcite/rex/RexLiteral.java
+++ b/core/src/main/java/org/apache/calcite/rex/RexLiteral.java
@@ -393,7 +393,10 @@ public class RexLiteral extends RexNode {
     }
   }
 
-  /** Returns the strict literal type for a given type. */
+  /**
+   * Returns the strict literal type for a given type. The rules should keep
+   * sync with what {@link RexBuilder#makeLiteral} defines.
+   */
   public static SqlTypeName strictTypeName(RelDataType type) {
     final SqlTypeName typeName = type.getSqlTypeName();
     switch (typeName) {
@@ -401,6 +404,9 @@ public class RexLiteral extends RexNode {
     case TINYINT:
     case SMALLINT:
       return SqlTypeName.DECIMAL;
+    case REAL:
+    case FLOAT:
+      return SqlTypeName.DOUBLE;
     case VARBINARY:
       return SqlTypeName.BINARY;
     case VARCHAR:
diff --git a/core/src/test/java/org/apache/calcite/rex/RexBuilderTest.java b/core/src/test/java/org/apache/calcite/rex/RexBuilderTest.java
index b4cf1a3..e08cfc4 100644
--- a/core/src/test/java/org/apache/calcite/rex/RexBuilderTest.java
+++ b/core/src/test/java/org/apache/calcite/rex/RexBuilderTest.java
@@ -25,6 +25,7 @@ import org.apache.calcite.rel.type.RelDataTypeFieldImpl;
 import org.apache.calcite.rel.type.RelDataTypeSystem;
 import org.apache.calcite.rel.type.RelDataTypeSystemImpl;
 import org.apache.calcite.sql.SqlCollation;
+import org.apache.calcite.sql.SqlKind;
 import org.apache.calcite.sql.fun.SqlStdOperatorTable;
 import org.apache.calcite.sql.type.BasicSqlType;
 import org.apache.calcite.sql.type.SqlTypeFactoryImpl;
@@ -610,6 +611,18 @@ class RexBuilderTest {
     checkBigDecimalLiteral(builder, "-73786976294838206464");
   }
 
+  @Test void testMakeIn() {
+    final RelDataTypeFactory typeFactory =
+            new SqlTypeFactoryImpl(RelDataTypeSystem.DEFAULT);
+    final RexBuilder rexBuilder = new RexBuilder(typeFactory);
+    final RelDataType floatType = typeFactory.createSqlType(SqlTypeName.FLOAT);
+    RexNode left = rexBuilder.makeInputRef(floatType, 0);
+    final RexNode literal1 = rexBuilder.makeLiteral(1.0f, floatType);
+    final RexNode literal2 = rexBuilder.makeLiteral(2.0f, floatType);
+    RexNode inCall = rexBuilder.makeIn(left, ImmutableList.of(literal1, literal2));
+    assertThat(inCall.getKind(), is(SqlKind.SEARCH));
+  }
+
   /** Tests {@link RexCopier#visitOver(RexOver)}. */
   @Test void testCopyOver() {
     final RelDataTypeFactory sourceTypeFactory =