You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by vl...@apache.org on 2018/08/01 11:22:32 UTC
calcite git commit: [CALCITE-2416] Assertion error when determining
monotonicity (Alina Ipatina)
Repository: calcite
Updated Branches:
refs/heads/master a0983768d -> 0bb924989
[CALCITE-2416] Assertion error when determining monotonicity (Alina Ipatina)
closes #766
Project: http://git-wip-us.apache.org/repos/asf/calcite/repo
Commit: http://git-wip-us.apache.org/repos/asf/calcite/commit/0bb92498
Tree: http://git-wip-us.apache.org/repos/asf/calcite/tree/0bb92498
Diff: http://git-wip-us.apache.org/repos/asf/calcite/diff/0bb92498
Branch: refs/heads/master
Commit: 0bb92498900a6314e93805c5d2238a5179577e61
Parents: a098376
Author: Alina Ipatina <ip...@gmail.com>
Authored: Thu Jul 19 19:02:34 2018 +0300
Committer: Vladimir Sitnikov <si...@gmail.com>
Committed: Wed Aug 1 14:20:49 2018 +0300
----------------------------------------------------------------------
.../main/java/org/apache/calcite/sql/SqlLiteral.java | 4 +++-
.../calcite/sql/fun/SqlMonotonicBinaryOperator.java | 6 ++++--
.../apache/calcite/sql/test/SqlOperatorBaseTest.java | 15 +++++++++++++++
3 files changed, 22 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/calcite/blob/0bb92498/core/src/main/java/org/apache/calcite/sql/SqlLiteral.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/sql/SqlLiteral.java b/core/src/main/java/org/apache/calcite/sql/SqlLiteral.java
index 815bf91..114f916 100644
--- a/core/src/main/java/org/apache/calcite/sql/SqlLiteral.java
+++ b/core/src/main/java/org/apache/calcite/sql/SqlLiteral.java
@@ -481,6 +481,8 @@ public class SqlLiteral extends SqlNode {
/**
* Converts a chained string literals into regular literals; returns regular
* literals unchanged.
+ * @throws IllegalArgumentException if {@code node} is not a string literal
+ * and cannot be unchained.
*/
public static SqlLiteral unchain(SqlNode node) {
if (node instanceof SqlLiteral) {
@@ -493,7 +495,7 @@ public class SqlLiteral extends SqlNode {
new SqlIntervalLiteral.IntervalValue(q, 1, q.toString()),
q.typeName(), q.pos);
} else {
- throw new AssertionError("invalid literal: " + node);
+ throw new IllegalArgumentException("invalid literal: " + node);
}
}
http://git-wip-us.apache.org/repos/asf/calcite/blob/0bb92498/core/src/main/java/org/apache/calcite/sql/fun/SqlMonotonicBinaryOperator.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/sql/fun/SqlMonotonicBinaryOperator.java b/core/src/main/java/org/apache/calcite/sql/fun/SqlMonotonicBinaryOperator.java
index 968f2ae..2da5698 100644
--- a/core/src/main/java/org/apache/calcite/sql/fun/SqlMonotonicBinaryOperator.java
+++ b/core/src/main/java/org/apache/calcite/sql/fun/SqlMonotonicBinaryOperator.java
@@ -73,7 +73,8 @@ public class SqlMonotonicBinaryOperator extends SqlBinaryOperator {
return mono0;
}
assert getName().equals("*");
- switch (call.getOperandLiteralValue(1, BigDecimal.class).signum()) {
+ BigDecimal value = call.getOperandLiteralValue(1, BigDecimal.class);
+ switch (value == null ? 1 : value.signum()) {
case -1:
// mono0 * negative constant --> reverse mono0
return mono0.reverse();
@@ -100,7 +101,8 @@ public class SqlMonotonicBinaryOperator extends SqlBinaryOperator {
}
assert getName().equals("*");
if (!call.isOperandNull(0, true)) {
- switch (call.getOperandLiteralValue(0, BigDecimal.class).signum()) {
+ BigDecimal value = call.getOperandLiteralValue(0, BigDecimal.class);
+ switch (value == null ? 1 : value.signum()) {
case -1:
// negative constant * mono1 --> reverse mono1
return mono1.reverse();
http://git-wip-us.apache.org/repos/asf/calcite/blob/0bb92498/core/src/test/java/org/apache/calcite/sql/test/SqlOperatorBaseTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/calcite/sql/test/SqlOperatorBaseTest.java b/core/src/test/java/org/apache/calcite/sql/test/SqlOperatorBaseTest.java
index c518768..778715c 100644
--- a/core/src/test/java/org/apache/calcite/sql/test/SqlOperatorBaseTest.java
+++ b/core/src/test/java/org/apache/calcite/sql/test/SqlOperatorBaseTest.java
@@ -2003,6 +2003,21 @@ public abstract class SqlOperatorBaseTest {
tester.checkBoolean("x''\n'ab' = x'ab'", Boolean.TRUE);
}
+ @Test public void testComplexLiteral() {
+ tester.check("select 2 * 2 * x from (select 2 as x)",
+ new SqlTests.StringTypeChecker("INTEGER NOT NULL"),
+ "8",
+ 0);
+ tester.check("select 1 * 2 * 3 * x from (select 2 as x)",
+ new SqlTests.StringTypeChecker("INTEGER NOT NULL"),
+ "12",
+ 0);
+ tester.check("select 1 + 2 + 3 + 4 + x from (select 2 as x)",
+ new SqlTests.StringTypeChecker("INTEGER NOT NULL"),
+ "12",
+ 0);
+ }
+
@Test public void testRow() {
tester.setFor(SqlStdOperatorTable.ROW, VM_FENNEL);
}