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();
+ }
+
}