@malloydata/db-snowflake 0.0.382 → 0.0.383

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.
package/dist/index.d.ts CHANGED
@@ -1 +1,2 @@
1
1
  export { SnowflakeConnection } from './snowflake_connection';
2
+ export { buildPoolOptions } from './snowflake_pool_options';
package/dist/index.js CHANGED
@@ -22,15 +22,18 @@
22
22
  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
23
  */
24
24
  Object.defineProperty(exports, "__esModule", { value: true });
25
- exports.SnowflakeConnection = void 0;
25
+ exports.buildPoolOptions = exports.SnowflakeConnection = void 0;
26
26
  var snowflake_connection_1 = require("./snowflake_connection");
27
27
  Object.defineProperty(exports, "SnowflakeConnection", { enumerable: true, get: function () { return snowflake_connection_1.SnowflakeConnection; } });
28
+ var snowflake_pool_options_1 = require("./snowflake_pool_options");
29
+ Object.defineProperty(exports, "buildPoolOptions", { enumerable: true, get: function () { return snowflake_pool_options_1.buildPoolOptions; } });
28
30
  const malloy_1 = require("@malloydata/malloy");
29
31
  const snowflake_connection_2 = require("./snowflake_connection");
32
+ const snowflake_pool_options_2 = require("./snowflake_pool_options");
30
33
  (0, malloy_1.registerConnectionType)('snowflake', {
31
34
  displayName: 'Snowflake',
32
35
  factory: async (config) => {
33
- const { name, is: _, setupSQL, timeoutMs, schemaSampleTimeoutMs, schemaSampleRowLimit, schemaSampleFullScanMaxBytes, ...props } = config;
36
+ const { name, is: _, setupSQL, timeoutMs, schemaSampleTimeoutMs, schemaSampleRowLimit, schemaSampleFullScanMaxBytes, poolMin, poolMax, poolTestOnBorrow, ...props } = config;
34
37
  // ConnectionConfig values are trusted to match ConnectionOptions fields
35
38
  // because the property definitions below declare matching names/types.
36
39
  // The double cast bridges Malloy's generic config to snowflake-sdk's
@@ -60,6 +63,7 @@ const snowflake_connection_2 = require("./snowflake_connection");
60
63
  : typeof schemaSampleFullScanMaxBytes === 'string'
61
64
  ? parseInt(schemaSampleFullScanMaxBytes, 10)
62
65
  : undefined,
66
+ poolOptions: (0, snowflake_pool_options_2.buildPoolOptions)({ poolMin, poolMax, poolTestOnBorrow }),
63
67
  });
64
68
  },
65
69
  properties: [
@@ -139,6 +143,30 @@ const snowflake_connection_2 = require("./snowflake_connection");
139
143
  optional: true,
140
144
  description: 'SQL statements to run when the connection is established',
141
145
  },
146
+ {
147
+ name: 'poolMin',
148
+ displayName: 'Pool Min',
149
+ type: 'number',
150
+ optional: true,
151
+ advanced: true,
152
+ description: 'Minimum number of pooled snowflake-sdk connections kept warm. Defaults to 1.',
153
+ },
154
+ {
155
+ name: 'poolMax',
156
+ displayName: 'Pool Max',
157
+ type: 'number',
158
+ optional: true,
159
+ advanced: true,
160
+ description: 'Maximum number of pooled snowflake-sdk connections. Defaults to 1.',
161
+ },
162
+ {
163
+ name: 'poolTestOnBorrow',
164
+ displayName: 'Test On Borrow',
165
+ type: 'boolean',
166
+ optional: true,
167
+ advanced: true,
168
+ description: 'If true, the pool validates each connection when checked out. Defaults to true.',
169
+ },
142
170
  ],
143
171
  });
