@malloydata/db-snowflake 0.0.368 → 0.0.369
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -10,12 +10,14 @@ export declare class SnowflakeExecutor {
|
|
|
10
10
|
private static defaultConnectionOptions;
|
|
11
11
|
private pool_;
|
|
12
12
|
private setupSQL;
|
|
13
|
+
private sessionInitialized;
|
|
13
14
|
constructor(connOptions: ConnectionOptions, poolOptions?: PoolOptions, setupSQL?: string);
|
|
14
15
|
static getConnectionOptionsFromEnv(): ConnectionOptions | undefined;
|
|
15
16
|
static getConnectionOptionsFromToml(options?: ConnectionConfigFile): ConnectionOptions;
|
|
16
17
|
done(): Promise<void>;
|
|
17
18
|
_execute(sqlText: string, conn: Connection, options?: RunSQLOptions, timeoutMs?: number): Promise<QueryData>;
|
|
18
19
|
private _setSessionParams;
|
|
20
|
+
private ensureSessionInitialized;
|
|
19
21
|
batch(sqlText: string, options?: RunSQLOptions, timeoutMs?: number): Promise<QueryData>;
|
|
20
22
|
stream(sqlText: string, options?: RunSQLOptions): Promise<AsyncIterableIterator<QueryRecord>>;
|
|
21
23
|
}
|
|
@@ -60,7 +60,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
60
60
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
61
61
|
exports.SnowflakeExecutor = void 0;
|
|
62
62
|
const snowflake_sdk_1 = __importDefault(require("snowflake-sdk"));
|
|
63
|
-
const generic_pool_1 = require("generic-pool");
|
|
64
63
|
const toml = __importStar(require("toml"));
|
|
65
64
|
const fs = __importStar(require("fs"));
|
|
66
65
|
const path = __importStar(require("path"));
|
|
@@ -76,29 +75,9 @@ snowflake_sdk_1.default.configure({ logLevel: 'OFF' });
|
|
|
76
75
|
// }
|
|
77
76
|
class SnowflakeExecutor {
|
|
78
77
|
constructor(connOptions, poolOptions, setupSQL) {
|
|
78
|
+
this.sessionInitialized = new WeakMap();
|
|
79
79
|
this.setupSQL = setupSQL;
|
|
80
|
-
|
|
81
|
-
create: async () => {
|
|
82
|
-
const conn = await new Promise((resolve, reject) => {
|
|
83
|
-
const c = snowflake_sdk_1.default.createConnection(connOptions);
|
|
84
|
-
c.connect(err => {
|
|
85
|
-
if (err)
|
|
86
|
-
reject(err);
|
|
87
|
-
else
|
|
88
|
-
resolve(c);
|
|
89
|
-
});
|
|
90
|
-
});
|
|
91
|
-
await this._setSessionParams(conn);
|
|
92
|
-
return conn;
|
|
93
|
-
},
|
|
94
|
-
destroy: async (conn) => {
|
|
95
|
-
await new Promise(resolve => conn.destroy(() => resolve()));
|
|
96
|
-
},
|
|
97
|
-
validate: (conn) => {
|
|
98
|
-
return Promise.resolve(conn.isUp());
|
|
99
|
-
},
|
|
100
|
-
};
|
|
101
|
-
this.pool_ = (0, generic_pool_1.createPool)(factory, {
|
|
80
|
+
this.pool_ = snowflake_sdk_1.default.createPool(connOptions, {
|
|
102
81
|
...SnowflakeExecutor.defaultPoolOptions_,
|
|
103
82
|
...(poolOptions !== null && poolOptions !== void 0 ? poolOptions : {}),
|
|
104
83
|
});
|
|
@@ -191,6 +170,7 @@ class SnowflakeExecutor {
|
|
|
191
170
|
});
|
|
192
171
|
}
|
|
193
172
|
async _setSessionParams(conn) {
|
|
173
|
+
// set some default session parameters
|
|
194
174
|
// ensure we do not ignore case for quoted identifiers
|
|
195
175
|
await this._execute('ALTER SESSION SET QUOTED_IDENTIFIERS_IGNORE_CASE = FALSE;', conn);
|
|
196
176
|
// set utc as the default timezone which is the malloy convention
|
|
@@ -208,14 +188,28 @@ class SnowflakeExecutor {
|
|
|
208
188
|
}
|
|
209
189
|
}
|
|
210
190
|
}
|
|
191
|
+
ensureSessionInitialized(connection) {
|
|
192
|
+
const existing = this.sessionInitialized.get(connection);
|
|
193
|
+
if (existing) {
|
|
194
|
+
return existing;
|
|
195
|
+
}
|
|
196
|
+
const init = this._setSessionParams(connection).catch(err => {
|
|
197
|
+
this.sessionInitialized.delete(connection);
|
|
198
|
+
throw err;
|
|
199
|
+
});
|
|
200
|
+
this.sessionInitialized.set(connection, init);
|
|
201
|
+
return init;
|
|
202
|
+
}
|
|
211
203
|
async batch(sqlText, options, timeoutMs) {
|
|
212
204
|
return await this.pool_.use(async (conn) => {
|
|
205
|
+
await this.ensureSessionInitialized(conn);
|
|
213
206
|
return await this._execute(sqlText, conn, options, timeoutMs);
|
|
214
207
|
});
|
|
215
208
|
}
|
|
216
209
|
async stream(sqlText, options) {
|
|
217
210
|
const pool = this.pool_;
|
|
218
211
|
return await pool.acquire().then(async (conn) => {
|
|
212
|
+
await this.ensureSessionInitialized(conn);
|
|
219
213
|
return new Promise((resolve, reject) => {
|
|
220
214
|
conn.execute({
|
|
221
215
|
sqlText,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snowflake_executor.js","sourceRoot":"","sources":["../src/snowflake_executor.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQH,kEAAsC;
|
|
1
|
+
{"version":3,"file":"snowflake_executor.js","sourceRoot":"","sources":["../src/snowflake_executor.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@malloydata/db-snowflake",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.369",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"prepublishOnly": "npm run build"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@malloydata/malloy": "0.0.
|
|
25
|
+
"@malloydata/malloy": "0.0.369",
|
|
26
26
|
"generic-pool": "^3.9.0",
|
|
27
27
|
"snowflake-sdk": "2.3.1",
|
|
28
28
|
"toml": "^3.0.0"
|
|
@@ -28,7 +28,6 @@ import type {
|
|
|
28
28
|
ConnectionOptions,
|
|
29
29
|
} from 'snowflake-sdk';
|
|
30
30
|
import snowflake from 'snowflake-sdk';
|
|
31
|
-
import {createPool} from 'generic-pool';
|
|
32
31
|
import type {Pool, Options as PoolOptions} from 'generic-pool';
|
|
33
32
|
import * as toml from 'toml';
|
|
34
33
|
import * as fs from 'fs';
|
|
@@ -74,33 +73,16 @@ export class SnowflakeExecutor {
|
|
|
74
73
|
|
|
75
74
|
private pool_: Pool<Connection>;
|
|
76
75
|
private setupSQL: string | undefined;
|
|
76
|
+
|
|
77
|
+
private sessionInitialized = new WeakMap<Connection, Promise<void>>();
|
|
78
|
+
|
|
77
79
|
constructor(
|
|
78
80
|
connOptions: ConnectionOptions,
|
|
79
81
|
poolOptions?: PoolOptions,
|
|
80
82
|
setupSQL?: string
|
|
81
83
|
) {
|
|
82
84
|
this.setupSQL = setupSQL;
|
|
83
|
-
|
|
84
|
-
create: async (): Promise<Connection> => {
|
|
85
|
-
const conn = await new Promise<Connection>((resolve, reject) => {
|
|
86
|
-
const c = snowflake.createConnection(connOptions);
|
|
87
|
-
c.connect(err => {
|
|
88
|
-
if (err) reject(err);
|
|
89
|
-
else resolve(c);
|
|
90
|
-
});
|
|
91
|
-
});
|
|
92
|
-
await this._setSessionParams(conn);
|
|
93
|
-
return conn;
|
|
94
|
-
},
|
|
95
|
-
destroy: async (conn: Connection): Promise<void> => {
|
|
96
|
-
await new Promise<void>(resolve => conn.destroy(() => resolve()));
|
|
97
|
-
},
|
|
98
|
-
validate: (conn: Connection): Promise<boolean> => {
|
|
99
|
-
return Promise.resolve(conn.isUp());
|
|
100
|
-
},
|
|
101
|
-
};
|
|
102
|
-
|
|
103
|
-
this.pool_ = createPool(factory, {
|
|
85
|
+
this.pool_ = snowflake.createPool(connOptions, {
|
|
104
86
|
...SnowflakeExecutor.defaultPoolOptions_,
|
|
105
87
|
...(poolOptions ?? {}),
|
|
106
88
|
});
|
|
@@ -215,6 +197,7 @@ export class SnowflakeExecutor {
|
|
|
215
197
|
}
|
|
216
198
|
|
|
217
199
|
private async _setSessionParams(conn: Connection) {
|
|
200
|
+
// set some default session parameters
|
|
218
201
|
// ensure we do not ignore case for quoted identifiers
|
|
219
202
|
await this._execute(
|
|
220
203
|
'ALTER SESSION SET QUOTED_IDENTIFIERS_IGNORE_CASE = FALSE;',
|
|
@@ -239,12 +222,26 @@ export class SnowflakeExecutor {
|
|
|
239
222
|
}
|
|
240
223
|
}
|
|
241
224
|
|
|
225
|
+
private ensureSessionInitialized(connection: Connection): Promise<void> {
|
|
226
|
+
const existing = this.sessionInitialized.get(connection);
|
|
227
|
+
if (existing) {
|
|
228
|
+
return existing;
|
|
229
|
+
}
|
|
230
|
+
const init = this._setSessionParams(connection).catch(err => {
|
|
231
|
+
this.sessionInitialized.delete(connection);
|
|
232
|
+
throw err;
|
|
233
|
+
});
|
|
234
|
+
this.sessionInitialized.set(connection, init);
|
|
235
|
+
return init;
|
|
236
|
+
}
|
|
237
|
+
|
|
242
238
|
public async batch(
|
|
243
239
|
sqlText: string,
|
|
244
240
|
options?: RunSQLOptions,
|
|
245
241
|
timeoutMs?: number
|
|
246
242
|
): Promise<QueryData> {
|
|
247
243
|
return await this.pool_.use(async (conn: Connection) => {
|
|
244
|
+
await this.ensureSessionInitialized(conn);
|
|
248
245
|
return await this._execute(sqlText, conn, options, timeoutMs);
|
|
249
246
|
});
|
|
250
247
|
}
|
|
@@ -255,6 +252,8 @@ export class SnowflakeExecutor {
|
|
|
255
252
|
): Promise<AsyncIterableIterator<QueryRecord>> {
|
|
256
253
|
const pool: Pool<Connection> = this.pool_;
|
|
257
254
|
return await pool.acquire().then(async (conn: Connection) => {
|
|
255
|
+
await this.ensureSessionInitialized(conn);
|
|
256
|
+
|
|
258
257
|
return new Promise((resolve, reject) => {
|
|
259
258
|
conn.execute({
|
|
260
259
|
sqlText,
|