[ https://issues.apache.org/jira/browse/DRILL-4729?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Kunal Khatua updated DRILL-4729: -------------------------------- Reviewer: Chun Chang > Add support for prepared statement implementation on server side > ---------------------------------------------------------------- > > Key: DRILL-4729 > URL: https://issues.apache.org/jira/browse/DRILL-4729 > Project: Apache Drill > Issue Type: Sub-task > Components: Metadata > Reporter: Venki Korukanti > Assignee: Venki Korukanti > Fix For: 1.8.0 > > > Currently Drill JDBC/ODBC driver implements its own prepared statement > implementation, which basically issues limit 0 query to get the metadata and > then executes the actual query. So the query is planned twice (for metadata > fetch and actual execution). Proposal is to move that logic to server where > we can make optimizations without disrupting/updating the JDBC/ODBC drivers. > * {{PreparedStatement createPreparedStatement(String query)}}. > {{PreparedStatement}} object contains the following: > ** {{ResultSetMetadata getResultSetMetadata()}} > *** {{ResultsSetMetadata}} contains methods to fetch info about output > columns of the query. What info these methods provide is given in this > [spreadsheet|https://docs.google.com/spreadsheets/d/1A6nqUQo5xJaZDQlDTittpVrK7t4Kylycs3P32Yn_O5k/edit?usp=sharing]. > It lists the ODBC/JDBC requirements and what Drill will provided through > object {{ResultsSetMetadata}}. > *** Server can put more info here which is opaque to client and use it in > server when the client sends execute prepared statement query request. > Overload the current submit query API to take the {{PreparedStatement}} > returned above. > In the initial implementation, server side implementation of > {{createPreparedStatement}} API is implemented as follows: > * Runs the query with {{LIMIT 0}}, gets the schema > * Convert the query into a binary blob and set it as opaque object in > {{PreparedStatement}}. > When the {{PreparedStatement}} is submitted for execution, reconstruct the > query from binary blob in opaque component of {{PreparedStatement}} and > execute it from scratch. > Opaque component of the {{PreparedStatement}} is where we can save more > information which we can use for optimizations/speedups. > NOTE: We are not going to worry about parameters in prepared query in initial > implementation. We can provide the functionality later if there is sufficient > demand from Drill community. > Changes in this patch are going to include protobuf messages, server side > messages and Java client APIs. Native client changes are going to be tracked > in a separate JIRA. -- This message was sent by Atlassian JIRA (v6.3.4#6332)