You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@calcite.apache.org by "shining (JIRA)" <ji...@apache.org> on 2019/03/21 06:06:00 UTC
[jira] [Created] (CALCITE-2939) NPE Array Type serialToJdbc in
TypedValue when executeBatch
shining created CALCITE-2939:
--------------------------------
Summary: NPE Array Type serialToJdbc in TypedValue when executeBatch
Key: CALCITE-2939
URL: https://issues.apache.org/jira/browse/CALCITE-2939
Project: Calcite
Issue Type: Bug
Components: avatica
Affects Versions: 1.12.0
Reporter: shining
I am using phoenix QueryServer upsert data in batch,the code as follows:
{code:java}
@Test
public void preparedStatementArrayTest() throws Exception {
final String tableName = "TEST";
try (Connection conn = DriverManager.getConnection("jdbc:phoenix:thin:http://localhost:8765");
Statement stmt = conn.createStatement()) {
conn.setAutoCommit(false);
assertFalse(stmt.execute("DROP TABLE IF EXISTS " + tableName));
assertFalse(stmt.execute("CREATE TABLE " + tableName + " ("
+ "pk VARCHAR NOT NULL PRIMARY KEY, "
+ "histogram INTEGER[])")
);
conn.commit();
int numRows = 10;
int numEvenElements = 4;
int numOddElements = 6;
try (PreparedStatement pstmt = conn.prepareStatement("UPSERT INTO " + tableName + " values(?, ?)")) {
for (int i = 0; i < numRows; i++) {
pstmt.setString(1, Integer.toString(i));
int arrayLength = i % 2 == 0 ? numEvenElements : numOddElements;
Object[] arrayData = new Object[arrayLength];
for (int arrayOffset = 0; arrayOffset < arrayLength; arrayOffset++) {
arrayData[arrayOffset] = Integer.toString(getArrayValueForOffset(arrayOffset));
}
pstmt.setArray(2, conn.createArrayOf("VARCHAR", arrayData));
pstmt.addBatch();
pstmt.executeBatch();
}
conn.commit();
}
}
{code}
When encounter Array type, I get an error NPE:
{code:java}
java.lang.NullPointerException
at org.apache.calcite.avatica.remote.TypedValue.serialToJdbc(TypedValue.java:362)
at org.apache.calcite.avatica.remote.TypedValue.protoToJdbc(TypedValue.java:895)
at org.apache.calcite.avatica.jdbc.JdbcMeta.executeBatchProtobuf(JdbcMeta.java:986)
at org.apache.calcite.avatica.remote.LocalService.apply(LocalService.java:363)
at org.apache.calcite.avatica.remote.Service$ExecuteBatchRequest.accept(Service.java:2990)
at org.apache.calcite.avatica.remote.Service$ExecuteBatchRequest.accept(Service.java:2942)
at org.apache.calcite.avatica.remote.AbstractHandler.apply(AbstractHandler.java:94)
{code}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)