@trafficbyintent/kysely-bigquery 2.0.0

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.
@@ -0,0 +1,244 @@
1
+ "use strict";
2
+ var _BigQueryCompiler_defaultProject;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.BigQueryCompiler = void 0;
5
+ const tslib_1 = require("tslib");
6
+ const kysely_1 = require("kysely");
7
+ /**
8
+ * Query compiler for BigQuery dialect.
9
+ *
10
+ * Extends MysqlQueryCompiler and overrides methods to generate
11
+ * BigQuery-compatible SQL.
12
+ */
13
+ class BigQueryCompiler extends kysely_1.MysqlQueryCompiler {
14
+ constructor(defaultProject) {
15
+ super();
16
+ _BigQueryCompiler_defaultProject.set(this, void 0);
17
+ tslib_1.__classPrivateFieldSet(this, _BigQueryCompiler_defaultProject, defaultProject, "f");
18
+ }
19
+ visitSetOperation(node) {
20
+ if (node.operator === 'union' && !node.all) {
21
+ this.append('union distinct ');
22
+ this.visitNode(node.expression);
23
+ }
24
+ else {
25
+ super.visitSetOperation(node);
26
+ }
27
+ }
28
+ visitFunction(node) {
29
+ const funcName = node.func.toUpperCase();
30
+ switch (funcName) {
31
+ case 'NOW':
32
+ this.append('CURRENT_TIMESTAMP');
33
+ this.visitFunctionArgumentList(node.arguments);
34
+ return;
35
+ case 'LENGTH':
36
+ /* BigQuery uses CHAR_LENGTH for character count */
37
+ this.append('CHAR_LENGTH');
38
+ this.visitFunctionArgumentList(node.arguments);
39
+ return;
40
+ case 'DATE_FORMAT':
41
+ if (node.arguments.length === 2 &&
42
+ node.arguments[0] !== null &&
43
+ node.arguments[0] !== undefined &&
44
+ node.arguments[1] !== null &&
45
+ node.arguments[1] !== undefined) {
46
+ this.append('FORMAT_TIMESTAMP');
47
+ this.append('(');
48
+ this.visitNode(node.arguments[1]);
49
+ this.append(', ');
50
+ this.visitNode(node.arguments[0]);
51
+ this.append(')');
52
+ return;
53
+ }
54
+ break;
55
+ case 'DATE_ADD':
56
+ /*
57
+ * Pass through DATE_ADD as BigQuery supports it
58
+ * Note: BigQuery syntax is DATE_ADD(date, INTERVAL n unit)
59
+ */
60
+ break;
61
+ default:
62
+ /* Use default handler for all other functions */
63
+ break;
64
+ }
65
+ super.visitFunction(node);
66
+ }
67
+ visitUpdateQuery(node) {
68
+ if (node.where === null || node.where === undefined) {
69
+ /*
70
+ * BigQuery requires WHERE clause for UPDATE statements
71
+ * Add WHERE TRUE to allow the query to execute
72
+ */
73
+ super.visitUpdateQuery(node);
74
+ this.append(' where true');
75
+ return;
76
+ }
77
+ super.visitUpdateQuery(node);
78
+ }
79
+ visitDeleteQuery(node) {
80
+ if (node.where === null || node.where === undefined) {
81
+ /*
82
+ * BigQuery requires WHERE clause for DELETE statements
83
+ * Add WHERE TRUE to allow the query to execute
84
+ */
85
+ super.visitDeleteQuery(node);
86
+ this.append(' where true');
87
+ return;
88
+ }
89
+ super.visitDeleteQuery(node);
90
+ }
91
+ visitTable(node) {
92
+ if (tslib_1.__classPrivateFieldGet(this, _BigQueryCompiler_defaultProject, "f") && node.table.kind === 'SchemableIdentifierNode') {
93
+ const schemableNode = node.table;
94
+ if (schemableNode.schema && schemableNode.schema.kind === 'IdentifierNode') {
95
+ this.visitIdentifier({
96
+ kind: 'IdentifierNode',
97
+ name: tslib_1.__classPrivateFieldGet(this, _BigQueryCompiler_defaultProject, "f"),
98
+ });
99
+ this.append('.');
100
+ this.visitIdentifier(schemableNode.schema);
101
+ this.append('.');
102
+ this.visitIdentifier(schemableNode.identifier);
103
+ return;
104
+ }
105
+ }
106
+ super.visitTable(node);
107
+ }
108
+ visitRaw(node) {
109
+ const translatedFragments = [...node.sqlFragments];
110
+ for (let i = 0; i < translatedFragments.length; i++) {
111
+ let fragment = translatedFragments[i];
112
+ if (fragment === null || fragment === undefined || fragment === '') {
113
+ continue;
114
+ }
115
+ fragment = fragment.replace(/\bNOW\s*\(\s*\)/gi, 'CURRENT_TIMESTAMP()');
116
+ translatedFragments[i] = fragment;
117
+ }
118
+ if (translatedFragments.some((f) => f.match(/\bDATE_FORMAT\s*\(/i))) {
119
+ for (let i = 0; i < translatedFragments.length; i++) {
120
+ let fragment = translatedFragments[i];
121
+ /* c8 ignore start - defensive: fragments already filtered above */
122
+ if (fragment === null || fragment === undefined || fragment === '') {
123
+ continue;
124
+ }
125
+ /* c8 ignore stop */
126
+ const fullMatch = fragment.match(/\bDATE_FORMAT\s*\(\s*([^,]+)\s*,\s*('[^']*')\s*\)/gi);
127
+ if (fullMatch) {
128
+ fragment = fragment.replace(/\bDATE_FORMAT\s*\(\s*([^,]+)\s*,\s*('[^']*')\s*\)/gi, 'FORMAT_TIMESTAMP($2, $1)');
129
+ translatedFragments[i] = fragment;
130
+ }
131
+ else {
132
+ translatedFragments[i] = fragment.replace(/\bDATE_FORMAT\s*\(/gi, 'FORMAT_TIMESTAMP(');
133
+ }
134
+ }
135
+ if (translatedFragments.length === 2 && node.parameters.length === 1) {
136
+ const secondFragment = translatedFragments[1];
137
+ if (secondFragment) {
138
+ const formatMatch = secondFragment.match(/,\s*'([^']*)'(.*)$/);
139
+ if (formatMatch && translatedFragments[0] && node.parameters[0]) {
140
+ this.append(translatedFragments[0]);
141
+ this.append(`'${formatMatch[1]}'`);
142
+ this.append(', ');
143
+ this.visitNode(node.parameters[0]);
144
+ this.append(formatMatch[2] || '');
145
+ return;
146
+ }
147
+ }
148
+ }
149
+ this.appendFragmentsWithParams(translatedFragments, node.parameters);
150
+ }
151
+ else {
152
+ this.appendFragmentsWithParams(translatedFragments, node.parameters);
153
+ }
154
+ }
155
+ appendFragmentsWithParams(fragments, params) {
156
+ for (let i = 0; i < fragments.length; i++) {
157
+ if (i > 0) {
158
+ const param = params[i - 1];
159
+ if (param) {
160
+ this.visitNode(param);
161
+ }
162
+ }
163
+ const fragment = fragments[i];
164
+ if (fragment) {
165
+ this.append(fragment);
166
+ }
167
+ }
168
+ }
169
+ visitFunctionArgumentList(args) {
170
+ this.append('(');
171
+ const lastNode = args[args.length - 1];
172
+ for (const node of args) {
173
+ this.visitNode(node);
174
+ /* c8 ignore start - defensive: currently only called with 0-1 args */
175
+ if (node !== lastNode) {
176
+ this.append(', ');
177
+ }
178
+ /* c8 ignore stop */
179
+ }
180
+ this.append(')');
181
+ }
182
+ visitColumnDefinition(node) {
183
+ /* Call parent implementation first */
184
+ super.visitColumnDefinition(node);
185
+ /* If column has inline constraints, append NOT ENFORCED */
186
+ if (node.primaryKey || node.unique || node.references) {
187
+ this.append(' not enforced');
188
+ }
189
+ }
190
+ visitPrimaryKeyConstraint(node) {
191
+ if (node.name) {
192
+ this.append('constraint ');
193
+ this.visitNode(node.name);
194
+ this.append(' ');
195
+ }
196
+ this.append('primary key');
197
+ if (node.columns) {
198
+ this.append(' (');
199
+ this.compileList(node.columns);
200
+ this.append(')');
201
+ }
202
+ /* BigQuery requires NOT ENFORCED for all constraints */
203
+ this.append(' not enforced');
204
+ }
205
+ visitUniqueConstraint(node) {
206
+ if (node.name) {
207
+ this.append('constraint ');
208
+ this.visitNode(node.name);
209
+ this.append(' ');
210
+ }
211
+ this.append('unique');
212
+ if (node.columns) {
213
+ this.append(' (');
214
+ this.compileList(node.columns);
215
+ this.append(')');
216
+ }
217
+ /* BigQuery requires NOT ENFORCED for all constraints */
218
+ this.append(' not enforced');
219
+ }
220
+ visitForeignKeyConstraint(node) {
221
+ if (node.name) {
222
+ this.append('constraint ');
223
+ this.visitNode(node.name);
224
+ this.append(' ');
225
+ }
226
+ this.append('foreign key (');
227
+ this.compileList(node.columns);
228
+ this.append(') ');
229
+ this.visitNode(node.references);
230
+ if (node.onDelete) {
231
+ this.append(' on delete ');
232
+ this.append(node.onDelete);
233
+ }
234
+ if (node.onUpdate) {
235
+ this.append(' on update ');
236
+ this.append(node.onUpdate);
237
+ }
238
+ /* BigQuery requires NOT ENFORCED for all constraints */
239
+ this.append(' not enforced');
240
+ }
241
+ }
242
+ exports.BigQueryCompiler = BigQueryCompiler;
243
+ _BigQueryCompiler_defaultProject = new WeakMap();
244
+ //# sourceMappingURL=BigQueryCompiler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BigQueryCompiler.js","sourceRoot":"","sources":["../src/BigQueryCompiler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import { type CompiledQuery, type DatabaseConnection, type QueryResult } from 'kysely';
2
+ import { type BigQueryDialectConfig } from './BigQueryDialect';
3
+ /**
4
+ * BigQuery database connection implementation for Kysely.
5
+ *
6
+ * Handles query execution and streaming for BigQuery.
7
+ */
8
+ export declare class BigQueryConnection implements DatabaseConnection {
9
+ #private;
10
+ constructor(config: BigQueryDialectConfig);
11
+ /**
12
+ * Executes a compiled query against BigQuery.
13
+ * @param compiledQuery - The compiled query with SQL and parameters
14
+ * @returns A promise that resolves to the query results
15
+ * @throws Error if the query fails or if null parameters are not properly typed
16
+ */
17
+ executeQuery<O>(compiledQuery: CompiledQuery): Promise<QueryResult<O>>;
18
+ /**
19
+ * Begins a transaction (not supported by BigQuery).
20
+ * @returns A rejected promise as BigQuery doesn't support transactions
21
+ */
22
+ beginTransaction(): Promise<void>;
23
+ /**
24
+ * Commits a transaction (not supported by BigQuery).
25
+ * @returns A rejected promise as BigQuery doesn't support transactions
26
+ */
27
+ commitTransaction(): Promise<void>;
28
+ /**
29
+ * Rolls back a transaction (not supported by BigQuery).
30
+ * @returns A rejected promise as BigQuery doesn't support transactions
31
+ */
32
+ rollbackTransaction(): Promise<void>;
33
+ /**
34
+ * Streams query results for handling large datasets.
35
+ * @param compiledQuery - The compiled query with SQL and parameters
36
+ * @param _chunkSize - Chunk size parameter (currently unused)
37
+ * @returns An async iterator that yields query results in batches
38
+ */
39
+ streamQuery<O>(compiledQuery: CompiledQuery, _chunkSize: number): AsyncIterableIterator<QueryResult<O>>;
40
+ }
41
+ //# sourceMappingURL=BigQueryConnection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BigQueryConnection.d.ts","sourceRoot":"","sources":["../src/BigQueryConnection.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,kBAAkB,EAAE,KAAK,WAAW,EAAE,MAAM,QAAQ,CAAC;AAIvF,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE/D;;;;GAIG;AACH,qBAAa,kBAAmB,YAAW,kBAAkB;;gBAK/C,MAAM,EAAE,qBAAqB;IAczC;;;;;OAKG;IACG,YAAY,CAAC,CAAC,EAAE,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IA8C5E;;;OAGG;IACH,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC;;;OAGG;IACH,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIlC;;;OAGG;IACH,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIpC;;;;;OAKG;IACI,WAAW,CAAC,CAAC,EAClB,aAAa,EAAE,aAAa,EAC5B,UAAU,EAAE,MAAM,GACjB,qBAAqB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;CA2HzC"}
@@ -0,0 +1,222 @@
1
+ "use strict";
2
+ var _BigQueryConnection_instances, _BigQueryConnection_client, _BigQueryConnection_jsonDetector, _BigQueryConnection_jsonColumnNames, _BigQueryConnection_inferParamTypes, _BigQueryConnection_inferArrayType, _BigQueryConnection_processResultRow;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.BigQueryConnection = void 0;
5
+ const tslib_1 = require("tslib");
6
+ const bigquery_1 = require("@google-cloud/bigquery");
7
+ const jsonColumnDetector_1 = require("./jsonColumnDetector");
8
+ /**
9
+ * BigQuery database connection implementation for Kysely.
10
+ *
11
+ * Handles query execution and streaming for BigQuery.
12
+ */
13
+ class BigQueryConnection {
14
+ constructor(config) {
15
+ var _a;
16
+ _BigQueryConnection_instances.add(this);
17
+ _BigQueryConnection_client.set(this, void 0);
18
+ _BigQueryConnection_jsonDetector.set(this, void 0);
19
+ _BigQueryConnection_jsonColumnNames.set(this, void 0);
20
+ tslib_1.__classPrivateFieldSet(this, _BigQueryConnection_client, (_a = config.bigquery) !== null && _a !== void 0 ? _a : new bigquery_1.BigQuery(config.options), "f");
21
+ tslib_1.__classPrivateFieldSet(this, _BigQueryConnection_jsonDetector, new jsonColumnDetector_1.JsonColumnDetector(), "f");
22
+ /* Register known JSON columns if provided in config */
23
+ if (config.jsonColumns) {
24
+ for (const [tableName, columns] of Object.entries(config.jsonColumns)) {
25
+ tslib_1.__classPrivateFieldGet(this, _BigQueryConnection_jsonDetector, "f").registerJsonColumns(tableName, columns);
26
+ }
27
+ }
28
+ tslib_1.__classPrivateFieldSet(this, _BigQueryConnection_jsonColumnNames, tslib_1.__classPrivateFieldGet(this, _BigQueryConnection_jsonDetector, "f").getRegisteredJsonColumnNames(), "f");
29
+ }
30
+ /**
31
+ * Executes a compiled query against BigQuery.
32
+ * @param compiledQuery - The compiled query with SQL and parameters
33
+ * @returns A promise that resolves to the query results
34
+ * @throws Error if the query fails or if null parameters are not properly typed
35
+ */
36
+ executeQuery(compiledQuery) {
37
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
38
+ try {
39
+ const params = [...compiledQuery.parameters];
40
+ /* Process parameters to handle nulls and JSON serialization */
41
+ const processedParams = tslib_1.__classPrivateFieldGet(this, _BigQueryConnection_jsonDetector, "f").processParameters(compiledQuery, params);
42
+ const options = {
43
+ query: compiledQuery.sql,
44
+ params: processedParams,
45
+ parseJSON: true,
46
+ };
47
+ /* BigQuery needs types array for ALL parameters when there are null parameters */
48
+ if (processedParams.some((p) => p === null)) {
49
+ options.types = tslib_1.__classPrivateFieldGet(this, _BigQueryConnection_instances, "m", _BigQueryConnection_inferParamTypes).call(this, processedParams);
50
+ }
51
+ const [rows] = yield tslib_1.__classPrivateFieldGet(this, _BigQueryConnection_client, "f").query(options);
52
+ const processedRows = Array.isArray(rows)
53
+ ? rows.map((row) => tslib_1.__classPrivateFieldGet(this, _BigQueryConnection_instances, "m", _BigQueryConnection_processResultRow).call(this, row))
54
+ : [];
55
+ return {
56
+ rows: processedRows,
57
+ };
58
+ }
59
+ catch (error) {
60
+ /* Provide more helpful error messages */
61
+ if (error instanceof Error) {
62
+ if (error.message.includes('Parameter types must be provided for null values') ||
63
+ error.message.includes('Incorrect number of parameter types provided')) {
64
+ throw new Error(`BigQuery query failed: ${error.message}\n` +
65
+ 'Hint: The BigQuery dialect now automatically handles null parameters. ' +
66
+ "If you're still seeing this error, please report it as a bug.");
67
+ }
68
+ throw new Error(`BigQuery query failed: ${error.message}`);
69
+ }
70
+ throw error;
71
+ }
72
+ });
73
+ }
74
+ /**
75
+ * Begins a transaction (not supported by BigQuery).
76
+ * @returns A rejected promise as BigQuery doesn't support transactions
77
+ */
78
+ beginTransaction() {
79
+ return Promise.reject(new Error('Transactions are not supported.'));
80
+ }
81
+ /**
82
+ * Commits a transaction (not supported by BigQuery).
83
+ * @returns A rejected promise as BigQuery doesn't support transactions
84
+ */
85
+ commitTransaction() {
86
+ return Promise.reject(new Error('Transactions are not supported.'));
87
+ }
88
+ /**
89
+ * Rolls back a transaction (not supported by BigQuery).
90
+ * @returns A rejected promise as BigQuery doesn't support transactions
91
+ */
92
+ rollbackTransaction() {
93
+ return Promise.reject(new Error('Transactions are not supported.'));
94
+ }
95
+ /**
96
+ * Streams query results for handling large datasets.
97
+ * @param compiledQuery - The compiled query with SQL and parameters
98
+ * @param _chunkSize - Chunk size parameter (currently unused)
99
+ * @returns An async iterator that yields query results in batches
100
+ */
101
+ streamQuery(compiledQuery, _chunkSize) {
102
+ return tslib_1.__asyncGenerator(this, arguments, function* streamQuery_1() {
103
+ var _a, e_1, _b, _c;
104
+ const params = [...compiledQuery.parameters];
105
+ /* Process parameters to handle nulls and JSON serialization */
106
+ const processedParams = tslib_1.__classPrivateFieldGet(this, _BigQueryConnection_jsonDetector, "f").processParameters(compiledQuery, params);
107
+ const options = {
108
+ query: compiledQuery.sql,
109
+ params: processedParams,
110
+ parseJSON: true,
111
+ };
112
+ /* BigQuery needs types array for ALL parameters when there are null parameters */
113
+ if (processedParams.some((p) => p === null)) {
114
+ options.types = tslib_1.__classPrivateFieldGet(this, _BigQueryConnection_instances, "m", _BigQueryConnection_inferParamTypes).call(this, processedParams);
115
+ }
116
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
117
+ let stream;
118
+ try {
119
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
120
+ stream = tslib_1.__classPrivateFieldGet(this, _BigQueryConnection_client, "f").createQueryStream(options);
121
+ }
122
+ catch (error) {
123
+ if (error instanceof Error) {
124
+ throw new Error(`BigQuery stream query failed: ${error.message}`);
125
+ }
126
+ throw error;
127
+ }
128
+ try {
129
+ try {
130
+ for (var _d = true, stream_1 = tslib_1.__asyncValues(stream), stream_1_1; stream_1_1 = yield tslib_1.__await(stream_1.next()), _a = stream_1_1.done, !_a; _d = true) {
131
+ _c = stream_1_1.value;
132
+ _d = false;
133
+ const row = _c;
134
+ yield yield tslib_1.__await({
135
+ rows: [tslib_1.__classPrivateFieldGet(this, _BigQueryConnection_instances, "m", _BigQueryConnection_processResultRow).call(this, row)],
136
+ });
137
+ }
138
+ }
139
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
140
+ finally {
141
+ try {
142
+ if (!_d && !_a && (_b = stream_1.return)) yield tslib_1.__await(_b.call(stream_1));
143
+ }
144
+ finally { if (e_1) throw e_1.error; }
145
+ }
146
+ }
147
+ catch (error) {
148
+ /* Handle stream errors */
149
+ if (error instanceof Error) {
150
+ throw new Error(`BigQuery stream error: ${error.message}`);
151
+ }
152
+ throw error;
153
+ }
154
+ });
155
+ }
156
+ }
157
+ exports.BigQueryConnection = BigQueryConnection;
158
+ _BigQueryConnection_client = new WeakMap(), _BigQueryConnection_jsonDetector = new WeakMap(), _BigQueryConnection_jsonColumnNames = new WeakMap(), _BigQueryConnection_instances = new WeakSet(), _BigQueryConnection_inferParamTypes = function _BigQueryConnection_inferParamTypes(params) {
159
+ return params.map((param) => {
160
+ if (param === null) {
161
+ return 'STRING';
162
+ }
163
+ if (typeof param === 'number') {
164
+ return Number.isInteger(param) ? 'INT64' : 'FLOAT64';
165
+ }
166
+ if (typeof param === 'boolean') {
167
+ return 'BOOL';
168
+ }
169
+ if (param instanceof Date) {
170
+ return 'TIMESTAMP';
171
+ }
172
+ if (param instanceof Buffer) {
173
+ return 'BYTES';
174
+ }
175
+ if (Array.isArray(param)) {
176
+ return tslib_1.__classPrivateFieldGet(this, _BigQueryConnection_instances, "m", _BigQueryConnection_inferArrayType).call(this, param);
177
+ }
178
+ if (typeof param === 'object') {
179
+ /*
180
+ * After processParameters, registered JSON values are already stringified
181
+ * to strings, so they never reach here. Remaining objects are STRUCTs or
182
+ * unregistered objects. BigQuery needs the full STRUCT<...> descriptor to
183
+ * use a provided type, which we can't infer generically. Returning 'STRING'
184
+ * is a safe fallback — BigQuery's SDK calls .toString() on the value.
185
+ */
186
+ return 'STRING';
187
+ }
188
+ return 'STRING';
189
+ });
190
+ }, _BigQueryConnection_inferArrayType = function _BigQueryConnection_inferArrayType(param) {
191
+ if (param.length === 0) {
192
+ return 'ARRAY<STRING>';
193
+ }
194
+ const first = param[0];
195
+ if (typeof first === 'number') {
196
+ return Number.isInteger(first) ? 'ARRAY<INT64>' : 'ARRAY<FLOAT64>';
197
+ }
198
+ if (typeof first === 'boolean') {
199
+ return 'ARRAY<BOOL>';
200
+ }
201
+ return 'ARRAY<STRING>';
202
+ }, _BigQueryConnection_processResultRow = function _BigQueryConnection_processResultRow(row) {
203
+ if (tslib_1.__classPrivateFieldGet(this, _BigQueryConnection_jsonColumnNames, "f").size === 0) {
204
+ return row;
205
+ }
206
+ const processedRow = {};
207
+ for (const [key, value] of Object.entries(row)) {
208
+ if (tslib_1.__classPrivateFieldGet(this, _BigQueryConnection_jsonColumnNames, "f").has(key) && typeof value === 'string' && value.length > 0) {
209
+ try {
210
+ processedRow[key] = JSON.parse(value);
211
+ }
212
+ catch (_a) {
213
+ processedRow[key] = value;
214
+ }
215
+ }
216
+ else {
217
+ processedRow[key] = value;
218
+ }
219
+ }
220
+ return processedRow;
221
+ };
222
+ //# sourceMappingURL=BigQueryConnection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BigQueryConnection.js","sourceRoot":"","sources":["../src/BigQueryConnection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ import { type BigQuery, type BigQueryOptions, type Dataset, type Table } from '@google-cloud/bigquery';
2
+ import { type DatabaseIntrospector, type Dialect, type Driver, type Kysely, type QueryCompiler } from 'kysely';
3
+ import { BigQueryAdapter } from './BigQueryAdapter';
4
+ /**
5
+ * Configuration options for BigQuery dialect.
6
+ */
7
+ export interface BigQueryDialectConfig {
8
+ /**
9
+ * BigQuery client options.
10
+ */
11
+ options?: BigQueryOptions;
12
+ /**
13
+ * Existing BigQuery, Dataset, or Table instance to use.
14
+ * If provided, this will be used instead of creating a new client.
15
+ */
16
+ bigquery?: BigQuery | Dataset | Table;
17
+ /**
18
+ * Optional mapping of table names to their JSON column names.
19
+ * This enables automatic JSON serialization for these columns.
20
+ *
21
+ * Example:
22
+ * ```
23
+ * {
24
+ * 'dataset.users': ['metadata', 'settings'],
25
+ * 'dataset.products': ['specifications']
26
+ * }
27
+ * ```
28
+ */
29
+ jsonColumns?: Record<string, string[]>;
30
+ /**
31
+ * Default GCP project ID to prepend to table references.
32
+ *
33
+ * BigQuery supports three-level table names: `project.dataset.table`.
34
+ * Kysely's parser only handles two-level names (`schema.table`), so
35
+ * three-part strings like `'my-project.dataset.table'` lose the table name.
36
+ *
37
+ * Set this to your project ID so you can write `selectFrom('dataset.table')`
38
+ * and the compiler emits `\`project\`.\`dataset\`.\`table\``.
39
+ *
40
+ * Example:
41
+ * ```
42
+ * new BigQueryDialect({
43
+ * bigquery: client,
44
+ * defaultProject: 'my-gcp-project',
45
+ * })
46
+ * ```
47
+ */
48
+ defaultProject?: string;
49
+ }
50
+ /**
51
+ * BigQuery dialect for Kysely.
52
+ *
53
+ * This dialect allows you to use Kysely with Google BigQuery.
54
+ */
55
+ export declare class BigQueryDialect implements Dialect {
56
+ #private;
57
+ constructor(config?: BigQueryDialectConfig);
58
+ /**
59
+ * Creates a BigQuery adapter for Kysely.
60
+ * @returns A new BigQueryAdapter instance
61
+ */
62
+ createAdapter(): BigQueryAdapter;
63
+ /**
64
+ * Creates a BigQuery driver for database connections.
65
+ * @returns A new BigQueryDriver instance configured with the dialect settings
66
+ */
67
+ createDriver(): Driver;
68
+ /**
69
+ * Creates a BigQuery query compiler for SQL generation.
70
+ * @returns A new BigQueryCompiler instance that translates Kysely queries to BigQuery SQL
71
+ */
72
+ createQueryCompiler(): QueryCompiler;
73
+ /**
74
+ * Creates a BigQuery database introspector for schema discovery.
75
+ * @param db - The Kysely database instance
76
+ * @returns A new BigQueryIntrospector instance for examining database schema
77
+ */
78
+ createIntrospector(db: Kysely<unknown>): DatabaseIntrospector;
79
+ }
80
+ //# sourceMappingURL=BigQueryDialect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BigQueryDialect.d.ts","sourceRoot":"","sources":["../src/BigQueryDialect.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,eAAe,EACpB,KAAK,OAAO,EACZ,KAAK,KAAK,EACX,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,OAAO,EACZ,KAAK,MAAM,EACX,KAAK,MAAM,EACX,KAAK,aAAa,EACnB,MAAM,QAAQ,CAAC;AAEhB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAKpD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,OAAO,CAAC,EAAE,eAAe,CAAC;IAE1B;;;OAGG;IACH,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,KAAK,CAAC;IAEtC;;;;;;;;;;;OAWG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAEvC;;;;;;;;;;;;;;;;;OAiBG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;GAIG;AACH,qBAAa,eAAgB,YAAW,OAAO;;gBAGjC,MAAM,CAAC,EAAE,qBAAqB;IAI1C;;;OAGG;IACH,aAAa;IAIb;;;OAGG;IACH,YAAY,IAAI,MAAM;IAItB;;;OAGG;IACH,mBAAmB,IAAI,aAAa;IAIpC;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,oBAAoB;CAwC9D"}