4
4
* SPDX-License-Identifier: Apache-2.0
5
5
*/
6
6
7
- import { Redshift , RedshiftServerless , RedshiftData } from 'aws-sdk'
8
- import globals from '../extensionGlobals'
9
- import { ClusterCredentials , ClustersMessage , GetClusterCredentialsMessage } from 'aws-sdk/clients/redshift'
10
7
import {
11
- GetCredentialsRequest ,
12
- GetCredentialsResponse ,
13
- ListWorkgroupsResponse ,
14
- } from 'aws-sdk/clients/redshiftserverless'
8
+ ClusterCredentials ,
9
+ ClustersMessage ,
10
+ DescribeClustersCommand ,
11
+ DescribeClustersMessage ,
12
+ GetClusterCredentialsCommand ,
13
+ GetClusterCredentialsMessage ,
14
+ RedshiftClient ,
15
+ } from '@aws-sdk/client-redshift'
15
16
import {
17
+ DescribeStatementCommand ,
16
18
DescribeStatementRequest ,
19
+ ExecuteStatementCommand ,
20
+ GetStatementResultCommand ,
17
21
GetStatementResultRequest ,
18
22
GetStatementResultResponse ,
23
+ ListDatabasesCommand ,
24
+ ListDatabasesRequest ,
19
25
ListDatabasesResponse ,
26
+ ListSchemasCommand ,
27
+ ListSchemasRequest ,
20
28
ListSchemasResponse ,
29
+ ListTablesCommand ,
30
+ ListTablesRequest ,
21
31
ListTablesResponse ,
22
- } from 'aws-sdk/clients/redshiftdata'
32
+ RedshiftDataClient ,
33
+ } from '@aws-sdk/client-redshift-data'
34
+ import {
35
+ GetCredentialsCommand ,
36
+ GetCredentialsRequest ,
37
+ GetCredentialsResponse ,
38
+ ListWorkgroupsCommand ,
39
+ ListWorkgroupsRequest ,
40
+ ListWorkgroupsResponse ,
41
+ RedshiftServerlessClient ,
42
+ } from '@aws-sdk/client-redshift-serverless'
43
+ import globals from '../extensionGlobals'
23
44
import { ConnectionParams , ConnectionType , RedshiftWarehouseType } from '../../awsService/redshift/models/models'
24
45
import { sleep } from '../utilities/timeoutUtils'
25
46
import { SecretsManagerClient } from './secretsManagerClient'
@@ -37,21 +58,21 @@ export class DefaultRedshiftClient {
37
58
public readonly regionCode : string ,
38
59
private readonly redshiftDataClientProvider : (
39
60
regionCode : string
40
- ) => Promise < RedshiftData > = createRedshiftDataClient ,
41
- private readonly redshiftClientProvider : ( regionCode : string ) => Promise < Redshift > = createRedshiftSdkClient ,
61
+ ) => RedshiftDataClient = createRedshiftDataClient ,
62
+ private readonly redshiftClientProvider : ( regionCode : string ) => RedshiftClient = createRedshiftSdkClient ,
42
63
private readonly redshiftServerlessClientProvider : (
43
64
regionCode : string
44
- ) => Promise < RedshiftServerless > = createRedshiftServerlessSdkClient
65
+ ) => RedshiftServerlessClient = createRedshiftServerlessSdkClient
45
66
) { }
46
67
47
68
// eslint-disable-next-line require-yield
48
69
public async describeProvisionedClusters ( nextToken ?: string ) : Promise < ClustersMessage > {
49
- const redshiftClient = await this . redshiftClientProvider ( this . regionCode )
50
- const request : Redshift . DescribeClustersMessage = {
70
+ const redshiftClient = this . redshiftClientProvider ( this . regionCode )
71
+ const request : DescribeClustersMessage = {
51
72
Marker : nextToken ,
52
73
MaxRecords : 20 ,
53
74
}
54
- const response = await redshiftClient . describeClusters ( request ) . promise ( )
75
+ const response = await redshiftClient . send ( new DescribeClustersCommand ( request ) )
55
76
if ( response . Clusters ) {
56
77
response . Clusters = response . Clusters . filter (
57
78
( cluster ) => cluster . ClusterAvailabilityStatus ?. toLowerCase ( ) === 'available'
@@ -61,12 +82,12 @@ export class DefaultRedshiftClient {
61
82
}
62
83
63
84
public async listServerlessWorkgroups ( nextToken ?: string ) : Promise < ListWorkgroupsResponse > {
64
- const redshiftServerlessClient = await this . redshiftServerlessClientProvider ( this . regionCode )
65
- const request : RedshiftServerless . ListWorkgroupsRequest = {
85
+ const redshiftServerlessClient = this . redshiftServerlessClientProvider ( this . regionCode )
86
+ const request : ListWorkgroupsRequest = {
66
87
nextToken : nextToken ,
67
88
maxResults : 20 ,
68
89
}
69
- const response = await redshiftServerlessClient . listWorkgroups ( request ) . promise ( )
90
+ const response = await redshiftServerlessClient . send ( new ListWorkgroupsCommand ( request ) )
70
91
if ( response . workgroups ) {
71
92
response . workgroups = response . workgroups . filter (
72
93
( workgroup ) => workgroup . status ?. toLowerCase ( ) === 'available'
@@ -76,10 +97,10 @@ export class DefaultRedshiftClient {
76
97
}
77
98
78
99
public async listDatabases ( connectionParams : ConnectionParams , nextToken ?: string ) : Promise < ListDatabasesResponse > {
79
- const redshiftDataClient = await this . redshiftDataClientProvider ( this . regionCode )
100
+ const redshiftDataClient = this . redshiftDataClientProvider ( this . regionCode )
80
101
const warehouseType = connectionParams . warehouseType
81
102
const warehouseIdentifier = connectionParams . warehouseIdentifier
82
- const input : RedshiftData . ListDatabasesRequest = {
103
+ const input : ListDatabasesRequest = {
83
104
ClusterIdentifier : warehouseType === RedshiftWarehouseType . PROVISIONED ? warehouseIdentifier : undefined ,
84
105
Database : connectionParams . database ,
85
106
DbUser :
@@ -94,13 +115,13 @@ export class DefaultRedshiftClient {
94
115
? connectionParams . secret
95
116
: undefined ,
96
117
}
97
- return redshiftDataClient . listDatabases ( input ) . promise ( )
118
+ return redshiftDataClient . send ( new ListDatabasesCommand ( input ) )
98
119
}
99
120
public async listSchemas ( connectionParams : ConnectionParams , nextToken ?: string ) : Promise < ListSchemasResponse > {
100
- const redshiftDataClient = await this . redshiftDataClientProvider ( this . regionCode )
121
+ const redshiftDataClient = this . redshiftDataClientProvider ( this . regionCode )
101
122
const warehouseType = connectionParams . warehouseType
102
123
const warehouseIdentifier = connectionParams . warehouseIdentifier
103
- const input : RedshiftData . ListSchemasRequest = {
124
+ const input : ListSchemasRequest = {
104
125
ClusterIdentifier : warehouseType === RedshiftWarehouseType . PROVISIONED ? warehouseIdentifier : undefined ,
105
126
Database : connectionParams . database ,
106
127
DbUser :
@@ -114,18 +135,18 @@ export class DefaultRedshiftClient {
114
135
? connectionParams . secret
115
136
: undefined ,
116
137
}
117
- return redshiftDataClient . listSchemas ( input ) . promise ( )
138
+ return redshiftDataClient . send ( new ListSchemasCommand ( input ) )
118
139
}
119
140
120
141
public async listTables (
121
142
connectionParams : ConnectionParams ,
122
143
schemaName : string ,
123
144
nextToken ?: string
124
145
) : Promise < ListTablesResponse > {
125
- const redshiftDataClient = await this . redshiftDataClientProvider ( this . regionCode )
146
+ const redshiftDataClient = this . redshiftDataClientProvider ( this . regionCode )
126
147
const warehouseType = connectionParams . warehouseType
127
148
const warehouseIdentifier = connectionParams . warehouseIdentifier
128
- const input : RedshiftData . ListTablesRequest = {
149
+ const input : ListTablesRequest = {
129
150
ClusterIdentifier : warehouseType === RedshiftWarehouseType . PROVISIONED ? warehouseIdentifier : undefined ,
130
151
DbUser :
131
152
connectionParams . username && connectionParams . connectionType !== ConnectionType . DatabaseUser
@@ -140,7 +161,7 @@ export class DefaultRedshiftClient {
140
161
? connectionParams . secret
141
162
: undefined ,
142
163
}
143
- const ListTablesResponse = redshiftDataClient . listTables ( input ) . promise ( )
164
+ const ListTablesResponse = redshiftDataClient . send ( new ListTablesCommand ( input ) )
144
165
return ListTablesResponse
145
166
}
146
167
@@ -150,11 +171,11 @@ export class DefaultRedshiftClient {
150
171
nextToken ?: string ,
151
172
executionId ?: string
152
173
) : Promise < ExecuteQueryResponse | undefined > {
153
- const redshiftData = await this . redshiftDataClientProvider ( this . regionCode )
174
+ const redshiftData = this . redshiftDataClientProvider ( this . regionCode )
154
175
// if executionId is not passed in, that means that we're executing and retrieving the results of the query for the first time.
155
176
if ( ! executionId ) {
156
- const execution = await redshiftData
157
- . executeStatement ( {
177
+ const execution = await redshiftData . send (
178
+ new ExecuteStatementCommand ( {
158
179
ClusterIdentifier :
159
180
connectionParams . warehouseType === RedshiftWarehouseType . PROVISIONED
160
181
? connectionParams . warehouseIdentifier
@@ -174,15 +195,15 @@ export class DefaultRedshiftClient {
174
195
? connectionParams . secret
175
196
: undefined ,
176
197
} )
177
- . promise ( )
198
+ )
178
199
179
200
executionId = execution . Id
180
201
type Status = 'RUNNING' | 'FAILED' | 'FINISHED'
181
202
let status : Status = 'RUNNING'
182
203
while ( status === 'RUNNING' ) {
183
- const describeStatementResponse = await redshiftData
184
- . describeStatement ( { Id : executionId } as DescribeStatementRequest )
185
- . promise ( )
204
+ const describeStatementResponse = await redshiftData . send (
205
+ new DescribeStatementCommand ( { Id : executionId } as DescribeStatementRequest )
206
+ )
186
207
if ( describeStatementResponse . Status === 'FAILED' || describeStatementResponse . Status === 'FINISHED' ) {
187
208
status = describeStatementResponse . Status
188
209
if ( status === 'FAILED' ) {
@@ -198,9 +219,9 @@ export class DefaultRedshiftClient {
198
219
}
199
220
}
200
221
}
201
- const result = await redshiftData
202
- . getStatementResult ( { Id : executionId , NextToken : nextToken } as GetStatementResultRequest )
203
- . promise ( )
222
+ const result = await redshiftData . send (
223
+ new GetStatementResultCommand ( { Id : executionId , NextToken : nextToken } as GetStatementResultRequest )
224
+ )
204
225
205
226
return { statementResultResponse : result , executionId : executionId } as ExecuteQueryResponse
206
227
}
@@ -210,20 +231,20 @@ export class DefaultRedshiftClient {
210
231
connectionParams : ConnectionParams
211
232
) : Promise < ClusterCredentials | GetCredentialsResponse > {
212
233
if ( warehouseType === RedshiftWarehouseType . PROVISIONED ) {
213
- const redshiftClient = await this . redshiftClientProvider ( this . regionCode )
234
+ const redshiftClient = this . redshiftClientProvider ( this . regionCode )
214
235
const getClusterCredentialsRequest : GetClusterCredentialsMessage = {
215
236
DbUser : connectionParams . username ! ,
216
237
DbName : connectionParams . database ,
217
238
ClusterIdentifier : connectionParams . warehouseIdentifier ,
218
239
}
219
- return redshiftClient . getClusterCredentials ( getClusterCredentialsRequest ) . promise ( )
240
+ return redshiftClient . send ( new GetClusterCredentialsCommand ( getClusterCredentialsRequest ) )
220
241
} else {
221
- const redshiftServerless = await this . redshiftServerlessClientProvider ( this . regionCode )
242
+ const redshiftServerless = this . redshiftServerlessClientProvider ( this . regionCode )
222
243
const getCredentialsRequest : GetCredentialsRequest = {
223
244
dbName : connectionParams . database ,
224
245
workgroupName : connectionParams . warehouseIdentifier ,
225
246
}
226
- return redshiftServerless . getCredentials ( getCredentialsRequest ) . promise ( )
247
+ return redshiftServerless . send ( new GetCredentialsCommand ( getCredentialsRequest ) )
227
248
}
228
249
}
229
250
public genUniqueId ( connectionParams : ConnectionParams ) : string {
@@ -258,13 +279,22 @@ export class DefaultRedshiftClient {
258
279
}
259
280
}
260
281
261
- async function createRedshiftSdkClient ( regionCode : string ) : Promise < Redshift > {
262
- return await globals . sdkClientBuilder . createAwsService ( Redshift , { computeChecksums : true } , regionCode )
282
+ function createRedshiftSdkClient ( regionCode : string ) : RedshiftClient {
283
+ return globals . sdkClientBuilderV3 . createAwsService ( {
284
+ serviceClient : RedshiftClient ,
285
+ clientOptions : { region : regionCode } ,
286
+ } )
263
287
}
264
288
265
- async function createRedshiftServerlessSdkClient ( regionCode : string ) : Promise < RedshiftServerless > {
266
- return await globals . sdkClientBuilder . createAwsService ( RedshiftServerless , { computeChecksums : true } , regionCode )
289
+ function createRedshiftServerlessSdkClient ( regionCode : string ) : RedshiftServerlessClient {
290
+ return globals . sdkClientBuilderV3 . createAwsService ( {
291
+ serviceClient : RedshiftServerlessClient ,
292
+ clientOptions : { region : regionCode } ,
293
+ } )
267
294
}
268
- async function createRedshiftDataClient ( regionCode : string ) : Promise < RedshiftData > {
269
- return await globals . sdkClientBuilder . createAwsService ( RedshiftData , { computeChecksums : true } , regionCode )
295
+ function createRedshiftDataClient ( regionCode : string ) : RedshiftDataClient {
296
+ return globals . sdkClientBuilderV3 . createAwsService ( {
297
+ serviceClient : RedshiftDataClient ,
298
+ clientOptions : { region : regionCode } ,
299
+ } )
270
300
}
0 commit comments