You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by an...@apache.org on 2019/07/26 20:33:07 UTC

[phoenix] branch 4.x-HBase-1.3 updated: PHOENIX-5411 Incorrect result is returned when using sum function with case when statement (Toshihiro Suzuki)

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

ankit pushed a commit to branch 4.x-HBase-1.3
in repository https://gitbox.apache.org/repos/asf/phoenix.git


The following commit(s) were added to refs/heads/4.x-HBase-1.3 by this push:
     new 3f1dde0  PHOENIX-5411 Incorrect result is returned when using sum function with case when statement (Toshihiro Suzuki)
3f1dde0 is described below

commit 3f1dde08e83ee8c717f24172e4b6852cb39f28c9
Author: Ankit Singhal <an...@apache.org>
AuthorDate: Fri Jul 26 13:30:30 2019 -0700

    PHOENIX-5411 Incorrect result is returned when using sum function with case when statement (Toshihiro Suzuki)
---
 .../org/apache/phoenix/end2end/SumFunctionIT.java  | 54 ++++++++++++++++++++++
 .../phoenix/expression/IsNullExpression.java       | 16 +++++++
 2 files changed, 70 insertions(+)

diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/SumFunctionIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/SumFunctionIT.java
new file mode 100644
index 0000000..b7de30e
--- /dev/null
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/SumFunctionIT.java
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.phoenix.end2end;
+
+import org.junit.Test;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.ResultSet;
+import java.sql.Statement;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+public class SumFunctionIT extends ParallelStatsDisabledIT {
+    @Test
+    public void testSumFunctionWithCaseWhenStatement() throws Exception {
+        String tableName = generateUniqueName();
+
+        try (Connection c = DriverManager.getConnection(getUrl());
+          Statement s = c.createStatement()) {
+            s.execute("create table " + tableName + " (id varchar primary key, col1 varchar, "
+              + "col2 integer)");
+            s.execute("upsert into " + tableName + " values('id1', 'aaa', 2)");
+            s.execute("upsert into " + tableName + " values('id2', null, 1)");
+            c.commit();
+
+            try (ResultSet rs = s.executeQuery(
+              "select sum(case when col1 is null then col2 else 0 end), "
+                + "sum(case when col1 is not null then col2 else 0 end) from " + tableName)) {
+
+                assertThat(rs.next(), is(true));
+                assertThat(rs.getInt(1), is(1));
+                assertThat(rs.getInt(2), is(2));
+                assertThat(rs.next(), is(false));
+            }
+        }
+    }
+}
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/IsNullExpression.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/IsNullExpression.java
index d8f6cbe..c2f43cb 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/IsNullExpression.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/IsNullExpression.java
@@ -128,4 +128,20 @@ public class IsNullExpression extends BaseSingleExpression {
     public boolean requiresFinalEvaluation() {
         return super.requiresFinalEvaluation() || !this.isNegate();
     }
+
+    @Override
+    public boolean equals(Object o) {
+        if (!super.equals(o)) {
+            return false;
+        }
+        IsNullExpression that = (IsNullExpression) o;
+        return isNegate == that.isNegate;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = super.hashCode();
+        result = 31 * result + (isNegate ? 1 : 0);
+        return result;
+    }
 }