144
172
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { Options as PoolOptions } from 'generic-pool';
2
+ /** Assemble generic-pool options from the registry's pool fields; undefined when none supplied. */
3
+ export declare function buildPoolOptions(config: {
4
+ poolMin?: unknown;
5
+ poolMax?: unknown;
6
+ poolTestOnBorrow?: unknown;
7
+ }): PoolOptions | undefined;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright Contributors to the Malloy project
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.buildPoolOptions = buildPoolOptions;
8
+ /** Assemble generic-pool options from the registry's pool fields; undefined when none supplied. */
9
+ function buildPoolOptions(config) {
10
+ const opts = {};
11
+ if (typeof config.poolMin === 'number')
12
+ opts.min = config.poolMin;
13
+ if (typeof config.poolMax === 'number')
14
+ opts.max = config.poolMax;
15
+ if (typeof config.poolTestOnBorrow === 'boolean') {
16
+ opts.testOnBorrow = config.poolTestOnBorrow;
17
+ }
18
+ return Object.keys(opts).length > 0 ? opts : undefined;
19
+ }
20
+ //# sourceMappingURL=snowflake_pool_options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snowflake_pool_options.js","sourceRoot":"","sources":["../src/snowflake_pool_options.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAKH,4CAYC;AAbD,mGAAmG;AACnG,SAAgB,gBAAgB,CAAC,MAIhC;IACC,MAAM,IAAI,GAAgB,EAAE,CAAC;IAC7B,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ;QAAE,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC;IAClE,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ;QAAE,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC;IAClE,IAAI,OAAO,MAAM,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;QACjD,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,gBAAgB,CAAC;IAC9C,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AACzD,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright Contributors to the Malloy project
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ const snowflake_pool_options_1 = require("./snowflake_pool_options");
8
+ describe('buildPoolOptions', () => {
9
+ it('returns undefined when no pool fields are supplied', () => {
10
+ expect((0, snowflake_pool_options_1.buildPoolOptions)({})).toBeUndefined();
11
+ });
12
+ it('forwards a single supplied field and leaves others absent', () => {
13
+ expect((0, snowflake_pool_options_1.buildPoolOptions)({ poolMax: 20 })).toEqual({ max: 20 });
14
+ });
15
+ it('forwards all three fields when supplied', () => {
16
+ expect((0, snowflake_pool_options_1.buildPoolOptions)({ poolMin: 2, poolMax: 20, poolTestOnBorrow: false })).toEqual({ min: 2, max: 20, testOnBorrow: false });
17
+ });
18
+ it('treats poolTestOnBorrow: false as a real value, not a default', () => {
19
+ // false is falsy; guard against a `||` regression that would drop it.
20
+ expect((0, snowflake_pool_options_1.buildPoolOptions)({ poolTestOnBorrow: false })).toEqual({
21
+ testOnBorrow: false,
22
+ });
23
+ });
24
+ it('treats poolMin: 0 as a real value, not a default', () => {
25
+ // 0 is falsy; guard against a `||` regression that would drop it.
26
+ expect((0, snowflake_pool_options_1.buildPoolOptions)({ poolMin: 0 })).toEqual({ min: 0 });
27
+ });
28
+ it('drops fields with the wrong type rather than coercing them', () => {
29
+ expect((0, snowflake_pool_options_1.buildPoolOptions)({
30
+ poolMin: '2',
31
+ poolMax: null,
32
+ poolTestOnBorrow: 'yes',
33
+ })).toBeUndefined();
34
+ });
35
+ it('keeps valid fields when other fields are wrong-typed', () => {
36
+ expect((0, snowflake_pool_options_1.buildPoolOptions)({
37
+ poolMin: 2,
38
+ poolMax: 'oops',
39
+ })).toEqual({ min: 2 });
40
+ });
41
+ });
42
+ //# sourceMappingURL=snowflake_pool_options.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snowflake_pool_options.spec.js","sourceRoot":"","sources":["../src/snowflake_pool_options.spec.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAEH,qEAA0D;AAE1D,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,CAAC,IAAA,yCAAgB,EAAC,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,MAAM,CAAC,IAAA,yCAAgB,EAAC,EAAC,OAAO,EAAE,EAAE,EAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAC,GAAG,EAAE,EAAE,EAAC,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,CACJ,IAAA,yCAAgB,EAAC,EAAC,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,gBAAgB,EAAE,KAAK,EAAC,CAAC,CACrE,CAAC,OAAO,CAAC,EAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAC,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,sEAAsE;QACtE,MAAM,CAAC,IAAA,yCAAgB,EAAC,EAAC,gBAAgB,EAAE,KAAK,EAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YAC1D,YAAY,EAAE,KAAK;SACpB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,kEAAkE;QAClE,MAAM,CAAC,IAAA,yCAAgB,EAAC,EAAC,OAAO,EAAE,CAAC,EAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAC,GAAG,EAAE,CAAC,EAAC,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,CACJ,IAAA,yCAAgB,EAAC;YACf,OAAO,EAAE,GAAG;YACZ,OAAO,EAAE,IAAI;YACb,gBAAgB,EAAE,KAAK;SACxB,CAAC,CACH,CAAC,aAAa,EAAE,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,CACJ,IAAA,yCAAgB,EAAC;YACf,OAAO,EAAE,CAAC;YACV,OAAO,EAAE,MAAM;SAChB,CAAC,CACH,CAAC,OAAO,CAAC,EAAC,GAAG,EAAE,CAAC,EAAC,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@malloydata/db-snowflake",
3
- "version": "0.0.382",
3
+ "version": "0.0.383",
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.382",
25
+ "@malloydata/malloy": "0.0.383",
26
26
  "generic-pool": "^3.9.0",
