You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Danny Chan (JIRA)" <ji...@apache.org> on 2019/03/22 12:30:00 UTC
[jira] [Assigned] (CALCITE-2939) NPE Array Type serialToJdbc in
TypedValue when executeBatch
[ https://issues.apache.org/jira/browse/CALCITE-2939?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Danny Chan reassigned CALCITE-2939:
-----------------------------------
Assignee: Danny Chan
> 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
> Assignee: Danny Chan
> Priority: Major
>
> 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)