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 =