[
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:
-----------------------------------------
[[email protected]]
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)