You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Josh Elser (JIRA)" <ji...@apache.org> on 2016/04/13 05:34:25 UTC

[jira] [Commented] (CALCITE-1196) Cache statement handle signatures for prepared statements so that the client won't have to send them during execution

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