[ 
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)

Reply via email to