[ https://issues.apache.org/jira/browse/CALCITE-1196?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15238538#comment-15238538 ]
Josh Elser commented on CALCITE-1196: ------------------------------------- [~julianhyde], I was wonder if you recall a reason that the Signature isn't cached with a StatementInfo inside the server. It seems like we could avoid sending it back over the wire in Execute. If not, no a big deal. I can mess around with it. > Cache statement handle signatures for prepared statements so that the client > won't have to send them during execution > --------------------------------------------------------------------------------------------------------------------- > > Key: CALCITE-1196 > URL: https://issues.apache.org/jira/browse/CALCITE-1196 > Project: Calcite > Issue Type: Improvement > Components: avatica > Affects Versions: avatica-1.7.1 > Reporter: Francis Chuang > Priority: Minor > > With avatica 1.7.1, to prepare and execute a statement, we need to do the > following (shown using curl): > {code} > C:\Users\user > λ curl localhost:8765 -XPOST --data '{"request": "prepare","connectionId": > "my-conn","sql": "SELECT * FROM my_table","maxRowCount": 1}' > { > "response": "prepare", > "statement": { > "connectionId": "my-conn", > "id": 25, > "signature": { > "columns": [ > { > "ordinal": 0, > "autoIncrement": false, > "caseSensitive": false, > "searchable": true, > "currency": false, > "nullable": 0, > "signed": true, > "displaySize": 40, > "label": "K", > "columnName": "K", > "schemaName": "", > "precision": 0, > "scale": 0, > "tableName": "MY_TABLE", > "catalogName": "", > "type": { > "type": "scalar", > "id": -5, > "name": "BIGINT", > "rep": "PRIMITIVE_LONG" > }, > "readOnly": true, > "writable": false, > "definitelyWritable": false, > "columnClassName": "java.lang.Long" > }, > { > "ordinal": 1, > "autoIncrement": false, > "caseSensitive": false, > "searchable": true, > "currency": false, > "nullable": 1, > "signed": false, > "displaySize": 40, > "label": "V", > "columnName": "V", > "schemaName": "", > "precision": 0, > "scale": 0, > "tableName": "MY_TABLE", > "catalogName": "", > "type": { > "type": "scalar", > "id": 12, > "name": "VARCHAR", > "rep": "STRING" > }, > "readOnly": true, > "writable": false, > "definitelyWritable": false, > "columnClassName": "java.lang.String" > } > ], > "sql": "SELECT * FROM my_table", > "parameters": [], > "cursorFactory": { > "style": "LIST", > "clazz": null, > "fieldNames": null > }, > "statementType": null > } > }, > "rpcMetadata": { > "response": "rpcMetadata", > "serverAddress": "f826338-phoenix-server.f826338:8765" > } > } > C:\Users\user > λ curl localhost:8765 -XPOST --data '{ > "request": "execute", > "statementHandle": { > "connectionId": "my-conn", > "id": 25, > "signature": { > "columns": [ > { > "ordinal": 0, > "autoIncrement": false, > "caseSensitive": false, > "searchable": true, > "currency": false, > "nullable": 0, > "signed": true, > "displaySize": 40, > "label": "K", > "columnName": "K", > "schemaName": "", > "precision": 0, > "scale": 0, > "tableName": "MY_TABLE", > "catalogName": "", > "type": { > "type": "scalar", > "id": -5, > "name": "BIGINT", > "rep": "PRIMITIVE_LONG" > }, > "readOnly": true, > "writable": false, > "definitelyWritable": false, > "columnClassName": "java.lang.Long" > }, > { > "ordinal": 1, > "autoIncrement": false, > "caseSensitive": false, > "searchable": true, > "currency": false, > "nullable": 1, > "signed": false, > "displaySize": 40, > "label": "V", > "columnName": "V", > "schemaName": "", > "precision": 0, > "scale": 0, > "tableName": "MY_TABLE", > "catalogName": "", > "type": { > "type": "scalar", > "id": 12, > "name": "VARCHAR", > "rep": "STRING" > }, > "readOnly": true, > "writable": false, > "definitelyWritable": false, > "columnClassName": "java.lang.String" > } > ], > "sql": "SELECT * FROM my_table", > "parameters": [], > "cursorFactory": { > "style": "LIST", > "clazz": null, > "fieldNames": null > }, > "statementType": null > } > }, > "parameterValues": [], > "maxRowCount": 1 > }' > {code} > Notice that we receive the signature in the {{statementHandle}} when running > a prepare request. We then attach this so the execute request to execute the > statement. > The UX can be improved by caching that signature on the server along with the > prepared statement to avoid having to ask the client to send it with the > execution request. -- This message was sent by Atlassian JIRA (v6.3.4#6332)