44import static com .databricks .jdbc .common .util .DatabricksTypeUtil .getDatabricksTypeFromSQLType ;
55import static com .databricks .jdbc .common .util .DatabricksTypeUtil .inferDatabricksType ;
66import static com .databricks .jdbc .common .util .SQLInterpolator .interpolateSQL ;
7+ import static com .databricks .jdbc .common .util .SQLInterpolator .surroundPlaceholdersWithQuotes ;
78import static com .databricks .jdbc .common .util .ValidationUtil .throwErrorIfNull ;
89
910import com .databricks .jdbc .common .StatementType ;
1011import com .databricks .jdbc .common .util .DatabricksTypeUtil ;
11- import com .databricks .jdbc .dbclient .impl .common .StatementId ;
1212import com .databricks .jdbc .exception .*;
1313import com .databricks .jdbc .log .JdbcLogger ;
1414import com .databricks .jdbc .log .JdbcLoggerFactory ;
@@ -45,6 +45,18 @@ public DatabricksPreparedStatement(DatabricksConnection connection, String sql)
4545 this .databricksBatchParameterMetaData = new ArrayList <>();
4646 }
4747
48+ DatabricksPreparedStatement (
49+ DatabricksConnection connection ,
50+ String sql ,
51+ boolean interpolateParameters ,
52+ DatabricksParameterMetaData databricksParameterMetaData ) {
53+ super (connection );
54+ this .sql = sql ;
55+ this .interpolateParameters = interpolateParameters ;
56+ this .databricksParameterMetaData = databricksParameterMetaData ;
57+ this .databricksBatchParameterMetaData = new ArrayList <>();
58+ }
59+
4860 @ Override
4961 public ResultSet executeQuery () throws SQLException {
5062 LOGGER .debug ("public ResultSet executeQuery()" );
@@ -834,18 +846,20 @@ private DatabricksResultSet interpolateIfRequiredAndExecute(StatementType statem
834846 * @throws DatabricksSQLException if there is an error executing the DESCRIBE QUERY command
835847 */
836848 private ResultSetMetaData getMetaDataFromDescribeQuery () throws DatabricksSQLException {
837-
838- try (DatabricksResultSet metadataResultSet = executeDescribeQueryCommand ()) {
849+ String describeQuerySQL = "DESCRIBE QUERY " + surroundPlaceholdersWithQuotes (sql );
850+ try (DatabricksPreparedStatement preparedStatement =
851+ new DatabricksPreparedStatement (
852+ connection , describeQuerySQL , interpolateParameters , databricksParameterMetaData );
853+ ResultSet metadataResultSet = preparedStatement .executeQuery (); ) {
839854 ArrayList <String > columnNames = new ArrayList <>();
840855 ArrayList <String > columnDataTypes = new ArrayList <>();
841856
842857 while (metadataResultSet .next ()) {
843858 columnNames .add (metadataResultSet .getString (1 ));
844859 columnDataTypes .add (metadataResultSet .getString (2 ));
845860 }
846-
847861 return new DatabricksResultSetMetaData (
848- StatementId . deserialize ( metadataResultSet . getStatementId () ),
862+ preparedStatement . getStatementId (),
849863 columnNames ,
850864 columnDataTypes ,
851865 this .connection .getConnectionContext ());
@@ -856,18 +870,4 @@ private ResultSetMetaData getMetaDataFromDescribeQuery() throws DatabricksSQLExc
856870 errorMessage , e , DatabricksDriverErrorCode .EXECUTE_STATEMENT_FAILED );
857871 }
858872 }
859-
860- private DatabricksResultSet executeDescribeQueryCommand () throws SQLException {
861- String interpolatedSql =
862- this .interpolateParameters
863- ? interpolateSQL (sql , this .databricksParameterMetaData .getParameterBindings ())
864- : sql ;
865-
866- interpolatedSql = "DESCRIBE QUERY " + interpolatedSql ;
867- Map <Integer , ImmutableSqlParameter > paramMap =
868- this .interpolateParameters
869- ? new HashMap <>()
870- : this .databricksParameterMetaData .getParameterBindings ();
871- return executeInternal (interpolatedSql , paramMap , StatementType .QUERY );
872- }
873873}
0 commit comments