You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by ma...@apache.org on 2014/04/01 05:10:40 UTC

git commit: PHOENIX-905 Wrong calculation of maxSetBit in ValueBitSet#or(ImmutableBytesWritable)

Repository: incubator-phoenix
Updated Branches:
  refs/heads/master 12bd7aedd -> 693d4e4ee


PHOENIX-905 Wrong calculation of maxSetBit in ValueBitSet#or(ImmutableBytesWritable)


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

Branch: refs/heads/master
Commit: 693d4e4eedca5066a45d238aceb77dcf4fa2cb87
Parents: 12bd7ae
Author: maryannxue <ma...@apache.org>
Authored: Mon Mar 31 23:10:23 2014 -0400
Committer: maryannxue <ma...@apache.org>
Committed: Mon Mar 31 23:10:23 2014 -0400

----------------------------------------------------------------------
 .../org/apache/phoenix/end2end/HashJoinIT.java  | 67 ++++++++++++++++++--
 .../org/apache/phoenix/schema/ValueBitSet.java  |  6 +-
 2 files changed, 66 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/693d4e4e/phoenix-core/src/it/java/org/apache/phoenix/end2end/HashJoinIT.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/HashJoinIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/HashJoinIT.java
index 5ccef2c..5f02381 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/HashJoinIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/HashJoinIT.java
@@ -66,6 +66,7 @@ import com.google.common.collect.Maps;
 @RunWith(Parameterized.class)
 public class HashJoinIT extends BaseHBaseManagedTimeIT {
     
+    private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
     private String[] indexDDL;
     private String[] plans;
     
@@ -513,7 +514,7 @@ public class HashJoinIT extends BaseHBaseManagedTimeIT {
                 "                    SERVER FILTER BY NAME != 'T3'\n" +
                 "                    PARALLEL EQUI-JOIN 1 HASH TABLES:\n" +
                 "                    BUILD HASH TABLE 0\n" +
-                "                        CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_SCHEMA + ".idx_supplier",
+                "                        CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_SUPPLIER_TABLE_DISPLAY_NAME,
                 }});
         return testCases;
     }
