PHOENIX-2063 Row value constructor doesn't work when used in COUNT
DISTINCT (Dumindu Buddhika)


Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/fa2d79a0
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/fa2d79a0
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/fa2d79a0

Branch: refs/heads/calcite
Commit: fa2d79a0162497761dd4568e3f8f343063b6afaa
Parents: aa4c900
Author: ramkrishna <[email protected]>
Authored: Thu Jul 9 10:18:10 2015 +0530
Committer: ramkrishna <[email protected]>
Committed: Thu Jul 9 10:18:10 2015 +0530

----------------------------------------------------------------------
 .../phoenix/end2end/RowValueConstructorIT.java  | 78 ++++++++++++++++++++
 .../aggregator/ServerAggregators.java           |  1 +
 2 files changed, 79 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/phoenix/blob/fa2d79a0/phoenix-core/src/it/java/org/apache/phoenix/end2end/RowValueConstructorIT.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/RowValueConstructorIT.java
 
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/RowValueConstructorIT.java
index e227eb0..0cf5455 100644
--- 
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/RowValueConstructorIT.java
+++ 
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/RowValueConstructorIT.java
@@ -1423,4 +1423,82 @@ public class RowValueConstructorIT extends 
BaseClientManagedTimeIT {
         assertFalse(rs.next());
         conn.close();
     }
+
+    @Test
+    public void testCountDistinct1() throws Exception {
+        Connection conn = DriverManager.getConnection(getUrl());
+        String ddl = "CREATE TABLE regions1 (region_name VARCHAR PRIMARY KEY, 
a INTEGER, b INTEGER)";
+        conn.createStatement().execute(ddl);
+        conn.commit();
+        PreparedStatement stmt = conn.prepareStatement("UPSERT INTO 
regions1(region_name, a, b) VALUES('a', 6,3)");
+        stmt.execute();
+        stmt = conn.prepareStatement("UPSERT INTO regions1(region_name, a, b) 
VALUES('b', 2,4)");
+        stmt.execute();
+        stmt = conn.prepareStatement("UPSERT INTO regions1(region_name, a, b) 
VALUES('c', 6,3)");
+        stmt.execute();
+        conn.commit();
+        ResultSet rs;
+        rs = conn.createStatement().executeQuery("SELECT COUNT(DISTINCT (a,b)) 
from regions1");
+        assertTrue(rs.next());
+        assertEquals(2, rs.getInt(1));
+    }
+
+    @Test
+    public void testCountDistinct2() throws Exception {
+        Connection conn = DriverManager.getConnection(getUrl());
+        String ddl = "CREATE TABLE regions2 (region_name VARCHAR PRIMARY KEY, 
a VARCHAR, b VARCHAR)";
+        conn.createStatement().execute(ddl);
+        conn.commit();
+        PreparedStatement stmt = conn.prepareStatement("UPSERT INTO 
regions2(region_name, a, b) VALUES('a', 'fooo','abc')");
+        stmt.execute();
+        stmt = conn.prepareStatement("UPSERT INTO regions2(region_name, a, b) 
VALUES('b', 'off','bac')");
+        stmt.execute();
+        stmt = conn.prepareStatement("UPSERT INTO regions2(region_name, a, b) 
VALUES('c', 'fooo', 'abc')");
+        stmt.execute();
+        conn.commit();
+        ResultSet rs;
+        rs = conn.createStatement().executeQuery("SELECT COUNT(DISTINCT (a,b)) 
from regions2");
+        assertTrue(rs.next());
+        assertEquals(2, rs.getInt(1));
+    }
+
+    @Test
+    public void testCountDistinct3() throws Exception {
+        Connection conn = DriverManager.getConnection(getUrl());
+        String ddl = "CREATE TABLE regions3 (region_name VARCHAR PRIMARY KEY, 
a Boolean, b Boolean)";
+        conn.createStatement().execute(ddl);
+        conn.commit();
+        PreparedStatement stmt = conn.prepareStatement("UPSERT INTO 
regions3(region_name, a, b) VALUES('a', true, true)");
+        stmt.execute();
+        stmt = conn.prepareStatement("UPSERT INTO regions3(region_name, a, b) 
VALUES('b', true, False)");
+        stmt.execute();
+        stmt = conn.prepareStatement("UPSERT INTO regions3(region_name, a, b) 
VALUES('c', true, true)");
+        stmt.execute();
+        stmt = conn.prepareStatement("UPSERT INTO regions3(region_name, a, b) 
VALUES('d', true, false)");
+        stmt.execute();
+        conn.commit();
+        ResultSet rs;
+        rs = conn.createStatement().executeQuery("SELECT COUNT(DISTINCT (a,b)) 
from regions3");
+        assertTrue(rs.next());
+        assertEquals(2, rs.getInt(1));
+    }
+
+    @Test
+    public void testCountDistinct4() throws Exception {
+        Connection conn = DriverManager.getConnection(getUrl());
+        String ddl = "CREATE TABLE regions4 (region_name VARCHAR PRIMARY KEY, 
a VARCHAR, b VARCHAR)";
+        conn.createStatement().execute(ddl);
+        conn.commit();
+        PreparedStatement stmt = conn.prepareStatement("UPSERT INTO 
regions4(region_name, a, b) VALUES('a', 'fooo','abc')");
+        stmt.execute();
+        stmt = conn.prepareStatement("UPSERT INTO regions4(region_name, a, b) 
VALUES('b', 'off','bac')");
+        stmt.execute();
+        stmt = conn.prepareStatement("UPSERT INTO regions4(region_name, a, b) 
VALUES('c', 'foo', 'abc')");
+        stmt.execute();
+        conn.commit();
+        ResultSet rs;
+        rs = conn.createStatement().executeQuery("SELECT COUNT(DISTINCT (a,b)) 
from regions4");
+        assertTrue(rs.next());
+        assertEquals(3, rs.getInt(1));
+    }
 }

http://git-wip-us.apache.org/repos/asf/phoenix/blob/fa2d79a0/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/ServerAggregators.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/ServerAggregators.java
 
b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/ServerAggregators.java
index 8792c91..01ca733 100644
--- 
a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/ServerAggregators.java
+++ 
b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/ServerAggregators.java
@@ -59,6 +59,7 @@ public class ServerAggregators extends Aggregators {
             if (expressions[i].evaluate(result, ptr) && ptr.getLength() != 0) {
                 aggregators[i].aggregate(result, ptr);
             }
+            expressions[i].reset();
         }
     }
     

Reply via email to