Skip to content

Commit 1bebee4

Browse files
authored
[PECO-1080] Added version check that throws on low protocol version (#181)
Added version check that throws on low protocol version
1 parent 4d46022 commit 1bebee4

File tree

1 file changed

+20
-7
lines changed

1 file changed

+20
-7
lines changed

lib/DBSQLSession.ts

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,15 @@ import * as fs from 'fs';
22
import * as path from 'path';
33
import { stringify, NIL, parse } from 'uuid';
44
import fetch, { HeadersInit } from 'node-fetch';
5+
import { Thrift } from 'thrift';
56
import {
67
TSessionHandle,
78
TStatus,
89
TOperationHandle,
910
TSparkDirectResults,
1011
TSparkArrowTypes,
1112
TSparkParameter,
13+
TProtocolVersion,
1214
} from '../thrift/TCLIService_types';
1315
import HiveDriver from './hive/HiveDriver';
1416
import { Int64 } from './hive/Types';
@@ -81,17 +83,28 @@ function getArrowOptions(): {
8183
}
8284

8385
function 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

Comments
 (0)