@@ -529,7 +530,6 @@ public class HashJoinIT extends BaseHBaseManagedTimeIT {
         Connection conn = DriverManager.getConnection(getUrl(), props);
         try {
             conn.createStatement().execute("CREATE SEQUENCE my.seq");
-            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
             // Insert into customer table
             PreparedStatement stmt = conn.prepareStatement(
                     "upsert into " + JOIN_CUSTOMER_TABLE_FULL_NAME +
@@ -1905,7 +1905,6 @@ public class HashJoinIT extends BaseHBaseManagedTimeIT {
         Properties props = new Properties(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(getUrl(), props);
         try {
-            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
             PreparedStatement statement = conn.prepareStatement(query);
             ResultSet rs = statement.executeQuery();
             assertTrue (rs.next());
@@ -2411,7 +2410,7 @@ public class HashJoinIT extends BaseHBaseManagedTimeIT {
                 + "(" + JOIN_SUPPLIER_TABLE_FULL_NAME + " s RIGHT JOIN " + JOIN_ITEM_TABLE_FULL_NAME + " i ON i.\"supplier_id\" = s.\"supplier_id\")" 
                 + " ON o.\"item_id\" = i.\"item_id\" LEFT JOIN " 
                 + JOIN_CUSTOMER_TABLE_FULL_NAME + " c ON c.\"customer_id\" = o.\"customer_id\" GROUP BY i.name ORDER BY i.name";
-        String query2 = "SELECT c.name, o.\"order_id\", i.name, s.name FROM " + JOIN_CUSTOMER_TABLE_FULL_NAME + " c INNER JOIN " 
+        String query2 = "SELECT * FROM " + JOIN_CUSTOMER_TABLE_FULL_NAME + " c INNER JOIN " 
                 + "(" + JOIN_ORDER_TABLE_FULL_NAME + " o INNER JOIN " 
                 + "(" + JOIN_SUPPLIER_TABLE_FULL_NAME + " s RIGHT JOIN " + JOIN_ITEM_TABLE_FULL_NAME + " i ON i.\"supplier_id\" = s.\"supplier_id\")" 
                 + " ON o.\"item_id\" = i.\"item_id\") ON c.\"customer_id\" = o.\"customer_id\"" 
@@ -2447,20 +2446,80 @@ public class HashJoinIT extends BaseHBaseManagedTimeIT {
             statement = conn.prepareStatement(query2);
             rs = statement.executeQuery();
             assertTrue(rs.next());
+            assertEquals(rs.getString("C.customer_id"), "0000000003");
             assertEquals(rs.getString("c.name"), "C3");
+            assertEquals(rs.getString("c.phone"), "999-999-3333");
+            assertEquals(rs.getString("c.address"), "303 XXX Street");
+            assertNull(rs.getString("c.loc_id"));
+            assertEquals(rs.getDate("c.date"), new Date(format.parse("2013-11-25 10:06:29").getTime()));
             assertEquals(rs.getString("O.order_id"), "000000000000002");
+            assertEquals(rs.getString("O.customer_id"), "0000000003");
+            assertEquals(rs.getString("O.item_id"), "0000000006");
+            assertEquals(rs.getInt("o.price"), 552);
+            assertEquals(rs.getInt("o.quantity"), 2000);
+            assertEquals(rs.getTimestamp("o.date"), new Timestamp(format.parse("2013-11-25 10:06:29").getTime()));
+            assertEquals(rs.getString("I.item_id"), "0000000006");
             assertEquals(rs.getString("i.name"), "T6");
+            assertEquals(rs.getInt("i.price"), 600);
+            assertEquals(rs.getInt("i.discount1"), 8);
+            assertEquals(rs.getInt("i.discount2"), 15);
+            assertEquals(rs.getString("I.supplier_id"), "0000000006");
+            assertEquals(rs.getString("i.description"), "Item T6");
+            assertEquals(rs.getString("S.supplier_id"), "0000000006");
             assertEquals(rs.getString("s.name"), "S6");
+            assertEquals(rs.getString("s.phone"), "888-888-6666");
+            assertEquals(rs.getString("s.address"), "606 YYY Street");
+            assertEquals(rs.getString("s.loc_id"), "10006");
             assertTrue(rs.next());
+            assertEquals(rs.getString("C.customer_id"), "0000000004");
             assertEquals(rs.getString("c.name"), "C4");
+            assertEquals(rs.getString("c.phone"), "999-999-4444");
+            assertEquals(rs.getString("c.address"), "404 XXX Street");
+            assertEquals(rs.getString("c.loc_id"), "10004");
+            assertEquals(rs.getDate("c.date"), new Date(format.parse("2013-11-22 14:22:56").getTime()));
             assertEquals(rs.getString("O.order_id"), "000000000000001");
+            assertEquals(rs.getString("O.customer_id"), "0000000004");
+            assertEquals(rs.getString("O.item_id"), "0000000001");
+            assertEquals(rs.getInt("o.price"), 100);
+            assertEquals(rs.getInt("o.quantity"), 1000);
+            assertEquals(rs.getTimestamp("o.date"), new Timestamp(format.parse("2013-11-22 14:22:56").getTime()));
+            assertEquals(rs.getString("I.item_id"), "0000000001");
             assertEquals(rs.getString("i.name"), "T1");
+            assertEquals(rs.getInt("i.price"), 100);
+            assertEquals(rs.getInt("i.discount1"), 5);
+            assertEquals(rs.getInt("i.discount2"), 10);
+            assertEquals(rs.getString("I.supplier_id"), "0000000001");
+            assertEquals(rs.getString("i.description"), "Item T1");
+            assertEquals(rs.getString("S.supplier_id"), "0000000001");
             assertEquals(rs.getString("s.name"), "S1");
+            assertEquals(rs.getString("s.phone"), "888-888-1111");
+            assertEquals(rs.getString("s.address"), "101 YYY Street");
+            assertEquals(rs.getString("s.loc_id"), "10001");
             assertTrue(rs.next());
+            assertEquals(rs.getString("C.customer_id"), "0000000004");
             assertEquals(rs.getString("c.name"), "C4");
+            assertEquals(rs.getString("c.phone"), "999-999-4444");
+            assertEquals(rs.getString("c.address"), "404 XXX Street");
+            assertEquals(rs.getString("c.loc_id"), "10004");
+            assertEquals(rs.getDate("c.date"), new Date(format.parse("2013-11-22 14:22:56").getTime()));
             assertEquals(rs.getString("O.order_id"), "000000000000004");
+            assertEquals(rs.getString("O.customer_id"), "0000000004");
+            assertEquals(rs.getString("O.item_id"), "0000000006");
+            assertEquals(rs.getInt("o.price"), 510);
+            assertEquals(rs.getInt("o.quantity"), 4000);
+            assertEquals(rs.getTimestamp("o.date"), new Timestamp(format.parse("2013-11-26 13:26:04").getTime()));
+            assertEquals(rs.getString("I.item_id"), "0000000006");
             assertEquals(rs.getString("i.name"), "T6");
+            assertEquals(rs.getInt("i.price"), 600);
+            assertEquals(rs.getInt("i.discount1"), 8);
+            assertEquals(rs.getInt("i.discount2"), 15);
+            assertEquals(rs.getString("I.supplier_id"), "0000000006");
+            assertEquals(rs.getString("i.description"), "Item T6");
+            assertEquals(rs.getString("S.supplier_id"), "0000000006");
             assertEquals(rs.getString("s.name"), "S6");
+            assertEquals(rs.getString("s.phone"), "888-888-6666");
+            assertEquals(rs.getString("s.address"), "606 YYY Street");
+            assertEquals(rs.getString("s.loc_id"), "10006");
 
             assertFalse(rs.next());            
             

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/693d4e4e/phoenix-core/src/main/java/org/apache/phoenix/schema/ValueBitSet.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/schema/ValueBitSet.java b/phoenix-core/src/main/java/org/apache/phoenix/schema/ValueBitSet.java
index c9a5861..47acdac 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/schema/ValueBitSet.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/schema/ValueBitSet.java
@@ -113,7 +113,7 @@ public class ValueBitSet {
         // size of a short), then serialize the long array followed by the
         // array length.
         if (isVarLength()) {
-            short nLongs = (short)((maxSetBit + BITS_PER_LONG - 1) / BITS_PER_LONG);
+            short nLongs = (short)((maxSetBit + BITS_PER_LONG) / BITS_PER_LONG);
             for (int i = 0; i < nLongs; i++) {
                 offset = Bytes.putLong(b, offset, bits[i]);
             }
@@ -156,7 +156,7 @@ public class ValueBitSet {
                 bits[i] |= Bytes.toLong(ptr.get(), offset);
                 offset += Bytes.SIZEOF_LONG;
             }
-            maxSetBit = Math.max(maxSetBit, nLongs * Bytes.SIZEOF_LONG - 1);
+            maxSetBit = Math.max(maxSetBit, nLongs * BITS_PER_LONG - 1);
         } else {
             long l = Bytes.toShort(ptr.get(), ptr.getOffset() + ptr.getLength() - Bytes.SIZEOF_SHORT);
             bits[0] |= l;
@@ -172,7 +172,7 @@ public class ValueBitSet {
         if (schema == null) {
             return 0;
         }
-        return Bytes.SIZEOF_SHORT + (isVarLength() ? (maxSetBit + BITS_PER_LONG - 1) / BITS_PER_LONG * Bytes.SIZEOF_LONG : 0);
+        return Bytes.SIZEOF_SHORT + (isVarLength() ? (maxSetBit + BITS_PER_LONG) / BITS_PER_LONG * Bytes.SIZEOF_LONG : 0);
     }
     
     public static int getSize(int nBits) {