@@ -2,13 +2,15 @@ import * as fs from 'fs';
22import * as path from 'path' ;
33import { stringify , NIL , parse } from 'uuid' ;
44import fetch , { HeadersInit } from 'node-fetch' ;
5+ import { Thrift } from 'thrift' ;
56import {
67 TSessionHandle ,
78 TStatus ,
89 TOperationHandle ,
910 TSparkDirectResults ,
1011 TSparkArrowTypes ,
1112 TSparkParameter ,
13+ TProtocolVersion ,
1214} from '../thrift/TCLIService_types' ;
1315import HiveDriver from './hive/HiveDriver' ;
1416import { Int64 } from './hive/Types' ;
@@ -81,17 +83,28 @@ function getArrowOptions(): {
8183}
8284
8385function getQueryParameters (
86+ sessionHandle : TSessionHandle ,
8487 namedParameters ?: Record < string , DBSQLParameter | DBSQLParameterValue > ,
8588) : Array < TSparkParameter > {
8689 const result : Array < TSparkParameter > = [ ] ;
8790
8891 if ( namedParameters !== undefined ) {
89- for ( const name of Object . keys ( namedParameters ) ) {
90- const value = namedParameters [ name ] ;
91- const param = value instanceof DBSQLParameter ? value : new DBSQLParameter ( { value } ) ;
92- const sparkParam = param . toSparkParameter ( ) ;
93- sparkParam . name = name ;
94- result . push ( sparkParam ) ;
92+ if (
93+ sessionHandle ?. serverProtocolVersion &&
94+ sessionHandle . serverProtocolVersion >= TProtocolVersion . SPARK_CLI_SERVICE_PROTOCOL_V8
95+ ) {
96+ for ( const name of Object . keys ( namedParameters ) ) {
97+ const value = namedParameters [ name ] ;
98+ const param = value instanceof DBSQLParameter ? value : new DBSQLParameter ( { value } ) ;
99+ const sparkParam = param . toSparkParameter ( ) ;
100+ sparkParam . name = name ;
101+ result . push ( sparkParam ) ;
102+ }
103+ } else {
104+ throw new Thrift . TProtocolException (
105+ Thrift . TProtocolExceptionType . BAD_VERSION ,
106+ 'Server version does not support parameterized queries' ,
107+ ) ;
95108 }
96109 }
97110
@@ -164,7 +177,7 @@ export default class DBSQLSession implements IDBSQLSession {
164177 ...getDirectResultsOptions ( options . maxRows ) ,
165178 ...getArrowOptions ( ) ,
166179 canDownloadResult : options . useCloudFetch ?? globalConfig . useCloudFetch ,
167- parameters : getQueryParameters ( options . namedParameters ) ,
180+ parameters : getQueryParameters ( this . sessionHandle , options . namedParameters ) ,
168181 } ) ;
169182 const response = await this . handleResponse ( operationPromise ) ;
170183 const operation = this . createOperation ( response ) ;
0 commit comments