PHOENIX-2301 NullPointerException when upserting into a char array column

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

Branch: refs/heads/txn
Commit: 7afa91ab97a85b7e33f3a686e4ddff42697f50b2
Parents: 016b2b9
Author: Dumindu Buddhika <[email protected]>
Authored: Sun Nov 15 19:12:27 2015 +0530
Committer: Dumindu Buddhika <[email protected]>
Committed: Sun Nov 15 19:12:27 2015 +0530

----------------------------------------------------------------------
 .../org/apache/phoenix/end2end/ArrayIT.java     | 26 ++++++++++++++++++++
 .../org/apache/phoenix/schema/PTableImpl.java   |  2 +-
 2 files changed, 27 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/phoenix/blob/7afa91ab/phoenix-core/src/it/java/org/apache/phoenix/end2end/ArrayIT.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/ArrayIT.java 
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/ArrayIT.java
index b7a2ad2..7400127 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/ArrayIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/ArrayIT.java
@@ -2679,4 +2679,30 @@ public class ArrayIT extends BaseClientManagedTimeIT {
         assertEquals(conn.createArrayOf("INTEGER", new Integer[]{5, 6}), 
rs.getArray(4));
         assertEquals(3, rs.getInt(5));
     }
+
+    @Test
+    public void testCharPrimaryKey() throws SQLException{
+        long ts = nextTimestamp();
+        Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
+        props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts 
+ 10));
+        Connection conn = DriverManager.getConnection(getUrl(), props);
+        String ddl = "CREATE TABLE TEST5(testCharArray CHAR(3)[], CONSTRAINT 
test_pk PRIMARY KEY(testCharArray)) DEFAULT_COLUMN_FAMILY='T'";
+        conn.createStatement().execute(ddl);
+        conn.close();
+
+        props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts 
+ 30));
+        conn = DriverManager.getConnection(getUrl(), props);
+        PreparedStatement stmt = conn.prepareStatement("UPSERT INTO TEST5 
VALUES (ARRAY['aaa', 'bbb', 'ccc'])");
+        stmt.execute();
+        conn.commit();
+        conn.close();
+
+        props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts 
+ 40));
+        conn = DriverManager.getConnection(getUrl(), props);
+        ResultSet rs;
+        stmt = conn.prepareStatement("SELECT testCharArray from TEST5");
+        rs = stmt.executeQuery();
+        assertTrue(rs.next());
+        assertEquals(conn.createArrayOf("CHAR", new String[]{"aaa", "bbb", 
"ccc"}), rs.getArray(1));
+    }
 }

http://git-wip-us.apache.org/repos/asf/phoenix/blob/7afa91ab/phoenix-core/src/main/java/org/apache/phoenix/schema/PTableImpl.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/schema/PTableImpl.java 
b/phoenix-core/src/main/java/org/apache/phoenix/schema/PTableImpl.java
index b591281..ff4b512 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/schema/PTableImpl.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/schema/PTableImpl.java
@@ -579,7 +579,7 @@ public class PTableImpl implements PTable {
                         // once we require tables to have been upgraded
                         byteValue = StringUtil.padChar(byteValue, maxLength);
                     }
-                } else if (maxLength != null && byteValue.length > maxLength) {
+                } else if (maxLength != null && !type.isArrayType() && 
byteValue.length > maxLength) {
                     throw new DataExceedsCapacityException(name.getString() + 
"." + column.getName().getString() + " may not exceed " + maxLength + " bytes 
(" + SchemaUtil.toString(type, byteValue) + ")");
                 }
                 os.write(byteValue, 0, byteValue.length);

Reply via email to