You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by ja...@apache.org on 2014/03/05 00:36:50 UTC

git commit: PHOENIX-106 NPE when adding dynamic columns to a salted table (JamesTaylor)

Repository: incubator-phoenix
Updated Branches:
  refs/heads/master 7b7ad1c1b -> b355c2a08


PHOENIX-106 NPE when adding dynamic columns to a salted table (JamesTaylor)


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

Branch: refs/heads/master
Commit: b355c2a08f92763f1d7272f2a2300e024e70d756
Parents: 7b7ad1c
Author: James Taylor <ja...@apache.org>
Authored: Tue Mar 4 15:36:41 2014 -0800
Committer: James Taylor <ja...@apache.org>
Committed: Tue Mar 4 15:36:41 2014 -0800

----------------------------------------------------------------------
 .../apache/phoenix/compile/FromCompiler.java    |  7 ++-
 .../end2end/UpsertSelectAutoCommitTest.java     | 49 ++++++++++++++++++++
 2 files changed, 54 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/b355c2a0/phoenix-core/src/main/java/org/apache/phoenix/compile/FromCompiler.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/compile/FromCompiler.java b/phoenix-core/src/main/java/org/apache/phoenix/compile/FromCompiler.java
index 2ca61e2..a987798 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/compile/FromCompiler.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/compile/FromCompiler.java
@@ -312,8 +312,11 @@ public class FromCompiler {
                 throws SQLException {
             if (!dynColumns.isEmpty()) {
                 List<PColumn> allcolumns = new ArrayList<PColumn>();
-                allcolumns.addAll(theTable.getColumns());
-                int position = allcolumns.size();
+                List<PColumn> existingColumns = theTable.getColumns();
+                // Need to skip the salting column, as it's added in the makePTable call below
+                allcolumns.addAll(theTable.getBucketNum() == null ? existingColumns : existingColumns.subList(1, existingColumns.size()));
+                // Position still based on with the salting columns
+                int position = existingColumns.size();
                 PName defaultFamilyName = PNameFactory.newName(SchemaUtil.getEmptyColumnFamily(theTable));
                 for (ColumnDef dynColumn : dynColumns) {
                     PName familyName = defaultFamilyName;

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/b355c2a0/phoenix-core/src/test/java/org/apache/phoenix/end2end/UpsertSelectAutoCommitTest.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/test/java/org/apache/phoenix/end2end/UpsertSelectAutoCommitTest.java b/phoenix-core/src/test/java/org/apache/phoenix/end2end/UpsertSelectAutoCommitTest.java
index e0a315d..ef68847 100644
--- a/phoenix-core/src/test/java/org/apache/phoenix/end2end/UpsertSelectAutoCommitTest.java
+++ b/phoenix-core/src/test/java/org/apache/phoenix/end2end/UpsertSelectAutoCommitTest.java
@@ -25,6 +25,7 @@ import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
 import java.sql.Connection;
+import java.sql.Date;
 import java.sql.DriverManager;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
@@ -83,4 +84,52 @@ public class UpsertSelectAutoCommitTest extends BaseHBaseManagedTimeTest {
         assertFalse(rs.next());
         
     }
+
+    @Test
+    public void testDynamicUpsertSelect() throws Exception {
+        Connection conn = DriverManager.getConnection(getUrl());
+        String cursorDDL = " CREATE TABLE IF NOT EXISTS CURSOR (ORGANIZATION_ID VARCHAR(15) NOT NULL, \n"
+                + "QUERY_ID VARCHAR(15) NOT NULL, \n"
+                + "CURSOR_ORDER UNSIGNED_LONG NOT NULL, \n"
+                + "CONSTRAINT API_HBASE_CURSOR_STORAGE_PK PRIMARY KEY (ORGANIZATION_ID, QUERY_ID, CURSOR_ORDER))\n"
+                + "SALT_BUCKETS = 4";
+        conn.createStatement().execute(cursorDDL);
+        
+        String dataTableDDL = "CREATE TABLE IF NOT EXISTS PLINYTEST" +
+                "(" +
+                "ORGANIZATION_ID CHAR(15) NOT NULL, " +
+                "PLINY_ID CHAR(15) NOT NULL, " +
+                "CREATED_DATE DATE NOT NULL, " + 
+                "TEXT VARCHAR, " +
+                "CONSTRAINT PK PRIMARY KEY " +
+                "(" +
+                "ORGANIZATION_ID, " +
+                "PLINY_ID, "  +
+                "CREATED_DATE" +
+                ")" +
+                ")";
+        
+        conn.createStatement().execute(dataTableDDL);
+        PreparedStatement stmt = null;
+        String upsert = "UPSERT INTO PLINYTEST VALUES (?, ?, ?, ?)";
+        stmt = conn.prepareStatement(upsert);
+        stmt.setString(1, getOrganizationId());
+        stmt.setString(2, "aaaaaaaaaaaaaaa");
+        stmt.setDate(3, new Date(System.currentTimeMillis()));
+        stmt.setString(4, "text");
+        stmt.executeUpdate();
+        conn.commit();
+        
+        String upsertSelect = "UPSERT INTO CURSOR (ORGANIZATION_ID, QUERY_ID, CURSOR_ORDER, PLINY_ID CHAR(15),CREATED_DATE DATE) SELECT ?, ?, ?, PLINY_ID, CREATED_DATE FROM PLINYTEST WHERE ORGANIZATION_ID = ?";
+        stmt = conn.prepareStatement(upsertSelect);
+        String orgId = getOrganizationId();
+        stmt.setString(1, orgId);
+        stmt.setString(2, "queryqueryquery");
+
+        stmt.setInt(3, 1);
+        stmt.setString(4, orgId);
+        stmt.executeUpdate();
+        conn.commit();
+    }
+    
 }