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)