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:31:08 UTC
[phoenix] branch master 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 master
in repository https://gitbox.apache.org/repos/asf/phoenix.git
The following commit(s) were added to refs/heads/master by this push:
new 665e224 PHOENIX-5411 Incorrect result is returned when using sum function with case when statement (Toshihiro Suzuki)
665e224 is described below
commit 665e224e4d9a0e991e38083b983ec38989dfd5e7
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;
+ }
}