[ https://issues.apache.org/jira/browse/PHOENIX-2765?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15196420#comment-15196420 ]
Thomas D'Silva commented on PHOENIX-2765: ----------------------------------------- [~c...@salesforce.com] I am unable to repro the exception using the steps you outlined. The test I ran is below, can you let me know if you are doing something else? {code} @Test public void testManyDynamicCols() throws Exception { Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); try (Connection conn = DriverManager.getConnection(getUrl(), props)) { conn.setAutoCommit(false); String ddl = "CREATE TABLE FOO_RECORD (" + "KEY1 char(15) not null," + "KEY2 char(15) not null," + "KEY3 SMALLINT not null," + "STATUS TINYINT not null, " + "KEY4 varchar(30), " + "KEY5 char(15) not null, " + "FOO_RECORD_ID char(15), " + "SYSMODSTAMP TIMESTAMP, " + "\"fa\".\"_\" char(1)," + "\"av\".\"_\" char(1)," + "\"rv\".\"_\" char(1), " + "\"fd\".\"_\" char(1), " + "CONSTRAINT PK PRIMARY KEY (KEY1, KEY2, KEY3, STATUS, KEY4, KEY5)" + ") VERSIONS=1,MULTI_TENANT=true,REPLICATION_SCOPE=1"; Statement stmt = conn.createStatement(); stmt.execute(ddl); String upsert = "UPSERT INTO FOO_RECORD(KEY1, KEY2, KEY3, STATUS, KEY4, KEY5, SYSMODSTAMP, " + "\"fa\".\"FIELD1\" VARCHAR, \"av\".\"FIELD2\" VARCHAR, \"av\".\"FIELD3\" VARCHAR, \"av\".\"FIELD4\" VARCHAR, \"rv\".\"FIELD1\" VARCHAR, " + "\"rv\".\"FIELD2\" VARCHAR, \"rv\".\"FIELD3\" VARCHAR, \"rv\".\"FIELD4\" VARCHAR, \"rv\".\"FIELD5\" VARCHAR, \"rv\".\"FIELD6\" VARCHAR, " + "\"rv\".\"FIELD7\" VARCHAR, \"rv\".\"FIELD8\" VARCHAR, \"rv\".\"FIELD9\" VARCHAR, \"rv\".\"FIELD10\" VARCHAR, \"rv\".\"FIELD11\" VARCHAR," + " \"rv\".\"FIELD12\" VARCHAR, \"rv\".\"FIELD13\" VARCHAR, \"rv\".\"FIELD14\" VARCHAR, \"rv\".\"FIELD15\" VARCHAR, \"fd\".\"FIELD1\" TINYINT, " + "\"fd\".\"FIELD2\" TINYINT, \"fd\".\"FIELD3\" TINYINT, \"fd\".\"FIELD4\" TINYINT, \"fd\".\"FIELD5\" TINYINT, \"fd\".\"FIELD6\" TINYINT," + " \"fd\".\"FIELD7\" TINYINT, \"fd\".\"FIELD8\" TINYINT, \"fd\".\"FIELD9\" TINYINT, \"fd\".\"FIELD10\" TINYINT, \"fd\".\"FIELD11\" TINYINT," + " \"fd\".\"FIELD12\" TINYINT, \"fd\".\"FIELD13\" TINYINT, \"fd\".\"FIELD14\" TINYINT, \"fd\".\"FIELD15\" TINYINT) " + "VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; PreparedStatement pstmt = conn.prepareStatement(upsert); for (int i=0; i<1000; ++i) { pstmt.setString(1, "000000000000000"); pstmt.setString(2, "000000000000000"); pstmt.setInt(3, i); pstmt.setInt(4, 1); pstmt.setString(5, "varchar"); pstmt.setString(6, "000000000000000"); Date date = DateUtil.parseDate("2015-01-01 00:00:00"); pstmt.setDate(7, date); pstmt.setString(8, "varchar"); pstmt.setString(9, "varchar"); pstmt.setString(10, "varchar"); pstmt.setString(11, "varchar"); pstmt.setString(12, "varchar"); pstmt.setString(13, "varchar"); pstmt.setString(14, "varchar"); pstmt.setString(15, "varchar"); pstmt.setString(16, "varchar"); pstmt.setString(17, "varchar"); pstmt.setString(18, "varchar"); pstmt.setString(19, "varchar"); pstmt.setString(20, "varchar"); pstmt.setString(21, "varchar"); pstmt.setString(22, "varchar"); pstmt.setString(23, "varchar"); pstmt.setString(24, "varchar"); pstmt.setString(25, "varchar"); pstmt.setString(26, "varchar"); pstmt.setInt(27, 1); pstmt.setInt(28, 1); pstmt.setInt(29, 1); pstmt.setInt(30, 1); pstmt.setInt(31, 1); pstmt.setInt(32, 1); pstmt.setInt(33, 1); pstmt.setInt(34, 1); pstmt.setInt(35, 1); pstmt.setInt(36, 1); pstmt.setInt(37, 1); pstmt.setInt(38, 1); pstmt.setInt(39, 1); pstmt.setInt(40, 1); pstmt.setInt(41, 1); pstmt.executeUpdate(); } pstmt.close(); conn.commit(); ResultSet rs = conn.createStatement().executeQuery("SELECT COUNT(*) FROM FOO_RECORD"); assertTrue(rs.next()); assertEquals(1000,rs.getInt(1)); assertFalse(rs.next()); } } {code} > PhoenixConnection commit throws ArrayIndexOutOfBoundsException after > upserting multiple rows with dynamic columns > ----------------------------------------------------------------------------------------------------------------- > > Key: PHOENIX-2765 > URL: https://issues.apache.org/jira/browse/PHOENIX-2765 > Project: Phoenix > Issue Type: Bug > Affects Versions: 4.6.0 > Reporter: Clifford Ker > Assignee: Thomas D'Silva > > 1. Create a Phoenix table with dynamic columns. > 2. Obtain a PhoenixConnection and PreparedStatement. > 3. Use the PreparedStatement to upsert multiple records using dynamic columns. > 4. Commit the transaction. > 5. Phoenix will throw ArrayIndexOutOfBoundException. > java.lang.ArrayIndexOutOfBoundsException: 14 > at > org.apache.phoenix.execute.MutationState.validate(MutationState.java:384) > at org.apache.phoenix.execute.MutationState.commit(MutationState.java:419) > at > org.apache.phoenix.jdbc.PhoenixConnection$3.call(PhoenixConnection.java:476) > at > org.apache.phoenix.jdbc.PhoenixConnection$3.call(PhoenixConnection.java:473) > at org.apache.phoenix.call.CallRunner.run(CallRunner.java:53) > at > org.apache.phoenix.jdbc.PhoenixConnection.commit(PhoenixConnection.java:473) > at > phoenix.connection.ProtectedPhoenixConnection.commit(ProtectedPhoenixConnection.java:41 > Pseudo Code and DML > CREATE TABLE IF NOT EXISTS FOO_RECORD > ( > KEY1 char(15) not null, > KEY2 char(15) not null, > KEY3 SMALLINT not null, > STATUS TINYINT not null, > KEY4 varchar(30), > KEY5 char(15) not null, > FOO_RECORD_ID char(15), > SYSMODSTAMP TIMESTAMP, > "av"."_" char(1), -- Column family av > "rv"."_" char(1), -- Column family rv > "fd"."_" char(1), -- Column family dv > CONSTRAINT PK PRIMARY KEY ( > KEY1, > KEY2, > KEY3, > STATUS, > KEY4, > KEY5 > ) > ) VERSIONS=1,MULTI_TENANT=true,REPLICATION_SCOPE=1 > try { > PreparedStatement preparedStmt = > phoenixConnection.prepareStatement(upsertStatement); > for (DARecord record : daRecords) { > prepareToUpserFooRecord(preparedStmt, fieldInfo, record); > } > preparedStmt.close(); > phoenixConnection.commit(); > } finally { > phoenixConnection.close(); > } > UPSERT INTO FOO_RECORD( > KEY1, KEY2, KEY3, STATUS, KEY4, KEY5, SYSMODSTAMP, "fa"."FIELD1" VARCHAR, > "av"."FIELD2" VARCHAR, "av"."FIELD3" VARCHAR, "av"."FIELD4" VARCHAR, > "rv"."FIELD1" VARCHAR, "rv"."FIELD2" VARCHAR, "rv"."FIELD3" VARCHAR, > "rv"."FIELD4" VARCHAR, "rv"."FIELD5" VARCHAR, "rv"."FIELD6" VARCHAR, > "rv"."FIELD7" VARCHAR, "rv"."FIELD8" VARCHAR, "rv"."FIELD9" VARCHAR, > "rv"."FIELD10" VARCHAR, "rv"."FIELD11" VARCHAR, "rv"."FIELD12" VARCHAR, > "rv"."FIELD13" VARCHAR, "rv"."FIELD14" VARCHAR, "rv"."FIELD15" VARCHAR, > "fd"."FIELD1" TINYINT, "fd"."FIELD2" TINYINT, "fd"."FIELD3" TINYINT, > "fd"."FIELD4" TINYINT, "fd"."FIELD5" TINYINT, "fd"."FIELD6" TINYINT, > "fd"."FIELD7" TINYINT, "fd"."FIELD8" TINYINT, "fd"."FIELD9" TINYINT, > "fd"."FIELD10" TINYINT, "fd"."FIELD11" TINYINT, "fd"."FIELD12" TINYINT, > "fd"."FIELD13" TINYINT, "fd"."FIELD13" TINYINT, "fd"."FIELD15" TINYINT) > VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, > ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) -- This message was sent by Atlassian JIRA (v6.3.4#6332)