Skip to content

Commit 2dc2a57

Browse files
committed
fix: parameterized queries
1 parent 0221f17 commit 2dc2a57

25 files changed

+963
-99
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 & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import { HostListProvider } from "./host_list_provider/host_list_provider";
2222
import { PluginManager } from "./plugin_manager";
2323

2424
import pkgStream from "stream";
25-
import { DriverConnectionProvider } from "./driver_connection_provider";
2625
import { ClientWrapper } from "./client_wrapper";
2726
import { ConnectionProviderManager } from "./connection_provider_manager";
2827
import { DefaultTelemetryFactory } from "./utils/telemetry/default_telemetry_factory";
@@ -35,10 +34,12 @@ import { AwsWrapperError } from "./utils/errors";
3534
import { Messages } from "./utils/messages";
3635
import { TransactionIsolationLevel } from "./utils/transaction_isolation_level";
3736
import { HostListProviderService } from "./host_list_provider_service";
37+
import { SessionStateClient } from "./session_state_client";
38+
import { ConnectionProvider } from "./connection_provider";
3839

3940
const { EventEmitter } = pkgStream;
4041

41-
export abstract class AwsClient extends EventEmitter {
42+
export abstract class AwsClient extends EventEmitter implements SessionStateClient {
4243
private _defaultPort: number = -1;
4344
protected telemetryFactory: TelemetryFactory;
4445
protected pluginManager: PluginManager;
@@ -55,7 +56,8 @@ export abstract class AwsClient extends EventEmitter {
5556
dbType: DatabaseType,
5657
knownDialectsByCode: Map<string, DatabaseDialect>,
5758
parser: ConnectionUrlParser,
58-
driverDialect: DriverDialect
59+
driverDialect: DriverDialect,
60+
connectionProvider: ConnectionProvider
5961
) {
6062
super();
6163
this.config = config;
@@ -110,7 +112,7 @@ export abstract class AwsClient extends EventEmitter {
110112
this.pluginManager = new PluginManager(
111113
container,
112114
this.properties,
113-
new ConnectionProviderManager(new DriverConnectionProvider(), WrapperProperties.CONNECTION_PROVIDER.get(this.properties)),
115+
new ConnectionProviderManager(connectionProvider, WrapperProperties.CONNECTION_PROVIDER.get(this.properties)),
114116
this.telemetryFactory
115117
);
116118
}

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)