drizzle-orm 0.30.2-34d3108 → 0.30.2-be1fd1a
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/aws-data-api/pg/session.cjs +3 -10
- package/aws-data-api/pg/session.cjs.map +1 -1
- package/aws-data-api/pg/session.d.cts +2 -3
- package/aws-data-api/pg/session.d.ts +2 -3
- package/aws-data-api/pg/session.js +3 -10
- package/aws-data-api/pg/session.js.map +1 -1
- package/better-sqlite3/session.cjs +3 -16
- package/better-sqlite3/session.cjs.map +1 -1
- package/better-sqlite3/session.d.cts +2 -3
- package/better-sqlite3/session.d.ts +2 -3
- package/better-sqlite3/session.js +3 -16
- package/better-sqlite3/session.js.map +1 -1
- package/bun-sqlite/session.cjs +3 -16
- package/bun-sqlite/session.cjs.map +1 -1
- package/bun-sqlite/session.d.cts +2 -3
- package/bun-sqlite/session.d.ts +2 -3
- package/bun-sqlite/session.js +3 -16
- package/bun-sqlite/session.js.map +1 -1
- package/d1/session.cjs +4 -16
- package/d1/session.cjs.map +1 -1
- package/d1/session.d.cts +2 -3
- package/d1/session.d.ts +2 -3
- package/d1/session.js +4 -16
- package/d1/session.js.map +1 -1
- package/expo-sqlite/driver.cjs.map +1 -1
- package/expo-sqlite/driver.js.map +1 -1
- package/expo-sqlite/index.cjs.map +1 -1
- package/expo-sqlite/index.js.map +1 -1
- package/expo-sqlite/migrator.cjs.map +1 -1
- package/expo-sqlite/migrator.js.map +1 -1
- package/expo-sqlite/session.cjs +3 -16
- package/expo-sqlite/session.cjs.map +1 -1
- package/expo-sqlite/session.d.cts +3 -4
- package/expo-sqlite/session.d.ts +3 -4
- package/expo-sqlite/session.js +3 -16
- package/expo-sqlite/session.js.map +1 -1
- package/libsql/session.cjs +2 -8
- package/libsql/session.cjs.map +1 -1
- package/libsql/session.d.cts +2 -3
- package/libsql/session.d.ts +2 -3
- package/libsql/session.js +2 -8
- package/libsql/session.js.map +1 -1
- package/mysql-core/db.cjs +38 -38
- package/mysql-core/db.cjs.map +1 -1
- package/mysql-core/db.js +38 -38
- package/mysql-core/db.js.map +1 -1
- package/mysql-core/dialect.cjs.map +1 -1
- package/mysql-core/dialect.js +1 -1
- package/mysql-core/dialect.js.map +1 -1
- package/mysql-core/query-builders/delete.cjs +10 -10
- package/mysql-core/query-builders/delete.cjs.map +1 -1
- package/mysql-core/query-builders/delete.d.cts +2 -2
- package/mysql-core/query-builders/delete.d.ts +2 -2
- package/mysql-core/query-builders/delete.js +10 -10
- package/mysql-core/query-builders/delete.js.map +1 -1
- package/mysql-core/query-builders/insert.cjs +7 -7
- package/mysql-core/query-builders/insert.cjs.map +1 -1
- package/mysql-core/query-builders/insert.js +7 -7
- package/mysql-core/query-builders/insert.js.map +1 -1
- package/mysql-core/query-builders/query-builder.cjs +2 -2
- package/mysql-core/query-builders/query-builder.cjs.map +1 -1
- package/mysql-core/query-builders/query-builder.d.cts +2 -2
- package/mysql-core/query-builders/query-builder.d.ts +2 -2
- package/mysql-core/query-builders/query-builder.js +2 -2
- package/mysql-core/query-builders/query-builder.js.map +1 -1
- package/mysql-core/query-builders/select.cjs +85 -85
- package/mysql-core/query-builders/select.cjs.map +1 -1
- package/mysql-core/query-builders/select.d.cts +1 -1
- package/mysql-core/query-builders/select.d.ts +1 -1
- package/mysql-core/query-builders/select.js +85 -85
- package/mysql-core/query-builders/select.js.map +1 -1
- package/mysql-core/query-builders/select.types.cjs.map +1 -1
- package/mysql-core/query-builders/select.types.d.cts +1 -1
- package/mysql-core/query-builders/select.types.d.ts +1 -1
- package/mysql-core/query-builders/update.cjs +8 -8
- package/mysql-core/query-builders/update.cjs.map +1 -1
- package/mysql-core/query-builders/update.d.cts +1 -1
- package/mysql-core/query-builders/update.d.ts +1 -1
- package/mysql-core/query-builders/update.js +8 -8
- package/mysql-core/query-builders/update.js.map +1 -1
- package/mysql-core/view-base.cjs.map +1 -1
- package/mysql-core/view-base.js.map +1 -1
- package/mysql-proxy/migrator.cjs.map +1 -1
- package/mysql-proxy/migrator.js.map +1 -1
- package/neon-http/driver.cjs.map +1 -1
- package/neon-http/driver.d.cts +1 -1
- package/neon-http/driver.d.ts +1 -1
- package/neon-http/driver.js.map +1 -1
- package/neon-http/migrator.cjs.map +1 -1
- package/neon-http/migrator.js.map +1 -1
- package/neon-http/session.cjs +6 -17
- package/neon-http/session.cjs.map +1 -1
- package/neon-http/session.d.cts +13 -5
- package/neon-http/session.d.ts +13 -5
- package/neon-http/session.js +6 -17
- package/neon-http/session.js.map +1 -1
- package/neon-serverless/session.cjs +3 -17
- package/neon-serverless/session.cjs.map +1 -1
- package/neon-serverless/session.d.cts +2 -3
- package/neon-serverless/session.d.ts +2 -3
- package/neon-serverless/session.js +3 -17
- package/neon-serverless/session.js.map +1 -1
- package/node-postgres/session.cjs +3 -17
- package/node-postgres/session.cjs.map +1 -1
- package/node-postgres/session.d.cts +2 -3
- package/node-postgres/session.d.ts +2 -3
- package/node-postgres/session.js +3 -17
- package/node-postgres/session.js.map +1 -1
- package/op-sqlite/driver.cjs.map +1 -1
- package/op-sqlite/driver.js.map +1 -1
- package/op-sqlite/index.cjs.map +1 -1
- package/op-sqlite/index.js.map +1 -1
- package/op-sqlite/migrator.cjs.map +1 -1
- package/op-sqlite/migrator.js.map +1 -1
- package/op-sqlite/session.cjs +3 -16
- package/op-sqlite/session.cjs.map +1 -1
- package/op-sqlite/session.d.cts +3 -4
- package/op-sqlite/session.d.ts +3 -4
- package/op-sqlite/session.js +3 -16
- package/op-sqlite/session.js.map +1 -1
- package/package.json +2 -2
- package/pg-core/columns/common.cjs +1 -1
- package/pg-core/columns/common.cjs.map +1 -1
- package/pg-core/columns/common.js +1 -1
- package/pg-core/columns/common.js.map +1 -1
- package/pg-core/db.cjs +2 -3
- package/pg-core/db.cjs.map +1 -1
- package/pg-core/db.d.cts +1 -2
- package/pg-core/db.d.ts +1 -2
- package/pg-core/db.js +2 -3
- package/pg-core/db.js.map +1 -1
- package/pg-core/query-builders/delete.cjs +1 -1
- package/pg-core/query-builders/delete.cjs.map +1 -1
- package/pg-core/query-builders/delete.js +1 -1
- package/pg-core/query-builders/delete.js.map +1 -1
- package/pg-core/query-builders/insert.cjs +1 -1
- package/pg-core/query-builders/insert.cjs.map +1 -1
- package/pg-core/query-builders/insert.js +1 -1
- package/pg-core/query-builders/insert.js.map +1 -1
- package/pg-core/query-builders/query-builder.cjs +2 -2
- package/pg-core/query-builders/query-builder.cjs.map +1 -1
- package/pg-core/query-builders/query-builder.d.cts +1 -1
- package/pg-core/query-builders/query-builder.d.ts +1 -1
- package/pg-core/query-builders/query-builder.js +2 -2
- package/pg-core/query-builders/query-builder.js.map +1 -1
- package/pg-core/query-builders/query.cjs +0 -1
- package/pg-core/query-builders/query.cjs.map +1 -1
- package/pg-core/query-builders/query.js +0 -1
- package/pg-core/query-builders/query.js.map +1 -1
- package/pg-core/query-builders/raw.cjs +0 -4
- package/pg-core/query-builders/raw.cjs.map +1 -1
- package/pg-core/query-builders/raw.d.cts +1 -1
- package/pg-core/query-builders/raw.d.ts +1 -1
- package/pg-core/query-builders/raw.js +0 -4
- package/pg-core/query-builders/raw.js.map +1 -1
- package/pg-core/query-builders/refresh-materialized-view.cjs +1 -1
- package/pg-core/query-builders/refresh-materialized-view.cjs.map +1 -1
- package/pg-core/query-builders/refresh-materialized-view.js +1 -1
- package/pg-core/query-builders/refresh-materialized-view.js.map +1 -1
- package/pg-core/query-builders/select.cjs +1 -1
- package/pg-core/query-builders/select.cjs.map +1 -1
- package/pg-core/query-builders/select.js +1 -1
- package/pg-core/query-builders/select.js.map +1 -1
- package/pg-core/query-builders/update.cjs +1 -1
- package/pg-core/query-builders/update.cjs.map +1 -1
- package/pg-core/query-builders/update.js +1 -1
- package/pg-core/query-builders/update.js.map +1 -1
- package/pg-core/session.cjs +2 -4
- package/pg-core/session.cjs.map +1 -1
- package/pg-core/session.d.cts +1 -1
- package/pg-core/session.d.ts +1 -1
- package/pg-core/session.js +2 -4
- package/pg-core/session.js.map +1 -1
- package/pg-core/view.cjs +2 -2
- package/pg-core/view.cjs.map +1 -1
- package/pg-core/view.d.cts +2 -2
- package/pg-core/view.d.ts +2 -2
- package/pg-core/view.js +2 -2
- package/pg-core/view.js.map +1 -1
- package/pg-proxy/migrator.cjs.map +1 -1
- package/pg-proxy/migrator.js.map +1 -1
- package/pg-proxy/session.cjs +3 -16
- package/pg-proxy/session.cjs.map +1 -1
- package/pg-proxy/session.d.cts +2 -3
- package/pg-proxy/session.d.ts +2 -3
- package/pg-proxy/session.js +3 -16
- package/pg-proxy/session.js.map +1 -1
- package/postgres-js/session.cjs +3 -16
- package/postgres-js/session.cjs.map +1 -1
- package/postgres-js/session.d.cts +2 -3
- package/postgres-js/session.d.ts +2 -3
- package/postgres-js/session.js +3 -16
- package/postgres-js/session.js.map +1 -1
- package/session.cjs.map +1 -1
- package/sql/functions/aggregate.cjs +1 -1
- package/sql/functions/aggregate.cjs.map +1 -1
- package/sql/functions/aggregate.d.cts +1 -1
- package/sql/functions/aggregate.d.ts +1 -1
- package/sql/functions/aggregate.js +1 -1
- package/sql/functions/aggregate.js.map +1 -1
- package/sql/index.cjs +3 -3
- package/sql/index.cjs.map +1 -1
- package/sql/index.d.cts +1 -1
- package/sql/index.d.ts +1 -1
- package/sql/index.js +1 -1
- package/sql/index.js.map +1 -1
- package/sql-js/session.cjs +4 -10
- package/sql-js/session.cjs.map +1 -1
- package/sql-js/session.d.cts +3 -4
- package/sql-js/session.d.ts +3 -4
- package/sql-js/session.js +4 -10
- package/sql-js/session.js.map +1 -1
- package/sqlite-core/dialect.cjs.map +1 -1
- package/sqlite-core/dialect.js.map +1 -1
- package/sqlite-core/query-builders/delete.cjs +1 -2
- package/sqlite-core/query-builders/delete.cjs.map +1 -1
- package/sqlite-core/query-builders/delete.js +1 -2
- package/sqlite-core/query-builders/delete.js.map +1 -1
- package/sqlite-core/query-builders/insert.cjs +1 -2
- package/sqlite-core/query-builders/insert.cjs.map +1 -1
- package/sqlite-core/query-builders/insert.js +1 -2
- package/sqlite-core/query-builders/insert.js.map +1 -1
- package/sqlite-core/query-builders/query-builder.cjs +2 -2
- package/sqlite-core/query-builders/query-builder.cjs.map +1 -1
- package/sqlite-core/query-builders/query-builder.d.cts +2 -2
- package/sqlite-core/query-builders/query-builder.d.ts +2 -2
- package/sqlite-core/query-builders/query-builder.js +2 -2
- package/sqlite-core/query-builders/query-builder.js.map +1 -1
- package/sqlite-core/query-builders/query.cjs +0 -1
- package/sqlite-core/query-builders/query.cjs.map +1 -1
- package/sqlite-core/query-builders/query.js +0 -1
- package/sqlite-core/query-builders/query.js.map +1 -1
- package/sqlite-core/query-builders/raw.cjs +0 -4
- package/sqlite-core/query-builders/raw.cjs.map +1 -1
- package/sqlite-core/query-builders/raw.d.cts +1 -1
- package/sqlite-core/query-builders/raw.d.ts +1 -1
- package/sqlite-core/query-builders/raw.js +0 -4
- package/sqlite-core/query-builders/raw.js.map +1 -1
- package/sqlite-core/query-builders/select.cjs +1 -2
- package/sqlite-core/query-builders/select.cjs.map +1 -1
- package/sqlite-core/query-builders/select.js +1 -2
- package/sqlite-core/query-builders/select.js.map +1 -1
- package/sqlite-core/query-builders/select.types.cjs.map +1 -1
- package/sqlite-core/query-builders/select.types.d.cts +2 -2
- package/sqlite-core/query-builders/select.types.d.ts +2 -2
- package/sqlite-core/query-builders/update.cjs +1 -2
- package/sqlite-core/query-builders/update.cjs.map +1 -1
- package/sqlite-core/query-builders/update.js +1 -2
- package/sqlite-core/query-builders/update.js.map +1 -1
- package/sqlite-core/session.cjs +6 -6
- package/sqlite-core/session.cjs.map +1 -1
- package/sqlite-core/session.d.cts +2 -2
- package/sqlite-core/session.d.ts +2 -2
- package/sqlite-core/session.js +6 -6
- package/sqlite-core/session.js.map +1 -1
- package/sqlite-core/subquery.cjs.map +1 -1
- package/sqlite-core/subquery.d.cts +1 -1
- package/sqlite-core/subquery.d.ts +1 -1
- package/sqlite-core/view-base.cjs.map +1 -1
- package/sqlite-core/view-base.js.map +1 -1
- package/sqlite-core/view.cjs +2 -2
- package/sqlite-core/view.cjs.map +1 -1
- package/sqlite-core/view.js +2 -2
- package/sqlite-core/view.js.map +1 -1
- package/sqlite-proxy/session.cjs +4 -17
- package/sqlite-proxy/session.cjs.map +1 -1
- package/sqlite-proxy/session.d.cts +2 -3
- package/sqlite-proxy/session.d.ts +2 -3
- package/sqlite-proxy/session.js +4 -17
- package/sqlite-proxy/session.js.map +1 -1
- package/subquery.cjs.map +1 -1
- package/subquery.js.map +1 -1
- package/tracing-utils.cjs.map +1 -1
- package/tracing-utils.js.map +1 -1
- package/vercel-postgres/session.cjs +2 -8
- package/vercel-postgres/session.cjs.map +1 -1
- package/vercel-postgres/session.d.cts +2 -3
- package/vercel-postgres/session.d.ts +2 -3
- package/vercel-postgres/session.js +2 -8
- package/vercel-postgres/session.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
|
@@ -30,7 +30,7 @@ var import_sql = require("../../sql/sql.cjs");
|
|
|
30
30
|
var import_utils = require("../../utils.cjs");
|
|
31
31
|
var import_common = require("../common/index.cjs");
|
|
32
32
|
class AwsDataApiPreparedQuery extends import_pg_core.PgPreparedQuery {
|
|
33
|
-
constructor(client, queryString, params, typings, options, fields, transactionId,
|
|
33
|
+
constructor(client, queryString, params, typings, options, fields, transactionId, customResultMapper) {
|
|
34
34
|
super({ sql: queryString, params });
|
|
35
35
|
this.client = client;
|
|
36
36
|
this.params = params;
|
|
@@ -38,7 +38,6 @@ class AwsDataApiPreparedQuery extends import_pg_core.PgPreparedQuery {
|
|
|
38
38
|
this.options = options;
|
|
39
39
|
this.fields = fields;
|
|
40
40
|
this.transactionId = transactionId;
|
|
41
|
-
this._isResponseInArrayMode = _isResponseInArrayMode;
|
|
42
41
|
this.customResultMapper = customResultMapper;
|
|
43
42
|
this.rawQuery = new import_client_rds_data.ExecuteStatementCommand({
|
|
44
43
|
sql: queryString,
|
|
@@ -94,10 +93,6 @@ class AwsDataApiPreparedQuery extends import_pg_core.PgPreparedQuery {
|
|
|
94
93
|
return row;
|
|
95
94
|
});
|
|
96
95
|
}
|
|
97
|
-
/** @internal */
|
|
98
|
-
isResponseInArrayMode() {
|
|
99
|
-
return this._isResponseInArrayMode;
|
|
100
|
-
}
|
|
101
96
|
}
|
|
102
97
|
class AwsDataApiSession extends import_pg_core.PgSession {
|
|
103
98
|
constructor(client, dialect, schema, options, transactionId) {
|
|
@@ -115,7 +110,7 @@ class AwsDataApiSession extends import_pg_core.PgSession {
|
|
|
115
110
|
static [import_entity.entityKind] = "AwsDataApiSession";
|
|
116
111
|
/** @internal */
|
|
117
112
|
rawQuery;
|
|
118
|
-
prepareQuery(query, fields, transactionId,
|
|
113
|
+
prepareQuery(query, fields, transactionId, customResultMapper) {
|
|
119
114
|
return new AwsDataApiPreparedQuery(
|
|
120
115
|
this.client,
|
|
121
116
|
query.sql,
|
|
@@ -124,7 +119,6 @@ class AwsDataApiSession extends import_pg_core.PgSession {
|
|
|
124
119
|
this.options,
|
|
125
120
|
fields,
|
|
126
121
|
transactionId,
|
|
127
|
-
isResponseInArrayMode,
|
|
128
122
|
customResultMapper
|
|
129
123
|
);
|
|
130
124
|
}
|
|
@@ -132,8 +126,7 @@ class AwsDataApiSession extends import_pg_core.PgSession {
|
|
|
132
126
|
return this.prepareQuery(
|
|
133
127
|
this.dialect.sqlToQuery(query),
|
|
134
128
|
void 0,
|
|
135
|
-
this.transactionId
|
|
136
|
-
false
|
|
129
|
+
this.transactionId
|
|
137
130
|
).execute();
|
|
138
131
|
}
|
|
139
132
|
async transaction(transaction, config) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/aws-data-api/pg/session.ts"],"sourcesContent":["import type { ColumnMetadata, ExecuteStatementCommandOutput, Field, RDSDataClient } from '@aws-sdk/client-rds-data';\nimport {\n\tBeginTransactionCommand,\n\tCommitTransactionCommand,\n\tExecuteStatementCommand,\n\tRollbackTransactionCommand,\n} from '@aws-sdk/client-rds-data';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport {\n\ttype PgDialect,\n\tPgPreparedQuery,\n\tPgSession,\n\tPgTransaction,\n\ttype PgTransactionConfig,\n\ttype PreparedQueryConfig,\n\ttype QueryResultHKT,\n} from '~/pg-core/index.ts';\nimport type { SelectedFieldsOrdered } from '~/pg-core/query-builders/select.types.ts';\nimport type { RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport { fillPlaceholders, type QueryTypingsValue, type QueryWithTypings, type SQL, sql } from '~/sql/sql.ts';\nimport { mapResultRow } from '~/utils.ts';\nimport { getValueFromDataApi, toValueParam } from '../common/index.ts';\n\nexport type AwsDataApiClient = RDSDataClient;\n\nexport class AwsDataApiPreparedQuery<T extends PreparedQueryConfig> extends PgPreparedQuery<T> {\n\tstatic readonly [entityKind]: string = 'AwsDataApiPreparedQuery';\n\n\tprivate rawQuery: ExecuteStatementCommand;\n\n\tconstructor(\n\t\tprivate client: AwsDataApiClient,\n\t\tqueryString: string,\n\t\tprivate params: unknown[],\n\t\tprivate typings: QueryTypingsValue[],\n\t\tprivate options: AwsDataApiSessionOptions,\n\t\tprivate fields: SelectedFieldsOrdered | undefined,\n\t\t/** @internal */\n\t\treadonly transactionId: string | undefined,\n\t\tprivate _isResponseInArrayMode: boolean,\n\t\tprivate customResultMapper?: (rows: unknown[][]) => T['execute'],\n\t) {\n\t\tsuper({ sql: queryString, params });\n\t\tthis.rawQuery = new ExecuteStatementCommand({\n\t\t\tsql: queryString,\n\t\t\tparameters: [],\n\t\t\tsecretArn: options.secretArn,\n\t\t\tresourceArn: options.resourceArn,\n\t\t\tdatabase: options.database,\n\t\t\ttransactionId,\n\t\t\tincludeResultMetadata: !fields && !customResultMapper,\n\t\t});\n\t}\n\n\tasync execute(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['execute']> {\n\t\tconst { fields, joinsNotNullableMap, customResultMapper } = this;\n\n\t\tconst rows = await this.values(placeholderValues) as unknown[][];\n\t\tif (!fields && !customResultMapper) {\n\t\t\treturn rows as T['execute'];\n\t\t}\n\t\treturn customResultMapper\n\t\t\t? customResultMapper(rows)\n\t\t\t: rows.map((row) => mapResultRow<T['execute']>(fields!, row, joinsNotNullableMap));\n\t}\n\n\tall(placeholderValues?: Record<string, unknown> | undefined): Promise<T['all']> {\n\t\treturn this.execute(placeholderValues);\n\t}\n\n\tasync values(placeholderValues: Record<string, unknown> = {}): Promise<T['values']> {\n\t\tconst params = fillPlaceholders(this.params, placeholderValues ?? {});\n\n\t\tthis.rawQuery.input.parameters = params.map((param, index) => ({\n\t\t\tname: `${index + 1}`,\n\t\t\t...toValueParam(param, this.typings[index]),\n\t\t}));\n\n\t\tthis.options.logger?.logQuery(this.rawQuery.input.sql!, this.rawQuery.input.parameters);\n\n\t\tconst { fields, rawQuery, client, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst result = await client.send(rawQuery);\n\t\t\tif (result.columnMetadata && result.columnMetadata.length > 0) {\n\t\t\t\treturn this.mapResultRows(result.records ?? [], result.columnMetadata);\n\t\t\t}\n\t\t\treturn result.records ?? [];\n\t\t}\n\n\t\tconst result = await client.send(rawQuery);\n\n\t\treturn result.records?.map((row: any) => {\n\t\t\treturn row.map((field: Field) => getValueFromDataApi(field));\n\t\t});\n\t}\n\n\t/** @internal */\n\tmapResultRows(records: Field[][], columnMetadata: ColumnMetadata[]) {\n\t\treturn records.map((record) => {\n\t\t\tconst row: Record<string, unknown> = {};\n\t\t\tfor (const [index, field] of record.entries()) {\n\t\t\t\tconst { name } = columnMetadata[index]!;\n\t\t\t\trow[name ?? index] = getValueFromDataApi(field); // not what to default if name is undefined\n\t\t\t}\n\t\t\treturn row;\n\t\t});\n\t}\n\n\t/** @internal */\n\tisResponseInArrayMode(): boolean {\n\t\treturn this._isResponseInArrayMode;\n\t}\n}\n\nexport interface AwsDataApiSessionOptions {\n\tlogger?: Logger;\n\tdatabase: string;\n\tresourceArn: string;\n\tsecretArn: string;\n}\n\ninterface AwsDataApiQueryBase {\n\tresourceArn: string;\n\tsecretArn: string;\n\tdatabase: string;\n}\n\nexport class AwsDataApiSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends PgSession<AwsDataApiPgQueryResultHKT, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'AwsDataApiSession';\n\n\t/** @internal */\n\treadonly rawQuery: AwsDataApiQueryBase;\n\n\tconstructor(\n\t\t/** @internal */\n\t\treadonly client: AwsDataApiClient,\n\t\tdialect: PgDialect,\n\t\tprivate schema: RelationalSchemaConfig<TSchema> | undefined,\n\t\tprivate options: AwsDataApiSessionOptions,\n\t\t/** @internal */\n\t\treadonly transactionId: string | undefined,\n\t) {\n\t\tsuper(dialect);\n\t\tthis.rawQuery = {\n\t\t\tsecretArn: options.secretArn,\n\t\t\tresourceArn: options.resourceArn,\n\t\t\tdatabase: options.database,\n\t\t};\n\t}\n\n\tprepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(\n\t\tquery: QueryWithTypings,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\ttransactionId: string | undefined,\n\t\tisResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][]) => T['execute'],\n\t): PgPreparedQuery<T> {\n\t\treturn new AwsDataApiPreparedQuery(\n\t\t\tthis.client,\n\t\t\tquery.sql,\n\t\t\tquery.params,\n\t\t\tquery.typings ?? [],\n\t\t\tthis.options,\n\t\t\tfields,\n\t\t\ttransactionId,\n\t\t\tisResponseInArrayMode,\n\t\t\tcustomResultMapper,\n\t\t);\n\t}\n\n\toverride execute<T>(query: SQL): Promise<T> {\n\t\treturn this.prepareQuery<PreparedQueryConfig & { execute: T }>(\n\t\t\tthis.dialect.sqlToQuery(query),\n\t\t\tundefined,\n\t\t\tthis.transactionId,\n\t\t\tfalse,\n\t\t).execute();\n\t}\n\n\toverride async transaction<T>(\n\t\ttransaction: (tx: AwsDataApiTransaction<TFullSchema, TSchema>) => Promise<T>,\n\t\tconfig?: PgTransactionConfig | undefined,\n\t): Promise<T> {\n\t\tconst { transactionId } = await this.client.send(new BeginTransactionCommand(this.rawQuery));\n\t\tconst session = new AwsDataApiSession(this.client, this.dialect, this.schema, this.options, transactionId);\n\t\tconst tx = new AwsDataApiTransaction(this.dialect, session, this.schema);\n\t\tif (config) {\n\t\t\tawait tx.setTransaction(config);\n\t\t}\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait this.client.send(new CommitTransactionCommand({ ...this.rawQuery, transactionId }));\n\t\t\treturn result;\n\t\t} catch (e) {\n\t\t\tawait this.client.send(new RollbackTransactionCommand({ ...this.rawQuery, transactionId }));\n\t\t\tthrow e;\n\t\t}\n\t}\n}\n\nexport class AwsDataApiTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends PgTransaction<AwsDataApiPgQueryResultHKT, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'AwsDataApiTransaction';\n\n\toverride transaction<T>(transaction: (tx: AwsDataApiTransaction<TFullSchema, TSchema>) => Promise<T>): Promise<T> {\n\t\tconst savepointName = `sp${this.nestedIndex + 1}`;\n\t\tconst tx = new AwsDataApiTransaction(this.dialect, this.session, this.schema, this.nestedIndex + 1);\n\t\tthis.session.execute(sql`savepoint ${savepointName}`);\n\t\ttry {\n\t\t\tconst result = transaction(tx);\n\t\t\tthis.session.execute(sql`release savepoint ${savepointName}`);\n\t\t\treturn result;\n\t\t} catch (e) {\n\t\t\tthis.session.execute(sql`rollback to savepoint ${savepointName}`);\n\t\t\tthrow e;\n\t\t}\n\t}\n}\n\nexport interface AwsDataApiPgQueryResultHKT extends QueryResultHKT {\n\ttype: ExecuteStatementCommandOutput;\n}\n"],"mappings":"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","names":["result"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/aws-data-api/pg/session.ts"],"sourcesContent":["import type { ColumnMetadata, ExecuteStatementCommandOutput, Field, RDSDataClient } from '@aws-sdk/client-rds-data';\nimport {\n\tBeginTransactionCommand,\n\tCommitTransactionCommand,\n\tExecuteStatementCommand,\n\tRollbackTransactionCommand,\n} from '@aws-sdk/client-rds-data';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport {\n\ttype PgDialect,\n\tPgPreparedQuery,\n\tPgSession,\n\tPgTransaction,\n\ttype PgTransactionConfig,\n\ttype PreparedQueryConfig,\n\ttype QueryResultHKT,\n} from '~/pg-core/index.ts';\nimport type { SelectedFieldsOrdered } from '~/pg-core/query-builders/select.types.ts';\nimport type { RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport { fillPlaceholders, type QueryTypingsValue, type QueryWithTypings, type SQL, sql } from '~/sql/sql.ts';\nimport { mapResultRow } from '~/utils.ts';\nimport { getValueFromDataApi, toValueParam } from '../common/index.ts';\n\nexport type AwsDataApiClient = RDSDataClient;\n\nexport class AwsDataApiPreparedQuery<T extends PreparedQueryConfig> extends PgPreparedQuery<T> {\n\tstatic readonly [entityKind]: string = 'AwsDataApiPreparedQuery';\n\n\tprivate rawQuery: ExecuteStatementCommand;\n\n\tconstructor(\n\t\tprivate client: AwsDataApiClient,\n\t\tqueryString: string,\n\t\tprivate params: unknown[],\n\t\tprivate typings: QueryTypingsValue[],\n\t\tprivate options: AwsDataApiSessionOptions,\n\t\tprivate fields: SelectedFieldsOrdered | undefined,\n\t\t/** @internal */\n\t\treadonly transactionId: string | undefined,\n\t\tprivate customResultMapper?: (rows: unknown[][]) => T['execute'],\n\t) {\n\t\tsuper({ sql: queryString, params });\n\t\tthis.rawQuery = new ExecuteStatementCommand({\n\t\t\tsql: queryString,\n\t\t\tparameters: [],\n\t\t\tsecretArn: options.secretArn,\n\t\t\tresourceArn: options.resourceArn,\n\t\t\tdatabase: options.database,\n\t\t\ttransactionId,\n\t\t\tincludeResultMetadata: !fields && !customResultMapper,\n\t\t});\n\t}\n\n\tasync execute(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['execute']> {\n\t\tconst { fields, joinsNotNullableMap, customResultMapper } = this;\n\n\t\tconst rows = await this.values(placeholderValues) as unknown[][];\n\t\tif (!fields && !customResultMapper) {\n\t\t\treturn rows as T['execute'];\n\t\t}\n\t\treturn customResultMapper\n\t\t\t? customResultMapper(rows)\n\t\t\t: rows.map((row) => mapResultRow<T['execute']>(fields!, row, joinsNotNullableMap));\n\t}\n\n\tall(placeholderValues?: Record<string, unknown> | undefined): Promise<T['all']> {\n\t\treturn this.execute(placeholderValues);\n\t}\n\n\tasync values(placeholderValues: Record<string, unknown> = {}): Promise<T['values']> {\n\t\tconst params = fillPlaceholders(this.params, placeholderValues ?? {});\n\n\t\tthis.rawQuery.input.parameters = params.map((param, index) => ({\n\t\t\tname: `${index + 1}`,\n\t\t\t...toValueParam(param, this.typings[index]),\n\t\t}));\n\n\t\tthis.options.logger?.logQuery(this.rawQuery.input.sql!, this.rawQuery.input.parameters);\n\n\t\tconst { fields, rawQuery, client, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst result = await client.send(rawQuery);\n\t\t\tif (result.columnMetadata && result.columnMetadata.length > 0) {\n\t\t\t\treturn this.mapResultRows(result.records ?? [], result.columnMetadata);\n\t\t\t}\n\t\t\treturn result.records ?? [];\n\t\t}\n\n\t\tconst result = await client.send(rawQuery);\n\n\t\treturn result.records?.map((row: any) => {\n\t\t\treturn row.map((field: Field) => getValueFromDataApi(field));\n\t\t});\n\t}\n\n\t/** @internal */\n\tmapResultRows(records: Field[][], columnMetadata: ColumnMetadata[]) {\n\t\treturn records.map((record) => {\n\t\t\tconst row: Record<string, unknown> = {};\n\t\t\tfor (const [index, field] of record.entries()) {\n\t\t\t\tconst { name } = columnMetadata[index]!;\n\t\t\t\trow[name ?? index] = getValueFromDataApi(field); // not what to default if name is undefined\n\t\t\t}\n\t\t\treturn row;\n\t\t});\n\t}\n}\n\nexport interface AwsDataApiSessionOptions {\n\tlogger?: Logger;\n\tdatabase: string;\n\tresourceArn: string;\n\tsecretArn: string;\n}\n\ninterface AwsDataApiQueryBase {\n\tresourceArn: string;\n\tsecretArn: string;\n\tdatabase: string;\n}\n\nexport class AwsDataApiSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends PgSession<AwsDataApiPgQueryResultHKT, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'AwsDataApiSession';\n\n\t/** @internal */\n\treadonly rawQuery: AwsDataApiQueryBase;\n\n\tconstructor(\n\t\t/** @internal */\n\t\treadonly client: AwsDataApiClient,\n\t\tdialect: PgDialect,\n\t\tprivate schema: RelationalSchemaConfig<TSchema> | undefined,\n\t\tprivate options: AwsDataApiSessionOptions,\n\t\t/** @internal */\n\t\treadonly transactionId: string | undefined,\n\t) {\n\t\tsuper(dialect);\n\t\tthis.rawQuery = {\n\t\t\tsecretArn: options.secretArn,\n\t\t\tresourceArn: options.resourceArn,\n\t\t\tdatabase: options.database,\n\t\t};\n\t}\n\n\tprepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(\n\t\tquery: QueryWithTypings,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\ttransactionId?: string,\n\t\tcustomResultMapper?: (rows: unknown[][]) => T['execute'],\n\t): PgPreparedQuery<T> {\n\t\treturn new AwsDataApiPreparedQuery(\n\t\t\tthis.client,\n\t\t\tquery.sql,\n\t\t\tquery.params,\n\t\t\tquery.typings ?? [],\n\t\t\tthis.options,\n\t\t\tfields,\n\t\t\ttransactionId,\n\t\t\tcustomResultMapper,\n\t\t);\n\t}\n\n\toverride execute<T>(query: SQL): Promise<T> {\n\t\treturn this.prepareQuery<PreparedQueryConfig & { execute: T }>(\n\t\t\tthis.dialect.sqlToQuery(query),\n\t\t\tundefined,\n\t\t\tthis.transactionId,\n\t\t).execute();\n\t}\n\n\toverride async transaction<T>(\n\t\ttransaction: (tx: AwsDataApiTransaction<TFullSchema, TSchema>) => Promise<T>,\n\t\tconfig?: PgTransactionConfig | undefined,\n\t): Promise<T> {\n\t\tconst { transactionId } = await this.client.send(new BeginTransactionCommand(this.rawQuery));\n\t\tconst session = new AwsDataApiSession(this.client, this.dialect, this.schema, this.options, transactionId);\n\t\tconst tx = new AwsDataApiTransaction(this.dialect, session, this.schema);\n\t\tif (config) {\n\t\t\tawait tx.setTransaction(config);\n\t\t}\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait this.client.send(new CommitTransactionCommand({ ...this.rawQuery, transactionId }));\n\t\t\treturn result;\n\t\t} catch (e) {\n\t\t\tawait this.client.send(new RollbackTransactionCommand({ ...this.rawQuery, transactionId }));\n\t\t\tthrow e;\n\t\t}\n\t}\n}\n\nexport class AwsDataApiTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends PgTransaction<AwsDataApiPgQueryResultHKT, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'AwsDataApiTransaction';\n\n\toverride transaction<T>(transaction: (tx: AwsDataApiTransaction<TFullSchema, TSchema>) => Promise<T>): Promise<T> {\n\t\tconst savepointName = `sp${this.nestedIndex + 1}`;\n\t\tconst tx = new AwsDataApiTransaction(this.dialect, this.session, this.schema, this.nestedIndex + 1);\n\t\tthis.session.execute(sql`savepoint ${savepointName}`);\n\t\ttry {\n\t\t\tconst result = transaction(tx);\n\t\t\tthis.session.execute(sql`release savepoint ${savepointName}`);\n\t\t\treturn result;\n\t\t} catch (e) {\n\t\t\tthis.session.execute(sql`rollback to savepoint ${savepointName}`);\n\t\t\tthrow e;\n\t\t}\n\t}\n}\n\nexport interface AwsDataApiPgQueryResultHKT extends QueryResultHKT {\n\ttype: ExecuteStatementCommandOutput;\n}\n"],"mappings":"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","names":["result"]}
|
|
@@ -12,13 +12,12 @@ export declare class AwsDataApiPreparedQuery<T extends PreparedQueryConfig> exte
|
|
|
12
12
|
private typings;
|
|
13
13
|
private options;
|
|
14
14
|
private fields;
|
|
15
|
-
private _isResponseInArrayMode;
|
|
16
15
|
private customResultMapper?;
|
|
17
16
|
static readonly [entityKind]: string;
|
|
18
17
|
private rawQuery;
|
|
19
18
|
constructor(client: AwsDataApiClient, queryString: string, params: unknown[], typings: QueryTypingsValue[], options: AwsDataApiSessionOptions, fields: SelectedFieldsOrdered | undefined,
|
|
20
19
|
/** @internal */
|
|
21
|
-
transactionId: string | undefined,
|
|
20
|
+
transactionId: string | undefined, customResultMapper?: ((rows: unknown[][]) => T['execute']) | undefined);
|
|
22
21
|
execute(placeholderValues?: Record<string, unknown> | undefined): Promise<T['execute']>;
|
|
23
22
|
all(placeholderValues?: Record<string, unknown> | undefined): Promise<T['all']>;
|
|
24
23
|
values(placeholderValues?: Record<string, unknown>): Promise<T['values']>;
|
|
@@ -38,7 +37,7 @@ export declare class AwsDataApiSession<TFullSchema extends Record<string, unknow
|
|
|
38
37
|
client: AwsDataApiClient, dialect: PgDialect, schema: RelationalSchemaConfig<TSchema> | undefined, options: AwsDataApiSessionOptions,
|
|
39
38
|
/** @internal */
|
|
40
39
|
transactionId: string | undefined);
|
|
41
|
-
prepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(query: QueryWithTypings, fields: SelectedFieldsOrdered | undefined, transactionId
|
|
40
|
+
prepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(query: QueryWithTypings, fields: SelectedFieldsOrdered | undefined, transactionId?: string, customResultMapper?: (rows: unknown[][]) => T['execute']): PgPreparedQuery<T>;
|
|
42
41
|
execute<T>(query: SQL): Promise<T>;
|
|
43
42
|
transaction<T>(transaction: (tx: AwsDataApiTransaction<TFullSchema, TSchema>) => Promise<T>, config?: PgTransactionConfig | undefined): Promise<T>;
|
|
44
43
|
}
|
|
@@ -12,13 +12,12 @@ export declare class AwsDataApiPreparedQuery<T extends PreparedQueryConfig> exte
|
|
|
12
12
|
private typings;
|
|
13
13
|
private options;
|
|
14
14
|
private fields;
|
|
15
|
-
private _isResponseInArrayMode;
|
|
16
15
|
private customResultMapper?;
|
|
17
16
|
static readonly [entityKind]: string;
|
|
18
17
|
private rawQuery;
|
|
19
18
|
constructor(client: AwsDataApiClient, queryString: string, params: unknown[], typings: QueryTypingsValue[], options: AwsDataApiSessionOptions, fields: SelectedFieldsOrdered | undefined,
|
|
20
19
|
/** @internal */
|
|
21
|
-
transactionId: string | undefined,
|
|
20
|
+
transactionId: string | undefined, customResultMapper?: ((rows: unknown[][]) => T['execute']) | undefined);
|
|
22
21
|
execute(placeholderValues?: Record<string, unknown> | undefined): Promise<T['execute']>;
|
|
23
22
|
all(placeholderValues?: Record<string, unknown> | undefined): Promise<T['all']>;
|
|
24
23
|
values(placeholderValues?: Record<string, unknown>): Promise<T['values']>;
|
|
@@ -38,7 +37,7 @@ export declare class AwsDataApiSession<TFullSchema extends Record<string, unknow
|
|
|
38
37
|
client: AwsDataApiClient, dialect: PgDialect, schema: RelationalSchemaConfig<TSchema> | undefined, options: AwsDataApiSessionOptions,
|
|
39
38
|
/** @internal */
|
|
40
39
|
transactionId: string | undefined);
|
|
41
|
-
prepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(query: QueryWithTypings, fields: SelectedFieldsOrdered | undefined, transactionId
|
|
40
|
+
prepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(query: QueryWithTypings, fields: SelectedFieldsOrdered | undefined, transactionId?: string, customResultMapper?: (rows: unknown[][]) => T['execute']): PgPreparedQuery<T>;
|
|
42
41
|
execute<T>(query: SQL): Promise<T>;
|
|
43
42
|
transaction<T>(transaction: (tx: AwsDataApiTransaction<TFullSchema, TSchema>) => Promise<T>, config?: PgTransactionConfig | undefined): Promise<T>;
|
|
44
43
|
}
|
|
@@ -14,7 +14,7 @@ import { fillPlaceholders, sql } from "../../sql/sql.js";
|
|
|
14
14
|
import { mapResultRow } from "../../utils.js";
|
|
15
15
|
import { getValueFromDataApi, toValueParam } from "../common/index.js";
|
|
16
16
|
class AwsDataApiPreparedQuery extends PgPreparedQuery {
|
|
17
|
-
constructor(client, queryString, params, typings, options, fields, transactionId,
|
|
17
|
+
constructor(client, queryString, params, typings, options, fields, transactionId, customResultMapper) {
|
|
18
18
|
super({ sql: queryString, params });
|
|
19
19
|
this.client = client;
|
|
20
20
|
this.params = params;
|
|
@@ -22,7 +22,6 @@ class AwsDataApiPreparedQuery extends PgPreparedQuery {
|
|
|
22
22
|
this.options = options;
|
|
23
23
|
this.fields = fields;
|
|
24
24
|
this.transactionId = transactionId;
|
|
25
|
-
this._isResponseInArrayMode = _isResponseInArrayMode;
|
|
26
25
|
this.customResultMapper = customResultMapper;
|
|
27
26
|
this.rawQuery = new ExecuteStatementCommand({
|
|
28
27
|
sql: queryString,
|
|
@@ -78,10 +77,6 @@ class AwsDataApiPreparedQuery extends PgPreparedQuery {
|
|
|
78
77
|
return row;
|
|
79
78
|
});
|
|
80
79
|
}
|
|
81
|
-
/** @internal */
|
|
82
|
-
isResponseInArrayMode() {
|
|
83
|
-
return this._isResponseInArrayMode;
|
|
84
|
-
}
|
|
85
80
|
}
|
|
86
81
|
class AwsDataApiSession extends PgSession {
|
|
87
82
|
constructor(client, dialect, schema, options, transactionId) {
|
|
@@ -99,7 +94,7 @@ class AwsDataApiSession extends PgSession {
|
|
|
99
94
|
static [entityKind] = "AwsDataApiSession";
|
|
100
95
|
/** @internal */
|
|
101
96
|
rawQuery;
|
|
102
|
-
prepareQuery(query, fields, transactionId,
|
|
97
|
+
prepareQuery(query, fields, transactionId, customResultMapper) {
|
|
103
98
|
return new AwsDataApiPreparedQuery(
|
|
104
99
|
this.client,
|
|
105
100
|
query.sql,
|
|
@@ -108,7 +103,6 @@ class AwsDataApiSession extends PgSession {
|
|
|
108
103
|
this.options,
|
|
109
104
|
fields,
|
|
110
105
|
transactionId,
|
|
111
|
-
isResponseInArrayMode,
|
|
112
106
|
customResultMapper
|
|
113
107
|
);
|
|
114
108
|
}
|
|
@@ -116,8 +110,7 @@ class AwsDataApiSession extends PgSession {
|
|
|
116
110
|
return this.prepareQuery(
|
|
117
111
|
this.dialect.sqlToQuery(query),
|
|
118
112
|
void 0,
|
|
119
|
-
this.transactionId
|
|
120
|
-
false
|
|
113
|
+
this.transactionId
|
|
121
114
|
).execute();
|
|
122
115
|
}
|
|
123
116
|
async transaction(transaction, config) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/aws-data-api/pg/session.ts"],"sourcesContent":["import type { ColumnMetadata, ExecuteStatementCommandOutput, Field, RDSDataClient } from '@aws-sdk/client-rds-data';\nimport {\n\tBeginTransactionCommand,\n\tCommitTransactionCommand,\n\tExecuteStatementCommand,\n\tRollbackTransactionCommand,\n} from '@aws-sdk/client-rds-data';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport {\n\ttype PgDialect,\n\tPgPreparedQuery,\n\tPgSession,\n\tPgTransaction,\n\ttype PgTransactionConfig,\n\ttype PreparedQueryConfig,\n\ttype QueryResultHKT,\n} from '~/pg-core/index.ts';\nimport type { SelectedFieldsOrdered } from '~/pg-core/query-builders/select.types.ts';\nimport type { RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport { fillPlaceholders, type QueryTypingsValue, type QueryWithTypings, type SQL, sql } from '~/sql/sql.ts';\nimport { mapResultRow } from '~/utils.ts';\nimport { getValueFromDataApi, toValueParam } from '../common/index.ts';\n\nexport type AwsDataApiClient = RDSDataClient;\n\nexport class AwsDataApiPreparedQuery<T extends PreparedQueryConfig> extends PgPreparedQuery<T> {\n\tstatic readonly [entityKind]: string = 'AwsDataApiPreparedQuery';\n\n\tprivate rawQuery: ExecuteStatementCommand;\n\n\tconstructor(\n\t\tprivate client: AwsDataApiClient,\n\t\tqueryString: string,\n\t\tprivate params: unknown[],\n\t\tprivate typings: QueryTypingsValue[],\n\t\tprivate options: AwsDataApiSessionOptions,\n\t\tprivate fields: SelectedFieldsOrdered | undefined,\n\t\t/** @internal */\n\t\treadonly transactionId: string | undefined,\n\t\tprivate _isResponseInArrayMode: boolean,\n\t\tprivate customResultMapper?: (rows: unknown[][]) => T['execute'],\n\t) {\n\t\tsuper({ sql: queryString, params });\n\t\tthis.rawQuery = new ExecuteStatementCommand({\n\t\t\tsql: queryString,\n\t\t\tparameters: [],\n\t\t\tsecretArn: options.secretArn,\n\t\t\tresourceArn: options.resourceArn,\n\t\t\tdatabase: options.database,\n\t\t\ttransactionId,\n\t\t\tincludeResultMetadata: !fields && !customResultMapper,\n\t\t});\n\t}\n\n\tasync execute(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['execute']> {\n\t\tconst { fields, joinsNotNullableMap, customResultMapper } = this;\n\n\t\tconst rows = await this.values(placeholderValues) as unknown[][];\n\t\tif (!fields && !customResultMapper) {\n\t\t\treturn rows as T['execute'];\n\t\t}\n\t\treturn customResultMapper\n\t\t\t? customResultMapper(rows)\n\t\t\t: rows.map((row) => mapResultRow<T['execute']>(fields!, row, joinsNotNullableMap));\n\t}\n\n\tall(placeholderValues?: Record<string, unknown> | undefined): Promise<T['all']> {\n\t\treturn this.execute(placeholderValues);\n\t}\n\n\tasync values(placeholderValues: Record<string, unknown> = {}): Promise<T['values']> {\n\t\tconst params = fillPlaceholders(this.params, placeholderValues ?? {});\n\n\t\tthis.rawQuery.input.parameters = params.map((param, index) => ({\n\t\t\tname: `${index + 1}`,\n\t\t\t...toValueParam(param, this.typings[index]),\n\t\t}));\n\n\t\tthis.options.logger?.logQuery(this.rawQuery.input.sql!, this.rawQuery.input.parameters);\n\n\t\tconst { fields, rawQuery, client, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst result = await client.send(rawQuery);\n\t\t\tif (result.columnMetadata && result.columnMetadata.length > 0) {\n\t\t\t\treturn this.mapResultRows(result.records ?? [], result.columnMetadata);\n\t\t\t}\n\t\t\treturn result.records ?? [];\n\t\t}\n\n\t\tconst result = await client.send(rawQuery);\n\n\t\treturn result.records?.map((row: any) => {\n\t\t\treturn row.map((field: Field) => getValueFromDataApi(field));\n\t\t});\n\t}\n\n\t/** @internal */\n\tmapResultRows(records: Field[][], columnMetadata: ColumnMetadata[]) {\n\t\treturn records.map((record) => {\n\t\t\tconst row: Record<string, unknown> = {};\n\t\t\tfor (const [index, field] of record.entries()) {\n\t\t\t\tconst { name } = columnMetadata[index]!;\n\t\t\t\trow[name ?? index] = getValueFromDataApi(field); // not what to default if name is undefined\n\t\t\t}\n\t\t\treturn row;\n\t\t});\n\t}\n\n\t/** @internal */\n\tisResponseInArrayMode(): boolean {\n\t\treturn this._isResponseInArrayMode;\n\t}\n}\n\nexport interface AwsDataApiSessionOptions {\n\tlogger?: Logger;\n\tdatabase: string;\n\tresourceArn: string;\n\tsecretArn: string;\n}\n\ninterface AwsDataApiQueryBase {\n\tresourceArn: string;\n\tsecretArn: string;\n\tdatabase: string;\n}\n\nexport class AwsDataApiSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends PgSession<AwsDataApiPgQueryResultHKT, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'AwsDataApiSession';\n\n\t/** @internal */\n\treadonly rawQuery: AwsDataApiQueryBase;\n\n\tconstructor(\n\t\t/** @internal */\n\t\treadonly client: AwsDataApiClient,\n\t\tdialect: PgDialect,\n\t\tprivate schema: RelationalSchemaConfig<TSchema> | undefined,\n\t\tprivate options: AwsDataApiSessionOptions,\n\t\t/** @internal */\n\t\treadonly transactionId: string | undefined,\n\t) {\n\t\tsuper(dialect);\n\t\tthis.rawQuery = {\n\t\t\tsecretArn: options.secretArn,\n\t\t\tresourceArn: options.resourceArn,\n\t\t\tdatabase: options.database,\n\t\t};\n\t}\n\n\tprepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(\n\t\tquery: QueryWithTypings,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\ttransactionId: string | undefined,\n\t\tisResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][]) => T['execute'],\n\t): PgPreparedQuery<T> {\n\t\treturn new AwsDataApiPreparedQuery(\n\t\t\tthis.client,\n\t\t\tquery.sql,\n\t\t\tquery.params,\n\t\t\tquery.typings ?? [],\n\t\t\tthis.options,\n\t\t\tfields,\n\t\t\ttransactionId,\n\t\t\tisResponseInArrayMode,\n\t\t\tcustomResultMapper,\n\t\t);\n\t}\n\n\toverride execute<T>(query: SQL): Promise<T> {\n\t\treturn this.prepareQuery<PreparedQueryConfig & { execute: T }>(\n\t\t\tthis.dialect.sqlToQuery(query),\n\t\t\tundefined,\n\t\t\tthis.transactionId,\n\t\t\tfalse,\n\t\t).execute();\n\t}\n\n\toverride async transaction<T>(\n\t\ttransaction: (tx: AwsDataApiTransaction<TFullSchema, TSchema>) => Promise<T>,\n\t\tconfig?: PgTransactionConfig | undefined,\n\t): Promise<T> {\n\t\tconst { transactionId } = await this.client.send(new BeginTransactionCommand(this.rawQuery));\n\t\tconst session = new AwsDataApiSession(this.client, this.dialect, this.schema, this.options, transactionId);\n\t\tconst tx = new AwsDataApiTransaction(this.dialect, session, this.schema);\n\t\tif (config) {\n\t\t\tawait tx.setTransaction(config);\n\t\t}\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait this.client.send(new CommitTransactionCommand({ ...this.rawQuery, transactionId }));\n\t\t\treturn result;\n\t\t} catch (e) {\n\t\t\tawait this.client.send(new RollbackTransactionCommand({ ...this.rawQuery, transactionId }));\n\t\t\tthrow e;\n\t\t}\n\t}\n}\n\nexport class AwsDataApiTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends PgTransaction<AwsDataApiPgQueryResultHKT, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'AwsDataApiTransaction';\n\n\toverride transaction<T>(transaction: (tx: AwsDataApiTransaction<TFullSchema, TSchema>) => Promise<T>): Promise<T> {\n\t\tconst savepointName = `sp${this.nestedIndex + 1}`;\n\t\tconst tx = new AwsDataApiTransaction(this.dialect, this.session, this.schema, this.nestedIndex + 1);\n\t\tthis.session.execute(sql`savepoint ${savepointName}`);\n\t\ttry {\n\t\t\tconst result = transaction(tx);\n\t\t\tthis.session.execute(sql`release savepoint ${savepointName}`);\n\t\t\treturn result;\n\t\t} catch (e) {\n\t\t\tthis.session.execute(sql`rollback to savepoint ${savepointName}`);\n\t\t\tthrow e;\n\t\t}\n\t}\n}\n\nexport interface AwsDataApiPgQueryResultHKT extends QueryResultHKT {\n\ttype: ExecuteStatementCommandOutput;\n}\n"],"mappings":"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","names":["result"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/aws-data-api/pg/session.ts"],"sourcesContent":["import type { ColumnMetadata, ExecuteStatementCommandOutput, Field, RDSDataClient } from '@aws-sdk/client-rds-data';\nimport {\n\tBeginTransactionCommand,\n\tCommitTransactionCommand,\n\tExecuteStatementCommand,\n\tRollbackTransactionCommand,\n} from '@aws-sdk/client-rds-data';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport {\n\ttype PgDialect,\n\tPgPreparedQuery,\n\tPgSession,\n\tPgTransaction,\n\ttype PgTransactionConfig,\n\ttype PreparedQueryConfig,\n\ttype QueryResultHKT,\n} from '~/pg-core/index.ts';\nimport type { SelectedFieldsOrdered } from '~/pg-core/query-builders/select.types.ts';\nimport type { RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport { fillPlaceholders, type QueryTypingsValue, type QueryWithTypings, type SQL, sql } from '~/sql/sql.ts';\nimport { mapResultRow } from '~/utils.ts';\nimport { getValueFromDataApi, toValueParam } from '../common/index.ts';\n\nexport type AwsDataApiClient = RDSDataClient;\n\nexport class AwsDataApiPreparedQuery<T extends PreparedQueryConfig> extends PgPreparedQuery<T> {\n\tstatic readonly [entityKind]: string = 'AwsDataApiPreparedQuery';\n\n\tprivate rawQuery: ExecuteStatementCommand;\n\n\tconstructor(\n\t\tprivate client: AwsDataApiClient,\n\t\tqueryString: string,\n\t\tprivate params: unknown[],\n\t\tprivate typings: QueryTypingsValue[],\n\t\tprivate options: AwsDataApiSessionOptions,\n\t\tprivate fields: SelectedFieldsOrdered | undefined,\n\t\t/** @internal */\n\t\treadonly transactionId: string | undefined,\n\t\tprivate customResultMapper?: (rows: unknown[][]) => T['execute'],\n\t) {\n\t\tsuper({ sql: queryString, params });\n\t\tthis.rawQuery = new ExecuteStatementCommand({\n\t\t\tsql: queryString,\n\t\t\tparameters: [],\n\t\t\tsecretArn: options.secretArn,\n\t\t\tresourceArn: options.resourceArn,\n\t\t\tdatabase: options.database,\n\t\t\ttransactionId,\n\t\t\tincludeResultMetadata: !fields && !customResultMapper,\n\t\t});\n\t}\n\n\tasync execute(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['execute']> {\n\t\tconst { fields, joinsNotNullableMap, customResultMapper } = this;\n\n\t\tconst rows = await this.values(placeholderValues) as unknown[][];\n\t\tif (!fields && !customResultMapper) {\n\t\t\treturn rows as T['execute'];\n\t\t}\n\t\treturn customResultMapper\n\t\t\t? customResultMapper(rows)\n\t\t\t: rows.map((row) => mapResultRow<T['execute']>(fields!, row, joinsNotNullableMap));\n\t}\n\n\tall(placeholderValues?: Record<string, unknown> | undefined): Promise<T['all']> {\n\t\treturn this.execute(placeholderValues);\n\t}\n\n\tasync values(placeholderValues: Record<string, unknown> = {}): Promise<T['values']> {\n\t\tconst params = fillPlaceholders(this.params, placeholderValues ?? {});\n\n\t\tthis.rawQuery.input.parameters = params.map((param, index) => ({\n\t\t\tname: `${index + 1}`,\n\t\t\t...toValueParam(param, this.typings[index]),\n\t\t}));\n\n\t\tthis.options.logger?.logQuery(this.rawQuery.input.sql!, this.rawQuery.input.parameters);\n\n\t\tconst { fields, rawQuery, client, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst result = await client.send(rawQuery);\n\t\t\tif (result.columnMetadata && result.columnMetadata.length > 0) {\n\t\t\t\treturn this.mapResultRows(result.records ?? [], result.columnMetadata);\n\t\t\t}\n\t\t\treturn result.records ?? [];\n\t\t}\n\n\t\tconst result = await client.send(rawQuery);\n\n\t\treturn result.records?.map((row: any) => {\n\t\t\treturn row.map((field: Field) => getValueFromDataApi(field));\n\t\t});\n\t}\n\n\t/** @internal */\n\tmapResultRows(records: Field[][], columnMetadata: ColumnMetadata[]) {\n\t\treturn records.map((record) => {\n\t\t\tconst row: Record<string, unknown> = {};\n\t\t\tfor (const [index, field] of record.entries()) {\n\t\t\t\tconst { name } = columnMetadata[index]!;\n\t\t\t\trow[name ?? index] = getValueFromDataApi(field); // not what to default if name is undefined\n\t\t\t}\n\t\t\treturn row;\n\t\t});\n\t}\n}\n\nexport interface AwsDataApiSessionOptions {\n\tlogger?: Logger;\n\tdatabase: string;\n\tresourceArn: string;\n\tsecretArn: string;\n}\n\ninterface AwsDataApiQueryBase {\n\tresourceArn: string;\n\tsecretArn: string;\n\tdatabase: string;\n}\n\nexport class AwsDataApiSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends PgSession<AwsDataApiPgQueryResultHKT, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'AwsDataApiSession';\n\n\t/** @internal */\n\treadonly rawQuery: AwsDataApiQueryBase;\n\n\tconstructor(\n\t\t/** @internal */\n\t\treadonly client: AwsDataApiClient,\n\t\tdialect: PgDialect,\n\t\tprivate schema: RelationalSchemaConfig<TSchema> | undefined,\n\t\tprivate options: AwsDataApiSessionOptions,\n\t\t/** @internal */\n\t\treadonly transactionId: string | undefined,\n\t) {\n\t\tsuper(dialect);\n\t\tthis.rawQuery = {\n\t\t\tsecretArn: options.secretArn,\n\t\t\tresourceArn: options.resourceArn,\n\t\t\tdatabase: options.database,\n\t\t};\n\t}\n\n\tprepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(\n\t\tquery: QueryWithTypings,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\ttransactionId?: string,\n\t\tcustomResultMapper?: (rows: unknown[][]) => T['execute'],\n\t): PgPreparedQuery<T> {\n\t\treturn new AwsDataApiPreparedQuery(\n\t\t\tthis.client,\n\t\t\tquery.sql,\n\t\t\tquery.params,\n\t\t\tquery.typings ?? [],\n\t\t\tthis.options,\n\t\t\tfields,\n\t\t\ttransactionId,\n\t\t\tcustomResultMapper,\n\t\t);\n\t}\n\n\toverride execute<T>(query: SQL): Promise<T> {\n\t\treturn this.prepareQuery<PreparedQueryConfig & { execute: T }>(\n\t\t\tthis.dialect.sqlToQuery(query),\n\t\t\tundefined,\n\t\t\tthis.transactionId,\n\t\t).execute();\n\t}\n\n\toverride async transaction<T>(\n\t\ttransaction: (tx: AwsDataApiTransaction<TFullSchema, TSchema>) => Promise<T>,\n\t\tconfig?: PgTransactionConfig | undefined,\n\t): Promise<T> {\n\t\tconst { transactionId } = await this.client.send(new BeginTransactionCommand(this.rawQuery));\n\t\tconst session = new AwsDataApiSession(this.client, this.dialect, this.schema, this.options, transactionId);\n\t\tconst tx = new AwsDataApiTransaction(this.dialect, session, this.schema);\n\t\tif (config) {\n\t\t\tawait tx.setTransaction(config);\n\t\t}\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait this.client.send(new CommitTransactionCommand({ ...this.rawQuery, transactionId }));\n\t\t\treturn result;\n\t\t} catch (e) {\n\t\t\tawait this.client.send(new RollbackTransactionCommand({ ...this.rawQuery, transactionId }));\n\t\t\tthrow e;\n\t\t}\n\t}\n}\n\nexport class AwsDataApiTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends PgTransaction<AwsDataApiPgQueryResultHKT, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'AwsDataApiTransaction';\n\n\toverride transaction<T>(transaction: (tx: AwsDataApiTransaction<TFullSchema, TSchema>) => Promise<T>): Promise<T> {\n\t\tconst savepointName = `sp${this.nestedIndex + 1}`;\n\t\tconst tx = new AwsDataApiTransaction(this.dialect, this.session, this.schema, this.nestedIndex + 1);\n\t\tthis.session.execute(sql`savepoint ${savepointName}`);\n\t\ttry {\n\t\t\tconst result = transaction(tx);\n\t\t\tthis.session.execute(sql`release savepoint ${savepointName}`);\n\t\t\treturn result;\n\t\t} catch (e) {\n\t\t\tthis.session.execute(sql`rollback to savepoint ${savepointName}`);\n\t\t\tthrow e;\n\t\t}\n\t}\n}\n\nexport interface AwsDataApiPgQueryResultHKT extends QueryResultHKT {\n\ttype: ExecuteStatementCommandOutput;\n}\n"],"mappings":"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","names":["result"]}
|
|
@@ -38,17 +38,9 @@ class BetterSQLiteSession extends import_session.SQLiteSession {
|
|
|
38
38
|
}
|
|
39
39
|
static [import_entity.entityKind] = "BetterSQLiteSession";
|
|
40
40
|
logger;
|
|
41
|
-
prepareQuery(query, fields, executeMethod,
|
|
41
|
+
prepareQuery(query, fields, executeMethod, customResultMapper) {
|
|
42
42
|
const stmt = this.client.prepare(query.sql);
|
|
43
|
-
return new PreparedQuery(
|
|
44
|
-
stmt,
|
|
45
|
-
query,
|
|
46
|
-
this.logger,
|
|
47
|
-
fields,
|
|
48
|
-
executeMethod,
|
|
49
|
-
isResponseInArrayMode,
|
|
50
|
-
customResultMapper
|
|
51
|
-
);
|
|
43
|
+
return new PreparedQuery(stmt, query, this.logger, fields, executeMethod, customResultMapper);
|
|
52
44
|
}
|
|
53
45
|
transaction(transaction, config = {}) {
|
|
54
46
|
const tx = new BetterSQLiteTransaction("sync", this.dialect, this, this.schema);
|
|
@@ -73,12 +65,11 @@ class BetterSQLiteTransaction extends import_sqlite_core.SQLiteTransaction {
|
|
|
73
65
|
}
|
|
74
66
|
}
|
|
75
67
|
class PreparedQuery extends import_session.SQLitePreparedQuery {
|
|
76
|
-
constructor(stmt, query, logger, fields, executeMethod,
|
|
68
|
+
constructor(stmt, query, logger, fields, executeMethod, customResultMapper) {
|
|
77
69
|
super("sync", executeMethod, query);
|
|
78
70
|
this.stmt = stmt;
|
|
79
71
|
this.logger = logger;
|
|
80
72
|
this.fields = fields;
|
|
81
|
-
this._isResponseInArrayMode = _isResponseInArrayMode;
|
|
82
73
|
this.customResultMapper = customResultMapper;
|
|
83
74
|
}
|
|
84
75
|
static [import_entity.entityKind] = "BetterSQLitePreparedQuery";
|
|
@@ -121,10 +112,6 @@ class PreparedQuery extends import_session.SQLitePreparedQuery {
|
|
|
121
112
|
this.logger.logQuery(this.query.sql, params);
|
|
122
113
|
return this.stmt.raw().all(...params);
|
|
123
114
|
}
|
|
124
|
-
/** @internal */
|
|
125
|
-
isResponseInArrayMode() {
|
|
126
|
-
return this._isResponseInArrayMode;
|
|
127
|
-
}
|
|
128
115
|
}
|
|
129
116
|
// Annotate the CommonJS export names for ESM import in node:
|
|
130
117
|
0 && (module.exports = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/better-sqlite3/session.ts"],"sourcesContent":["import type { Database, RunResult, Statement } from 'better-sqlite3';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { RelationalSchemaConfig, 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 {\n\ttype PreparedQueryConfig as PreparedQueryConfigBase,\n\ttype SQLiteExecuteMethod,\n\tSQLitePreparedQuery as PreparedQueryBase,\n\tSQLiteSession,\n\ttype SQLiteTransactionConfig,\n} from '~/sqlite-core/session.ts';\nimport { mapResultRow } from '~/utils.ts';\n\nexport interface BetterSQLiteSessionOptions {\n\tlogger?: Logger;\n}\n\ntype PreparedQueryConfig = Omit<PreparedQueryConfigBase, 'statement' | 'run'>;\n\nexport class BetterSQLiteSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends SQLiteSession<'sync', RunResult, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'BetterSQLiteSession';\n\n\tprivate logger: Logger;\n\n\tconstructor(\n\t\tprivate client: Database,\n\t\tdialect: SQLiteSyncDialect,\n\t\tprivate schema: RelationalSchemaConfig<TSchema> | undefined,\n\t\toptions: BetterSQLiteSessionOptions = {},\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\
|
|
1
|
+
{"version":3,"sources":["../../src/better-sqlite3/session.ts"],"sourcesContent":["import type { Database, RunResult, Statement } from 'better-sqlite3';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { RelationalSchemaConfig, 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 {\n\ttype PreparedQueryConfig as PreparedQueryConfigBase,\n\ttype SQLiteExecuteMethod,\n\tSQLitePreparedQuery as PreparedQueryBase,\n\tSQLiteSession,\n\ttype SQLiteTransactionConfig,\n} from '~/sqlite-core/session.ts';\nimport { mapResultRow } from '~/utils.ts';\n\nexport interface BetterSQLiteSessionOptions {\n\tlogger?: Logger;\n}\n\ntype PreparedQueryConfig = Omit<PreparedQueryConfigBase, 'statement' | 'run'>;\n\nexport class BetterSQLiteSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends SQLiteSession<'sync', RunResult, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'BetterSQLiteSession';\n\n\tprivate logger: Logger;\n\n\tconstructor(\n\t\tprivate client: Database,\n\t\tdialect: SQLiteSyncDialect,\n\t\tprivate schema: RelationalSchemaConfig<TSchema> | undefined,\n\t\toptions: BetterSQLiteSessionOptions = {},\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\tcustomResultMapper?: (rows: unknown[][]) => unknown,\n\t): PreparedQuery<T> {\n\t\tconst stmt = this.client.prepare(query.sql);\n\t\treturn new PreparedQuery(stmt, query, this.logger, fields, executeMethod, customResultMapper);\n\t}\n\n\toverride transaction<T>(\n\t\ttransaction: (tx: BetterSQLiteTransaction<TFullSchema, TSchema>) => T,\n\t\tconfig: SQLiteTransactionConfig = {},\n\t): T {\n\t\tconst tx = new BetterSQLiteTransaction('sync', this.dialect, this, this.schema);\n\t\tconst nativeTx = this.client.transaction(transaction);\n\t\treturn nativeTx[config.behavior ?? 'deferred'](tx);\n\t}\n}\n\nexport class BetterSQLiteTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends SQLiteTransaction<'sync', RunResult, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'BetterSQLiteTransaction';\n\n\toverride transaction<T>(transaction: (tx: BetterSQLiteTransaction<TFullSchema, TSchema>) => T): T {\n\t\tconst savepointName = `sp${this.nestedIndex}`;\n\t\tconst tx = new BetterSQLiteTransaction('sync', this.dialect, this.session, this.schema, this.nestedIndex + 1);\n\t\tthis.session.run(sql.raw(`savepoint ${savepointName}`));\n\t\ttry {\n\t\t\tconst result = transaction(tx);\n\t\t\tthis.session.run(sql.raw(`release savepoint ${savepointName}`));\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tthis.session.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> extends PreparedQueryBase<\n\t{ type: 'sync'; run: RunResult; all: T['all']; get: T['get']; values: T['values']; execute: T['execute'] }\n> {\n\tstatic readonly [entityKind]: string = 'BetterSQLitePreparedQuery';\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 customResultMapper?: (rows: unknown[][]) => unknown,\n\t) {\n\t\tsuper('sync', executeMethod, query);\n\t}\n\n\trun(placeholderValues?: Record<string, unknown>): RunResult {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\treturn this.stmt.run(...params);\n\t}\n\n\tall(placeholderValues?: Record<string, unknown>): T['all'] {\n\t\tconst { fields, joinsNotNullableMap, query, logger, stmt, 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\treturn stmt.all(...params);\n\t\t}\n\n\t\tconst rows = this.values(placeholderValues) as unknown[][];\n\t\tif (customResultMapper) {\n\t\t\treturn customResultMapper(rows) as T['all'];\n\t\t}\n\t\treturn rows.map((row) => mapResultRow(fields!, row, joinsNotNullableMap));\n\t}\n\n\tget(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 { fields, stmt, joinsNotNullableMap, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\treturn stmt.get(...params);\n\t\t}\n\n\t\tconst row = stmt.raw().get(...params) as unknown[];\n\n\t\tif (!row) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (customResultMapper) {\n\t\t\treturn customResultMapper([row]) as T['get'];\n\t\t}\n\n\t\treturn mapResultRow(fields!, row, joinsNotNullableMap);\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\treturn this.stmt.raw().all(...params) as T['values'];\n\t}\n}\n"],"mappings":"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","names":["PreparedQueryBase"]}
|
|
@@ -17,7 +17,7 @@ export declare class BetterSQLiteSession<TFullSchema extends Record<string, unkn
|
|
|
17
17
|
static readonly [entityKind]: string;
|
|
18
18
|
private logger;
|
|
19
19
|
constructor(client: Database, dialect: SQLiteSyncDialect, schema: RelationalSchemaConfig<TSchema> | undefined, options?: BetterSQLiteSessionOptions);
|
|
20
|
-
prepareQuery<T extends Omit<PreparedQueryConfig, 'run'>>(query: Query, fields: SelectedFieldsOrdered | undefined, executeMethod: SQLiteExecuteMethod,
|
|
20
|
+
prepareQuery<T extends Omit<PreparedQueryConfig, 'run'>>(query: Query, fields: SelectedFieldsOrdered | undefined, executeMethod: SQLiteExecuteMethod, customResultMapper?: (rows: unknown[][]) => unknown): PreparedQuery<T>;
|
|
21
21
|
transaction<T>(transaction: (tx: BetterSQLiteTransaction<TFullSchema, TSchema>) => T, config?: SQLiteTransactionConfig): T;
|
|
22
22
|
}
|
|
23
23
|
export declare class BetterSQLiteTransaction<TFullSchema extends Record<string, unknown>, TSchema extends TablesRelationalConfig> extends SQLiteTransaction<'sync', RunResult, TFullSchema, TSchema> {
|
|
@@ -35,10 +35,9 @@ export declare class PreparedQuery<T extends PreparedQueryConfig = PreparedQuery
|
|
|
35
35
|
private stmt;
|
|
36
36
|
private logger;
|
|
37
37
|
private fields;
|
|
38
|
-
private _isResponseInArrayMode;
|
|
39
38
|
private customResultMapper?;
|
|
40
39
|
static readonly [entityKind]: string;
|
|
41
|
-
constructor(stmt: Statement, query: Query, logger: Logger, fields: SelectedFieldsOrdered | undefined, executeMethod: SQLiteExecuteMethod,
|
|
40
|
+
constructor(stmt: Statement, query: Query, logger: Logger, fields: SelectedFieldsOrdered | undefined, executeMethod: SQLiteExecuteMethod, customResultMapper?: ((rows: unknown[][]) => unknown) | undefined);
|
|
42
41
|
run(placeholderValues?: Record<string, unknown>): RunResult;
|
|
43
42
|
all(placeholderValues?: Record<string, unknown>): T['all'];
|
|
44
43
|
get(placeholderValues?: Record<string, unknown>): T['get'];
|
|
@@ -17,7 +17,7 @@ export declare class BetterSQLiteSession<TFullSchema extends Record<string, unkn
|
|
|
17
17
|
static readonly [entityKind]: string;
|
|
18
18
|
private logger;
|
|
19
19
|
constructor(client: Database, dialect: SQLiteSyncDialect, schema: RelationalSchemaConfig<TSchema> | undefined, options?: BetterSQLiteSessionOptions);
|
|
20
|
-
prepareQuery<T extends Omit<PreparedQueryConfig, 'run'>>(query: Query, fields: SelectedFieldsOrdered | undefined, executeMethod: SQLiteExecuteMethod,
|
|
20
|
+
prepareQuery<T extends Omit<PreparedQueryConfig, 'run'>>(query: Query, fields: SelectedFieldsOrdered | undefined, executeMethod: SQLiteExecuteMethod, customResultMapper?: (rows: unknown[][]) => unknown): PreparedQuery<T>;
|
|
21
21
|
transaction<T>(transaction: (tx: BetterSQLiteTransaction<TFullSchema, TSchema>) => T, config?: SQLiteTransactionConfig): T;
|
|
22
22
|
}
|
|
23
23
|
export declare class BetterSQLiteTransaction<TFullSchema extends Record<string, unknown>, TSchema extends TablesRelationalConfig> extends SQLiteTransaction<'sync', RunResult, TFullSchema, TSchema> {
|
|
@@ -35,10 +35,9 @@ export declare class PreparedQuery<T extends PreparedQueryConfig = PreparedQuery
|
|
|
35
35
|
private stmt;
|
|
36
36
|
private logger;
|
|
37
37
|
private fields;
|
|
38
|
-
private _isResponseInArrayMode;
|
|
39
38
|
private customResultMapper?;
|
|
40
39
|
static readonly [entityKind]: string;
|
|
41
|
-
constructor(stmt: Statement, query: Query, logger: Logger, fields: SelectedFieldsOrdered | undefined, executeMethod: SQLiteExecuteMethod,
|
|
40
|
+
constructor(stmt: Statement, query: Query, logger: Logger, fields: SelectedFieldsOrdered | undefined, executeMethod: SQLiteExecuteMethod, customResultMapper?: ((rows: unknown[][]) => unknown) | undefined);
|
|
42
41
|
run(placeholderValues?: Record<string, unknown>): RunResult;
|
|
43
42
|
all(placeholderValues?: Record<string, unknown>): T['all'];
|
|
44
43
|
get(placeholderValues?: Record<string, unknown>): T['get'];
|
|
@@ -16,17 +16,9 @@ class BetterSQLiteSession extends SQLiteSession {
|
|
|
16
16
|
}
|
|
17
17
|
static [entityKind] = "BetterSQLiteSession";
|
|
18
18
|
logger;
|
|
19
|
-
prepareQuery(query, fields, executeMethod,
|
|
19
|
+
prepareQuery(query, fields, executeMethod, customResultMapper) {
|
|
20
20
|
const stmt = this.client.prepare(query.sql);
|
|
21
|
-
return new PreparedQuery(
|
|
22
|
-
stmt,
|
|
23
|
-
query,
|
|
24
|
-
this.logger,
|
|
25
|
-
fields,
|
|
26
|
-
executeMethod,
|
|
27
|
-
isResponseInArrayMode,
|
|
28
|
-
customResultMapper
|
|
29
|
-
);
|
|
21
|
+
return new PreparedQuery(stmt, query, this.logger, fields, executeMethod, customResultMapper);
|
|
30
22
|
}
|
|
31
23
|
transaction(transaction, config = {}) {
|
|
32
24
|
const tx = new BetterSQLiteTransaction("sync", this.dialect, this, this.schema);
|
|
@@ -51,12 +43,11 @@ class BetterSQLiteTransaction extends SQLiteTransaction {
|
|
|
51
43
|
}
|
|
52
44
|
}
|
|
53
45
|
class PreparedQuery extends PreparedQueryBase {
|
|
54
|
-
constructor(stmt, query, logger, fields, executeMethod,
|
|
46
|
+
constructor(stmt, query, logger, fields, executeMethod, customResultMapper) {
|
|
55
47
|
super("sync", executeMethod, query);
|
|
56
48
|
this.stmt = stmt;
|
|
57
49
|
this.logger = logger;
|
|
58
50
|
this.fields = fields;
|
|
59
|
-
this._isResponseInArrayMode = _isResponseInArrayMode;
|
|
60
51
|
this.customResultMapper = customResultMapper;
|
|
61
52
|
}
|
|
62
53
|
static [entityKind] = "BetterSQLitePreparedQuery";
|
|
@@ -99,10 +90,6 @@ class PreparedQuery extends PreparedQueryBase {
|
|
|
99
90
|
this.logger.logQuery(this.query.sql, params);
|
|
100
91
|
return this.stmt.raw().all(...params);
|
|
101
92
|
}
|
|
102
|
-
/** @internal */
|
|
103
|
-
isResponseInArrayMode() {
|
|
104
|
-
return this._isResponseInArrayMode;
|
|
105
|
-
}
|
|
106
93
|
}
|
|
107
94
|
export {
|
|
108
95
|
BetterSQLiteSession,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/better-sqlite3/session.ts"],"sourcesContent":["import type { Database, RunResult, Statement } from 'better-sqlite3';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { RelationalSchemaConfig, 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 {\n\ttype PreparedQueryConfig as PreparedQueryConfigBase,\n\ttype SQLiteExecuteMethod,\n\tSQLitePreparedQuery as PreparedQueryBase,\n\tSQLiteSession,\n\ttype SQLiteTransactionConfig,\n} from '~/sqlite-core/session.ts';\nimport { mapResultRow } from '~/utils.ts';\n\nexport interface BetterSQLiteSessionOptions {\n\tlogger?: Logger;\n}\n\ntype PreparedQueryConfig = Omit<PreparedQueryConfigBase, 'statement' | 'run'>;\n\nexport class BetterSQLiteSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends SQLiteSession<'sync', RunResult, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'BetterSQLiteSession';\n\n\tprivate logger: Logger;\n\n\tconstructor(\n\t\tprivate client: Database,\n\t\tdialect: SQLiteSyncDialect,\n\t\tprivate schema: RelationalSchemaConfig<TSchema> | undefined,\n\t\toptions: BetterSQLiteSessionOptions = {},\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\
|
|
1
|
+
{"version":3,"sources":["../../src/better-sqlite3/session.ts"],"sourcesContent":["import type { Database, RunResult, Statement } from 'better-sqlite3';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { RelationalSchemaConfig, 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 {\n\ttype PreparedQueryConfig as PreparedQueryConfigBase,\n\ttype SQLiteExecuteMethod,\n\tSQLitePreparedQuery as PreparedQueryBase,\n\tSQLiteSession,\n\ttype SQLiteTransactionConfig,\n} from '~/sqlite-core/session.ts';\nimport { mapResultRow } from '~/utils.ts';\n\nexport interface BetterSQLiteSessionOptions {\n\tlogger?: Logger;\n}\n\ntype PreparedQueryConfig = Omit<PreparedQueryConfigBase, 'statement' | 'run'>;\n\nexport class BetterSQLiteSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends SQLiteSession<'sync', RunResult, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'BetterSQLiteSession';\n\n\tprivate logger: Logger;\n\n\tconstructor(\n\t\tprivate client: Database,\n\t\tdialect: SQLiteSyncDialect,\n\t\tprivate schema: RelationalSchemaConfig<TSchema> | undefined,\n\t\toptions: BetterSQLiteSessionOptions = {},\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\tcustomResultMapper?: (rows: unknown[][]) => unknown,\n\t): PreparedQuery<T> {\n\t\tconst stmt = this.client.prepare(query.sql);\n\t\treturn new PreparedQuery(stmt, query, this.logger, fields, executeMethod, customResultMapper);\n\t}\n\n\toverride transaction<T>(\n\t\ttransaction: (tx: BetterSQLiteTransaction<TFullSchema, TSchema>) => T,\n\t\tconfig: SQLiteTransactionConfig = {},\n\t): T {\n\t\tconst tx = new BetterSQLiteTransaction('sync', this.dialect, this, this.schema);\n\t\tconst nativeTx = this.client.transaction(transaction);\n\t\treturn nativeTx[config.behavior ?? 'deferred'](tx);\n\t}\n}\n\nexport class BetterSQLiteTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends SQLiteTransaction<'sync', RunResult, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'BetterSQLiteTransaction';\n\n\toverride transaction<T>(transaction: (tx: BetterSQLiteTransaction<TFullSchema, TSchema>) => T): T {\n\t\tconst savepointName = `sp${this.nestedIndex}`;\n\t\tconst tx = new BetterSQLiteTransaction('sync', this.dialect, this.session, this.schema, this.nestedIndex + 1);\n\t\tthis.session.run(sql.raw(`savepoint ${savepointName}`));\n\t\ttry {\n\t\t\tconst result = transaction(tx);\n\t\t\tthis.session.run(sql.raw(`release savepoint ${savepointName}`));\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tthis.session.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> extends PreparedQueryBase<\n\t{ type: 'sync'; run: RunResult; all: T['all']; get: T['get']; values: T['values']; execute: T['execute'] }\n> {\n\tstatic readonly [entityKind]: string = 'BetterSQLitePreparedQuery';\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 customResultMapper?: (rows: unknown[][]) => unknown,\n\t) {\n\t\tsuper('sync', executeMethod, query);\n\t}\n\n\trun(placeholderValues?: Record<string, unknown>): RunResult {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\treturn this.stmt.run(...params);\n\t}\n\n\tall(placeholderValues?: Record<string, unknown>): T['all'] {\n\t\tconst { fields, joinsNotNullableMap, query, logger, stmt, 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\treturn stmt.all(...params);\n\t\t}\n\n\t\tconst rows = this.values(placeholderValues) as unknown[][];\n\t\tif (customResultMapper) {\n\t\t\treturn customResultMapper(rows) as T['all'];\n\t\t}\n\t\treturn rows.map((row) => mapResultRow(fields!, row, joinsNotNullableMap));\n\t}\n\n\tget(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 { fields, stmt, joinsNotNullableMap, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\treturn stmt.get(...params);\n\t\t}\n\n\t\tconst row = stmt.raw().get(...params) as unknown[];\n\n\t\tif (!row) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (customResultMapper) {\n\t\t\treturn customResultMapper([row]) as T['get'];\n\t\t}\n\n\t\treturn mapResultRow(fields!, row, joinsNotNullableMap);\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\treturn this.stmt.raw().all(...params) as T['values'];\n\t}\n}\n"],"mappings":"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","names":[]}
|
package/bun-sqlite/session.cjs
CHANGED
|
@@ -41,17 +41,9 @@ class SQLiteBunSession extends import_session.SQLiteSession {
|
|
|
41
41
|
exec(query) {
|
|
42
42
|
this.client.exec(query);
|
|
43
43
|
}
|
|
44
|
-
prepareQuery(query, fields, executeMethod,
|
|
44
|
+
prepareQuery(query, fields, executeMethod, customResultMapper) {
|
|
45
45
|
const stmt = this.client.prepare(query.sql);
|
|
46
|
-
return new PreparedQuery(
|
|
47
|
-
stmt,
|
|
48
|
-
query,
|
|
49
|
-
this.logger,
|
|
50
|
-
fields,
|
|
51
|
-
executeMethod,
|
|
52
|
-
isResponseInArrayMode,
|
|
53
|
-
customResultMapper
|
|
54
|
-
);
|
|
46
|
+
return new PreparedQuery(stmt, query, this.logger, fields, executeMethod, customResultMapper);
|
|
55
47
|
}
|
|
56
48
|
transaction(transaction, config = {}) {
|
|
57
49
|
const tx = new SQLiteBunTransaction("sync", this.dialect, this, this.schema);
|
|
@@ -80,12 +72,11 @@ class SQLiteBunTransaction extends import_sqlite_core.SQLiteTransaction {
|
|
|
80
72
|
}
|
|
81
73
|
}
|
|
82
74
|
class PreparedQuery extends import_session.SQLitePreparedQuery {
|
|
83
|
-
constructor(stmt, query, logger, fields, executeMethod,
|
|
75
|
+
constructor(stmt, query, logger, fields, executeMethod, customResultMapper) {
|
|
84
76
|
super("sync", executeMethod, query);
|
|
85
77
|
this.stmt = stmt;
|
|
86
78
|
this.logger = logger;
|
|
87
79
|
this.fields = fields;
|
|
88
|
-
this._isResponseInArrayMode = _isResponseInArrayMode;
|
|
89
80
|
this.customResultMapper = customResultMapper;
|
|
90
81
|
}
|
|
91
82
|
static [import_entity.entityKind] = "SQLiteBunPreparedQuery";
|
|
@@ -128,10 +119,6 @@ class PreparedQuery extends import_session.SQLitePreparedQuery {
|
|
|
128
119
|
this.logger.logQuery(this.query.sql, params);
|
|
129
120
|
return this.stmt.values(...params);
|
|
130
121
|
}
|
|
131
|
-
/** @internal */
|
|
132
|
-
isResponseInArrayMode() {
|
|
133
|
-
return this._isResponseInArrayMode;
|
|
134
|
-
}
|
|
135
122
|
}
|
|
136
123
|
// Annotate the CommonJS export names for ESM import in node:
|
|
137
124
|
0 && (module.exports = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/bun-sqlite/session.ts"],"sourcesContent":["/// <reference types=\"bun-types\" />\n\nimport type { Database, Statement as BunStatement } from 'bun:sqlite';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { RelationalSchemaConfig, 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 SQLiteBunSessionOptions {\n\tlogger?: Logger;\n}\n\ntype PreparedQueryConfig = Omit<PreparedQueryConfigBase, 'statement' | 'run'>;\ntype Statement = BunStatement<any>;\n\nexport class SQLiteBunSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends SQLiteSession<'sync', void, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'SQLiteBunSession';\n\n\tprivate logger: Logger;\n\n\tconstructor(\n\t\tprivate client: Database,\n\t\tdialect: SQLiteSyncDialect,\n\t\tprivate schema: RelationalSchemaConfig<TSchema> | undefined,\n\t\toptions: SQLiteBunSessionOptions = {},\n\t) {\n\t\tsuper(dialect);\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t}\n\n\texec(query: string): void {\n\t\tthis.client.exec(query);\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\
|
|
1
|
+
{"version":3,"sources":["../../src/bun-sqlite/session.ts"],"sourcesContent":["/// <reference types=\"bun-types\" />\n\nimport type { Database, Statement as BunStatement } from 'bun:sqlite';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { RelationalSchemaConfig, 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 SQLiteBunSessionOptions {\n\tlogger?: Logger;\n}\n\ntype PreparedQueryConfig = Omit<PreparedQueryConfigBase, 'statement' | 'run'>;\ntype Statement = BunStatement<any>;\n\nexport class SQLiteBunSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends SQLiteSession<'sync', void, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'SQLiteBunSession';\n\n\tprivate logger: Logger;\n\n\tconstructor(\n\t\tprivate client: Database,\n\t\tdialect: SQLiteSyncDialect,\n\t\tprivate schema: RelationalSchemaConfig<TSchema> | undefined,\n\t\toptions: SQLiteBunSessionOptions = {},\n\t) {\n\t\tsuper(dialect);\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t}\n\n\texec(query: string): void {\n\t\tthis.client.exec(query);\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\tcustomResultMapper?: (rows: unknown[][]) => unknown,\n\t): PreparedQuery<T> {\n\t\tconst stmt = this.client.prepare(query.sql);\n\t\treturn new PreparedQuery(stmt, query, this.logger, fields, executeMethod, customResultMapper);\n\t}\n\n\toverride transaction<T>(\n\t\ttransaction: (tx: SQLiteBunTransaction<TFullSchema, TSchema>) => T,\n\t\tconfig: SQLiteTransactionConfig = {},\n\t): T {\n\t\tconst tx = new SQLiteBunTransaction('sync', this.dialect, this, this.schema);\n\t\tlet result: T | undefined;\n\t\tconst nativeTx = this.client.transaction(() => {\n\t\t\tresult = transaction(tx);\n\t\t});\n\t\tnativeTx[config.behavior ?? 'deferred']();\n\t\treturn result!;\n\t}\n}\n\nexport class SQLiteBunTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends SQLiteTransaction<'sync', void, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'SQLiteBunTransaction';\n\n\toverride transaction<T>(transaction: (tx: SQLiteBunTransaction<TFullSchema, TSchema>) => T): T {\n\t\tconst savepointName = `sp${this.nestedIndex}`;\n\t\tconst tx = new SQLiteBunTransaction('sync', this.dialect, this.session, this.schema, this.nestedIndex + 1);\n\t\tthis.session.run(sql.raw(`savepoint ${savepointName}`));\n\t\ttry {\n\t\t\tconst result = transaction(tx);\n\t\t\tthis.session.run(sql.raw(`release savepoint ${savepointName}`));\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tthis.session.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> extends PreparedQueryBase<\n\t{ type: 'sync'; run: void; all: T['all']; get: T['get']; values: T['values']; execute: T['execute'] }\n> {\n\tstatic readonly [entityKind]: string = 'SQLiteBunPreparedQuery';\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 customResultMapper?: (rows: unknown[][]) => unknown,\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\treturn this.stmt.run(...params);\n\t}\n\n\tall(placeholderValues?: Record<string, unknown>): T['all'] {\n\t\tconst { fields, query, logger, joinsNotNullableMap, stmt, 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\treturn stmt.all(...params);\n\t\t}\n\n\t\tconst rows = this.values(placeholderValues) as unknown[][];\n\n\t\tif (customResultMapper) {\n\t\t\treturn customResultMapper(rows) as T['all'];\n\t\t}\n\n\t\treturn rows.map((row) => mapResultRow(fields!, row, joinsNotNullableMap));\n\t}\n\n\tget(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\t\tconst row = this.stmt.values(...params)[0];\n\n\t\tif (!row) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst { fields, joinsNotNullableMap, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\treturn row;\n\t\t}\n\n\t\tif (customResultMapper) {\n\t\t\treturn customResultMapper([row]) as T['get'];\n\t\t}\n\n\t\treturn mapResultRow(fields!, row, joinsNotNullableMap);\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\treturn this.stmt.values(...params);\n\t}\n}\n"],"mappings":"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","names":["PreparedQueryBase"]}
|
package/bun-sqlite/session.d.cts
CHANGED
|
@@ -21,7 +21,7 @@ export declare class SQLiteBunSession<TFullSchema extends Record<string, unknown
|
|
|
21
21
|
private logger;
|
|
22
22
|
constructor(client: Database, dialect: SQLiteSyncDialect, schema: RelationalSchemaConfig<TSchema> | undefined, options?: SQLiteBunSessionOptions);
|
|
23
23
|
exec(query: string): void;
|
|
24
|
-
prepareQuery<T extends Omit<PreparedQueryConfig, 'run'>>(query: Query, fields: SelectedFieldsOrdered | undefined, executeMethod: SQLiteExecuteMethod,
|
|
24
|
+
prepareQuery<T extends Omit<PreparedQueryConfig, 'run'>>(query: Query, fields: SelectedFieldsOrdered | undefined, executeMethod: SQLiteExecuteMethod, customResultMapper?: (rows: unknown[][]) => unknown): PreparedQuery<T>;
|
|
25
25
|
transaction<T>(transaction: (tx: SQLiteBunTransaction<TFullSchema, TSchema>) => T, config?: SQLiteTransactionConfig): T;
|
|
26
26
|
}
|
|
27
27
|
export declare class SQLiteBunTransaction<TFullSchema extends Record<string, unknown>, TSchema extends TablesRelationalConfig> extends SQLiteTransaction<'sync', void, TFullSchema, TSchema> {
|
|
@@ -39,10 +39,9 @@ export declare class PreparedQuery<T extends PreparedQueryConfig = PreparedQuery
|
|
|
39
39
|
private stmt;
|
|
40
40
|
private logger;
|
|
41
41
|
private fields;
|
|
42
|
-
private _isResponseInArrayMode;
|
|
43
42
|
private customResultMapper?;
|
|
44
43
|
static readonly [entityKind]: string;
|
|
45
|
-
constructor(stmt: Statement, query: Query, logger: Logger, fields: SelectedFieldsOrdered | undefined, executeMethod: SQLiteExecuteMethod,
|
|
44
|
+
constructor(stmt: Statement, query: Query, logger: Logger, fields: SelectedFieldsOrdered | undefined, executeMethod: SQLiteExecuteMethod, customResultMapper?: ((rows: unknown[][]) => unknown) | undefined);
|
|
46
45
|
run(placeholderValues?: Record<string, unknown>): void;
|
|
47
46
|
all(placeholderValues?: Record<string, unknown>): T['all'];
|
|
48
47
|
get(placeholderValues?: Record<string, unknown>): T['get'];
|