27
27
  "snowflake-sdk": "2.3.1",
28
28
  "toml": "^3.0.0"
package/src/index.ts CHANGED
@@ -22,11 +22,13 @@
22
22
  */
23
23
 
24
24
  export {SnowflakeConnection} from './snowflake_connection';
25
+ export {buildPoolOptions} from './snowflake_pool_options';
25
26
 
26
27
  import {registerConnectionType} from '@malloydata/malloy';
27
28
  import type {ConnectionConfig} from '@malloydata/malloy';
28
29
  import type {ConnectionOptions} from 'snowflake-sdk';
29
30
  import {SnowflakeConnection} from './snowflake_connection';
31
+ import {buildPoolOptions} from './snowflake_pool_options';
30
32
 
31
33
  registerConnectionType('snowflake', {
32
34
  displayName: 'Snowflake',
@@ -39,6 +41,9 @@ registerConnectionType('snowflake', {
39
41
  schemaSampleTimeoutMs,
40
42
  schemaSampleRowLimit,
41
43
  schemaSampleFullScanMaxBytes,
44
+ poolMin,
45
+ poolMax,
46
+ poolTestOnBorrow,
42
47
  ...props
43
48
  } = config;
44
49
  // ConnectionConfig values are trusted to match ConnectionOptions fields
@@ -74,6 +79,7 @@ registerConnectionType('snowflake', {
74
79
  : typeof schemaSampleFullScanMaxBytes === 'string'
75
80
  ? parseInt(schemaSampleFullScanMaxBytes, 10)
76
81
  : undefined,
82
+ poolOptions: buildPoolOptions({poolMin, poolMax, poolTestOnBorrow}),
77
83
  });
78
84
  },
79
85
  properties: [
@@ -156,5 +162,32 @@ registerConnectionType('snowflake', {
156
162
  optional: true,
157
163
  description: 'SQL statements to run when the connection is established',
158
164
  },
165
+ {
166
+ name: 'poolMin',
167
+ displayName: 'Pool Min',
168
+ type: 'number',
169
+ optional: true,
170
+ advanced: true,
171
+ description:
172
+ 'Minimum number of pooled snowflake-sdk connections kept warm. Defaults to 1.',
173
+ },
174
+ {
175
+ name: 'poolMax',
176
+ displayName: 'Pool Max',
177
+ type: 'number',
178
+ optional: true,
179
+ advanced: true,
180
+ description:
181
+ 'Maximum number of pooled snowflake-sdk connections. Defaults to 1.',
182
+ },
183
+ {
184
+ name: 'poolTestOnBorrow',
185
+ displayName: 'Test On Borrow',
186
+ type: 'boolean',
187
+ optional: true,
188
+ advanced: true,
189
+ description:
190
+ 'If true, the pool validates each connection when checked out. Defaults to true.',
191
+ },
159
192
  ],
160
193
  });
@@ -0,0 +1,53 @@
1
+ /*
2
+ * Copyright Contributors to the Malloy project
3
+ * SPDX-License-Identifier: MIT
4
+ */
5
+
6
+ import {buildPoolOptions} from './snowflake_pool_options';
7
+
8
+ describe('buildPoolOptions', () => {
9
+ it('returns undefined when no pool fields are supplied', () => {
10
+ expect(buildPoolOptions({})).toBeUndefined();
11
+ });
12
+
13
+ it('forwards a single supplied field and leaves others absent', () => {
14
+ expect(buildPoolOptions({poolMax: 20})).toEqual({max: 20});
15
+ });
16
+
17
+ it('forwards all three fields when supplied', () => {
18
+ expect(
19
+ buildPoolOptions({poolMin: 2, poolMax: 20, poolTestOnBorrow: false})
20
+ ).toEqual({min: 2, max: 20, testOnBorrow: false});
21
+ });
22
+
23
+ it('treats poolTestOnBorrow: false as a real value, not a default', () => {
24
+ // false is falsy; guard against a `||` regression that would drop it.
25
+ expect(buildPoolOptions({poolTestOnBorrow: false})).toEqual({
26
+ testOnBorrow: false,
27
+ });
28
+ });
29
+
30
+ it('treats poolMin: 0 as a real value, not a default', () => {
31
+ // 0 is falsy; guard against a `||` regression that would drop it.
32
+ expect(buildPoolOptions({poolMin: 0})).toEqual({min: 0});
33
+ });
34
+
35
+ it('drops fields with the wrong type rather than coercing them', () => {
36
+ expect(
37
+ buildPoolOptions({
38
+ poolMin: '2',
39
+ poolMax: null,
40
+ poolTestOnBorrow: 'yes',
41
+ })
42
+ ).toBeUndefined();
43
+ });
44
+
45
+ it('keeps valid fields when other fields are wrong-typed', () => {
46
+ expect(
47
+ buildPoolOptions({
48
+ poolMin: 2,
49
+ poolMax: 'oops',
50
+ })
51
+ ).toEqual({min: 2});
52
+ });
53
+ });
@@ -0,0 +1,21 @@
1
+ /*
2
+ * Copyright Contributors to the Malloy project
3
+ * SPDX-License-Identifier: MIT
4
+ */
5
+
6
+ import type {Options as PoolOptions} from 'generic-pool';
7
+
8
+ /** Assemble generic-pool options from the registry's pool fields; undefined when none supplied. */
9
+ export function buildPoolOptions(config: {
10
+ poolMin?: unknown;
11
+ poolMax?: unknown;
12
+ poolTestOnBorrow?: unknown;
13
+ }): PoolOptions | undefined {
14
+ const opts: PoolOptions = {};
15
+ if (typeof config.poolMin === 'number') opts.min = config.poolMin;
16
+ if (typeof config.poolMax === 'number') opts.max = config.poolMax;
17
+ if (typeof config.poolTestOnBorrow === 'boolean') {
18
+ opts.testOnBorrow = config.poolTestOnBorrow;
19
+ }
20
+ return Object.keys(opts).length > 0 ? opts : undefined;
21
+ }