Skip to content

Commit 182e682

Browse files
committed
fix: parameterized queries
1 parent 0221f17 commit 182e682

25 files changed

+963
-98
lines changed

.github/workflows/integration_tests_latest.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ on:
55
push:
66
branches:
77
- main
8+
- fix/parameterized-queries
89
paths-ignore:
910
- "**/*.md"
1011
- "**/*.jpg"

common/lib/aws_client.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,12 @@ import { AwsWrapperError } from "./utils/errors";
3535
import { Messages } from "./utils/messages";
3636
import { TransactionIsolationLevel } from "./utils/transaction_isolation_level";
3737
import { HostListProviderService } from "./host_list_provider_service";
38+
import { SessionStateClient } from "./session_state_client";
39+
import { ConnectionProvider } from "./connection_provider";
3840

3941
const { EventEmitter } = pkgStream;
4042

41-
export abstract class AwsClient extends EventEmitter {
43+
export abstract class AwsClient extends EventEmitter implements SessionStateClient {
4244
private _defaultPort: number = -1;
4345
protected telemetryFactory: TelemetryFactory;
4446
protected pluginManager: PluginManager;
@@ -55,7 +57,8 @@ export abstract class AwsClient extends EventEmitter {
5557
dbType: DatabaseType,
5658
knownDialectsByCode: Map<string, DatabaseDialect>,
5759
parser: ConnectionUrlParser,
58-
driverDialect: DriverDialect
60+
driverDialect: DriverDialect,
61+
connectionProvider: ConnectionProvider
5962
) {
6063
super();
6164
this.config = config;
@@ -110,7 +113,7 @@ export abstract class AwsClient extends EventEmitter {
110113
this.pluginManager = new PluginManager(
111114
container,
112115
this.properties,
113-
new ConnectionProviderManager(new DriverConnectionProvider(), WrapperProperties.CONNECTION_PROVIDER.get(this.properties)),
116+
new ConnectionProviderManager(connectionProvider, WrapperProperties.CONNECTION_PROVIDER.get(this.properties)),
114117
this.telemetryFactory
115118
);
116119
}

common/lib/client_wrapper.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@ export interface ClientWrapper {
2222
readonly properties: Map<string, any>;
2323
readonly id: string;
2424

25+
// Internal method, executes wrapper-specific queries like the topology query.
2526
query(sql: string): Promise<any>;
27+
query(config: any, values?: any, callback?: any): Promise<any>;
2628

2729
end(): Promise<void>;
2830

common/lib/driver_dialect/driver_dialect.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,6 @@ export interface DriverDialect {
3333
setQueryTimeout(props: Map<string, any>, sql?: any, wrapperConnectTimeout?: any): void;
3434

3535
setKeepAliveProperties(props: Map<string, any>, keepAliveProps: any): void;
36+
37+
getQueryFromMethodArg(methodArg: any): string;
3638
}

common/lib/host_list_provider_service.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import { DatabaseDialect } from "./database_dialect/database_dialect";
2121
import { HostInfoBuilder } from "./host_info_builder";
2222
import { ConnectionUrlParser } from "./utils/connection_url_parser";
2323
import { TelemetryFactory } from "./utils/telemetry/telemetry_factory";
24-
import { AllowedAndBlockedHosts } from "./AllowedAndBlockedHosts";
24+
import { AllowedAndBlockedHosts } from "./allowed_and_blocked_hosts";
2525

2626
export interface HostListProviderService {
2727
getHostListProvider(): HostListProvider | null;

common/lib/pg_client_wrapper.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ export class PgClientWrapper implements ClientWrapper {
4141
this.id = uniqueId("PgClient_");
4242
}
4343

44-
query(sql: string): Promise<any> {
45-
return this.client?.query(sql);
44+
query(config: any, values?: any, callback?: any): Promise<any> {
45+
return this.client?.query(config, values, callback);
4646
}
4747

4848
queryWithTimeout(sql: string): Promise<any> {

common/lib/plugin_service.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ import { DatabaseDialectCodes } from "./database_dialect/database_dialect_codes"
4343
import { getWriter, logTopology } from "./utils/utils";
4444
import { TelemetryFactory } from "./utils/telemetry/telemetry_factory";
4545
import { DriverDialect } from "./driver_dialect/driver_dialect";
46-
import { AllowedAndBlockedHosts } from "./AllowedAndBlockedHosts";
46+
import { AllowedAndBlockedHosts } from "./allowed_and_blocked_hosts";
4747
import { ConnectionPlugin } from "./connection_plugin";
4848

4949
export interface PluginService extends ErrorHandler {

common/lib/plugins/custom_endpoint/custom_endpoint_monitor_impl.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import { PluginService } from "../../plugin_service";
2020
import { TelemetryCounter } from "../../utils/telemetry/telemetry_counter";
2121
import { logger } from "../../../logutils";
2222
import { CustomEndpointInfo } from "./custom_endpoint_info";
23-
import { AllowedAndBlockedHosts } from "../../AllowedAndBlockedHosts";
23+
import { AllowedAndBlockedHosts } from "../../allowed_and_blocked_hosts";
2424
import { CacheMap } from "../../utils/cache_map";
2525
import { MemberListType } from "./member_list_type";
2626
import { Messages } from "../../utils/messages";

common/lib/plugins/read_write_splitting_plugin.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ export class ReadWriteSplittingPlugin extends AbstractConnectionPlugin implement
142142
}
143143

144144
override async execute<T>(methodName: string, executeFunc: () => Promise<T>, methodArgs: any): Promise<T> {
145-
const statement = methodArgs.sql ?? methodArgs;
145+
const statement = SqlMethodUtils.parseMethodArgs(methodArgs, this.pluginService.getDriverDialect());
146146
const statements = SqlMethodUtils.parseMultiStatementQueries(statement);
147147

148148
const updateReadOnly: boolean | undefined = SqlMethodUtils.doesSetReadOnly(statements, this.pluginService.getDialect());

0 commit comments

Comments
 (0)