drizzle-orm 0.39.0-19ccabb → 0.39.0-b06bbcd
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/package.json +1 -1
- package/sql-js/session.cjs +69 -32
- package/sql-js/session.cjs.map +1 -1
- package/sql-js/session.d.cts +7 -3
- package/sql-js/session.d.ts +7 -3
- package/sql-js/session.js +69 -32
- package/sql-js/session.js.map +1 -1
- package/sqlite-core/query-builders/query.cjs +3 -3
- package/sqlite-core/query-builders/query.cjs.map +1 -1
- package/sqlite-core/query-builders/query.js +3 -3
- package/sqlite-core/query-builders/query.js.map +1 -1
- package/version.cjs +1 -1
- package/version.d.cts +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
package/package.json
CHANGED
package/sql-js/session.cjs
CHANGED
|
@@ -40,17 +40,47 @@ class SQLJsSession extends import_session.SQLiteSession {
|
|
|
40
40
|
static [import_entity.entityKind] = "SQLJsSession";
|
|
41
41
|
logger;
|
|
42
42
|
prepareQuery(query, fields, executeMethod, isResponseInArrayMode) {
|
|
43
|
-
|
|
43
|
+
const stmt = this.client.prepare(query.sql);
|
|
44
|
+
return new PreparedQuery(stmt, query, this.logger, fields, executeMethod, isResponseInArrayMode);
|
|
45
|
+
}
|
|
46
|
+
prepareOneTimeQuery(query, fields, executeMethod, isResponseInArrayMode, customResultMapper) {
|
|
47
|
+
const stmt = this.client.prepare(query.sql);
|
|
48
|
+
return new PreparedQuery(
|
|
49
|
+
stmt,
|
|
50
|
+
query,
|
|
51
|
+
this.logger,
|
|
52
|
+
fields,
|
|
53
|
+
executeMethod,
|
|
54
|
+
isResponseInArrayMode,
|
|
55
|
+
customResultMapper,
|
|
56
|
+
true
|
|
57
|
+
);
|
|
44
58
|
}
|
|
45
59
|
prepareRelationalQuery(query, fields, executeMethod, customResultMapper) {
|
|
60
|
+
const stmt = this.client.prepare(query.sql);
|
|
46
61
|
return new PreparedQuery(
|
|
47
|
-
|
|
62
|
+
stmt,
|
|
48
63
|
query,
|
|
49
64
|
this.logger,
|
|
50
65
|
fields,
|
|
51
66
|
executeMethod,
|
|
52
67
|
false,
|
|
53
68
|
customResultMapper,
|
|
69
|
+
false,
|
|
70
|
+
true
|
|
71
|
+
);
|
|
72
|
+
}
|
|
73
|
+
prepareOneTimeRelationalQuery(query, fields, executeMethod, customResultMapper) {
|
|
74
|
+
const stmt = this.client.prepare(query.sql);
|
|
75
|
+
return new PreparedQuery(
|
|
76
|
+
stmt,
|
|
77
|
+
query,
|
|
78
|
+
this.logger,
|
|
79
|
+
fields,
|
|
80
|
+
executeMethod,
|
|
81
|
+
false,
|
|
82
|
+
customResultMapper,
|
|
83
|
+
true,
|
|
54
84
|
true
|
|
55
85
|
);
|
|
56
86
|
}
|
|
@@ -91,29 +121,30 @@ class SQLJsTransaction extends import_sqlite_core.SQLiteTransaction {
|
|
|
91
121
|
}
|
|
92
122
|
}
|
|
93
123
|
class PreparedQuery extends import_session.SQLitePreparedQuery {
|
|
94
|
-
constructor(
|
|
124
|
+
constructor(stmt, query, logger, fields, executeMethod, _isResponseInArrayMode, customResultMapper, isOneTimeQuery = false, isRqbV2Query) {
|
|
95
125
|
super("sync", executeMethod, query);
|
|
96
|
-
this.
|
|
126
|
+
this.stmt = stmt;
|
|
97
127
|
this.logger = logger;
|
|
98
128
|
this.fields = fields;
|
|
99
129
|
this._isResponseInArrayMode = _isResponseInArrayMode;
|
|
100
130
|
this.customResultMapper = customResultMapper;
|
|
131
|
+
this.isOneTimeQuery = isOneTimeQuery;
|
|
101
132
|
this.isRqbV2Query = isRqbV2Query;
|
|
102
133
|
}
|
|
103
134
|
static [import_entity.entityKind] = "SQLJsPreparedQuery";
|
|
104
135
|
run(placeholderValues) {
|
|
105
|
-
const stmt = this.client.prepare(this.query.sql);
|
|
106
136
|
const params = (0, import_sql.fillPlaceholders)(this.query.params, placeholderValues ?? {});
|
|
107
137
|
this.logger.logQuery(this.query.sql, params);
|
|
108
|
-
const result = stmt.run(params);
|
|
109
|
-
|
|
138
|
+
const result = this.stmt.run(params);
|
|
139
|
+
if (this.isOneTimeQuery) {
|
|
140
|
+
this.free();
|
|
141
|
+
}
|
|
110
142
|
return result;
|
|
111
143
|
}
|
|
112
144
|
all(placeholderValues) {
|
|
113
145
|
if (this.isRqbV2Query)
|
|
114
146
|
return this.allRqbV2(placeholderValues);
|
|
115
|
-
const stmt = this
|
|
116
|
-
const { fields, joinsNotNullableMap, logger, query, customResultMapper } = this;
|
|
147
|
+
const { fields, joinsNotNullableMap, logger, query, stmt, isOneTimeQuery, customResultMapper } = this;
|
|
117
148
|
if (!fields && !customResultMapper) {
|
|
118
149
|
const params = (0, import_sql.fillPlaceholders)(query.params, placeholderValues ?? {});
|
|
119
150
|
logger.logQuery(query.sql, params);
|
|
@@ -122,7 +153,9 @@ class PreparedQuery extends import_session.SQLitePreparedQuery {
|
|
|
122
153
|
while (stmt.step()) {
|
|
123
154
|
rows2.push(stmt.getAsObject());
|
|
124
155
|
}
|
|
125
|
-
|
|
156
|
+
if (isOneTimeQuery) {
|
|
157
|
+
this.free();
|
|
158
|
+
}
|
|
126
159
|
return rows2;
|
|
127
160
|
}
|
|
128
161
|
const rows = this.values(placeholderValues);
|
|
@@ -132,8 +165,7 @@ class PreparedQuery extends import_session.SQLitePreparedQuery {
|
|
|
132
165
|
return rows.map((row) => (0, import_utils.mapResultRow)(fields, row.map((v) => normalizeFieldValue(v)), joinsNotNullableMap));
|
|
133
166
|
}
|
|
134
167
|
allRqbV2(placeholderValues) {
|
|
135
|
-
const stmt = this
|
|
136
|
-
const { logger, query, customResultMapper } = this;
|
|
168
|
+
const { logger, query, stmt, isOneTimeQuery, customResultMapper } = this;
|
|
137
169
|
const params = (0, import_sql.fillPlaceholders)(query.params, placeholderValues ?? {});
|
|
138
170
|
logger.logQuery(query.sql, params);
|
|
139
171
|
stmt.bind(params);
|
|
@@ -141,23 +173,28 @@ class PreparedQuery extends import_session.SQLitePreparedQuery {
|
|
|
141
173
|
while (stmt.step()) {
|
|
142
174
|
rows.push(stmt.getAsObject());
|
|
143
175
|
}
|
|
144
|
-
|
|
176
|
+
if (isOneTimeQuery) {
|
|
177
|
+
this.free();
|
|
178
|
+
}
|
|
145
179
|
return customResultMapper(rows, normalizeFieldValue);
|
|
146
180
|
}
|
|
147
181
|
get(placeholderValues) {
|
|
148
182
|
if (this.isRqbV2Query)
|
|
149
183
|
return this.getRqbV2(placeholderValues);
|
|
150
|
-
const stmt = this.client.prepare(this.query.sql);
|
|
151
184
|
const params = (0, import_sql.fillPlaceholders)(this.query.params, placeholderValues ?? {});
|
|
152
185
|
this.logger.logQuery(this.query.sql, params);
|
|
153
|
-
const { fields, joinsNotNullableMap, customResultMapper } = this;
|
|
186
|
+
const { fields, stmt, isOneTimeQuery, joinsNotNullableMap, customResultMapper } = this;
|
|
154
187
|
if (!fields && !customResultMapper) {
|
|
155
188
|
const result = stmt.getAsObject(params);
|
|
156
|
-
|
|
189
|
+
if (isOneTimeQuery) {
|
|
190
|
+
this.free();
|
|
191
|
+
}
|
|
157
192
|
return result;
|
|
158
193
|
}
|
|
159
194
|
const row = stmt.get(params);
|
|
160
|
-
|
|
195
|
+
if (isOneTimeQuery) {
|
|
196
|
+
this.free();
|
|
197
|
+
}
|
|
161
198
|
if (!row || row.length === 0 && fields.length > 0) {
|
|
162
199
|
return void 0;
|
|
163
200
|
}
|
|
@@ -167,38 +204,38 @@ class PreparedQuery extends import_session.SQLitePreparedQuery {
|
|
|
167
204
|
return (0, import_utils.mapResultRow)(fields, row.map((v) => normalizeFieldValue(v)), joinsNotNullableMap);
|
|
168
205
|
}
|
|
169
206
|
getRqbV2(placeholderValues) {
|
|
170
|
-
const stmt = this.client.prepare(this.query.sql);
|
|
171
207
|
const params = (0, import_sql.fillPlaceholders)(this.query.params, placeholderValues ?? {});
|
|
172
208
|
this.logger.logQuery(this.query.sql, params);
|
|
173
|
-
const { customResultMapper } = this;
|
|
209
|
+
const { stmt, isOneTimeQuery, customResultMapper } = this;
|
|
174
210
|
const row = stmt.getAsObject(params);
|
|
175
|
-
|
|
211
|
+
if (isOneTimeQuery) {
|
|
212
|
+
this.free();
|
|
213
|
+
}
|
|
176
214
|
if (!row) {
|
|
177
215
|
return void 0;
|
|
178
216
|
}
|
|
179
|
-
let nonUndef = false;
|
|
180
217
|
for (const v of Object.values(row)) {
|
|
181
|
-
if (v
|
|
182
|
-
|
|
183
|
-
break;
|
|
184
|
-
}
|
|
218
|
+
if (v === void 0)
|
|
219
|
+
return void 0;
|
|
185
220
|
}
|
|
186
|
-
if (!nonUndef)
|
|
187
|
-
return void 0;
|
|
188
221
|
return customResultMapper([row], normalizeFieldValue);
|
|
189
222
|
}
|
|
190
223
|
values(placeholderValues) {
|
|
191
|
-
const stmt = this.client.prepare(this.query.sql);
|
|
192
224
|
const params = (0, import_sql.fillPlaceholders)(this.query.params, placeholderValues ?? {});
|
|
193
225
|
this.logger.logQuery(this.query.sql, params);
|
|
194
|
-
stmt.bind(params);
|
|
226
|
+
this.stmt.bind(params);
|
|
195
227
|
const rows = [];
|
|
196
|
-
while (stmt.step()) {
|
|
197
|
-
rows.push(stmt.get());
|
|
228
|
+
while (this.stmt.step()) {
|
|
229
|
+
rows.push(this.stmt.get());
|
|
230
|
+
}
|
|
231
|
+
if (this.isOneTimeQuery) {
|
|
232
|
+
this.free();
|
|
198
233
|
}
|
|
199
|
-
stmt.free();
|
|
200
234
|
return rows;
|
|
201
235
|
}
|
|
236
|
+
free() {
|
|
237
|
+
return this.stmt.free();
|
|
238
|
+
}
|
|
202
239
|
/** @internal */
|
|
203
240
|
isResponseInArrayMode() {
|
|
204
241
|
return this._isResponseInArrayMode;
|
package/sql-js/session.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/sql-js/session.ts"],"sourcesContent":["import type { BindParams, Database } from 'sql.js';\nimport type * as V1 from '~/_relations.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { AnyRelations, TablesRelationalConfig } from '~/relations.ts';\nimport { fillPlaceholders, type Query, sql } from '~/sql/sql.ts';\nimport type { SQLiteSyncDialect } from '~/sqlite-core/dialect.ts';\nimport { SQLiteTransaction } from '~/sqlite-core/index.ts';\nimport type { SelectedFieldsOrdered } from '~/sqlite-core/query-builders/select.types.ts';\nimport type {\n\tPreparedQueryConfig as PreparedQueryConfigBase,\n\tSQLiteExecuteMethod,\n\tSQLiteTransactionConfig,\n} from '~/sqlite-core/session.ts';\nimport { SQLitePreparedQuery as PreparedQueryBase, SQLiteSession } from '~/sqlite-core/session.ts';\nimport { mapResultRow } from '~/utils.ts';\n\nexport interface SQLJsSessionOptions {\n\tlogger?: Logger;\n}\n\ntype PreparedQueryConfig = Omit<PreparedQueryConfigBase, 'statement' | 'run'>;\n\nexport class SQLJsSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTRelations extends AnyRelations,\n\tTTablesConfig extends TablesRelationalConfig,\n\tTSchema extends V1.TablesRelationalConfig,\n> extends SQLiteSession<'sync', void, TFullSchema, TRelations, TTablesConfig, TSchema> {\n\tstatic override readonly [entityKind]: string = 'SQLJsSession';\n\n\tprivate logger: Logger;\n\n\tconstructor(\n\t\tprivate client: Database,\n\t\tdialect: SQLiteSyncDialect,\n\t\tprivate relations: AnyRelations | undefined,\n\t\tprivate schema: V1.RelationalSchemaConfig<TSchema> | undefined,\n\t\toptions: SQLJsSessionOptions = {},\n\t) {\n\t\tsuper(dialect);\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t}\n\n\tprepareQuery<T extends Omit<PreparedQueryConfig, 'run'>>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tisResponseInArrayMode: boolean,\n\t): PreparedQuery<T> {\n\t\treturn new PreparedQuery(this.client, query, this.logger, fields, executeMethod, isResponseInArrayMode);\n\t}\n\n\tprepareRelationalQuery<T extends Omit<PreparedQueryConfig, 'run'>>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tcustomResultMapper: (rows: Record<string, unknown>[]) => unknown,\n\t): PreparedQuery<T, true> {\n\t\treturn new PreparedQuery(\n\t\t\tthis.client,\n\t\t\tquery,\n\t\t\tthis.logger,\n\t\t\tfields,\n\t\t\texecuteMethod,\n\t\t\tfalse,\n\t\t\tcustomResultMapper,\n\t\t\ttrue,\n\t\t);\n\t}\n\n\toverride transaction<T>(\n\t\ttransaction: (tx: SQLJsTransaction<TFullSchema, TRelations, TTablesConfig, TSchema>) => T,\n\t\tconfig: SQLiteTransactionConfig = {},\n\t): T {\n\t\tconst tx = new SQLJsTransaction('sync', this.dialect, this, this.relations, this.schema);\n\t\tthis.run(sql.raw(`begin${config.behavior ? ` ${config.behavior}` : ''}`));\n\t\ttry {\n\t\t\tconst result = transaction(tx);\n\t\t\tthis.run(sql`commit`);\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tthis.run(sql`rollback`);\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nexport class SQLJsTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTRelations extends AnyRelations,\n\tTTablesConfig extends TablesRelationalConfig,\n\tTSchema extends V1.TablesRelationalConfig,\n> extends SQLiteTransaction<'sync', void, TFullSchema, TRelations, TTablesConfig, TSchema> {\n\tstatic override readonly [entityKind]: string = 'SQLJsTransaction';\n\n\toverride transaction<T>(\n\t\ttransaction: (tx: SQLJsTransaction<TFullSchema, TRelations, TTablesConfig, TSchema>) => T,\n\t): T {\n\t\tconst savepointName = `sp${this.nestedIndex + 1}`;\n\t\tconst tx = new SQLJsTransaction(\n\t\t\t'sync',\n\t\t\tthis.dialect,\n\t\t\tthis.session,\n\t\t\tthis.relations,\n\t\t\tthis.schema,\n\t\t\tthis.nestedIndex + 1,\n\t\t);\n\t\ttx.run(sql.raw(`savepoint ${savepointName}`));\n\t\ttry {\n\t\t\tconst result = transaction(tx);\n\t\t\ttx.run(sql.raw(`release savepoint ${savepointName}`));\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\ttx.run(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nexport class PreparedQuery<T extends PreparedQueryConfig = PreparedQueryConfig, TIsRqbV2 extends boolean = false>\n\textends PreparedQueryBase<\n\t\t{ type: 'sync'; run: void; all: T['all']; get: T['get']; values: T['values']; execute: T['execute'] }\n\t>\n{\n\tstatic override readonly [entityKind]: string = 'SQLJsPreparedQuery';\n\n\tconstructor(\n\t\tprivate client: Database,\n\t\tquery: Query,\n\t\tprivate logger: Logger,\n\t\tprivate fields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tprivate _isResponseInArrayMode: boolean,\n\t\tprivate customResultMapper?: (\n\t\t\trows: TIsRqbV2 extends true ? Record<string, unknown>[] : unknown[][],\n\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t) => unknown,\n\t\tprivate isRqbV2Query?: TIsRqbV2,\n\t) {\n\t\tsuper('sync', executeMethod, query);\n\t}\n\n\trun(placeholderValues?: Record<string, unknown>): void {\n\t\tconst stmt = this.client.prepare(this.query.sql);\n\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\tconst result = stmt.run(params as BindParams);\n\n\t\tstmt.free();\n\n\t\treturn result;\n\t}\n\n\tall(placeholderValues?: Record<string, unknown>): T['all'] {\n\t\tif (this.isRqbV2Query) return this.allRqbV2(placeholderValues);\n\t\tconst stmt = this.client.prepare(this.query.sql);\n\n\t\tconst { fields, joinsNotNullableMap, logger, query, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\t\tlogger.logQuery(query.sql, params);\n\t\t\tstmt.bind(params as BindParams);\n\t\t\tconst rows: unknown[] = [];\n\t\t\twhile (stmt.step()) {\n\t\t\t\trows.push(stmt.getAsObject());\n\t\t\t}\n\n\t\t\tstmt.free();\n\n\t\t\treturn rows;\n\t\t}\n\n\t\tconst rows = this.values(placeholderValues) as unknown[][];\n\n\t\tif (customResultMapper) {\n\t\t\treturn (customResultMapper as (\n\t\t\t\trows: unknown[][],\n\t\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t\t) => unknown)(rows, normalizeFieldValue) as T['all'];\n\t\t}\n\n\t\treturn rows.map((row) => mapResultRow(fields!, row.map((v) => normalizeFieldValue(v)), joinsNotNullableMap));\n\t}\n\n\tprivate allRqbV2(placeholderValues?: Record<string, unknown>): T['all'] {\n\t\tconst stmt = this.client.prepare(this.query.sql);\n\n\t\tconst { logger, query, customResultMapper } = this;\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\tlogger.logQuery(query.sql, params);\n\t\tstmt.bind(params as BindParams);\n\t\tconst rows: Record<string, unknown>[] = [];\n\t\twhile (stmt.step()) {\n\t\t\trows.push(stmt.getAsObject());\n\t\t}\n\n\t\tstmt.free();\n\n\t\treturn (customResultMapper as (\n\t\t\trows: Record<string, unknown>[],\n\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t) => unknown)(rows, normalizeFieldValue) as T['all'];\n\t}\n\n\tget(placeholderValues?: Record<string, unknown>): T['get'] {\n\t\tif (this.isRqbV2Query) return this.getRqbV2(placeholderValues);\n\t\tconst stmt = this.client.prepare(this.query.sql);\n\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\n\t\tconst { fields, joinsNotNullableMap, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst result = stmt.getAsObject(params as BindParams);\n\n\t\t\tstmt.free();\n\n\t\t\treturn result;\n\t\t}\n\n\t\tconst row = stmt.get(params as BindParams);\n\n\t\tstmt.free();\n\n\t\tif (!row || (row.length === 0 && fields!.length > 0)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (customResultMapper) {\n\t\t\treturn (customResultMapper as (\n\t\t\t\trows: unknown[][],\n\t\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t\t) => unknown)([row], normalizeFieldValue) as T['get'];\n\t\t}\n\n\t\treturn mapResultRow(fields!, row.map((v) => normalizeFieldValue(v)), joinsNotNullableMap);\n\t}\n\n\tprivate getRqbV2(placeholderValues?: Record<string, unknown>): T['get'] {\n\t\tconst stmt = this.client.prepare(this.query.sql);\n\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\n\t\tconst { customResultMapper } = this;\n\n\t\tconst row = stmt.getAsObject(params as BindParams);\n\n\t\tstmt.free();\n\n\t\tif (!row) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tlet nonUndef = false;\n\t\tfor (const v of Object.values(row)) {\n\t\t\tif (v !== undefined) {\n\t\t\t\tnonUndef = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (!nonUndef) return undefined;\n\n\t\treturn (customResultMapper as (\n\t\t\trows: Record<string, unknown>[],\n\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t) => unknown)([row], normalizeFieldValue) as T['get'];\n\t}\n\n\tvalues(placeholderValues?: Record<string, unknown>): T['values'] {\n\t\tconst stmt = this.client.prepare(this.query.sql);\n\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\tstmt.bind(params as BindParams);\n\t\tconst rows: unknown[] = [];\n\t\twhile (stmt.step()) {\n\t\t\trows.push(stmt.get());\n\t\t}\n\n\t\tstmt.free();\n\n\t\treturn rows;\n\t}\n\n\t/** @internal */\n\tisResponseInArrayMode(): boolean {\n\t\treturn this._isResponseInArrayMode;\n\t}\n}\n\nfunction normalizeFieldValue(value: unknown) {\n\tif (value instanceof Uint8Array) { // eslint-disable-line no-instanceof/no-instanceof\n\t\tif (typeof Buffer !== 'undefined') {\n\t\t\tif (!(value instanceof Buffer)) { // eslint-disable-line no-instanceof/no-instanceof\n\t\t\t\treturn Buffer.from(value);\n\t\t\t}\n\t\t\treturn value;\n\t\t}\n\t\tif (typeof TextDecoder !== 'undefined') {\n\t\t\treturn new TextDecoder().decode(value);\n\t\t}\n\t\tthrow new Error('TextDecoder is not available. Please provide either Buffer or TextDecoder polyfill.');\n\t}\n\treturn value;\n}\n"],"mappings":"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","names":["PreparedQueryBase","rows"]}
|
|
1
|
+
{"version":3,"sources":["../../src/sql-js/session.ts"],"sourcesContent":["import type { BindParams, Database, Statement } from 'sql.js';\nimport type * as V1 from '~/_relations.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { AnyRelations, TablesRelationalConfig } from '~/relations.ts';\nimport { fillPlaceholders, type Query, sql } from '~/sql/sql.ts';\nimport type { SQLiteSyncDialect } from '~/sqlite-core/dialect.ts';\nimport { SQLiteTransaction } from '~/sqlite-core/index.ts';\nimport type { SelectedFieldsOrdered } from '~/sqlite-core/query-builders/select.types.ts';\nimport type {\n\tPreparedQueryConfig as PreparedQueryConfigBase,\n\tSQLiteExecuteMethod,\n\tSQLiteTransactionConfig,\n} from '~/sqlite-core/session.ts';\nimport { SQLitePreparedQuery as PreparedQueryBase, SQLiteSession } from '~/sqlite-core/session.ts';\nimport { mapResultRow } from '~/utils.ts';\n\nexport interface SQLJsSessionOptions {\n\tlogger?: Logger;\n}\n\ntype PreparedQueryConfig = Omit<PreparedQueryConfigBase, 'statement' | 'run'>;\n\nexport class SQLJsSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTRelations extends AnyRelations,\n\tTTablesConfig extends TablesRelationalConfig,\n\tTSchema extends V1.TablesRelationalConfig,\n> extends SQLiteSession<'sync', void, TFullSchema, TRelations, TTablesConfig, TSchema> {\n\tstatic override readonly [entityKind]: string = 'SQLJsSession';\n\n\tprivate logger: Logger;\n\n\tconstructor(\n\t\tprivate client: Database,\n\t\tdialect: SQLiteSyncDialect,\n\t\tprivate relations: AnyRelations | undefined,\n\t\tprivate schema: V1.RelationalSchemaConfig<TSchema> | undefined,\n\t\toptions: SQLJsSessionOptions = {},\n\t) {\n\t\tsuper(dialect);\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t}\n\n\tprepareQuery<T extends Omit<PreparedQueryConfig, 'run'>>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tisResponseInArrayMode: boolean,\n\t): PreparedQuery<T> {\n\t\tconst stmt = this.client.prepare(query.sql);\n\t\treturn new PreparedQuery(stmt, query, this.logger, fields, executeMethod, isResponseInArrayMode);\n\t}\n\n\toverride prepareOneTimeQuery<T extends Omit<PreparedQueryConfig, 'run'>>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tisResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][]) => unknown,\n\t): PreparedQuery<T> {\n\t\tconst stmt = this.client.prepare(query.sql);\n\t\treturn new PreparedQuery(\n\t\t\tstmt,\n\t\t\tquery,\n\t\t\tthis.logger,\n\t\t\tfields,\n\t\t\texecuteMethod,\n\t\t\tisResponseInArrayMode,\n\t\t\tcustomResultMapper,\n\t\t\ttrue,\n\t\t);\n\t}\n\n\tprepareRelationalQuery<T extends Omit<PreparedQueryConfig, 'run'>>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tcustomResultMapper: (rows: Record<string, unknown>[]) => unknown,\n\t): PreparedQuery<T, true> {\n\t\tconst stmt = this.client.prepare(query.sql);\n\t\treturn new PreparedQuery(\n\t\t\tstmt,\n\t\t\tquery,\n\t\t\tthis.logger,\n\t\t\tfields,\n\t\t\texecuteMethod,\n\t\t\tfalse,\n\t\t\tcustomResultMapper,\n\t\t\tfalse,\n\t\t\ttrue,\n\t\t);\n\t}\n\n\toverride prepareOneTimeRelationalQuery<T extends Omit<PreparedQueryConfig, 'run'>>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tcustomResultMapper: (rows: Record<string, unknown>[]) => unknown,\n\t): PreparedQuery<T, true> {\n\t\tconst stmt = this.client.prepare(query.sql);\n\t\treturn new PreparedQuery(\n\t\t\tstmt,\n\t\t\tquery,\n\t\t\tthis.logger,\n\t\t\tfields,\n\t\t\texecuteMethod,\n\t\t\tfalse,\n\t\t\tcustomResultMapper,\n\t\t\ttrue,\n\t\t\ttrue,\n\t\t);\n\t}\n\n\toverride transaction<T>(\n\t\ttransaction: (tx: SQLJsTransaction<TFullSchema, TRelations, TTablesConfig, TSchema>) => T,\n\t\tconfig: SQLiteTransactionConfig = {},\n\t): T {\n\t\tconst tx = new SQLJsTransaction('sync', this.dialect, this, this.relations, this.schema);\n\t\tthis.run(sql.raw(`begin${config.behavior ? ` ${config.behavior}` : ''}`));\n\t\ttry {\n\t\t\tconst result = transaction(tx);\n\t\t\tthis.run(sql`commit`);\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tthis.run(sql`rollback`);\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nexport class SQLJsTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTRelations extends AnyRelations,\n\tTTablesConfig extends TablesRelationalConfig,\n\tTSchema extends V1.TablesRelationalConfig,\n> extends SQLiteTransaction<'sync', void, TFullSchema, TRelations, TTablesConfig, TSchema> {\n\tstatic override readonly [entityKind]: string = 'SQLJsTransaction';\n\n\toverride transaction<T>(\n\t\ttransaction: (tx: SQLJsTransaction<TFullSchema, TRelations, TTablesConfig, TSchema>) => T,\n\t): T {\n\t\tconst savepointName = `sp${this.nestedIndex + 1}`;\n\t\tconst tx = new SQLJsTransaction(\n\t\t\t'sync',\n\t\t\tthis.dialect,\n\t\t\tthis.session,\n\t\t\tthis.relations,\n\t\t\tthis.schema,\n\t\t\tthis.nestedIndex + 1,\n\t\t);\n\t\ttx.run(sql.raw(`savepoint ${savepointName}`));\n\t\ttry {\n\t\t\tconst result = transaction(tx);\n\t\t\ttx.run(sql.raw(`release savepoint ${savepointName}`));\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\ttx.run(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nexport class PreparedQuery<T extends PreparedQueryConfig = PreparedQueryConfig, TIsRqbV2 extends boolean = false>\n\textends PreparedQueryBase<\n\t\t{ type: 'sync'; run: void; all: T['all']; get: T['get']; values: T['values']; execute: T['execute'] }\n\t>\n{\n\tstatic override readonly [entityKind]: string = 'SQLJsPreparedQuery';\n\n\tconstructor(\n\t\tprivate stmt: Statement,\n\t\tquery: Query,\n\t\tprivate logger: Logger,\n\t\tprivate fields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tprivate _isResponseInArrayMode: boolean,\n\t\tprivate customResultMapper?: (\n\t\t\trows: TIsRqbV2 extends true ? Record<string, unknown>[] : unknown[][],\n\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t) => unknown,\n\t\tprivate isOneTimeQuery = false,\n\t\tprivate isRqbV2Query?: TIsRqbV2,\n\t) {\n\t\tsuper('sync', executeMethod, query);\n\t}\n\n\trun(placeholderValues?: Record<string, unknown>): void {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\tconst result = this.stmt.run(params as BindParams);\n\n\t\tif (this.isOneTimeQuery) {\n\t\t\tthis.free();\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tall(placeholderValues?: Record<string, unknown>): T['all'] {\n\t\tif (this.isRqbV2Query) return this.allRqbV2(placeholderValues);\n\n\t\tconst { fields, joinsNotNullableMap, logger, query, stmt, isOneTimeQuery, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\t\tlogger.logQuery(query.sql, params);\n\t\t\tstmt.bind(params as BindParams);\n\t\t\tconst rows: unknown[] = [];\n\t\t\twhile (stmt.step()) {\n\t\t\t\trows.push(stmt.getAsObject());\n\t\t\t}\n\n\t\t\tif (isOneTimeQuery) {\n\t\t\t\tthis.free();\n\t\t\t}\n\n\t\t\treturn rows;\n\t\t}\n\n\t\tconst rows = this.values(placeholderValues) as unknown[][];\n\n\t\tif (customResultMapper) {\n\t\t\treturn (customResultMapper as (\n\t\t\t\trows: unknown[][],\n\t\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t\t) => unknown)(rows, normalizeFieldValue) as T['all'];\n\t\t}\n\n\t\treturn rows.map((row) => mapResultRow(fields!, row.map((v) => normalizeFieldValue(v)), joinsNotNullableMap));\n\t}\n\n\tprivate allRqbV2(placeholderValues?: Record<string, unknown>): T['all'] {\n\t\tconst { logger, query, stmt, isOneTimeQuery, customResultMapper } = this;\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\tlogger.logQuery(query.sql, params);\n\t\tstmt.bind(params as BindParams);\n\t\tconst rows: Record<string, unknown>[] = [];\n\t\twhile (stmt.step()) {\n\t\t\trows.push(stmt.getAsObject());\n\t\t}\n\n\t\tif (isOneTimeQuery) {\n\t\t\tthis.free();\n\t\t}\n\n\t\treturn (customResultMapper as (\n\t\t\trows: Record<string, unknown>[],\n\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t) => unknown)(rows, normalizeFieldValue) as T['all'];\n\t}\n\n\tget(placeholderValues?: Record<string, unknown>): T['get'] {\n\t\tif (this.isRqbV2Query) return this.getRqbV2(placeholderValues);\n\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\n\t\tconst { fields, stmt, isOneTimeQuery, joinsNotNullableMap, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst result = stmt.getAsObject(params as BindParams);\n\n\t\t\tif (isOneTimeQuery) {\n\t\t\t\tthis.free();\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\n\t\tconst row = stmt.get(params as BindParams);\n\n\t\tif (isOneTimeQuery) {\n\t\t\tthis.free();\n\t\t}\n\n\t\tif (!row || (row.length === 0 && fields!.length > 0)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (customResultMapper) {\n\t\t\treturn (customResultMapper as (\n\t\t\t\trows: unknown[][],\n\t\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t\t) => unknown)([row], normalizeFieldValue) as T['get'];\n\t\t}\n\n\t\treturn mapResultRow(fields!, row.map((v) => normalizeFieldValue(v)), joinsNotNullableMap);\n\t}\n\n\tprivate getRqbV2(placeholderValues?: Record<string, unknown>): T['get'] {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\n\t\tconst { stmt, isOneTimeQuery, customResultMapper } = this;\n\n\t\tconst row = stmt.getAsObject(params as BindParams);\n\n\t\tif (isOneTimeQuery) {\n\t\t\tthis.free();\n\t\t}\n\n\t\tif (!row) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tfor (const v of Object.values(row)) {\n\t\t\tif (v === undefined) return undefined;\n\t\t}\n\n\t\treturn (customResultMapper as (\n\t\t\trows: Record<string, unknown>[],\n\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t) => unknown)([row], normalizeFieldValue) as T['get'];\n\t}\n\n\tvalues(placeholderValues?: Record<string, unknown>): T['values'] {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\tthis.stmt.bind(params as BindParams);\n\t\tconst rows: unknown[] = [];\n\t\twhile (this.stmt.step()) {\n\t\t\trows.push(this.stmt.get());\n\t\t}\n\n\t\tif (this.isOneTimeQuery) {\n\t\t\tthis.free();\n\t\t}\n\n\t\treturn rows;\n\t}\n\n\tfree(): boolean {\n\t\treturn this.stmt.free();\n\t}\n\n\t/** @internal */\n\tisResponseInArrayMode(): boolean {\n\t\treturn this._isResponseInArrayMode;\n\t}\n}\n\nfunction normalizeFieldValue(value: unknown) {\n\tif (value instanceof Uint8Array) { // eslint-disable-line no-instanceof/no-instanceof\n\t\tif (typeof Buffer !== 'undefined') {\n\t\t\tif (!(value instanceof Buffer)) { // eslint-disable-line no-instanceof/no-instanceof\n\t\t\t\treturn Buffer.from(value);\n\t\t\t}\n\t\t\treturn value;\n\t\t}\n\t\tif (typeof TextDecoder !== 'undefined') {\n\t\t\treturn new TextDecoder().decode(value);\n\t\t}\n\t\tthrow new Error('TextDecoder is not available. Please provide either Buffer or TextDecoder polyfill.');\n\t}\n\treturn value;\n}\n"],"mappings":"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","names":["PreparedQueryBase","rows"]}
|
package/sql-js/session.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Database } from 'sql.js';
|
|
1
|
+
import type { Database, Statement } from 'sql.js';
|
|
2
2
|
import type * as V1 from "../_relations.cjs";
|
|
3
3
|
import { entityKind } from "../entity.cjs";
|
|
4
4
|
import type { Logger } from "../logger.cjs";
|
|
@@ -21,7 +21,9 @@ export declare class SQLJsSession<TFullSchema extends Record<string, unknown>, T
|
|
|
21
21
|
private logger;
|
|
22
22
|
constructor(client: Database, dialect: SQLiteSyncDialect, relations: AnyRelations | undefined, schema: V1.RelationalSchemaConfig<TSchema> | undefined, options?: SQLJsSessionOptions);
|
|
23
23
|
prepareQuery<T extends Omit<PreparedQueryConfig, 'run'>>(query: Query, fields: SelectedFieldsOrdered | undefined, executeMethod: SQLiteExecuteMethod, isResponseInArrayMode: boolean): PreparedQuery<T>;
|
|
24
|
+
prepareOneTimeQuery<T extends Omit<PreparedQueryConfig, 'run'>>(query: Query, fields: SelectedFieldsOrdered | undefined, executeMethod: SQLiteExecuteMethod, isResponseInArrayMode: boolean, customResultMapper?: (rows: unknown[][]) => unknown): PreparedQuery<T>;
|
|
24
25
|
prepareRelationalQuery<T extends Omit<PreparedQueryConfig, 'run'>>(query: Query, fields: SelectedFieldsOrdered | undefined, executeMethod: SQLiteExecuteMethod, customResultMapper: (rows: Record<string, unknown>[]) => unknown): PreparedQuery<T, true>;
|
|
26
|
+
prepareOneTimeRelationalQuery<T extends Omit<PreparedQueryConfig, 'run'>>(query: Query, fields: SelectedFieldsOrdered | undefined, executeMethod: SQLiteExecuteMethod, customResultMapper: (rows: Record<string, unknown>[]) => unknown): PreparedQuery<T, true>;
|
|
25
27
|
transaction<T>(transaction: (tx: SQLJsTransaction<TFullSchema, TRelations, TTablesConfig, TSchema>) => T, config?: SQLiteTransactionConfig): T;
|
|
26
28
|
}
|
|
27
29
|
export declare class SQLJsTransaction<TFullSchema extends Record<string, unknown>, TRelations extends AnyRelations, TTablesConfig extends TablesRelationalConfig, TSchema extends V1.TablesRelationalConfig> extends SQLiteTransaction<'sync', void, TFullSchema, TRelations, TTablesConfig, TSchema> {
|
|
@@ -36,19 +38,21 @@ export declare class PreparedQuery<T extends PreparedQueryConfig = PreparedQuery
|
|
|
36
38
|
values: T['values'];
|
|
37
39
|
execute: T['execute'];
|
|
38
40
|
}> {
|
|
39
|
-
private
|
|
41
|
+
private stmt;
|
|
40
42
|
private logger;
|
|
41
43
|
private fields;
|
|
42
44
|
private _isResponseInArrayMode;
|
|
43
45
|
private customResultMapper?;
|
|
46
|
+
private isOneTimeQuery;
|
|
44
47
|
private isRqbV2Query?;
|
|
45
48
|
static readonly [entityKind]: string;
|
|
46
|
-
constructor(
|
|
49
|
+
constructor(stmt: Statement, query: Query, logger: Logger, fields: SelectedFieldsOrdered | undefined, executeMethod: SQLiteExecuteMethod, _isResponseInArrayMode: boolean, customResultMapper?: ((rows: TIsRqbV2 extends true ? Record<string, unknown>[] : unknown[][], mapColumnValue?: (value: unknown) => unknown) => unknown) | undefined, isOneTimeQuery?: boolean, isRqbV2Query?: TIsRqbV2 | undefined);
|
|
47
50
|
run(placeholderValues?: Record<string, unknown>): void;
|
|
48
51
|
all(placeholderValues?: Record<string, unknown>): T['all'];
|
|
49
52
|
private allRqbV2;
|
|
50
53
|
get(placeholderValues?: Record<string, unknown>): T['get'];
|
|
51
54
|
private getRqbV2;
|
|
52
55
|
values(placeholderValues?: Record<string, unknown>): T['values'];
|
|
56
|
+
free(): boolean;
|
|
53
57
|
}
|
|
54
58
|
export {};
|
package/sql-js/session.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Database } from 'sql.js';
|
|
1
|
+
import type { Database, Statement } from 'sql.js';
|
|
2
2
|
import type * as V1 from "../_relations.js";
|
|
3
3
|
import { entityKind } from "../entity.js";
|
|
4
4
|
import type { Logger } from "../logger.js";
|
|
@@ -21,7 +21,9 @@ export declare class SQLJsSession<TFullSchema extends Record<string, unknown>, T
|
|
|
21
21
|
private logger;
|
|
22
22
|
constructor(client: Database, dialect: SQLiteSyncDialect, relations: AnyRelations | undefined, schema: V1.RelationalSchemaConfig<TSchema> | undefined, options?: SQLJsSessionOptions);
|
|
23
23
|
prepareQuery<T extends Omit<PreparedQueryConfig, 'run'>>(query: Query, fields: SelectedFieldsOrdered | undefined, executeMethod: SQLiteExecuteMethod, isResponseInArrayMode: boolean): PreparedQuery<T>;
|
|
24
|
+
prepareOneTimeQuery<T extends Omit<PreparedQueryConfig, 'run'>>(query: Query, fields: SelectedFieldsOrdered | undefined, executeMethod: SQLiteExecuteMethod, isResponseInArrayMode: boolean, customResultMapper?: (rows: unknown[][]) => unknown): PreparedQuery<T>;
|
|
24
25
|
prepareRelationalQuery<T extends Omit<PreparedQueryConfig, 'run'>>(query: Query, fields: SelectedFieldsOrdered | undefined, executeMethod: SQLiteExecuteMethod, customResultMapper: (rows: Record<string, unknown>[]) => unknown): PreparedQuery<T, true>;
|
|
26
|
+
prepareOneTimeRelationalQuery<T extends Omit<PreparedQueryConfig, 'run'>>(query: Query, fields: SelectedFieldsOrdered | undefined, executeMethod: SQLiteExecuteMethod, customResultMapper: (rows: Record<string, unknown>[]) => unknown): PreparedQuery<T, true>;
|
|
25
27
|
transaction<T>(transaction: (tx: SQLJsTransaction<TFullSchema, TRelations, TTablesConfig, TSchema>) => T, config?: SQLiteTransactionConfig): T;
|
|
26
28
|
}
|
|
27
29
|
export declare class SQLJsTransaction<TFullSchema extends Record<string, unknown>, TRelations extends AnyRelations, TTablesConfig extends TablesRelationalConfig, TSchema extends V1.TablesRelationalConfig> extends SQLiteTransaction<'sync', void, TFullSchema, TRelations, TTablesConfig, TSchema> {
|
|
@@ -36,19 +38,21 @@ export declare class PreparedQuery<T extends PreparedQueryConfig = PreparedQuery
|
|
|
36
38
|
values: T['values'];
|
|
37
39
|
execute: T['execute'];
|
|
38
40
|
}> {
|
|
39
|
-
private
|
|
41
|
+
private stmt;
|
|
40
42
|
private logger;
|
|
41
43
|
private fields;
|
|
42
44
|
private _isResponseInArrayMode;
|
|
43
45
|
private customResultMapper?;
|
|
46
|
+
private isOneTimeQuery;
|
|
44
47
|
private isRqbV2Query?;
|
|
45
48
|
static readonly [entityKind]: string;
|
|
46
|
-
constructor(
|
|
49
|
+
constructor(stmt: Statement, query: Query, logger: Logger, fields: SelectedFieldsOrdered | undefined, executeMethod: SQLiteExecuteMethod, _isResponseInArrayMode: boolean, customResultMapper?: ((rows: TIsRqbV2 extends true ? Record<string, unknown>[] : unknown[][], mapColumnValue?: (value: unknown) => unknown) => unknown) | undefined, isOneTimeQuery?: boolean, isRqbV2Query?: TIsRqbV2 | undefined);
|
|
47
50
|
run(placeholderValues?: Record<string, unknown>): void;
|
|
48
51
|
all(placeholderValues?: Record<string, unknown>): T['all'];
|
|
49
52
|
private allRqbV2;
|
|
50
53
|
get(placeholderValues?: Record<string, unknown>): T['get'];
|
|
51
54
|
private getRqbV2;
|
|
52
55
|
values(placeholderValues?: Record<string, unknown>): T['values'];
|
|
56
|
+
free(): boolean;
|
|
53
57
|
}
|
|
54
58
|
export {};
|
package/sql-js/session.js
CHANGED
|
@@ -15,17 +15,47 @@ class SQLJsSession extends SQLiteSession {
|
|
|
15
15
|
static [entityKind] = "SQLJsSession";
|
|
16
16
|
logger;
|
|
17
17
|
prepareQuery(query, fields, executeMethod, isResponseInArrayMode) {
|
|
18
|
-
|
|
18
|
+
const stmt = this.client.prepare(query.sql);
|
|
19
|
+
return new PreparedQuery(stmt, query, this.logger, fields, executeMethod, isResponseInArrayMode);
|
|
20
|
+
}
|
|
21
|
+
prepareOneTimeQuery(query, fields, executeMethod, isResponseInArrayMode, customResultMapper) {
|
|
22
|
+
const stmt = this.client.prepare(query.sql);
|
|
23
|
+
return new PreparedQuery(
|
|
24
|
+
stmt,
|
|
25
|
+
query,
|
|
26
|
+
this.logger,
|
|
27
|
+
fields,
|
|
28
|
+
executeMethod,
|
|
29
|
+
isResponseInArrayMode,
|
|
30
|
+
customResultMapper,
|
|
31
|
+
true
|
|
32
|
+
);
|
|
19
33
|
}
|
|
20
34
|
prepareRelationalQuery(query, fields, executeMethod, customResultMapper) {
|
|
35
|
+
const stmt = this.client.prepare(query.sql);
|
|
21
36
|
return new PreparedQuery(
|
|
22
|
-
|
|
37
|
+
stmt,
|
|
23
38
|
query,
|
|
24
39
|
this.logger,
|
|
25
40
|
fields,
|
|
26
41
|
executeMethod,
|
|
27
42
|
false,
|
|
28
43
|
customResultMapper,
|
|
44
|
+
false,
|
|
45
|
+
true
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
prepareOneTimeRelationalQuery(query, fields, executeMethod, customResultMapper) {
|
|
49
|
+
const stmt = this.client.prepare(query.sql);
|
|
50
|
+
return new PreparedQuery(
|
|
51
|
+
stmt,
|
|
52
|
+
query,
|
|
53
|
+
this.logger,
|
|
54
|
+
fields,
|
|
55
|
+
executeMethod,
|
|
56
|
+
false,
|
|
57
|
+
customResultMapper,
|
|
58
|
+
true,
|
|
29
59
|
true
|
|
30
60
|
);
|
|
31
61
|
}
|
|
@@ -66,29 +96,30 @@ class SQLJsTransaction extends SQLiteTransaction {
|
|
|
66
96
|
}
|
|
67
97
|
}
|
|
68
98
|
class PreparedQuery extends PreparedQueryBase {
|
|
69
|
-
constructor(
|
|
99
|
+
constructor(stmt, query, logger, fields, executeMethod, _isResponseInArrayMode, customResultMapper, isOneTimeQuery = false, isRqbV2Query) {
|
|
70
100
|
super("sync", executeMethod, query);
|
|
71
|
-
this.
|
|
101
|
+
this.stmt = stmt;
|
|
72
102
|
this.logger = logger;
|
|
73
103
|
this.fields = fields;
|
|
74
104
|
this._isResponseInArrayMode = _isResponseInArrayMode;
|
|
75
105
|
this.customResultMapper = customResultMapper;
|
|
106
|
+
this.isOneTimeQuery = isOneTimeQuery;
|
|
76
107
|
this.isRqbV2Query = isRqbV2Query;
|
|
77
108
|
}
|
|
78
109
|
static [entityKind] = "SQLJsPreparedQuery";
|
|
79
110
|
run(placeholderValues) {
|
|
80
|
-
const stmt = this.client.prepare(this.query.sql);
|
|
81
111
|
const params = fillPlaceholders(this.query.params, placeholderValues ?? {});
|
|
82
112
|
this.logger.logQuery(this.query.sql, params);
|
|
83
|
-
const result = stmt.run(params);
|
|
84
|
-
|
|
113
|
+
const result = this.stmt.run(params);
|
|
114
|
+
if (this.isOneTimeQuery) {
|
|
115
|
+
this.free();
|
|
116
|
+
}
|
|
85
117
|
return result;
|
|
86
118
|
}
|
|
87
119
|
all(placeholderValues) {
|
|
88
120
|
if (this.isRqbV2Query)
|
|
89
121
|
return this.allRqbV2(placeholderValues);
|
|
90
|
-
const stmt = this
|
|
91
|
-
const { fields, joinsNotNullableMap, logger, query, customResultMapper } = this;
|
|
122
|
+
const { fields, joinsNotNullableMap, logger, query, stmt, isOneTimeQuery, customResultMapper } = this;
|
|
92
123
|
if (!fields && !customResultMapper) {
|
|
93
124
|
const params = fillPlaceholders(query.params, placeholderValues ?? {});
|
|
94
125
|
logger.logQuery(query.sql, params);
|
|
@@ -97,7 +128,9 @@ class PreparedQuery extends PreparedQueryBase {
|
|
|
97
128
|
while (stmt.step()) {
|
|
98
129
|
rows2.push(stmt.getAsObject());
|
|
99
130
|
}
|
|
100
|
-
|
|
131
|
+
if (isOneTimeQuery) {
|
|
132
|
+
this.free();
|
|
133
|
+
}
|
|
101
134
|
return rows2;
|
|
102
135
|
}
|
|
103
136
|
const rows = this.values(placeholderValues);
|
|
@@ -107,8 +140,7 @@ class PreparedQuery extends PreparedQueryBase {
|
|
|
107
140
|
return rows.map((row) => mapResultRow(fields, row.map((v) => normalizeFieldValue(v)), joinsNotNullableMap));
|
|
108
141
|
}
|
|
109
142
|
allRqbV2(placeholderValues) {
|
|
110
|
-
const stmt = this
|
|
111
|
-
const { logger, query, customResultMapper } = this;
|
|
143
|
+
const { logger, query, stmt, isOneTimeQuery, customResultMapper } = this;
|
|
112
144
|
const params = fillPlaceholders(query.params, placeholderValues ?? {});
|
|
113
145
|
logger.logQuery(query.sql, params);
|
|
114
146
|
stmt.bind(params);
|
|
@@ -116,23 +148,28 @@ class PreparedQuery extends PreparedQueryBase {
|
|
|
116
148
|
while (stmt.step()) {
|
|
117
149
|
rows.push(stmt.getAsObject());
|
|
118
150
|
}
|
|
119
|
-
|
|
151
|
+
if (isOneTimeQuery) {
|
|
152
|
+
this.free();
|
|
153
|
+
}
|
|
120
154
|
return customResultMapper(rows, normalizeFieldValue);
|
|
121
155
|
}
|
|
122
156
|
get(placeholderValues) {
|
|
123
157
|
if (this.isRqbV2Query)
|
|
124
158
|
return this.getRqbV2(placeholderValues);
|
|
125
|
-
const stmt = this.client.prepare(this.query.sql);
|
|
126
159
|
const params = fillPlaceholders(this.query.params, placeholderValues ?? {});
|
|
127
160
|
this.logger.logQuery(this.query.sql, params);
|
|
128
|
-
const { fields, joinsNotNullableMap, customResultMapper } = this;
|
|
161
|
+
const { fields, stmt, isOneTimeQuery, joinsNotNullableMap, customResultMapper } = this;
|
|
129
162
|
if (!fields && !customResultMapper) {
|
|
130
163
|
const result = stmt.getAsObject(params);
|
|
131
|
-
|
|
164
|
+
if (isOneTimeQuery) {
|
|
165
|
+
this.free();
|
|
166
|
+
}
|
|
132
167
|
return result;
|
|
133
168
|
}
|
|
134
169
|
const row = stmt.get(params);
|
|
135
|
-
|
|
170
|
+
if (isOneTimeQuery) {
|
|
171
|
+
this.free();
|
|
172
|
+
}
|
|
136
173
|
if (!row || row.length === 0 && fields.length > 0) {
|
|
137
174
|
return void 0;
|
|
138
175
|
}
|
|
@@ -142,38 +179,38 @@ class PreparedQuery extends PreparedQueryBase {
|
|
|
142
179
|
return mapResultRow(fields, row.map((v) => normalizeFieldValue(v)), joinsNotNullableMap);
|
|
143
180
|
}
|
|
144
181
|
getRqbV2(placeholderValues) {
|
|
145
|
-
const stmt = this.client.prepare(this.query.sql);
|
|
146
182
|
const params = fillPlaceholders(this.query.params, placeholderValues ?? {});
|
|
147
183
|
this.logger.logQuery(this.query.sql, params);
|
|
148
|
-
const { customResultMapper } = this;
|
|
184
|
+
const { stmt, isOneTimeQuery, customResultMapper } = this;
|
|
149
185
|
const row = stmt.getAsObject(params);
|
|
150
|
-
|
|
186
|
+
if (isOneTimeQuery) {
|
|
187
|
+
this.free();
|
|
188
|
+
}
|
|
151
189
|
if (!row) {
|
|
152
190
|
return void 0;
|
|
153
191
|
}
|
|
154
|
-
let nonUndef = false;
|
|
155
192
|
for (const v of Object.values(row)) {
|
|
156
|
-
if (v
|
|
157
|
-
|
|
158
|
-
break;
|
|
159
|
-
}
|
|
193
|
+
if (v === void 0)
|
|
194
|
+
return void 0;
|
|
160
195
|
}
|
|
161
|
-
if (!nonUndef)
|
|
162
|
-
return void 0;
|
|
163
196
|
return customResultMapper([row], normalizeFieldValue);
|
|
164
197
|
}
|
|
165
198
|
values(placeholderValues) {
|
|
166
|
-
const stmt = this.client.prepare(this.query.sql);
|
|
167
199
|
const params = fillPlaceholders(this.query.params, placeholderValues ?? {});
|
|
168
200
|
this.logger.logQuery(this.query.sql, params);
|
|
169
|
-
stmt.bind(params);
|
|
201
|
+
this.stmt.bind(params);
|
|
170
202
|
const rows = [];
|
|
171
|
-
while (stmt.step()) {
|
|
172
|
-
rows.push(stmt.get());
|
|
203
|
+
while (this.stmt.step()) {
|
|
204
|
+
rows.push(this.stmt.get());
|
|
205
|
+
}
|
|
206
|
+
if (this.isOneTimeQuery) {
|
|
207
|
+
this.free();
|
|
173
208
|
}
|
|
174
|
-
stmt.free();
|
|
175
209
|
return rows;
|
|
176
210
|
}
|
|
211
|
+
free() {
|
|
212
|
+
return this.stmt.free();
|
|
213
|
+
}
|
|
177
214
|
/** @internal */
|
|
178
215
|
isResponseInArrayMode() {
|
|
179
216
|
return this._isResponseInArrayMode;
|
package/sql-js/session.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/sql-js/session.ts"],"sourcesContent":["import type { BindParams, Database } from 'sql.js';\nimport type * as V1 from '~/_relations.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { AnyRelations, TablesRelationalConfig } from '~/relations.ts';\nimport { fillPlaceholders, type Query, sql } from '~/sql/sql.ts';\nimport type { SQLiteSyncDialect } from '~/sqlite-core/dialect.ts';\nimport { SQLiteTransaction } from '~/sqlite-core/index.ts';\nimport type { SelectedFieldsOrdered } from '~/sqlite-core/query-builders/select.types.ts';\nimport type {\n\tPreparedQueryConfig as PreparedQueryConfigBase,\n\tSQLiteExecuteMethod,\n\tSQLiteTransactionConfig,\n} from '~/sqlite-core/session.ts';\nimport { SQLitePreparedQuery as PreparedQueryBase, SQLiteSession } from '~/sqlite-core/session.ts';\nimport { mapResultRow } from '~/utils.ts';\n\nexport interface SQLJsSessionOptions {\n\tlogger?: Logger;\n}\n\ntype PreparedQueryConfig = Omit<PreparedQueryConfigBase, 'statement' | 'run'>;\n\nexport class SQLJsSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTRelations extends AnyRelations,\n\tTTablesConfig extends TablesRelationalConfig,\n\tTSchema extends V1.TablesRelationalConfig,\n> extends SQLiteSession<'sync', void, TFullSchema, TRelations, TTablesConfig, TSchema> {\n\tstatic override readonly [entityKind]: string = 'SQLJsSession';\n\n\tprivate logger: Logger;\n\n\tconstructor(\n\t\tprivate client: Database,\n\t\tdialect: SQLiteSyncDialect,\n\t\tprivate relations: AnyRelations | undefined,\n\t\tprivate schema: V1.RelationalSchemaConfig<TSchema> | undefined,\n\t\toptions: SQLJsSessionOptions = {},\n\t) {\n\t\tsuper(dialect);\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t}\n\n\tprepareQuery<T extends Omit<PreparedQueryConfig, 'run'>>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tisResponseInArrayMode: boolean,\n\t): PreparedQuery<T> {\n\t\treturn new PreparedQuery(this.client, query, this.logger, fields, executeMethod, isResponseInArrayMode);\n\t}\n\n\tprepareRelationalQuery<T extends Omit<PreparedQueryConfig, 'run'>>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tcustomResultMapper: (rows: Record<string, unknown>[]) => unknown,\n\t): PreparedQuery<T, true> {\n\t\treturn new PreparedQuery(\n\t\t\tthis.client,\n\t\t\tquery,\n\t\t\tthis.logger,\n\t\t\tfields,\n\t\t\texecuteMethod,\n\t\t\tfalse,\n\t\t\tcustomResultMapper,\n\t\t\ttrue,\n\t\t);\n\t}\n\n\toverride transaction<T>(\n\t\ttransaction: (tx: SQLJsTransaction<TFullSchema, TRelations, TTablesConfig, TSchema>) => T,\n\t\tconfig: SQLiteTransactionConfig = {},\n\t): T {\n\t\tconst tx = new SQLJsTransaction('sync', this.dialect, this, this.relations, this.schema);\n\t\tthis.run(sql.raw(`begin${config.behavior ? ` ${config.behavior}` : ''}`));\n\t\ttry {\n\t\t\tconst result = transaction(tx);\n\t\t\tthis.run(sql`commit`);\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tthis.run(sql`rollback`);\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nexport class SQLJsTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTRelations extends AnyRelations,\n\tTTablesConfig extends TablesRelationalConfig,\n\tTSchema extends V1.TablesRelationalConfig,\n> extends SQLiteTransaction<'sync', void, TFullSchema, TRelations, TTablesConfig, TSchema> {\n\tstatic override readonly [entityKind]: string = 'SQLJsTransaction';\n\n\toverride transaction<T>(\n\t\ttransaction: (tx: SQLJsTransaction<TFullSchema, TRelations, TTablesConfig, TSchema>) => T,\n\t): T {\n\t\tconst savepointName = `sp${this.nestedIndex + 1}`;\n\t\tconst tx = new SQLJsTransaction(\n\t\t\t'sync',\n\t\t\tthis.dialect,\n\t\t\tthis.session,\n\t\t\tthis.relations,\n\t\t\tthis.schema,\n\t\t\tthis.nestedIndex + 1,\n\t\t);\n\t\ttx.run(sql.raw(`savepoint ${savepointName}`));\n\t\ttry {\n\t\t\tconst result = transaction(tx);\n\t\t\ttx.run(sql.raw(`release savepoint ${savepointName}`));\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\ttx.run(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nexport class PreparedQuery<T extends PreparedQueryConfig = PreparedQueryConfig, TIsRqbV2 extends boolean = false>\n\textends PreparedQueryBase<\n\t\t{ type: 'sync'; run: void; all: T['all']; get: T['get']; values: T['values']; execute: T['execute'] }\n\t>\n{\n\tstatic override readonly [entityKind]: string = 'SQLJsPreparedQuery';\n\n\tconstructor(\n\t\tprivate client: Database,\n\t\tquery: Query,\n\t\tprivate logger: Logger,\n\t\tprivate fields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tprivate _isResponseInArrayMode: boolean,\n\t\tprivate customResultMapper?: (\n\t\t\trows: TIsRqbV2 extends true ? Record<string, unknown>[] : unknown[][],\n\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t) => unknown,\n\t\tprivate isRqbV2Query?: TIsRqbV2,\n\t) {\n\t\tsuper('sync', executeMethod, query);\n\t}\n\n\trun(placeholderValues?: Record<string, unknown>): void {\n\t\tconst stmt = this.client.prepare(this.query.sql);\n\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\tconst result = stmt.run(params as BindParams);\n\n\t\tstmt.free();\n\n\t\treturn result;\n\t}\n\n\tall(placeholderValues?: Record<string, unknown>): T['all'] {\n\t\tif (this.isRqbV2Query) return this.allRqbV2(placeholderValues);\n\t\tconst stmt = this.client.prepare(this.query.sql);\n\n\t\tconst { fields, joinsNotNullableMap, logger, query, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\t\tlogger.logQuery(query.sql, params);\n\t\t\tstmt.bind(params as BindParams);\n\t\t\tconst rows: unknown[] = [];\n\t\t\twhile (stmt.step()) {\n\t\t\t\trows.push(stmt.getAsObject());\n\t\t\t}\n\n\t\t\tstmt.free();\n\n\t\t\treturn rows;\n\t\t}\n\n\t\tconst rows = this.values(placeholderValues) as unknown[][];\n\n\t\tif (customResultMapper) {\n\t\t\treturn (customResultMapper as (\n\t\t\t\trows: unknown[][],\n\t\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t\t) => unknown)(rows, normalizeFieldValue) as T['all'];\n\t\t}\n\n\t\treturn rows.map((row) => mapResultRow(fields!, row.map((v) => normalizeFieldValue(v)), joinsNotNullableMap));\n\t}\n\n\tprivate allRqbV2(placeholderValues?: Record<string, unknown>): T['all'] {\n\t\tconst stmt = this.client.prepare(this.query.sql);\n\n\t\tconst { logger, query, customResultMapper } = this;\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\tlogger.logQuery(query.sql, params);\n\t\tstmt.bind(params as BindParams);\n\t\tconst rows: Record<string, unknown>[] = [];\n\t\twhile (stmt.step()) {\n\t\t\trows.push(stmt.getAsObject());\n\t\t}\n\n\t\tstmt.free();\n\n\t\treturn (customResultMapper as (\n\t\t\trows: Record<string, unknown>[],\n\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t) => unknown)(rows, normalizeFieldValue) as T['all'];\n\t}\n\n\tget(placeholderValues?: Record<string, unknown>): T['get'] {\n\t\tif (this.isRqbV2Query) return this.getRqbV2(placeholderValues);\n\t\tconst stmt = this.client.prepare(this.query.sql);\n\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\n\t\tconst { fields, joinsNotNullableMap, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst result = stmt.getAsObject(params as BindParams);\n\n\t\t\tstmt.free();\n\n\t\t\treturn result;\n\t\t}\n\n\t\tconst row = stmt.get(params as BindParams);\n\n\t\tstmt.free();\n\n\t\tif (!row || (row.length === 0 && fields!.length > 0)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (customResultMapper) {\n\t\t\treturn (customResultMapper as (\n\t\t\t\trows: unknown[][],\n\t\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t\t) => unknown)([row], normalizeFieldValue) as T['get'];\n\t\t}\n\n\t\treturn mapResultRow(fields!, row.map((v) => normalizeFieldValue(v)), joinsNotNullableMap);\n\t}\n\n\tprivate getRqbV2(placeholderValues?: Record<string, unknown>): T['get'] {\n\t\tconst stmt = this.client.prepare(this.query.sql);\n\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\n\t\tconst { customResultMapper } = this;\n\n\t\tconst row = stmt.getAsObject(params as BindParams);\n\n\t\tstmt.free();\n\n\t\tif (!row) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tlet nonUndef = false;\n\t\tfor (const v of Object.values(row)) {\n\t\t\tif (v !== undefined) {\n\t\t\t\tnonUndef = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (!nonUndef) return undefined;\n\n\t\treturn (customResultMapper as (\n\t\t\trows: Record<string, unknown>[],\n\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t) => unknown)([row], normalizeFieldValue) as T['get'];\n\t}\n\n\tvalues(placeholderValues?: Record<string, unknown>): T['values'] {\n\t\tconst stmt = this.client.prepare(this.query.sql);\n\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\tstmt.bind(params as BindParams);\n\t\tconst rows: unknown[] = [];\n\t\twhile (stmt.step()) {\n\t\t\trows.push(stmt.get());\n\t\t}\n\n\t\tstmt.free();\n\n\t\treturn rows;\n\t}\n\n\t/** @internal */\n\tisResponseInArrayMode(): boolean {\n\t\treturn this._isResponseInArrayMode;\n\t}\n}\n\nfunction normalizeFieldValue(value: unknown) {\n\tif (value instanceof Uint8Array) { // eslint-disable-line no-instanceof/no-instanceof\n\t\tif (typeof Buffer !== 'undefined') {\n\t\t\tif (!(value instanceof Buffer)) { // eslint-disable-line no-instanceof/no-instanceof\n\t\t\t\treturn Buffer.from(value);\n\t\t\t}\n\t\t\treturn value;\n\t\t}\n\t\tif (typeof TextDecoder !== 'undefined') {\n\t\t\treturn new TextDecoder().decode(value);\n\t\t}\n\t\tthrow new Error('TextDecoder is not available. Please provide either Buffer or TextDecoder polyfill.');\n\t}\n\treturn value;\n}\n"],"mappings":"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","names":["rows"]}
|
|
1
|
+
{"version":3,"sources":["../../src/sql-js/session.ts"],"sourcesContent":["import type { BindParams, Database, Statement } from 'sql.js';\nimport type * as V1 from '~/_relations.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { AnyRelations, TablesRelationalConfig } from '~/relations.ts';\nimport { fillPlaceholders, type Query, sql } from '~/sql/sql.ts';\nimport type { SQLiteSyncDialect } from '~/sqlite-core/dialect.ts';\nimport { SQLiteTransaction } from '~/sqlite-core/index.ts';\nimport type { SelectedFieldsOrdered } from '~/sqlite-core/query-builders/select.types.ts';\nimport type {\n\tPreparedQueryConfig as PreparedQueryConfigBase,\n\tSQLiteExecuteMethod,\n\tSQLiteTransactionConfig,\n} from '~/sqlite-core/session.ts';\nimport { SQLitePreparedQuery as PreparedQueryBase, SQLiteSession } from '~/sqlite-core/session.ts';\nimport { mapResultRow } from '~/utils.ts';\n\nexport interface SQLJsSessionOptions {\n\tlogger?: Logger;\n}\n\ntype PreparedQueryConfig = Omit<PreparedQueryConfigBase, 'statement' | 'run'>;\n\nexport class SQLJsSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTRelations extends AnyRelations,\n\tTTablesConfig extends TablesRelationalConfig,\n\tTSchema extends V1.TablesRelationalConfig,\n> extends SQLiteSession<'sync', void, TFullSchema, TRelations, TTablesConfig, TSchema> {\n\tstatic override readonly [entityKind]: string = 'SQLJsSession';\n\n\tprivate logger: Logger;\n\n\tconstructor(\n\t\tprivate client: Database,\n\t\tdialect: SQLiteSyncDialect,\n\t\tprivate relations: AnyRelations | undefined,\n\t\tprivate schema: V1.RelationalSchemaConfig<TSchema> | undefined,\n\t\toptions: SQLJsSessionOptions = {},\n\t) {\n\t\tsuper(dialect);\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t}\n\n\tprepareQuery<T extends Omit<PreparedQueryConfig, 'run'>>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tisResponseInArrayMode: boolean,\n\t): PreparedQuery<T> {\n\t\tconst stmt = this.client.prepare(query.sql);\n\t\treturn new PreparedQuery(stmt, query, this.logger, fields, executeMethod, isResponseInArrayMode);\n\t}\n\n\toverride prepareOneTimeQuery<T extends Omit<PreparedQueryConfig, 'run'>>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tisResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][]) => unknown,\n\t): PreparedQuery<T> {\n\t\tconst stmt = this.client.prepare(query.sql);\n\t\treturn new PreparedQuery(\n\t\t\tstmt,\n\t\t\tquery,\n\t\t\tthis.logger,\n\t\t\tfields,\n\t\t\texecuteMethod,\n\t\t\tisResponseInArrayMode,\n\t\t\tcustomResultMapper,\n\t\t\ttrue,\n\t\t);\n\t}\n\n\tprepareRelationalQuery<T extends Omit<PreparedQueryConfig, 'run'>>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tcustomResultMapper: (rows: Record<string, unknown>[]) => unknown,\n\t): PreparedQuery<T, true> {\n\t\tconst stmt = this.client.prepare(query.sql);\n\t\treturn new PreparedQuery(\n\t\t\tstmt,\n\t\t\tquery,\n\t\t\tthis.logger,\n\t\t\tfields,\n\t\t\texecuteMethod,\n\t\t\tfalse,\n\t\t\tcustomResultMapper,\n\t\t\tfalse,\n\t\t\ttrue,\n\t\t);\n\t}\n\n\toverride prepareOneTimeRelationalQuery<T extends Omit<PreparedQueryConfig, 'run'>>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tcustomResultMapper: (rows: Record<string, unknown>[]) => unknown,\n\t): PreparedQuery<T, true> {\n\t\tconst stmt = this.client.prepare(query.sql);\n\t\treturn new PreparedQuery(\n\t\t\tstmt,\n\t\t\tquery,\n\t\t\tthis.logger,\n\t\t\tfields,\n\t\t\texecuteMethod,\n\t\t\tfalse,\n\t\t\tcustomResultMapper,\n\t\t\ttrue,\n\t\t\ttrue,\n\t\t);\n\t}\n\n\toverride transaction<T>(\n\t\ttransaction: (tx: SQLJsTransaction<TFullSchema, TRelations, TTablesConfig, TSchema>) => T,\n\t\tconfig: SQLiteTransactionConfig = {},\n\t): T {\n\t\tconst tx = new SQLJsTransaction('sync', this.dialect, this, this.relations, this.schema);\n\t\tthis.run(sql.raw(`begin${config.behavior ? ` ${config.behavior}` : ''}`));\n\t\ttry {\n\t\t\tconst result = transaction(tx);\n\t\t\tthis.run(sql`commit`);\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tthis.run(sql`rollback`);\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nexport class SQLJsTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTRelations extends AnyRelations,\n\tTTablesConfig extends TablesRelationalConfig,\n\tTSchema extends V1.TablesRelationalConfig,\n> extends SQLiteTransaction<'sync', void, TFullSchema, TRelations, TTablesConfig, TSchema> {\n\tstatic override readonly [entityKind]: string = 'SQLJsTransaction';\n\n\toverride transaction<T>(\n\t\ttransaction: (tx: SQLJsTransaction<TFullSchema, TRelations, TTablesConfig, TSchema>) => T,\n\t): T {\n\t\tconst savepointName = `sp${this.nestedIndex + 1}`;\n\t\tconst tx = new SQLJsTransaction(\n\t\t\t'sync',\n\t\t\tthis.dialect,\n\t\t\tthis.session,\n\t\t\tthis.relations,\n\t\t\tthis.schema,\n\t\t\tthis.nestedIndex + 1,\n\t\t);\n\t\ttx.run(sql.raw(`savepoint ${savepointName}`));\n\t\ttry {\n\t\t\tconst result = transaction(tx);\n\t\t\ttx.run(sql.raw(`release savepoint ${savepointName}`));\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\ttx.run(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nexport class PreparedQuery<T extends PreparedQueryConfig = PreparedQueryConfig, TIsRqbV2 extends boolean = false>\n\textends PreparedQueryBase<\n\t\t{ type: 'sync'; run: void; all: T['all']; get: T['get']; values: T['values']; execute: T['execute'] }\n\t>\n{\n\tstatic override readonly [entityKind]: string = 'SQLJsPreparedQuery';\n\n\tconstructor(\n\t\tprivate stmt: Statement,\n\t\tquery: Query,\n\t\tprivate logger: Logger,\n\t\tprivate fields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tprivate _isResponseInArrayMode: boolean,\n\t\tprivate customResultMapper?: (\n\t\t\trows: TIsRqbV2 extends true ? Record<string, unknown>[] : unknown[][],\n\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t) => unknown,\n\t\tprivate isOneTimeQuery = false,\n\t\tprivate isRqbV2Query?: TIsRqbV2,\n\t) {\n\t\tsuper('sync', executeMethod, query);\n\t}\n\n\trun(placeholderValues?: Record<string, unknown>): void {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\tconst result = this.stmt.run(params as BindParams);\n\n\t\tif (this.isOneTimeQuery) {\n\t\t\tthis.free();\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tall(placeholderValues?: Record<string, unknown>): T['all'] {\n\t\tif (this.isRqbV2Query) return this.allRqbV2(placeholderValues);\n\n\t\tconst { fields, joinsNotNullableMap, logger, query, stmt, isOneTimeQuery, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\t\tlogger.logQuery(query.sql, params);\n\t\t\tstmt.bind(params as BindParams);\n\t\t\tconst rows: unknown[] = [];\n\t\t\twhile (stmt.step()) {\n\t\t\t\trows.push(stmt.getAsObject());\n\t\t\t}\n\n\t\t\tif (isOneTimeQuery) {\n\t\t\t\tthis.free();\n\t\t\t}\n\n\t\t\treturn rows;\n\t\t}\n\n\t\tconst rows = this.values(placeholderValues) as unknown[][];\n\n\t\tif (customResultMapper) {\n\t\t\treturn (customResultMapper as (\n\t\t\t\trows: unknown[][],\n\t\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t\t) => unknown)(rows, normalizeFieldValue) as T['all'];\n\t\t}\n\n\t\treturn rows.map((row) => mapResultRow(fields!, row.map((v) => normalizeFieldValue(v)), joinsNotNullableMap));\n\t}\n\n\tprivate allRqbV2(placeholderValues?: Record<string, unknown>): T['all'] {\n\t\tconst { logger, query, stmt, isOneTimeQuery, customResultMapper } = this;\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\tlogger.logQuery(query.sql, params);\n\t\tstmt.bind(params as BindParams);\n\t\tconst rows: Record<string, unknown>[] = [];\n\t\twhile (stmt.step()) {\n\t\t\trows.push(stmt.getAsObject());\n\t\t}\n\n\t\tif (isOneTimeQuery) {\n\t\t\tthis.free();\n\t\t}\n\n\t\treturn (customResultMapper as (\n\t\t\trows: Record<string, unknown>[],\n\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t) => unknown)(rows, normalizeFieldValue) as T['all'];\n\t}\n\n\tget(placeholderValues?: Record<string, unknown>): T['get'] {\n\t\tif (this.isRqbV2Query) return this.getRqbV2(placeholderValues);\n\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\n\t\tconst { fields, stmt, isOneTimeQuery, joinsNotNullableMap, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst result = stmt.getAsObject(params as BindParams);\n\n\t\t\tif (isOneTimeQuery) {\n\t\t\t\tthis.free();\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\n\t\tconst row = stmt.get(params as BindParams);\n\n\t\tif (isOneTimeQuery) {\n\t\t\tthis.free();\n\t\t}\n\n\t\tif (!row || (row.length === 0 && fields!.length > 0)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (customResultMapper) {\n\t\t\treturn (customResultMapper as (\n\t\t\t\trows: unknown[][],\n\t\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t\t) => unknown)([row], normalizeFieldValue) as T['get'];\n\t\t}\n\n\t\treturn mapResultRow(fields!, row.map((v) => normalizeFieldValue(v)), joinsNotNullableMap);\n\t}\n\n\tprivate getRqbV2(placeholderValues?: Record<string, unknown>): T['get'] {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\n\t\tconst { stmt, isOneTimeQuery, customResultMapper } = this;\n\n\t\tconst row = stmt.getAsObject(params as BindParams);\n\n\t\tif (isOneTimeQuery) {\n\t\t\tthis.free();\n\t\t}\n\n\t\tif (!row) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tfor (const v of Object.values(row)) {\n\t\t\tif (v === undefined) return undefined;\n\t\t}\n\n\t\treturn (customResultMapper as (\n\t\t\trows: Record<string, unknown>[],\n\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t) => unknown)([row], normalizeFieldValue) as T['get'];\n\t}\n\n\tvalues(placeholderValues?: Record<string, unknown>): T['values'] {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\tthis.stmt.bind(params as BindParams);\n\t\tconst rows: unknown[] = [];\n\t\twhile (this.stmt.step()) {\n\t\t\trows.push(this.stmt.get());\n\t\t}\n\n\t\tif (this.isOneTimeQuery) {\n\t\t\tthis.free();\n\t\t}\n\n\t\treturn rows;\n\t}\n\n\tfree(): boolean {\n\t\treturn this.stmt.free();\n\t}\n\n\t/** @internal */\n\tisResponseInArrayMode(): boolean {\n\t\treturn this._isResponseInArrayMode;\n\t}\n}\n\nfunction normalizeFieldValue(value: unknown) {\n\tif (value instanceof Uint8Array) { // eslint-disable-line no-instanceof/no-instanceof\n\t\tif (typeof Buffer !== 'undefined') {\n\t\t\tif (!(value instanceof Buffer)) { // eslint-disable-line no-instanceof/no-instanceof\n\t\t\t\treturn Buffer.from(value);\n\t\t\t}\n\t\t\treturn value;\n\t\t}\n\t\tif (typeof TextDecoder !== 'undefined') {\n\t\t\treturn new TextDecoder().decode(value);\n\t\t}\n\t\tthrow new Error('TextDecoder is not available. Please provide either Buffer or TextDecoder polyfill.');\n\t}\n\treturn value;\n}\n"],"mappings":"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","names":["rows"]}
|
|
@@ -124,7 +124,7 @@ class SQLiteRelationalQuery extends import_query_promise.QueryPromise {
|
|
|
124
124
|
return query.sql;
|
|
125
125
|
}
|
|
126
126
|
/** @internal */
|
|
127
|
-
_prepare(isOneTimeQuery =
|
|
127
|
+
_prepare(isOneTimeQuery = false) {
|
|
128
128
|
const { query, builtQuery } = this._toSQL();
|
|
129
129
|
return this.session[isOneTimeQuery ? "prepareOneTimeRelationalQuery" : "prepareRelationalQuery"](
|
|
130
130
|
builtQuery,
|
|
@@ -175,9 +175,9 @@ class SQLiteRelationalQuery extends import_query_promise.QueryPromise {
|
|
|
175
175
|
/** @internal */
|
|
176
176
|
executeRaw() {
|
|
177
177
|
if (this.mode === "first") {
|
|
178
|
-
return this._prepare().get();
|
|
178
|
+
return this._prepare(false).get();
|
|
179
179
|
}
|
|
180
|
-
return this._prepare().all();
|
|
180
|
+
return this._prepare(false).all();
|
|
181
181
|
}
|
|
182
182
|
async execute() {
|
|
183
183
|
return this.executeRaw();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/sqlite-core/query-builders/query.ts"],"sourcesContent":["import { entityKind } from '~/entity.ts';\nimport { QueryPromise } from '~/query-promise.ts';\nimport {\n\ttype BuildQueryResult,\n\ttype BuildRelationalQueryResult,\n\ttype DBQueryConfig,\n\tmapRelationalRow,\n\ttype TableRelationalConfig,\n\ttype TablesRelationalConfig,\n} from '~/relations.ts';\nimport type { RunnableQuery } from '~/runnable-query.ts';\nimport { type Query, type QueryWithTypings, type SQL, sql, type SQLWrapper } from '~/sql/sql.ts';\nimport type { KnownKeysOnly } from '~/utils.ts';\nimport type { SQLiteDialect } from '../dialect.ts';\nimport type { PreparedQueryConfig, SQLitePreparedQuery, SQLiteSession } from '../session.ts';\nimport type { SQLiteTable } from '../table.ts';\n\nexport type SQLiteRelationalQueryKind<TMode extends 'sync' | 'async', TResult> = TMode extends 'async'\n\t? SQLiteRelationalQuery<TMode, TResult>\n\t: SQLiteSyncRelationalQuery<TResult>;\n\nexport class RelationalQueryBuilder<\n\tTMode extends 'sync' | 'async',\n\tTSchema extends TablesRelationalConfig,\n\tTFields extends TableRelationalConfig,\n> {\n\tstatic readonly [entityKind]: string = 'SQLiteAsyncRelationalQueryBuilderV2';\n\n\tconstructor(\n\t\tprivate mode: TMode,\n\t\tprivate tables: Record<string, SQLiteTable>,\n\t\tprivate schema: TSchema,\n\t\tprivate tableNamesMap: Record<string, string>,\n\t\tprivate table: SQLiteTable,\n\t\tprivate tableConfig: TableRelationalConfig,\n\t\tprivate dialect: SQLiteDialect,\n\t\tprivate session: SQLiteSession<any, any, any, any, any, any>,\n\t\tprivate rowMode?: boolean,\n\t) {\n\t}\n\n\tfindMany<TConfig extends DBQueryConfig<'many', TSchema, TFields>>(\n\t\tconfig?: KnownKeysOnly<TConfig, DBQueryConfig<'many', TSchema, TFields>>,\n\t): SQLiteRelationalQueryKind<TMode, BuildQueryResult<TSchema, TFields, TConfig>[]> {\n\t\treturn this.mode === 'sync'\n\t\t\t? new SQLiteSyncRelationalQuery(\n\t\t\t\tthis.tables,\n\t\t\t\tthis.schema,\n\t\t\t\tthis.tableNamesMap,\n\t\t\t\tthis.table,\n\t\t\t\tthis.tableConfig,\n\t\t\t\tthis.dialect,\n\t\t\t\tthis.session,\n\t\t\t\tconfig as DBQueryConfig<'many'> | undefined ?? true,\n\t\t\t\t'many',\n\t\t\t\tthis.rowMode,\n\t\t\t) as SQLiteRelationalQueryKind<TMode, BuildQueryResult<TSchema, TFields, TConfig>[]>\n\t\t\t: new SQLiteRelationalQuery(\n\t\t\t\tthis.tables,\n\t\t\t\tthis.schema,\n\t\t\t\tthis.tableNamesMap,\n\t\t\t\tthis.table,\n\t\t\t\tthis.tableConfig,\n\t\t\t\tthis.dialect,\n\t\t\t\tthis.session,\n\t\t\t\tconfig as DBQueryConfig<'many'> | undefined ?? true,\n\t\t\t\t'many',\n\t\t\t\tthis.rowMode,\n\t\t\t) as SQLiteRelationalQueryKind<TMode, BuildQueryResult<TSchema, TFields, TConfig>[]>;\n\t}\n\n\tfindFirst<TConfig extends DBQueryConfig<'one', TSchema, TFields>>(\n\t\tconfig?: KnownKeysOnly<TConfig, DBQueryConfig<'one', TSchema, TFields>>,\n\t): SQLiteRelationalQueryKind<TMode, BuildQueryResult<TSchema, TFields, TConfig> | undefined> {\n\t\treturn this.mode === 'sync'\n\t\t\t? new SQLiteSyncRelationalQuery(\n\t\t\t\tthis.tables,\n\t\t\t\tthis.schema,\n\t\t\t\tthis.tableNamesMap,\n\t\t\t\tthis.table,\n\t\t\t\tthis.tableConfig,\n\t\t\t\tthis.dialect,\n\t\t\t\tthis.session,\n\t\t\t\tconfig as DBQueryConfig<'one'> | undefined ?? true,\n\t\t\t\t'first',\n\t\t\t\tthis.rowMode,\n\t\t\t) as SQLiteRelationalQueryKind<TMode, BuildQueryResult<TSchema, TFields, TConfig> | undefined>\n\t\t\t: new SQLiteRelationalQuery(\n\t\t\t\tthis.tables,\n\t\t\t\tthis.schema,\n\t\t\t\tthis.tableNamesMap,\n\t\t\t\tthis.table,\n\t\t\t\tthis.tableConfig,\n\t\t\t\tthis.dialect,\n\t\t\t\tthis.session,\n\t\t\t\tconfig as DBQueryConfig<'one'> | undefined ?? true,\n\t\t\t\t'first',\n\t\t\t\tthis.rowMode,\n\t\t\t) as SQLiteRelationalQueryKind<TMode, BuildQueryResult<TSchema, TFields, TConfig> | undefined>;\n\t}\n}\n\nexport class SQLiteRelationalQuery<TType extends 'sync' | 'async', TResult> extends QueryPromise<TResult>\n\timplements RunnableQuery<TResult, 'sqlite'>, SQLWrapper\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteAsyncRelationalQueryV2';\n\n\tdeclare readonly _: {\n\t\treadonly dialect: 'sqlite';\n\t\treadonly type: TType;\n\t\treadonly result: TResult;\n\t};\n\n\t/** @internal */\n\tmode: 'many' | 'first';\n\t/** @internal */\n\ttable: SQLiteTable;\n\n\tconstructor(\n\t\tprivate tables: Record<string, SQLiteTable>,\n\t\tprivate schema: TablesRelationalConfig,\n\t\tprivate tableNamesMap: Record<string, string>,\n\t\ttable: SQLiteTable,\n\t\tprivate tableConfig: TableRelationalConfig,\n\t\tprivate dialect: SQLiteDialect,\n\t\tprivate session: SQLiteSession<TType, any, any, any, any, any>,\n\t\tprivate config: DBQueryConfig<'many' | 'one'> | true,\n\t\tmode: 'many' | 'first',\n\t\tprivate rowMode?: boolean,\n\t) {\n\t\tsuper();\n\t\tthis.mode = mode;\n\t\tthis.table = table;\n\t}\n\n\t/** @internal */\n\tgetSQL(): SQL {\n\t\tconst query = this.dialect.buildRelationalQuery({\n\t\t\tschema: this.schema,\n\t\t\ttableNamesMap: this.tableNamesMap,\n\t\t\ttable: this.table,\n\t\t\ttableConfig: this.tableConfig,\n\t\t\tqueryConfig: this.config,\n\t\t\ttables: this.tables,\n\t\t\tmode: this.mode,\n\t\t});\n\n\t\treturn query.sql;\n\t}\n\n\t/** @internal */\n\t_prepare(\n\t\tisOneTimeQuery = true,\n\t): SQLitePreparedQuery<PreparedQueryConfig & { type: TType; all: TResult; get: TResult; execute: TResult }> {\n\t\tconst { query, builtQuery } = this._toSQL();\n\n\t\treturn this.session[isOneTimeQuery ? 'prepareOneTimeRelationalQuery' : 'prepareRelationalQuery'](\n\t\t\tbuiltQuery,\n\t\t\tundefined,\n\t\t\tthis.mode === 'first' ? 'get' : 'all',\n\t\t\t(rawRows, mapColumnValue) => {\n\t\t\t\tconst rows = rawRows.map((row) => mapRelationalRow(row, query.selection, mapColumnValue, !this.rowMode));\n\t\t\t\tif (this.mode === 'first') {\n\t\t\t\t\treturn rows[0] as TResult;\n\t\t\t\t}\n\t\t\t\treturn rows as TResult;\n\t\t\t},\n\t\t) as SQLitePreparedQuery<PreparedQueryConfig & { type: TType; all: TResult; get: TResult; execute: TResult }>;\n\t}\n\n\tprepare(): SQLitePreparedQuery<PreparedQueryConfig & { type: TType; all: TResult; get: TResult; execute: TResult }> {\n\t\treturn this._prepare(false);\n\t}\n\n\tprivate _getQuery() {\n\t\tconst query = this.dialect.buildRelationalQuery({\n\t\t\tschema: this.schema,\n\t\t\ttableNamesMap: this.tableNamesMap,\n\t\t\ttable: this.table,\n\t\t\ttableConfig: this.tableConfig,\n\t\t\tqueryConfig: this.config,\n\t\t\ttables: this.tables,\n\t\t\tmode: this.mode,\n\t\t\tisNested: this.rowMode,\n\t\t});\n\n\t\tif (this.rowMode) {\n\t\t\tconst jsonColumns = sql.join(\n\t\t\t\tquery.selection.map((s) => {\n\t\t\t\t\treturn sql`${sql.raw(this.dialect.escapeString(s.key))}, ${\n\t\t\t\t\t\ts.selection ? sql`jsonb(${sql.identifier(s.key)})` : sql.identifier(s.key)\n\t\t\t\t\t}`;\n\t\t\t\t}),\n\t\t\t\tsql`, `,\n\t\t\t);\n\n\t\t\tquery.sql = sql`select json_object(${jsonColumns}) as ${sql.identifier('r')} from (${query.sql}) as ${\n\t\t\t\tsql.identifier('t')\n\t\t\t}`;\n\t\t}\n\n\t\treturn query;\n\t}\n\n\tprivate _toSQL(): { query: BuildRelationalQueryResult; builtQuery: QueryWithTypings } {\n\t\tconst query = this._getQuery();\n\n\t\tconst builtQuery = this.dialect.sqlToQuery(query.sql);\n\n\t\treturn { query, builtQuery };\n\t}\n\n\ttoSQL(): Query {\n\t\treturn this._toSQL().builtQuery;\n\t}\n\n\t/** @internal */\n\texecuteRaw(): TResult {\n\t\tif (this.mode === 'first') {\n\t\t\treturn this._prepare().get() as TResult;\n\t\t}\n\t\treturn this._prepare().all() as TResult;\n\t}\n\n\toverride async execute(): Promise<TResult> {\n\t\treturn this.executeRaw();\n\t}\n}\n\nexport class SQLiteSyncRelationalQuery<TResult> extends SQLiteRelationalQuery<'sync', TResult> {\n\tstatic override readonly [entityKind]: string = 'SQLiteSyncRelationalQueryV2';\n\n\tsync(): TResult {\n\t\treturn this.executeRaw();\n\t}\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/sqlite-core/query-builders/query.ts"],"sourcesContent":["import { entityKind } from '~/entity.ts';\nimport { QueryPromise } from '~/query-promise.ts';\nimport {\n\ttype BuildQueryResult,\n\ttype BuildRelationalQueryResult,\n\ttype DBQueryConfig,\n\tmapRelationalRow,\n\ttype TableRelationalConfig,\n\ttype TablesRelationalConfig,\n} from '~/relations.ts';\nimport type { RunnableQuery } from '~/runnable-query.ts';\nimport { type Query, type QueryWithTypings, type SQL, sql, type SQLWrapper } from '~/sql/sql.ts';\nimport type { KnownKeysOnly } from '~/utils.ts';\nimport type { SQLiteDialect } from '../dialect.ts';\nimport type { PreparedQueryConfig, SQLitePreparedQuery, SQLiteSession } from '../session.ts';\nimport type { SQLiteTable } from '../table.ts';\n\nexport type SQLiteRelationalQueryKind<TMode extends 'sync' | 'async', TResult> = TMode extends 'async'\n\t? SQLiteRelationalQuery<TMode, TResult>\n\t: SQLiteSyncRelationalQuery<TResult>;\n\nexport class RelationalQueryBuilder<\n\tTMode extends 'sync' | 'async',\n\tTSchema extends TablesRelationalConfig,\n\tTFields extends TableRelationalConfig,\n> {\n\tstatic readonly [entityKind]: string = 'SQLiteAsyncRelationalQueryBuilderV2';\n\n\tconstructor(\n\t\tprivate mode: TMode,\n\t\tprivate tables: Record<string, SQLiteTable>,\n\t\tprivate schema: TSchema,\n\t\tprivate tableNamesMap: Record<string, string>,\n\t\tprivate table: SQLiteTable,\n\t\tprivate tableConfig: TableRelationalConfig,\n\t\tprivate dialect: SQLiteDialect,\n\t\tprivate session: SQLiteSession<any, any, any, any, any, any>,\n\t\tprivate rowMode?: boolean,\n\t) {\n\t}\n\n\tfindMany<TConfig extends DBQueryConfig<'many', TSchema, TFields>>(\n\t\tconfig?: KnownKeysOnly<TConfig, DBQueryConfig<'many', TSchema, TFields>>,\n\t): SQLiteRelationalQueryKind<TMode, BuildQueryResult<TSchema, TFields, TConfig>[]> {\n\t\treturn this.mode === 'sync'\n\t\t\t? new SQLiteSyncRelationalQuery(\n\t\t\t\tthis.tables,\n\t\t\t\tthis.schema,\n\t\t\t\tthis.tableNamesMap,\n\t\t\t\tthis.table,\n\t\t\t\tthis.tableConfig,\n\t\t\t\tthis.dialect,\n\t\t\t\tthis.session,\n\t\t\t\tconfig as DBQueryConfig<'many'> | undefined ?? true,\n\t\t\t\t'many',\n\t\t\t\tthis.rowMode,\n\t\t\t) as SQLiteRelationalQueryKind<TMode, BuildQueryResult<TSchema, TFields, TConfig>[]>\n\t\t\t: new SQLiteRelationalQuery(\n\t\t\t\tthis.tables,\n\t\t\t\tthis.schema,\n\t\t\t\tthis.tableNamesMap,\n\t\t\t\tthis.table,\n\t\t\t\tthis.tableConfig,\n\t\t\t\tthis.dialect,\n\t\t\t\tthis.session,\n\t\t\t\tconfig as DBQueryConfig<'many'> | undefined ?? true,\n\t\t\t\t'many',\n\t\t\t\tthis.rowMode,\n\t\t\t) as SQLiteRelationalQueryKind<TMode, BuildQueryResult<TSchema, TFields, TConfig>[]>;\n\t}\n\n\tfindFirst<TConfig extends DBQueryConfig<'one', TSchema, TFields>>(\n\t\tconfig?: KnownKeysOnly<TConfig, DBQueryConfig<'one', TSchema, TFields>>,\n\t): SQLiteRelationalQueryKind<TMode, BuildQueryResult<TSchema, TFields, TConfig> | undefined> {\n\t\treturn this.mode === 'sync'\n\t\t\t? new SQLiteSyncRelationalQuery(\n\t\t\t\tthis.tables,\n\t\t\t\tthis.schema,\n\t\t\t\tthis.tableNamesMap,\n\t\t\t\tthis.table,\n\t\t\t\tthis.tableConfig,\n\t\t\t\tthis.dialect,\n\t\t\t\tthis.session,\n\t\t\t\tconfig as DBQueryConfig<'one'> | undefined ?? true,\n\t\t\t\t'first',\n\t\t\t\tthis.rowMode,\n\t\t\t) as SQLiteRelationalQueryKind<TMode, BuildQueryResult<TSchema, TFields, TConfig> | undefined>\n\t\t\t: new SQLiteRelationalQuery(\n\t\t\t\tthis.tables,\n\t\t\t\tthis.schema,\n\t\t\t\tthis.tableNamesMap,\n\t\t\t\tthis.table,\n\t\t\t\tthis.tableConfig,\n\t\t\t\tthis.dialect,\n\t\t\t\tthis.session,\n\t\t\t\tconfig as DBQueryConfig<'one'> | undefined ?? true,\n\t\t\t\t'first',\n\t\t\t\tthis.rowMode,\n\t\t\t) as SQLiteRelationalQueryKind<TMode, BuildQueryResult<TSchema, TFields, TConfig> | undefined>;\n\t}\n}\n\nexport class SQLiteRelationalQuery<TType extends 'sync' | 'async', TResult> extends QueryPromise<TResult>\n\timplements RunnableQuery<TResult, 'sqlite'>, SQLWrapper\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteAsyncRelationalQueryV2';\n\n\tdeclare readonly _: {\n\t\treadonly dialect: 'sqlite';\n\t\treadonly type: TType;\n\t\treadonly result: TResult;\n\t};\n\n\t/** @internal */\n\tmode: 'many' | 'first';\n\t/** @internal */\n\ttable: SQLiteTable;\n\n\tconstructor(\n\t\tprivate tables: Record<string, SQLiteTable>,\n\t\tprivate schema: TablesRelationalConfig,\n\t\tprivate tableNamesMap: Record<string, string>,\n\t\ttable: SQLiteTable,\n\t\tprivate tableConfig: TableRelationalConfig,\n\t\tprivate dialect: SQLiteDialect,\n\t\tprivate session: SQLiteSession<TType, any, any, any, any, any>,\n\t\tprivate config: DBQueryConfig<'many' | 'one'> | true,\n\t\tmode: 'many' | 'first',\n\t\tprivate rowMode?: boolean,\n\t) {\n\t\tsuper();\n\t\tthis.mode = mode;\n\t\tthis.table = table;\n\t}\n\n\t/** @internal */\n\tgetSQL(): SQL {\n\t\tconst query = this.dialect.buildRelationalQuery({\n\t\t\tschema: this.schema,\n\t\t\ttableNamesMap: this.tableNamesMap,\n\t\t\ttable: this.table,\n\t\t\ttableConfig: this.tableConfig,\n\t\t\tqueryConfig: this.config,\n\t\t\ttables: this.tables,\n\t\t\tmode: this.mode,\n\t\t});\n\n\t\treturn query.sql;\n\t}\n\n\t/** @internal */\n\t_prepare(\n\t\tisOneTimeQuery = false,\n\t): SQLitePreparedQuery<PreparedQueryConfig & { type: TType; all: TResult; get: TResult; execute: TResult }> {\n\t\tconst { query, builtQuery } = this._toSQL();\n\n\t\treturn this.session[isOneTimeQuery ? 'prepareOneTimeRelationalQuery' : 'prepareRelationalQuery'](\n\t\t\tbuiltQuery,\n\t\t\tundefined,\n\t\t\tthis.mode === 'first' ? 'get' : 'all',\n\t\t\t(rawRows, mapColumnValue) => {\n\t\t\t\tconst rows = rawRows.map((row) => mapRelationalRow(row, query.selection, mapColumnValue, !this.rowMode));\n\t\t\t\tif (this.mode === 'first') {\n\t\t\t\t\treturn rows[0] as TResult;\n\t\t\t\t}\n\t\t\t\treturn rows as TResult;\n\t\t\t},\n\t\t) as SQLitePreparedQuery<PreparedQueryConfig & { type: TType; all: TResult; get: TResult; execute: TResult }>;\n\t}\n\n\tprepare(): SQLitePreparedQuery<PreparedQueryConfig & { type: TType; all: TResult; get: TResult; execute: TResult }> {\n\t\treturn this._prepare(false);\n\t}\n\n\tprivate _getQuery() {\n\t\tconst query = this.dialect.buildRelationalQuery({\n\t\t\tschema: this.schema,\n\t\t\ttableNamesMap: this.tableNamesMap,\n\t\t\ttable: this.table,\n\t\t\ttableConfig: this.tableConfig,\n\t\t\tqueryConfig: this.config,\n\t\t\ttables: this.tables,\n\t\t\tmode: this.mode,\n\t\t\tisNested: this.rowMode,\n\t\t});\n\n\t\tif (this.rowMode) {\n\t\t\tconst jsonColumns = sql.join(\n\t\t\t\tquery.selection.map((s) => {\n\t\t\t\t\treturn sql`${sql.raw(this.dialect.escapeString(s.key))}, ${\n\t\t\t\t\t\ts.selection ? sql`jsonb(${sql.identifier(s.key)})` : sql.identifier(s.key)\n\t\t\t\t\t}`;\n\t\t\t\t}),\n\t\t\t\tsql`, `,\n\t\t\t);\n\n\t\t\tquery.sql = sql`select json_object(${jsonColumns}) as ${sql.identifier('r')} from (${query.sql}) as ${\n\t\t\t\tsql.identifier('t')\n\t\t\t}`;\n\t\t}\n\n\t\treturn query;\n\t}\n\n\tprivate _toSQL(): { query: BuildRelationalQueryResult; builtQuery: QueryWithTypings } {\n\t\tconst query = this._getQuery();\n\n\t\tconst builtQuery = this.dialect.sqlToQuery(query.sql);\n\n\t\treturn { query, builtQuery };\n\t}\n\n\ttoSQL(): Query {\n\t\treturn this._toSQL().builtQuery;\n\t}\n\n\t/** @internal */\n\texecuteRaw(): TResult {\n\t\tif (this.mode === 'first') {\n\t\t\treturn this._prepare(false).get() as TResult;\n\t\t}\n\t\treturn this._prepare(false).all() as TResult;\n\t}\n\n\toverride async execute(): Promise<TResult> {\n\t\treturn this.executeRaw();\n\t}\n}\n\nexport class SQLiteSyncRelationalQuery<TResult> extends SQLiteRelationalQuery<'sync', TResult> {\n\tstatic override readonly [entityKind]: string = 'SQLiteSyncRelationalQueryV2';\n\n\tsync(): TResult {\n\t\treturn this.executeRaw();\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAA2B;AAC3B,2BAA6B;AAC7B,uBAOO;AAEP,iBAAkF;AAU3E,MAAM,uBAIX;AAAA,EAGD,YACS,MACA,QACA,QACA,eACA,OACA,aACA,SACA,SACA,SACP;AATO;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA,EAET;AAAA,EAbA,QAAiB,wBAAU,IAAY;AAAA,EAevC,SACC,QACkF;AAClF,WAAO,KAAK,SAAS,SAClB,IAAI;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,UAA+C;AAAA,MAC/C;AAAA,MACA,KAAK;AAAA,IACN,IACE,IAAI;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,UAA+C;AAAA,MAC/C;AAAA,MACA,KAAK;AAAA,IACN;AAAA,EACF;AAAA,EAEA,UACC,QAC4F;AAC5F,WAAO,KAAK,SAAS,SAClB,IAAI;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,UAA8C;AAAA,MAC9C;AAAA,MACA,KAAK;AAAA,IACN,IACE,IAAI;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,UAA8C;AAAA,MAC9C;AAAA,MACA,KAAK;AAAA,IACN;AAAA,EACF;AACD;AAEO,MAAM,8BAAuE,kCAEpF;AAAA,EAcC,YACS,QACA,QACA,eACR,OACQ,aACA,SACA,SACA,QACR,MACQ,SACP;AACD,UAAM;AAXE;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAGR,SAAK,OAAO;AACZ,SAAK,QAAQ;AAAA,EACd;AAAA,EA5BA,QAA0B,wBAAU,IAAY;AAAA;AAAA,EAShD;AAAA;AAAA,EAEA;AAAA;AAAA,EAoBA,SAAc;AACb,UAAM,QAAQ,KAAK,QAAQ,qBAAqB;AAAA,MAC/C,QAAQ,KAAK;AAAA,MACb,eAAe,KAAK;AAAA,MACpB,OAAO,KAAK;AAAA,MACZ,aAAa,KAAK;AAAA,MAClB,aAAa,KAAK;AAAA,MAClB,QAAQ,KAAK;AAAA,MACb,MAAM,KAAK;AAAA,IACZ,CAAC;AAED,WAAO,MAAM;AAAA,EACd;AAAA;AAAA,EAGA,SACC,iBAAiB,OAC0F;AAC3G,UAAM,EAAE,OAAO,WAAW,IAAI,KAAK,OAAO;AAE1C,WAAO,KAAK,QAAQ,iBAAiB,kCAAkC,wBAAwB;AAAA,MAC9F;AAAA,MACA;AAAA,MACA,KAAK,SAAS,UAAU,QAAQ;AAAA,MAChC,CAAC,SAAS,mBAAmB;AAC5B,cAAM,OAAO,QAAQ,IAAI,CAAC,YAAQ,mCAAiB,KAAK,MAAM,WAAW,gBAAgB,CAAC,KAAK,OAAO,CAAC;AACvG,YAAI,KAAK,SAAS,SAAS;AAC1B,iBAAO,KAAK,CAAC;AAAA,QACd;AACA,eAAO;AAAA,MACR;AAAA,IACD;AAAA,EACD;AAAA,EAEA,UAAoH;AACnH,WAAO,KAAK,SAAS,KAAK;AAAA,EAC3B;AAAA,EAEQ,YAAY;AACnB,UAAM,QAAQ,KAAK,QAAQ,qBAAqB;AAAA,MAC/C,QAAQ,KAAK;AAAA,MACb,eAAe,KAAK;AAAA,MACpB,OAAO,KAAK;AAAA,MACZ,aAAa,KAAK;AAAA,MAClB,aAAa,KAAK;AAAA,MAClB,QAAQ,KAAK;AAAA,MACb,MAAM,KAAK;AAAA,MACX,UAAU,KAAK;AAAA,IAChB,CAAC;AAED,QAAI,KAAK,SAAS;AACjB,YAAM,cAAc,eAAI;AAAA,QACvB,MAAM,UAAU,IAAI,CAAC,MAAM;AAC1B,iBAAO,iBAAM,eAAI,IAAI,KAAK,QAAQ,aAAa,EAAE,GAAG,CAAC,CAAC,KACrD,EAAE,YAAY,uBAAY,eAAI,WAAW,EAAE,GAAG,CAAC,MAAM,eAAI,WAAW,EAAE,GAAG,CAC1E;AAAA,QACD,CAAC;AAAA,QACD;AAAA,MACD;AAEA,YAAM,MAAM,oCAAyB,WAAW,QAAQ,eAAI,WAAW,GAAG,CAAC,UAAU,MAAM,GAAG,QAC7F,eAAI,WAAW,GAAG,CACnB;AAAA,IACD;AAEA,WAAO;AAAA,EACR;AAAA,EAEQ,SAA8E;AACrF,UAAM,QAAQ,KAAK,UAAU;AAE7B,UAAM,aAAa,KAAK,QAAQ,WAAW,MAAM,GAAG;AAEpD,WAAO,EAAE,OAAO,WAAW;AAAA,EAC5B;AAAA,EAEA,QAAe;AACd,WAAO,KAAK,OAAO,EAAE;AAAA,EACtB;AAAA;AAAA,EAGA,aAAsB;AACrB,QAAI,KAAK,SAAS,SAAS;AAC1B,aAAO,KAAK,SAAS,KAAK,EAAE,IAAI;AAAA,IACjC;AACA,WAAO,KAAK,SAAS,KAAK,EAAE,IAAI;AAAA,EACjC;AAAA,EAEA,MAAe,UAA4B;AAC1C,WAAO,KAAK,WAAW;AAAA,EACxB;AACD;AAEO,MAAM,kCAA2C,sBAAuC;AAAA,EAC9F,QAA0B,wBAAU,IAAY;AAAA,EAEhD,OAAgB;AACf,WAAO,KAAK,WAAW;AAAA,EACxB;AACD;","names":[]}
|
|
@@ -101,7 +101,7 @@ class SQLiteRelationalQuery extends QueryPromise {
|
|
|
101
101
|
return query.sql;
|
|
102
102
|
}
|
|
103
103
|
/** @internal */
|
|
104
|
-
_prepare(isOneTimeQuery =
|
|
104
|
+
_prepare(isOneTimeQuery = false) {
|
|
105
105
|
const { query, builtQuery } = this._toSQL();
|
|
106
106
|
return this.session[isOneTimeQuery ? "prepareOneTimeRelationalQuery" : "prepareRelationalQuery"](
|
|
107
107
|
builtQuery,
|
|
@@ -152,9 +152,9 @@ class SQLiteRelationalQuery extends QueryPromise {
|
|
|
152
152
|
/** @internal */
|
|
153
153
|
executeRaw() {
|
|
154
154
|
if (this.mode === "first") {
|
|
155
|
-
return this._prepare().get();
|
|
155
|
+
return this._prepare(false).get();
|
|
156
156
|
}
|
|
157
|
-
return this._prepare().all();
|
|
157
|
+
return this._prepare(false).all();
|
|
158
158
|
}
|
|
159
159
|
async execute() {
|
|
160
160
|
return this.executeRaw();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/sqlite-core/query-builders/query.ts"],"sourcesContent":["import { entityKind } from '~/entity.ts';\nimport { QueryPromise } from '~/query-promise.ts';\nimport {\n\ttype BuildQueryResult,\n\ttype BuildRelationalQueryResult,\n\ttype DBQueryConfig,\n\tmapRelationalRow,\n\ttype TableRelationalConfig,\n\ttype TablesRelationalConfig,\n} from '~/relations.ts';\nimport type { RunnableQuery } from '~/runnable-query.ts';\nimport { type Query, type QueryWithTypings, type SQL, sql, type SQLWrapper } from '~/sql/sql.ts';\nimport type { KnownKeysOnly } from '~/utils.ts';\nimport type { SQLiteDialect } from '../dialect.ts';\nimport type { PreparedQueryConfig, SQLitePreparedQuery, SQLiteSession } from '../session.ts';\nimport type { SQLiteTable } from '../table.ts';\n\nexport type SQLiteRelationalQueryKind<TMode extends 'sync' | 'async', TResult> = TMode extends 'async'\n\t? SQLiteRelationalQuery<TMode, TResult>\n\t: SQLiteSyncRelationalQuery<TResult>;\n\nexport class RelationalQueryBuilder<\n\tTMode extends 'sync' | 'async',\n\tTSchema extends TablesRelationalConfig,\n\tTFields extends TableRelationalConfig,\n> {\n\tstatic readonly [entityKind]: string = 'SQLiteAsyncRelationalQueryBuilderV2';\n\n\tconstructor(\n\t\tprivate mode: TMode,\n\t\tprivate tables: Record<string, SQLiteTable>,\n\t\tprivate schema: TSchema,\n\t\tprivate tableNamesMap: Record<string, string>,\n\t\tprivate table: SQLiteTable,\n\t\tprivate tableConfig: TableRelationalConfig,\n\t\tprivate dialect: SQLiteDialect,\n\t\tprivate session: SQLiteSession<any, any, any, any, any, any>,\n\t\tprivate rowMode?: boolean,\n\t) {\n\t}\n\n\tfindMany<TConfig extends DBQueryConfig<'many', TSchema, TFields>>(\n\t\tconfig?: KnownKeysOnly<TConfig, DBQueryConfig<'many', TSchema, TFields>>,\n\t): SQLiteRelationalQueryKind<TMode, BuildQueryResult<TSchema, TFields, TConfig>[]> {\n\t\treturn this.mode === 'sync'\n\t\t\t? new SQLiteSyncRelationalQuery(\n\t\t\t\tthis.tables,\n\t\t\t\tthis.schema,\n\t\t\t\tthis.tableNamesMap,\n\t\t\t\tthis.table,\n\t\t\t\tthis.tableConfig,\n\t\t\t\tthis.dialect,\n\t\t\t\tthis.session,\n\t\t\t\tconfig as DBQueryConfig<'many'> | undefined ?? true,\n\t\t\t\t'many',\n\t\t\t\tthis.rowMode,\n\t\t\t) as SQLiteRelationalQueryKind<TMode, BuildQueryResult<TSchema, TFields, TConfig>[]>\n\t\t\t: new SQLiteRelationalQuery(\n\t\t\t\tthis.tables,\n\t\t\t\tthis.schema,\n\t\t\t\tthis.tableNamesMap,\n\t\t\t\tthis.table,\n\t\t\t\tthis.tableConfig,\n\t\t\t\tthis.dialect,\n\t\t\t\tthis.session,\n\t\t\t\tconfig as DBQueryConfig<'many'> | undefined ?? true,\n\t\t\t\t'many',\n\t\t\t\tthis.rowMode,\n\t\t\t) as SQLiteRelationalQueryKind<TMode, BuildQueryResult<TSchema, TFields, TConfig>[]>;\n\t}\n\n\tfindFirst<TConfig extends DBQueryConfig<'one', TSchema, TFields>>(\n\t\tconfig?: KnownKeysOnly<TConfig, DBQueryConfig<'one', TSchema, TFields>>,\n\t): SQLiteRelationalQueryKind<TMode, BuildQueryResult<TSchema, TFields, TConfig> | undefined> {\n\t\treturn this.mode === 'sync'\n\t\t\t? new SQLiteSyncRelationalQuery(\n\t\t\t\tthis.tables,\n\t\t\t\tthis.schema,\n\t\t\t\tthis.tableNamesMap,\n\t\t\t\tthis.table,\n\t\t\t\tthis.tableConfig,\n\t\t\t\tthis.dialect,\n\t\t\t\tthis.session,\n\t\t\t\tconfig as DBQueryConfig<'one'> | undefined ?? true,\n\t\t\t\t'first',\n\t\t\t\tthis.rowMode,\n\t\t\t) as SQLiteRelationalQueryKind<TMode, BuildQueryResult<TSchema, TFields, TConfig> | undefined>\n\t\t\t: new SQLiteRelationalQuery(\n\t\t\t\tthis.tables,\n\t\t\t\tthis.schema,\n\t\t\t\tthis.tableNamesMap,\n\t\t\t\tthis.table,\n\t\t\t\tthis.tableConfig,\n\t\t\t\tthis.dialect,\n\t\t\t\tthis.session,\n\t\t\t\tconfig as DBQueryConfig<'one'> | undefined ?? true,\n\t\t\t\t'first',\n\t\t\t\tthis.rowMode,\n\t\t\t) as SQLiteRelationalQueryKind<TMode, BuildQueryResult<TSchema, TFields, TConfig> | undefined>;\n\t}\n}\n\nexport class SQLiteRelationalQuery<TType extends 'sync' | 'async', TResult> extends QueryPromise<TResult>\n\timplements RunnableQuery<TResult, 'sqlite'>, SQLWrapper\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteAsyncRelationalQueryV2';\n\n\tdeclare readonly _: {\n\t\treadonly dialect: 'sqlite';\n\t\treadonly type: TType;\n\t\treadonly result: TResult;\n\t};\n\n\t/** @internal */\n\tmode: 'many' | 'first';\n\t/** @internal */\n\ttable: SQLiteTable;\n\n\tconstructor(\n\t\tprivate tables: Record<string, SQLiteTable>,\n\t\tprivate schema: TablesRelationalConfig,\n\t\tprivate tableNamesMap: Record<string, string>,\n\t\ttable: SQLiteTable,\n\t\tprivate tableConfig: TableRelationalConfig,\n\t\tprivate dialect: SQLiteDialect,\n\t\tprivate session: SQLiteSession<TType, any, any, any, any, any>,\n\t\tprivate config: DBQueryConfig<'many' | 'one'> | true,\n\t\tmode: 'many' | 'first',\n\t\tprivate rowMode?: boolean,\n\t) {\n\t\tsuper();\n\t\tthis.mode = mode;\n\t\tthis.table = table;\n\t}\n\n\t/** @internal */\n\tgetSQL(): SQL {\n\t\tconst query = this.dialect.buildRelationalQuery({\n\t\t\tschema: this.schema,\n\t\t\ttableNamesMap: this.tableNamesMap,\n\t\t\ttable: this.table,\n\t\t\ttableConfig: this.tableConfig,\n\t\t\tqueryConfig: this.config,\n\t\t\ttables: this.tables,\n\t\t\tmode: this.mode,\n\t\t});\n\n\t\treturn query.sql;\n\t}\n\n\t/** @internal */\n\t_prepare(\n\t\tisOneTimeQuery = true,\n\t): SQLitePreparedQuery<PreparedQueryConfig & { type: TType; all: TResult; get: TResult; execute: TResult }> {\n\t\tconst { query, builtQuery } = this._toSQL();\n\n\t\treturn this.session[isOneTimeQuery ? 'prepareOneTimeRelationalQuery' : 'prepareRelationalQuery'](\n\t\t\tbuiltQuery,\n\t\t\tundefined,\n\t\t\tthis.mode === 'first' ? 'get' : 'all',\n\t\t\t(rawRows, mapColumnValue) => {\n\t\t\t\tconst rows = rawRows.map((row) => mapRelationalRow(row, query.selection, mapColumnValue, !this.rowMode));\n\t\t\t\tif (this.mode === 'first') {\n\t\t\t\t\treturn rows[0] as TResult;\n\t\t\t\t}\n\t\t\t\treturn rows as TResult;\n\t\t\t},\n\t\t) as SQLitePreparedQuery<PreparedQueryConfig & { type: TType; all: TResult; get: TResult; execute: TResult }>;\n\t}\n\n\tprepare(): SQLitePreparedQuery<PreparedQueryConfig & { type: TType; all: TResult; get: TResult; execute: TResult }> {\n\t\treturn this._prepare(false);\n\t}\n\n\tprivate _getQuery() {\n\t\tconst query = this.dialect.buildRelationalQuery({\n\t\t\tschema: this.schema,\n\t\t\ttableNamesMap: this.tableNamesMap,\n\t\t\ttable: this.table,\n\t\t\ttableConfig: this.tableConfig,\n\t\t\tqueryConfig: this.config,\n\t\t\ttables: this.tables,\n\t\t\tmode: this.mode,\n\t\t\tisNested: this.rowMode,\n\t\t});\n\n\t\tif (this.rowMode) {\n\t\t\tconst jsonColumns = sql.join(\n\t\t\t\tquery.selection.map((s) => {\n\t\t\t\t\treturn sql`${sql.raw(this.dialect.escapeString(s.key))}, ${\n\t\t\t\t\t\ts.selection ? sql`jsonb(${sql.identifier(s.key)})` : sql.identifier(s.key)\n\t\t\t\t\t}`;\n\t\t\t\t}),\n\t\t\t\tsql`, `,\n\t\t\t);\n\n\t\t\tquery.sql = sql`select json_object(${jsonColumns}) as ${sql.identifier('r')} from (${query.sql}) as ${\n\t\t\t\tsql.identifier('t')\n\t\t\t}`;\n\t\t}\n\n\t\treturn query;\n\t}\n\n\tprivate _toSQL(): { query: BuildRelationalQueryResult; builtQuery: QueryWithTypings } {\n\t\tconst query = this._getQuery();\n\n\t\tconst builtQuery = this.dialect.sqlToQuery(query.sql);\n\n\t\treturn { query, builtQuery };\n\t}\n\n\ttoSQL(): Query {\n\t\treturn this._toSQL().builtQuery;\n\t}\n\n\t/** @internal */\n\texecuteRaw(): TResult {\n\t\tif (this.mode === 'first') {\n\t\t\treturn this._prepare().get() as TResult;\n\t\t}\n\t\treturn this._prepare().all() as TResult;\n\t}\n\n\toverride async execute(): Promise<TResult> {\n\t\treturn this.executeRaw();\n\t}\n}\n\nexport class SQLiteSyncRelationalQuery<TResult> extends SQLiteRelationalQuery<'sync', TResult> {\n\tstatic override readonly [entityKind]: string = 'SQLiteSyncRelationalQueryV2';\n\n\tsync(): TResult {\n\t\treturn this.executeRaw();\n\t}\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/sqlite-core/query-builders/query.ts"],"sourcesContent":["import { entityKind } from '~/entity.ts';\nimport { QueryPromise } from '~/query-promise.ts';\nimport {\n\ttype BuildQueryResult,\n\ttype BuildRelationalQueryResult,\n\ttype DBQueryConfig,\n\tmapRelationalRow,\n\ttype TableRelationalConfig,\n\ttype TablesRelationalConfig,\n} from '~/relations.ts';\nimport type { RunnableQuery } from '~/runnable-query.ts';\nimport { type Query, type QueryWithTypings, type SQL, sql, type SQLWrapper } from '~/sql/sql.ts';\nimport type { KnownKeysOnly } from '~/utils.ts';\nimport type { SQLiteDialect } from '../dialect.ts';\nimport type { PreparedQueryConfig, SQLitePreparedQuery, SQLiteSession } from '../session.ts';\nimport type { SQLiteTable } from '../table.ts';\n\nexport type SQLiteRelationalQueryKind<TMode extends 'sync' | 'async', TResult> = TMode extends 'async'\n\t? SQLiteRelationalQuery<TMode, TResult>\n\t: SQLiteSyncRelationalQuery<TResult>;\n\nexport class RelationalQueryBuilder<\n\tTMode extends 'sync' | 'async',\n\tTSchema extends TablesRelationalConfig,\n\tTFields extends TableRelationalConfig,\n> {\n\tstatic readonly [entityKind]: string = 'SQLiteAsyncRelationalQueryBuilderV2';\n\n\tconstructor(\n\t\tprivate mode: TMode,\n\t\tprivate tables: Record<string, SQLiteTable>,\n\t\tprivate schema: TSchema,\n\t\tprivate tableNamesMap: Record<string, string>,\n\t\tprivate table: SQLiteTable,\n\t\tprivate tableConfig: TableRelationalConfig,\n\t\tprivate dialect: SQLiteDialect,\n\t\tprivate session: SQLiteSession<any, any, any, any, any, any>,\n\t\tprivate rowMode?: boolean,\n\t) {\n\t}\n\n\tfindMany<TConfig extends DBQueryConfig<'many', TSchema, TFields>>(\n\t\tconfig?: KnownKeysOnly<TConfig, DBQueryConfig<'many', TSchema, TFields>>,\n\t): SQLiteRelationalQueryKind<TMode, BuildQueryResult<TSchema, TFields, TConfig>[]> {\n\t\treturn this.mode === 'sync'\n\t\t\t? new SQLiteSyncRelationalQuery(\n\t\t\t\tthis.tables,\n\t\t\t\tthis.schema,\n\t\t\t\tthis.tableNamesMap,\n\t\t\t\tthis.table,\n\t\t\t\tthis.tableConfig,\n\t\t\t\tthis.dialect,\n\t\t\t\tthis.session,\n\t\t\t\tconfig as DBQueryConfig<'many'> | undefined ?? true,\n\t\t\t\t'many',\n\t\t\t\tthis.rowMode,\n\t\t\t) as SQLiteRelationalQueryKind<TMode, BuildQueryResult<TSchema, TFields, TConfig>[]>\n\t\t\t: new SQLiteRelationalQuery(\n\t\t\t\tthis.tables,\n\t\t\t\tthis.schema,\n\t\t\t\tthis.tableNamesMap,\n\t\t\t\tthis.table,\n\t\t\t\tthis.tableConfig,\n\t\t\t\tthis.dialect,\n\t\t\t\tthis.session,\n\t\t\t\tconfig as DBQueryConfig<'many'> | undefined ?? true,\n\t\t\t\t'many',\n\t\t\t\tthis.rowMode,\n\t\t\t) as SQLiteRelationalQueryKind<TMode, BuildQueryResult<TSchema, TFields, TConfig>[]>;\n\t}\n\n\tfindFirst<TConfig extends DBQueryConfig<'one', TSchema, TFields>>(\n\t\tconfig?: KnownKeysOnly<TConfig, DBQueryConfig<'one', TSchema, TFields>>,\n\t): SQLiteRelationalQueryKind<TMode, BuildQueryResult<TSchema, TFields, TConfig> | undefined> {\n\t\treturn this.mode === 'sync'\n\t\t\t? new SQLiteSyncRelationalQuery(\n\t\t\t\tthis.tables,\n\t\t\t\tthis.schema,\n\t\t\t\tthis.tableNamesMap,\n\t\t\t\tthis.table,\n\t\t\t\tthis.tableConfig,\n\t\t\t\tthis.dialect,\n\t\t\t\tthis.session,\n\t\t\t\tconfig as DBQueryConfig<'one'> | undefined ?? true,\n\t\t\t\t'first',\n\t\t\t\tthis.rowMode,\n\t\t\t) as SQLiteRelationalQueryKind<TMode, BuildQueryResult<TSchema, TFields, TConfig> | undefined>\n\t\t\t: new SQLiteRelationalQuery(\n\t\t\t\tthis.tables,\n\t\t\t\tthis.schema,\n\t\t\t\tthis.tableNamesMap,\n\t\t\t\tthis.table,\n\t\t\t\tthis.tableConfig,\n\t\t\t\tthis.dialect,\n\t\t\t\tthis.session,\n\t\t\t\tconfig as DBQueryConfig<'one'> | undefined ?? true,\n\t\t\t\t'first',\n\t\t\t\tthis.rowMode,\n\t\t\t) as SQLiteRelationalQueryKind<TMode, BuildQueryResult<TSchema, TFields, TConfig> | undefined>;\n\t}\n}\n\nexport class SQLiteRelationalQuery<TType extends 'sync' | 'async', TResult> extends QueryPromise<TResult>\n\timplements RunnableQuery<TResult, 'sqlite'>, SQLWrapper\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteAsyncRelationalQueryV2';\n\n\tdeclare readonly _: {\n\t\treadonly dialect: 'sqlite';\n\t\treadonly type: TType;\n\t\treadonly result: TResult;\n\t};\n\n\t/** @internal */\n\tmode: 'many' | 'first';\n\t/** @internal */\n\ttable: SQLiteTable;\n\n\tconstructor(\n\t\tprivate tables: Record<string, SQLiteTable>,\n\t\tprivate schema: TablesRelationalConfig,\n\t\tprivate tableNamesMap: Record<string, string>,\n\t\ttable: SQLiteTable,\n\t\tprivate tableConfig: TableRelationalConfig,\n\t\tprivate dialect: SQLiteDialect,\n\t\tprivate session: SQLiteSession<TType, any, any, any, any, any>,\n\t\tprivate config: DBQueryConfig<'many' | 'one'> | true,\n\t\tmode: 'many' | 'first',\n\t\tprivate rowMode?: boolean,\n\t) {\n\t\tsuper();\n\t\tthis.mode = mode;\n\t\tthis.table = table;\n\t}\n\n\t/** @internal */\n\tgetSQL(): SQL {\n\t\tconst query = this.dialect.buildRelationalQuery({\n\t\t\tschema: this.schema,\n\t\t\ttableNamesMap: this.tableNamesMap,\n\t\t\ttable: this.table,\n\t\t\ttableConfig: this.tableConfig,\n\t\t\tqueryConfig: this.config,\n\t\t\ttables: this.tables,\n\t\t\tmode: this.mode,\n\t\t});\n\n\t\treturn query.sql;\n\t}\n\n\t/** @internal */\n\t_prepare(\n\t\tisOneTimeQuery = false,\n\t): SQLitePreparedQuery<PreparedQueryConfig & { type: TType; all: TResult; get: TResult; execute: TResult }> {\n\t\tconst { query, builtQuery } = this._toSQL();\n\n\t\treturn this.session[isOneTimeQuery ? 'prepareOneTimeRelationalQuery' : 'prepareRelationalQuery'](\n\t\t\tbuiltQuery,\n\t\t\tundefined,\n\t\t\tthis.mode === 'first' ? 'get' : 'all',\n\t\t\t(rawRows, mapColumnValue) => {\n\t\t\t\tconst rows = rawRows.map((row) => mapRelationalRow(row, query.selection, mapColumnValue, !this.rowMode));\n\t\t\t\tif (this.mode === 'first') {\n\t\t\t\t\treturn rows[0] as TResult;\n\t\t\t\t}\n\t\t\t\treturn rows as TResult;\n\t\t\t},\n\t\t) as SQLitePreparedQuery<PreparedQueryConfig & { type: TType; all: TResult; get: TResult; execute: TResult }>;\n\t}\n\n\tprepare(): SQLitePreparedQuery<PreparedQueryConfig & { type: TType; all: TResult; get: TResult; execute: TResult }> {\n\t\treturn this._prepare(false);\n\t}\n\n\tprivate _getQuery() {\n\t\tconst query = this.dialect.buildRelationalQuery({\n\t\t\tschema: this.schema,\n\t\t\ttableNamesMap: this.tableNamesMap,\n\t\t\ttable: this.table,\n\t\t\ttableConfig: this.tableConfig,\n\t\t\tqueryConfig: this.config,\n\t\t\ttables: this.tables,\n\t\t\tmode: this.mode,\n\t\t\tisNested: this.rowMode,\n\t\t});\n\n\t\tif (this.rowMode) {\n\t\t\tconst jsonColumns = sql.join(\n\t\t\t\tquery.selection.map((s) => {\n\t\t\t\t\treturn sql`${sql.raw(this.dialect.escapeString(s.key))}, ${\n\t\t\t\t\t\ts.selection ? sql`jsonb(${sql.identifier(s.key)})` : sql.identifier(s.key)\n\t\t\t\t\t}`;\n\t\t\t\t}),\n\t\t\t\tsql`, `,\n\t\t\t);\n\n\t\t\tquery.sql = sql`select json_object(${jsonColumns}) as ${sql.identifier('r')} from (${query.sql}) as ${\n\t\t\t\tsql.identifier('t')\n\t\t\t}`;\n\t\t}\n\n\t\treturn query;\n\t}\n\n\tprivate _toSQL(): { query: BuildRelationalQueryResult; builtQuery: QueryWithTypings } {\n\t\tconst query = this._getQuery();\n\n\t\tconst builtQuery = this.dialect.sqlToQuery(query.sql);\n\n\t\treturn { query, builtQuery };\n\t}\n\n\ttoSQL(): Query {\n\t\treturn this._toSQL().builtQuery;\n\t}\n\n\t/** @internal */\n\texecuteRaw(): TResult {\n\t\tif (this.mode === 'first') {\n\t\t\treturn this._prepare(false).get() as TResult;\n\t\t}\n\t\treturn this._prepare(false).all() as TResult;\n\t}\n\n\toverride async execute(): Promise<TResult> {\n\t\treturn this.executeRaw();\n\t}\n}\n\nexport class SQLiteSyncRelationalQuery<TResult> extends SQLiteRelationalQuery<'sync', TResult> {\n\tstatic override readonly [entityKind]: string = 'SQLiteSyncRelationalQueryV2';\n\n\tsync(): TResult {\n\t\treturn this.executeRaw();\n\t}\n}\n"],"mappings":"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","names":[]}
|
package/version.cjs
CHANGED
package/version.d.cts
CHANGED
package/version.d.ts
CHANGED
package/version.js
CHANGED