drizzle-orm 0.29.3 → 0.29.4-b475b53
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/README.md +29 -141
- package/alias.cjs.map +1 -1
- package/alias.js.map +1 -1
- package/aws-data-api/pg/session.cjs +2 -2
- package/aws-data-api/pg/session.cjs.map +1 -1
- package/aws-data-api/pg/session.d.cts +3 -3
- package/aws-data-api/pg/session.d.ts +3 -3
- package/aws-data-api/pg/session.js +4 -4
- package/aws-data-api/pg/session.js.map +1 -1
- package/d1/session.cjs +3 -3
- package/d1/session.cjs.map +1 -1
- package/d1/session.d.cts +1 -1
- package/d1/session.d.ts +1 -1
- package/d1/session.js +4 -4
- package/d1/session.js.map +1 -1
- package/libsql/session.cjs +1 -1
- package/libsql/session.cjs.map +1 -1
- package/libsql/session.js +1 -1
- package/libsql/session.js.map +1 -1
- package/neon-http/driver.cjs +13 -1
- package/neon-http/driver.cjs.map +1 -1
- package/neon-http/driver.d.cts +8 -3
- package/neon-http/driver.d.ts +8 -3
- package/neon-http/driver.js +13 -5
- package/neon-http/driver.js.map +1 -1
- package/neon-http/session.cjs +46 -28
- package/neon-http/session.cjs.map +1 -1
- package/neon-http/session.d.cts +16 -12
- package/neon-http/session.d.ts +16 -12
- package/neon-http/session.js +47 -29
- package/neon-http/session.js.map +1 -1
- package/neon-serverless/session.cjs +12 -12
- package/neon-serverless/session.cjs.map +1 -1
- package/neon-serverless/session.d.cts +5 -5
- package/neon-serverless/session.d.ts +5 -5
- package/neon-serverless/session.js +13 -13
- package/neon-serverless/session.js.map +1 -1
- package/node-postgres/session.cjs +12 -12
- package/node-postgres/session.cjs.map +1 -1
- package/node-postgres/session.d.cts +5 -5
- package/node-postgres/session.d.ts +5 -5
- package/node-postgres/session.js +13 -13
- package/node-postgres/session.js.map +1 -1
- package/package.json +13 -1
- package/pg-core/db.cjs +14 -1
- package/pg-core/db.cjs.map +1 -1
- package/pg-core/db.js +14 -1
- package/pg-core/db.js.map +1 -1
- package/pg-core/query-builders/delete.cjs +11 -10
- package/pg-core/query-builders/delete.cjs.map +1 -1
- package/pg-core/query-builders/delete.d.cts +8 -6
- package/pg-core/query-builders/delete.d.ts +8 -6
- package/pg-core/query-builders/delete.js +11 -10
- package/pg-core/query-builders/delete.js.map +1 -1
- package/pg-core/query-builders/insert.cjs +15 -14
- package/pg-core/query-builders/insert.cjs.map +1 -1
- package/pg-core/query-builders/insert.d.cts +8 -6
- package/pg-core/query-builders/insert.d.ts +8 -6
- package/pg-core/query-builders/insert.js +15 -14
- package/pg-core/query-builders/insert.js.map +1 -1
- package/pg-core/query-builders/query.cjs +1 -0
- package/pg-core/query-builders/query.cjs.map +1 -1
- package/pg-core/query-builders/query.d.cts +9 -6
- package/pg-core/query-builders/query.d.ts +9 -6
- package/pg-core/query-builders/query.js +1 -0
- package/pg-core/query-builders/query.js.map +1 -1
- package/pg-core/query-builders/raw.cjs +53 -0
- package/pg-core/query-builders/raw.cjs.map +1 -0
- package/pg-core/query-builders/raw.d.cts +22 -0
- package/pg-core/query-builders/raw.d.ts +22 -0
- package/pg-core/query-builders/raw.js +29 -0
- package/pg-core/query-builders/raw.js.map +1 -0
- package/pg-core/query-builders/refresh-materialized-view.cjs +1 -0
- package/pg-core/query-builders/refresh-materialized-view.cjs.map +1 -1
- package/pg-core/query-builders/refresh-materialized-view.d.cts +10 -6
- package/pg-core/query-builders/refresh-materialized-view.d.ts +10 -6
- package/pg-core/query-builders/refresh-materialized-view.js +1 -0
- package/pg-core/query-builders/refresh-materialized-view.js.map +1 -1
- package/pg-core/query-builders/select.cjs +86 -85
- package/pg-core/query-builders/select.cjs.map +1 -1
- package/pg-core/query-builders/select.d.cts +5 -4
- package/pg-core/query-builders/select.d.ts +5 -4
- package/pg-core/query-builders/select.js +86 -85
- package/pg-core/query-builders/select.js.map +1 -1
- package/pg-core/query-builders/select.types.cjs.map +1 -1
- package/pg-core/query-builders/select.types.d.cts +2 -2
- package/pg-core/query-builders/select.types.d.ts +2 -2
- package/pg-core/query-builders/update.cjs +9 -8
- package/pg-core/query-builders/update.cjs.map +1 -1
- package/pg-core/query-builders/update.d.cts +7 -5
- package/pg-core/query-builders/update.d.ts +7 -5
- package/pg-core/query-builders/update.js +9 -8
- package/pg-core/query-builders/update.js.map +1 -1
- package/pg-core/session.cjs +14 -5
- package/pg-core/session.cjs.map +1 -1
- package/pg-core/session.d.cts +7 -2
- package/pg-core/session.d.ts +7 -2
- package/pg-core/session.js +12 -3
- package/pg-core/session.js.map +1 -1
- package/pg-proxy/session.cjs +2 -2
- package/pg-proxy/session.cjs.map +1 -1
- package/pg-proxy/session.d.cts +1 -1
- package/pg-proxy/session.d.ts +1 -1
- package/pg-proxy/session.js +2 -2
- package/pg-proxy/session.js.map +1 -1
- package/postgres-js/session.cjs +11 -11
- package/postgres-js/session.cjs.map +1 -1
- package/postgres-js/session.d.cts +5 -5
- package/postgres-js/session.d.ts +5 -5
- package/postgres-js/session.js +12 -12
- package/postgres-js/session.js.map +1 -1
- package/runnable-query.cjs.map +1 -1
- package/runnable-query.d.cts +0 -2
- package/runnable-query.d.ts +0 -2
- package/sql/sql.cjs +0 -8
- package/sql/sql.cjs.map +1 -1
- package/sql/sql.d.cts +1 -1
- package/sql/sql.d.ts +1 -1
- package/sql/sql.js +0 -8
- package/sql/sql.js.map +1 -1
- package/sqlite-core/db.cjs +53 -43
- package/sqlite-core/db.cjs.map +1 -1
- package/sqlite-core/db.d.cts +3 -0
- package/sqlite-core/db.d.ts +3 -0
- package/sqlite-core/db.js +53 -43
- package/sqlite-core/db.js.map +1 -1
- package/sqlite-core/query-builders/delete.cjs +20 -16
- package/sqlite-core/query-builders/delete.cjs.map +1 -1
- package/sqlite-core/query-builders/delete.d.cts +3 -3
- package/sqlite-core/query-builders/delete.d.ts +3 -3
- package/sqlite-core/query-builders/delete.js +20 -16
- package/sqlite-core/query-builders/delete.js.map +1 -1
- package/sqlite-core/query-builders/insert.cjs +23 -19
- package/sqlite-core/query-builders/insert.cjs.map +1 -1
- package/sqlite-core/query-builders/insert.d.cts +1 -1
- package/sqlite-core/query-builders/insert.d.ts +1 -1
- package/sqlite-core/query-builders/insert.js +23 -19
- package/sqlite-core/query-builders/insert.js.map +1 -1
- package/sqlite-core/query-builders/query.cjs +8 -4
- package/sqlite-core/query-builders/query.cjs.map +1 -1
- package/sqlite-core/query-builders/query.js +8 -4
- package/sqlite-core/query-builders/query.js.map +1 -1
- package/sqlite-core/query-builders/raw.cjs +9 -17
- package/sqlite-core/query-builders/raw.cjs.map +1 -1
- package/sqlite-core/query-builders/raw.d.cts +10 -6
- package/sqlite-core/query-builders/raw.d.ts +10 -6
- package/sqlite-core/query-builders/raw.js +9 -17
- package/sqlite-core/query-builders/raw.js.map +1 -1
- package/sqlite-core/query-builders/select.cjs +78 -74
- package/sqlite-core/query-builders/select.cjs.map +1 -1
- package/sqlite-core/query-builders/select.d.cts +7 -7
- package/sqlite-core/query-builders/select.d.ts +7 -7
- package/sqlite-core/query-builders/select.js +78 -74
- package/sqlite-core/query-builders/select.js.map +1 -1
- package/sqlite-core/query-builders/update.cjs +17 -13
- package/sqlite-core/query-builders/update.cjs.map +1 -1
- package/sqlite-core/query-builders/update.d.cts +1 -1
- package/sqlite-core/query-builders/update.d.ts +1 -1
- package/sqlite-core/query-builders/update.js +17 -13
- package/sqlite-core/query-builders/update.js.map +1 -1
- package/vercel-postgres/session.cjs +6 -6
- package/vercel-postgres/session.cjs.map +1 -1
- package/vercel-postgres/session.d.cts +4 -4
- package/vercel-postgres/session.d.ts +4 -4
- package/vercel-postgres/session.js +7 -7
- 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
package/neon-http/session.d.cts
CHANGED
|
@@ -1,33 +1,33 @@
|
|
|
1
1
|
import type { FullQueryResults, QueryRows } from '@neondatabase/serverless';
|
|
2
|
+
import type { BatchItem } from "../batch.cjs";
|
|
2
3
|
import { entityKind } from "../entity.cjs";
|
|
3
4
|
import type { Logger } from "../logger.cjs";
|
|
4
5
|
import type { PgDialect } from "../pg-core/dialect.cjs";
|
|
5
6
|
import { PgTransaction } from "../pg-core/index.cjs";
|
|
6
7
|
import type { SelectedFieldsOrdered } from "../pg-core/query-builders/select.types.cjs";
|
|
7
8
|
import type { PgTransactionConfig, PreparedQueryConfig, QueryResultHKT } from "../pg-core/session.cjs";
|
|
8
|
-
import {
|
|
9
|
+
import { PgPreparedQuery as PgPreparedQuery, PgSession } from "../pg-core/session.cjs";
|
|
9
10
|
import type { RelationalSchemaConfig, TablesRelationalConfig } from "../relations.cjs";
|
|
10
11
|
import { type Query } from "../sql/sql.cjs";
|
|
11
|
-
import { type Assume } from "../utils.cjs";
|
|
12
12
|
export type NeonHttpClient = {
|
|
13
|
-
<A extends boolean = false, F extends boolean = true>(strings: string, params?: any[],
|
|
13
|
+
<A extends boolean = false, F extends boolean = true>(strings: string, params?: any[], config?: {
|
|
14
14
|
arrayMode?: A;
|
|
15
15
|
fullResults?: F;
|
|
16
16
|
}): Promise<F extends true ? FullQueryResults<A> : QueryRows<A>>;
|
|
17
|
+
transaction<A extends boolean = false, F extends boolean = true>(queries: Promise<FullQueryResults<boolean> | QueryRows<boolean>>[], config?: {
|
|
18
|
+
arrayMode?: A;
|
|
19
|
+
fullResults?: F;
|
|
20
|
+
}): Promise<F extends true ? FullQueryResults<A>[] : QueryRows<A>[]>;
|
|
17
21
|
};
|
|
18
|
-
export declare class NeonHttpPreparedQuery<T extends PreparedQueryConfig> extends
|
|
22
|
+
export declare class NeonHttpPreparedQuery<T extends PreparedQueryConfig> extends PgPreparedQuery<T> {
|
|
19
23
|
private client;
|
|
20
|
-
private queryString;
|
|
21
|
-
private params;
|
|
22
24
|
private logger;
|
|
23
25
|
private fields;
|
|
24
|
-
private name;
|
|
25
26
|
private customResultMapper?;
|
|
26
27
|
static readonly [entityKind]: string;
|
|
27
|
-
|
|
28
|
-
private query;
|
|
29
|
-
constructor(client: NeonHttpClient, queryString: string, params: unknown[], logger: Logger, fields: SelectedFieldsOrdered | undefined, name: string | undefined, customResultMapper?: ((rows: unknown[][]) => T['execute']) | undefined);
|
|
28
|
+
constructor(client: NeonHttpClient, query: Query, logger: Logger, fields: SelectedFieldsOrdered | undefined, customResultMapper?: ((rows: unknown[][]) => T['execute']) | undefined);
|
|
30
29
|
execute(placeholderValues?: Record<string, unknown> | undefined): Promise<T['execute']>;
|
|
30
|
+
mapResult(result: unknown): unknown;
|
|
31
31
|
all(placeholderValues?: Record<string, unknown> | undefined): Promise<T['all']>;
|
|
32
32
|
values(placeholderValues?: Record<string, unknown> | undefined): Promise<T['values']>;
|
|
33
33
|
}
|
|
@@ -41,7 +41,8 @@ export declare class NeonHttpSession<TFullSchema extends Record<string, unknown>
|
|
|
41
41
|
static readonly [entityKind]: string;
|
|
42
42
|
private logger;
|
|
43
43
|
constructor(client: NeonHttpClient, dialect: PgDialect, schema: RelationalSchemaConfig<TSchema> | undefined, options?: NeonHttpSessionOptions);
|
|
44
|
-
prepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(query: Query, fields: SelectedFieldsOrdered | undefined, name: string | undefined, customResultMapper?: (rows: unknown[][]) => T['execute']):
|
|
44
|
+
prepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(query: Query, fields: SelectedFieldsOrdered | undefined, name: string | undefined, customResultMapper?: (rows: unknown[][]) => T['execute']): PgPreparedQuery<T>;
|
|
45
|
+
batch<U extends BatchItem<'pg'>, T extends Readonly<[U, ...U[]]>>(queries: T): Promise<unknown[]>;
|
|
45
46
|
query(query: string, params: unknown[]): Promise<FullQueryResults<true>>;
|
|
46
47
|
queryObjects(query: string, params: unknown[]): Promise<FullQueryResults<false>>;
|
|
47
48
|
transaction<T>(_transaction: (tx: NeonTransaction<TFullSchema, TSchema>) => Promise<T>, _config?: PgTransactionConfig): Promise<T>;
|
|
@@ -50,6 +51,9 @@ export declare class NeonTransaction<TFullSchema extends Record<string, unknown>
|
|
|
50
51
|
static readonly [entityKind]: string;
|
|
51
52
|
transaction<T>(_transaction: (tx: NeonTransaction<TFullSchema, TSchema>) => Promise<T>): Promise<T>;
|
|
52
53
|
}
|
|
54
|
+
export type NeonHttpQueryResult<T> = Omit<FullQueryResults<false>, 'rows'> & {
|
|
55
|
+
rows: T[];
|
|
56
|
+
};
|
|
53
57
|
export interface NeonHttpQueryResultHKT extends QueryResultHKT {
|
|
54
|
-
type:
|
|
58
|
+
type: NeonHttpQueryResult<this['row']>;
|
|
55
59
|
}
|
package/neon-http/session.d.ts
CHANGED
|
@@ -1,33 +1,33 @@
|
|
|
1
1
|
import type { FullQueryResults, QueryRows } from '@neondatabase/serverless';
|
|
2
|
+
import type { BatchItem } from "../batch.js";
|
|
2
3
|
import { entityKind } from "../entity.js";
|
|
3
4
|
import type { Logger } from "../logger.js";
|
|
4
5
|
import type { PgDialect } from "../pg-core/dialect.js";
|
|
5
6
|
import { PgTransaction } from "../pg-core/index.js";
|
|
6
7
|
import type { SelectedFieldsOrdered } from "../pg-core/query-builders/select.types.js";
|
|
7
8
|
import type { PgTransactionConfig, PreparedQueryConfig, QueryResultHKT } from "../pg-core/session.js";
|
|
8
|
-
import {
|
|
9
|
+
import { PgPreparedQuery as PgPreparedQuery, PgSession } from "../pg-core/session.js";
|
|
9
10
|
import type { RelationalSchemaConfig, TablesRelationalConfig } from "../relations.js";
|
|
10
11
|
import { type Query } from "../sql/sql.js";
|
|
11
|
-
import { type Assume } from "../utils.js";
|
|
12
12
|
export type NeonHttpClient = {
|
|
13
|
-
<A extends boolean = false, F extends boolean = true>(strings: string, params?: any[],
|
|
13
|
+
<A extends boolean = false, F extends boolean = true>(strings: string, params?: any[], config?: {
|
|
14
14
|
arrayMode?: A;
|
|
15
15
|
fullResults?: F;
|
|
16
16
|
}): Promise<F extends true ? FullQueryResults<A> : QueryRows<A>>;
|
|
17
|
+
transaction<A extends boolean = false, F extends boolean = true>(queries: Promise<FullQueryResults<boolean> | QueryRows<boolean>>[], config?: {
|
|
18
|
+
arrayMode?: A;
|
|
19
|
+
fullResults?: F;
|
|
20
|
+
}): Promise<F extends true ? FullQueryResults<A>[] : QueryRows<A>[]>;
|
|
17
21
|
};
|
|
18
|
-
export declare class NeonHttpPreparedQuery<T extends PreparedQueryConfig> extends
|
|
22
|
+
export declare class NeonHttpPreparedQuery<T extends PreparedQueryConfig> extends PgPreparedQuery<T> {
|
|
19
23
|
private client;
|
|
20
|
-
private queryString;
|
|
21
|
-
private params;
|
|
22
24
|
private logger;
|
|
23
25
|
private fields;
|
|
24
|
-
private name;
|
|
25
26
|
private customResultMapper?;
|
|
26
27
|
static readonly [entityKind]: string;
|
|
27
|
-
|
|
28
|
-
private query;
|
|
29
|
-
constructor(client: NeonHttpClient, queryString: string, params: unknown[], logger: Logger, fields: SelectedFieldsOrdered | undefined, name: string | undefined, customResultMapper?: ((rows: unknown[][]) => T['execute']) | undefined);
|
|
28
|
+
constructor(client: NeonHttpClient, query: Query, logger: Logger, fields: SelectedFieldsOrdered | undefined, customResultMapper?: ((rows: unknown[][]) => T['execute']) | undefined);
|
|
30
29
|
execute(placeholderValues?: Record<string, unknown> | undefined): Promise<T['execute']>;
|
|
30
|
+
mapResult(result: unknown): unknown;
|
|
31
31
|
all(placeholderValues?: Record<string, unknown> | undefined): Promise<T['all']>;
|
|
32
32
|
values(placeholderValues?: Record<string, unknown> | undefined): Promise<T['values']>;
|
|
33
33
|
}
|
|
@@ -41,7 +41,8 @@ export declare class NeonHttpSession<TFullSchema extends Record<string, unknown>
|
|
|
41
41
|
static readonly [entityKind]: string;
|
|
42
42
|
private logger;
|
|
43
43
|
constructor(client: NeonHttpClient, dialect: PgDialect, schema: RelationalSchemaConfig<TSchema> | undefined, options?: NeonHttpSessionOptions);
|
|
44
|
-
prepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(query: Query, fields: SelectedFieldsOrdered | undefined, name: string | undefined, customResultMapper?: (rows: unknown[][]) => T['execute']):
|
|
44
|
+
prepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(query: Query, fields: SelectedFieldsOrdered | undefined, name: string | undefined, customResultMapper?: (rows: unknown[][]) => T['execute']): PgPreparedQuery<T>;
|
|
45
|
+
batch<U extends BatchItem<'pg'>, T extends Readonly<[U, ...U[]]>>(queries: T): Promise<unknown[]>;
|
|
45
46
|
query(query: string, params: unknown[]): Promise<FullQueryResults<true>>;
|
|
46
47
|
queryObjects(query: string, params: unknown[]): Promise<FullQueryResults<false>>;
|
|
47
48
|
transaction<T>(_transaction: (tx: NeonTransaction<TFullSchema, TSchema>) => Promise<T>, _config?: PgTransactionConfig): Promise<T>;
|
|
@@ -50,6 +51,9 @@ export declare class NeonTransaction<TFullSchema extends Record<string, unknown>
|
|
|
50
51
|
static readonly [entityKind]: string;
|
|
51
52
|
transaction<T>(_transaction: (tx: NeonTransaction<TFullSchema, TSchema>) => Promise<T>): Promise<T>;
|
|
52
53
|
}
|
|
54
|
+
export type NeonHttpQueryResult<T> = Omit<FullQueryResults<false>, 'rows'> & {
|
|
55
|
+
rows: T[];
|
|
56
|
+
};
|
|
53
57
|
export interface NeonHttpQueryResultHKT extends QueryResultHKT {
|
|
54
|
-
type:
|
|
58
|
+
type: NeonHttpQueryResult<this['row']>;
|
|
55
59
|
}
|
package/neon-http/session.js
CHANGED
|
@@ -1,47 +1,55 @@
|
|
|
1
1
|
import { entityKind } from "../entity.js";
|
|
2
2
|
import { NoopLogger } from "../logger.js";
|
|
3
3
|
import { PgTransaction } from "../pg-core/index.js";
|
|
4
|
-
import {
|
|
4
|
+
import { PgPreparedQuery, PgSession } from "../pg-core/session.js";
|
|
5
5
|
import { fillPlaceholders } from "../sql/sql.js";
|
|
6
6
|
import { mapResultRow } from "../utils.js";
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
const rawQueryConfig = {
|
|
8
|
+
arrayMode: false,
|
|
9
|
+
fullResults: true
|
|
10
|
+
};
|
|
11
|
+
const queryConfig = {
|
|
12
|
+
arrayMode: true,
|
|
13
|
+
fullResults: true
|
|
14
|
+
};
|
|
15
|
+
class NeonHttpPreparedQuery extends PgPreparedQuery {
|
|
16
|
+
constructor(client, query, logger, fields, customResultMapper) {
|
|
17
|
+
super(query);
|
|
10
18
|
this.client = client;
|
|
11
|
-
this.queryString = queryString;
|
|
12
|
-
this.params = params;
|
|
13
19
|
this.logger = logger;
|
|
14
20
|
this.fields = fields;
|
|
15
|
-
this.name = name;
|
|
16
21
|
this.customResultMapper = customResultMapper;
|
|
17
|
-
this.rawQuery = {
|
|
18
|
-
arrayMode: false,
|
|
19
|
-
fullResults: true
|
|
20
|
-
};
|
|
21
|
-
this.query = { arrayMode: true, fullResults: true };
|
|
22
22
|
}
|
|
23
23
|
static [entityKind] = "NeonHttpPreparedQuery";
|
|
24
|
-
rawQuery;
|
|
25
|
-
query;
|
|
26
24
|
async execute(placeholderValues = {}) {
|
|
27
|
-
const params = fillPlaceholders(this.params, placeholderValues);
|
|
28
|
-
this.logger.logQuery(this.
|
|
29
|
-
const { fields, client,
|
|
25
|
+
const params = fillPlaceholders(this.query.params, placeholderValues);
|
|
26
|
+
this.logger.logQuery(this.query.sql, params);
|
|
27
|
+
const { fields, client, query, customResultMapper } = this;
|
|
30
28
|
if (!fields && !customResultMapper) {
|
|
31
|
-
return client(
|
|
29
|
+
return client(query.sql, params, rawQueryConfig);
|
|
32
30
|
}
|
|
33
|
-
const result = await client(
|
|
34
|
-
return
|
|
31
|
+
const result = await client(query.sql, params, queryConfig);
|
|
32
|
+
return this.mapResult(result);
|
|
33
|
+
}
|
|
34
|
+
mapResult(result) {
|
|
35
|
+
if (!this.fields && !this.customResultMapper) {
|
|
36
|
+
return result;
|
|
37
|
+
}
|
|
38
|
+
const rows = result.rows;
|
|
39
|
+
if (this.customResultMapper) {
|
|
40
|
+
return this.customResultMapper(rows);
|
|
41
|
+
}
|
|
42
|
+
return rows.map((row) => mapResultRow(this.fields, row, this.joinsNotNullableMap));
|
|
35
43
|
}
|
|
36
44
|
all(placeholderValues = {}) {
|
|
37
|
-
const params = fillPlaceholders(this.params, placeholderValues);
|
|
38
|
-
this.logger.logQuery(this.
|
|
39
|
-
return this.client(this.
|
|
45
|
+
const params = fillPlaceholders(this.query.params, placeholderValues);
|
|
46
|
+
this.logger.logQuery(this.query.sql, params);
|
|
47
|
+
return this.client(this.query.sql, params, rawQueryConfig).then((result) => result.rows);
|
|
40
48
|
}
|
|
41
49
|
values(placeholderValues = {}) {
|
|
42
|
-
const params = fillPlaceholders(this.params, placeholderValues);
|
|
43
|
-
this.logger.logQuery(this.
|
|
44
|
-
return this.client(this.
|
|
50
|
+
const params = fillPlaceholders(this.query.params, placeholderValues);
|
|
51
|
+
this.logger.logQuery(this.query.sql, params);
|
|
52
|
+
return this.client(this.query.sql, params).then((result) => result.rows);
|
|
45
53
|
}
|
|
46
54
|
}
|
|
47
55
|
class NeonHttpSession extends PgSession {
|
|
@@ -57,14 +65,24 @@ class NeonHttpSession extends PgSession {
|
|
|
57
65
|
prepareQuery(query, fields, name, customResultMapper) {
|
|
58
66
|
return new NeonHttpPreparedQuery(
|
|
59
67
|
this.client,
|
|
60
|
-
query
|
|
61
|
-
query.params,
|
|
68
|
+
query,
|
|
62
69
|
this.logger,
|
|
63
70
|
fields,
|
|
64
|
-
name,
|
|
65
71
|
customResultMapper
|
|
66
72
|
);
|
|
67
73
|
}
|
|
74
|
+
async batch(queries) {
|
|
75
|
+
const preparedQueries = [];
|
|
76
|
+
const builtQueries = [];
|
|
77
|
+
for (const query of queries) {
|
|
78
|
+
const preparedQuery = query._prepare();
|
|
79
|
+
const builtQuery = preparedQuery.getQuery();
|
|
80
|
+
preparedQueries.push(preparedQuery);
|
|
81
|
+
builtQueries.push(this.client(builtQuery.sql, builtQuery.params));
|
|
82
|
+
}
|
|
83
|
+
const batchResults = await this.client.transaction(builtQueries, queryConfig);
|
|
84
|
+
return batchResults.map((result, i) => preparedQueries[i].mapResult(result, true));
|
|
85
|
+
}
|
|
68
86
|
// change return type to QueryRows<true>
|
|
69
87
|
async query(query, params) {
|
|
70
88
|
this.logger.logQuery(query, params);
|
package/neon-http/session.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/neon-http/session.ts"],"sourcesContent":["import type { FullQueryResults, QueryRows } from '@neondatabase/serverless';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { PgDialect } from '~/pg-core/dialect.ts';\nimport { PgTransaction } from '~/pg-core/index.ts';\nimport type { SelectedFieldsOrdered } from '~/pg-core/query-builders/select.types.ts';\nimport type { PgTransactionConfig, PreparedQueryConfig, QueryResultHKT } from '~/pg-core/session.ts';\nimport {
|
|
1
|
+
{"version":3,"sources":["../../src/neon-http/session.ts"],"sourcesContent":["import type { FullQueryResults, QueryRows } from '@neondatabase/serverless';\nimport type { BatchItem } from '~/batch.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { PgDialect } from '~/pg-core/dialect.ts';\nimport { PgTransaction } from '~/pg-core/index.ts';\nimport type { SelectedFieldsOrdered } from '~/pg-core/query-builders/select.types.ts';\nimport type { PgTransactionConfig, PreparedQueryConfig, QueryResultHKT } from '~/pg-core/session.ts';\nimport { PgPreparedQuery as PgPreparedQuery, PgSession } from '~/pg-core/session.ts';\nimport type { RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport type { PreparedQuery } from '~/session.ts';\nimport { fillPlaceholders, type Query } from '~/sql/sql.ts';\nimport { mapResultRow } from '~/utils.ts';\n\nexport type NeonHttpClient = {\n\t<A extends boolean = false, F extends boolean = true>(\n\t\tstrings: string,\n\t\tparams?: any[],\n\t\tconfig?: { arrayMode?: A; fullResults?: F },\n\t): Promise<\n\t\tF extends true ? FullQueryResults<A> : QueryRows<A>\n\t>;\n\n\ttransaction<A extends boolean = false, F extends boolean = true>(\n\t\tqueries: Promise<FullQueryResults<boolean> | QueryRows<boolean>>[],\n\t\tconfig?: { arrayMode?: A; fullResults?: F },\n\t): Promise<\n\t\tF extends true ? FullQueryResults<A>[] : QueryRows<A>[]\n\t>;\n};\n\nconst rawQueryConfig = {\n\tarrayMode: false,\n\tfullResults: true,\n} as const;\nconst queryConfig = {\n\tarrayMode: true,\n\tfullResults: true,\n} as const;\n\nexport class NeonHttpPreparedQuery<T extends PreparedQueryConfig> extends PgPreparedQuery<T> {\n\tstatic readonly [entityKind]: string = 'NeonHttpPreparedQuery';\n\n\tconstructor(\n\t\tprivate client: NeonHttpClient,\n\t\tquery: Query,\n\t\tprivate logger: Logger,\n\t\tprivate fields: SelectedFieldsOrdered | undefined,\n\t\tprivate customResultMapper?: (rows: unknown[][]) => T['execute'],\n\t) {\n\t\tsuper(query);\n\t}\n\n\tasync execute(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['execute']> {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues);\n\n\t\tthis.logger.logQuery(this.query.sql, params);\n\n\t\tconst { fields, client, query, customResultMapper } = this;\n\n\t\tif (!fields && !customResultMapper) {\n\t\t\treturn client(query.sql, params, rawQueryConfig);\n\t\t}\n\n\t\tconst result = await client(query.sql, params, queryConfig);\n\n\t\treturn this.mapResult(result);\n\t}\n\n\toverride mapResult(result: unknown): unknown {\n\t\tif (!this.fields && !this.customResultMapper) {\n\t\t\treturn result;\n\t\t}\n\n\t\tconst rows = (result as FullQueryResults<true>).rows;\n\n\t\tif (this.customResultMapper) {\n\t\t\treturn this.customResultMapper(rows);\n\t\t}\n\n\t\treturn rows.map((row) => mapResultRow(this.fields!, row, this.joinsNotNullableMap));\n\t}\n\n\tall(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['all']> {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues);\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\treturn this.client(this.query.sql, params, rawQueryConfig).then((result) => result.rows);\n\t}\n\n\tvalues(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['values']> {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues);\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\treturn this.client(this.query.sql, params).then((result) => result.rows);\n\t}\n}\n\nexport interface NeonHttpSessionOptions {\n\tlogger?: Logger;\n}\n\nexport class NeonHttpSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends PgSession<NeonHttpQueryResultHKT, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'NeonHttpSession';\n\n\tprivate logger: Logger;\n\n\tconstructor(\n\t\tprivate client: NeonHttpClient,\n\t\tdialect: PgDialect,\n\t\tprivate schema: RelationalSchemaConfig<TSchema> | undefined,\n\t\tprivate options: NeonHttpSessionOptions = {},\n\t) {\n\t\tsuper(dialect);\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t}\n\n\tprepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\tname: string | undefined,\n\t\tcustomResultMapper?: (rows: unknown[][]) => T['execute'],\n\t): PgPreparedQuery<T> {\n\t\treturn new NeonHttpPreparedQuery(\n\t\t\tthis.client,\n\t\t\tquery,\n\t\t\tthis.logger,\n\t\t\tfields,\n\t\t\tcustomResultMapper,\n\t\t);\n\t}\n\n\tasync batch<U extends BatchItem<'pg'>, T extends Readonly<[U, ...U[]]>>(queries: T) {\n\t\tconst preparedQueries: PreparedQuery[] = [];\n\t\tconst builtQueries: Promise<FullQueryResults<true> | QueryRows<true>>[] = [];\n\n\t\tfor (const query of queries) {\n\t\t\tconst preparedQuery = query._prepare();\n\t\t\tconst builtQuery = preparedQuery.getQuery();\n\t\t\tpreparedQueries.push(preparedQuery);\n\t\t\tbuiltQueries.push(this.client(builtQuery.sql, builtQuery.params));\n\t\t}\n\n\t\tconst batchResults = await this.client.transaction(builtQueries, queryConfig);\n\n\t\treturn batchResults.map((result, i) => preparedQueries[i]!.mapResult(result, true));\n\t}\n\n\t// change return type to QueryRows<true>\n\tasync query(query: string, params: unknown[]): Promise<FullQueryResults<true>> {\n\t\tthis.logger.logQuery(query, params);\n\t\tconst result = await this.client(query, params, { arrayMode: true });\n\t\treturn result;\n\t}\n\n\t// change return type to QueryRows<false>\n\tasync queryObjects(\n\t\tquery: string,\n\t\tparams: unknown[],\n\t): Promise<FullQueryResults<false>> {\n\t\treturn this.client(query, params);\n\t}\n\n\toverride async transaction<T>(\n\t\t_transaction: (tx: NeonTransaction<TFullSchema, TSchema>) => Promise<T>,\n\t\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\t\t_config: PgTransactionConfig = {},\n\t): Promise<T> {\n\t\tthrow new Error('No transactions support in neon-http driver');\n\t}\n}\n\nexport class NeonTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends PgTransaction<NeonHttpQueryResultHKT, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'NeonHttpTransaction';\n\n\toverride async transaction<T>(_transaction: (tx: NeonTransaction<TFullSchema, TSchema>) => Promise<T>): Promise<T> {\n\t\tthrow new Error('No transactions support in neon-http driver');\n\t\t// const savepointName = `sp${this.nestedIndex + 1}`;\n\t\t// const tx = new NeonTransaction(this.dialect, this.session, this.schema, this.nestedIndex + 1);\n\t\t// await tx.execute(sql.raw(`savepoint ${savepointName}`));\n\t\t// try {\n\t\t// \tconst result = await transaction(tx);\n\t\t// \tawait tx.execute(sql.raw(`release savepoint ${savepointName}`));\n\t\t// \treturn result;\n\t\t// } catch (e) {\n\t\t// \tawait tx.execute(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t// \tthrow e;\n\t\t// }\n\t}\n}\n\nexport type NeonHttpQueryResult<T> = Omit<FullQueryResults<false>, 'rows'> & { rows: T[] };\n\nexport interface NeonHttpQueryResultHKT extends QueryResultHKT {\n\ttype: NeonHttpQueryResult<this['row']>;\n}\n"],"mappings":"AAEA,SAAS,kBAAkB;AAE3B,SAAS,kBAAkB;AAE3B,SAAS,qBAAqB;AAG9B,SAAS,iBAAoC,iBAAiB;AAG9D,SAAS,wBAAoC;AAC7C,SAAS,oBAAoB;AAmB7B,MAAM,iBAAiB;AAAA,EACtB,WAAW;AAAA,EACX,aAAa;AACd;AACA,MAAM,cAAc;AAAA,EACnB,WAAW;AAAA,EACX,aAAa;AACd;AAEO,MAAM,8BAA6D,gBAAmB;AAAA,EAG5F,YACS,QACR,OACQ,QACA,QACA,oBACP;AACD,UAAM,KAAK;AANH;AAEA;AACA;AACA;AAAA,EAGT;AAAA,EAVA,QAAiB,UAAU,IAAY;AAAA,EAYvC,MAAM,QAAQ,oBAAyD,CAAC,GAA0B;AACjG,UAAM,SAAS,iBAAiB,KAAK,MAAM,QAAQ,iBAAiB;AAEpE,SAAK,OAAO,SAAS,KAAK,MAAM,KAAK,MAAM;AAE3C,UAAM,EAAE,QAAQ,QAAQ,OAAO,mBAAmB,IAAI;AAEtD,QAAI,CAAC,UAAU,CAAC,oBAAoB;AACnC,aAAO,OAAO,MAAM,KAAK,QAAQ,cAAc;AAAA,IAChD;AAEA,UAAM,SAAS,MAAM,OAAO,MAAM,KAAK,QAAQ,WAAW;AAE1D,WAAO,KAAK,UAAU,MAAM;AAAA,EAC7B;AAAA,EAES,UAAU,QAA0B;AAC5C,QAAI,CAAC,KAAK,UAAU,CAAC,KAAK,oBAAoB;AAC7C,aAAO;AAAA,IACR;AAEA,UAAM,OAAQ,OAAkC;AAEhD,QAAI,KAAK,oBAAoB;AAC5B,aAAO,KAAK,mBAAmB,IAAI;AAAA,IACpC;AAEA,WAAO,KAAK,IAAI,CAAC,QAAQ,aAAa,KAAK,QAAS,KAAK,KAAK,mBAAmB,CAAC;AAAA,EACnF;AAAA,EAEA,IAAI,oBAAyD,CAAC,GAAsB;AACnF,UAAM,SAAS,iBAAiB,KAAK,MAAM,QAAQ,iBAAiB;AACpE,SAAK,OAAO,SAAS,KAAK,MAAM,KAAK,MAAM;AAC3C,WAAO,KAAK,OAAO,KAAK,MAAM,KAAK,QAAQ,cAAc,EAAE,KAAK,CAAC,WAAW,OAAO,IAAI;AAAA,EACxF;AAAA,EAEA,OAAO,oBAAyD,CAAC,GAAyB;AACzF,UAAM,SAAS,iBAAiB,KAAK,MAAM,QAAQ,iBAAiB;AACpE,SAAK,OAAO,SAAS,KAAK,MAAM,KAAK,MAAM;AAC3C,WAAO,KAAK,OAAO,KAAK,MAAM,KAAK,MAAM,EAAE,KAAK,CAAC,WAAW,OAAO,IAAI;AAAA,EACxE;AACD;AAMO,MAAM,wBAGH,UAAwD;AAAA,EAKjE,YACS,QACR,SACQ,QACA,UAAkC,CAAC,GAC1C;AACD,UAAM,OAAO;AALL;AAEA;AACA;AAGR,SAAK,SAAS,QAAQ,UAAU,IAAI,WAAW;AAAA,EAChD;AAAA,EAZA,QAAiB,UAAU,IAAY;AAAA,EAE/B;AAAA,EAYR,aACC,OACA,QACA,MACA,oBACqB;AACrB,WAAO,IAAI;AAAA,MACV,KAAK;AAAA,MACL;AAAA,MACA,KAAK;AAAA,MACL;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAAA,EAEA,MAAM,MAAkE,SAAY;AACnF,UAAM,kBAAmC,CAAC;AAC1C,UAAM,eAAoE,CAAC;AAE3E,eAAW,SAAS,SAAS;AAC5B,YAAM,gBAAgB,MAAM,SAAS;AACrC,YAAM,aAAa,cAAc,SAAS;AAC1C,sBAAgB,KAAK,aAAa;AAClC,mBAAa,KAAK,KAAK,OAAO,WAAW,KAAK,WAAW,MAAM,CAAC;AAAA,IACjE;AAEA,UAAM,eAAe,MAAM,KAAK,OAAO,YAAY,cAAc,WAAW;AAE5E,WAAO,aAAa,IAAI,CAAC,QAAQ,MAAM,gBAAgB,CAAC,EAAG,UAAU,QAAQ,IAAI,CAAC;AAAA,EACnF;AAAA;AAAA,EAGA,MAAM,MAAM,OAAe,QAAoD;AAC9E,SAAK,OAAO,SAAS,OAAO,MAAM;AAClC,UAAM,SAAS,MAAM,KAAK,OAAO,OAAO,QAAQ,EAAE,WAAW,KAAK,CAAC;AACnE,WAAO;AAAA,EACR;AAAA;AAAA,EAGA,MAAM,aACL,OACA,QACmC;AACnC,WAAO,KAAK,OAAO,OAAO,MAAM;AAAA,EACjC;AAAA,EAEA,MAAe,YACd,cAEA,UAA+B,CAAC,GACnB;AACb,UAAM,IAAI,MAAM,6CAA6C;AAAA,EAC9D;AACD;AAEO,MAAM,wBAGH,cAA4D;AAAA,EACrE,QAAiB,UAAU,IAAY;AAAA,EAEvC,MAAe,YAAe,cAAqF;AAClH,UAAM,IAAI,MAAM,6CAA6C;AAAA,EAY9D;AACD;","names":[]}
|
|
@@ -30,31 +30,31 @@ var import_pg_core = require("../pg-core/index.cjs");
|
|
|
30
30
|
var import_session = require("../pg-core/session.cjs");
|
|
31
31
|
var import_sql = require("../sql/sql.cjs");
|
|
32
32
|
var import_utils = require("../utils.cjs");
|
|
33
|
-
class NeonPreparedQuery extends import_session.
|
|
33
|
+
class NeonPreparedQuery extends import_session.PgPreparedQuery {
|
|
34
34
|
constructor(client, queryString, params, logger, fields, name, customResultMapper) {
|
|
35
|
-
super();
|
|
35
|
+
super({ sql: queryString, params });
|
|
36
36
|
this.client = client;
|
|
37
37
|
this.params = params;
|
|
38
38
|
this.logger = logger;
|
|
39
39
|
this.fields = fields;
|
|
40
40
|
this.customResultMapper = customResultMapper;
|
|
41
|
-
this.
|
|
41
|
+
this.rawQueryConfig = {
|
|
42
42
|
name,
|
|
43
43
|
text: queryString
|
|
44
44
|
};
|
|
45
|
-
this.
|
|
45
|
+
this.queryConfig = {
|
|
46
46
|
name,
|
|
47
47
|
text: queryString,
|
|
48
48
|
rowMode: "array"
|
|
49
49
|
};
|
|
50
50
|
}
|
|
51
51
|
static [import_entity.entityKind] = "NeonPreparedQuery";
|
|
52
|
-
|
|
53
|
-
|
|
52
|
+
rawQueryConfig;
|
|
53
|
+
queryConfig;
|
|
54
54
|
async execute(placeholderValues = {}) {
|
|
55
55
|
const params = (0, import_sql.fillPlaceholders)(this.params, placeholderValues);
|
|
56
|
-
this.logger.logQuery(this.
|
|
57
|
-
const { fields, client, rawQuery, query, joinsNotNullableMap, customResultMapper } = this;
|
|
56
|
+
this.logger.logQuery(this.rawQueryConfig.text, params);
|
|
57
|
+
const { fields, client, rawQueryConfig: rawQuery, queryConfig: query, joinsNotNullableMap, customResultMapper } = this;
|
|
58
58
|
if (!fields && !customResultMapper) {
|
|
59
59
|
return client.query(rawQuery, params);
|
|
60
60
|
}
|
|
@@ -63,13 +63,13 @@ class NeonPreparedQuery extends import_session.PreparedQuery {
|
|
|
63
63
|
}
|
|
64
64
|
all(placeholderValues = {}) {
|
|
65
65
|
const params = (0, import_sql.fillPlaceholders)(this.params, placeholderValues);
|
|
66
|
-
this.logger.logQuery(this.
|
|
67
|
-
return this.client.query(this.
|
|
66
|
+
this.logger.logQuery(this.rawQueryConfig.text, params);
|
|
67
|
+
return this.client.query(this.rawQueryConfig, params).then((result) => result.rows);
|
|
68
68
|
}
|
|
69
69
|
values(placeholderValues = {}) {
|
|
70
70
|
const params = (0, import_sql.fillPlaceholders)(this.params, placeholderValues);
|
|
71
|
-
this.logger.logQuery(this.
|
|
72
|
-
return this.client.query(this.
|
|
71
|
+
this.logger.logQuery(this.rawQueryConfig.text, params);
|
|
72
|
+
return this.client.query(this.queryConfig, params).then((result) => result.rows);
|
|
73
73
|
}
|
|
74
74
|
}
|
|
75
75
|
class NeonSession extends import_session.PgSession {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/neon-serverless/session.ts"],"sourcesContent":["import {\n\ttype Client,\n\tPool,\n\ttype PoolClient,\n\ttype QueryArrayConfig,\n\ttype QueryConfig,\n\ttype QueryResult,\n\ttype QueryResultRow,\n} from '@neondatabase/serverless';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { PgDialect } from '~/pg-core/dialect.ts';\nimport { PgTransaction } from '~/pg-core/index.ts';\nimport type { SelectedFieldsOrdered } from '~/pg-core/query-builders/select.types.ts';\nimport type { PgTransactionConfig, PreparedQueryConfig, QueryResultHKT } from '~/pg-core/session.ts';\nimport {
|
|
1
|
+
{"version":3,"sources":["../../src/neon-serverless/session.ts"],"sourcesContent":["import {\n\ttype Client,\n\tPool,\n\ttype PoolClient,\n\ttype QueryArrayConfig,\n\ttype QueryConfig,\n\ttype QueryResult,\n\ttype QueryResultRow,\n} from '@neondatabase/serverless';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { PgDialect } from '~/pg-core/dialect.ts';\nimport { PgTransaction } from '~/pg-core/index.ts';\nimport type { SelectedFieldsOrdered } from '~/pg-core/query-builders/select.types.ts';\nimport type { PgTransactionConfig, PreparedQueryConfig, QueryResultHKT } from '~/pg-core/session.ts';\nimport { PgPreparedQuery, PgSession } from '~/pg-core/session.ts';\nimport type { RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport { fillPlaceholders, type Query, sql } from '~/sql/sql.ts';\nimport { type Assume, mapResultRow } from '~/utils.ts';\n\nexport type NeonClient = Pool | PoolClient | Client;\n\nexport class NeonPreparedQuery<T extends PreparedQueryConfig> extends PgPreparedQuery<T> {\n\tstatic readonly [entityKind]: string = 'NeonPreparedQuery';\n\n\tprivate rawQueryConfig: QueryConfig;\n\tprivate queryConfig: QueryArrayConfig;\n\n\tconstructor(\n\t\tprivate client: NeonClient,\n\t\tqueryString: string,\n\t\tprivate params: unknown[],\n\t\tprivate logger: Logger,\n\t\tprivate fields: SelectedFieldsOrdered | undefined,\n\t\tname: string | undefined,\n\t\tprivate customResultMapper?: (rows: unknown[][]) => T['execute'],\n\t) {\n\t\tsuper({ sql: queryString, params });\n\t\tthis.rawQueryConfig = {\n\t\t\tname,\n\t\t\ttext: queryString,\n\t\t};\n\t\tthis.queryConfig = {\n\t\t\tname,\n\t\t\ttext: queryString,\n\t\t\trowMode: 'array',\n\t\t};\n\t}\n\n\tasync execute(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['execute']> {\n\t\tconst params = fillPlaceholders(this.params, placeholderValues);\n\n\t\tthis.logger.logQuery(this.rawQueryConfig.text, params);\n\n\t\tconst { fields, client, rawQueryConfig: rawQuery, queryConfig: query, joinsNotNullableMap, customResultMapper } =\n\t\t\tthis;\n\t\tif (!fields && !customResultMapper) {\n\t\t\treturn client.query(rawQuery, params);\n\t\t}\n\n\t\tconst result = await client.query(query, params);\n\n\t\treturn customResultMapper\n\t\t\t? customResultMapper(result.rows)\n\t\t\t: result.rows.map((row) => mapResultRow<T['execute']>(fields!, row, joinsNotNullableMap));\n\t}\n\n\tall(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['all']> {\n\t\tconst params = fillPlaceholders(this.params, placeholderValues);\n\t\tthis.logger.logQuery(this.rawQueryConfig.text, params);\n\t\treturn this.client.query(this.rawQueryConfig, params).then((result) => result.rows);\n\t}\n\n\tvalues(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['values']> {\n\t\tconst params = fillPlaceholders(this.params, placeholderValues);\n\t\tthis.logger.logQuery(this.rawQueryConfig.text, params);\n\t\treturn this.client.query(this.queryConfig, params).then((result) => result.rows);\n\t}\n}\n\nexport interface NeonSessionOptions {\n\tlogger?: Logger;\n}\n\nexport class NeonSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends PgSession<NeonQueryResultHKT, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'NeonSession';\n\n\tprivate logger: Logger;\n\n\tconstructor(\n\t\tprivate client: NeonClient,\n\t\tdialect: PgDialect,\n\t\tprivate schema: RelationalSchemaConfig<TSchema> | undefined,\n\t\tprivate options: NeonSessionOptions = {},\n\t) {\n\t\tsuper(dialect);\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t}\n\n\tprepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\tname: string | undefined,\n\t\tcustomResultMapper?: (rows: unknown[][]) => T['execute'],\n\t): PgPreparedQuery<T> {\n\t\treturn new NeonPreparedQuery(this.client, query.sql, query.params, this.logger, fields, name, customResultMapper);\n\t}\n\n\tasync query(query: string, params: unknown[]): Promise<QueryResult> {\n\t\tthis.logger.logQuery(query, params);\n\t\tconst result = await this.client.query({\n\t\t\trowMode: 'array',\n\t\t\ttext: query,\n\t\t\tvalues: params,\n\t\t});\n\t\treturn result;\n\t}\n\n\tasync queryObjects<T extends QueryResultRow>(\n\t\tquery: string,\n\t\tparams: unknown[],\n\t): Promise<QueryResult<T>> {\n\t\treturn this.client.query<T>(query, params);\n\t}\n\n\toverride async transaction<T>(\n\t\ttransaction: (tx: NeonTransaction<TFullSchema, TSchema>) => Promise<T>,\n\t\tconfig: PgTransactionConfig = {},\n\t): Promise<T> {\n\t\tconst session = this.client instanceof Pool // eslint-disable-line no-instanceof/no-instanceof\n\t\t\t? new NeonSession(await this.client.connect(), this.dialect, this.schema, this.options)\n\t\t\t: this;\n\t\tconst tx = new NeonTransaction(this.dialect, session, this.schema);\n\t\tawait tx.execute(sql`begin ${tx.getTransactionConfigSQL(config)}`);\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait tx.execute(sql`commit`);\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tawait tx.execute(sql`rollback`);\n\t\t\tthrow error;\n\t\t} finally {\n\t\t\tif (this.client instanceof Pool) { // eslint-disable-line no-instanceof/no-instanceof\n\t\t\t\t(session.client as PoolClient).release();\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport class NeonTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends PgTransaction<NeonQueryResultHKT, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'NeonTransaction';\n\n\toverride async transaction<T>(transaction: (tx: NeonTransaction<TFullSchema, TSchema>) => Promise<T>): Promise<T> {\n\t\tconst savepointName = `sp${this.nestedIndex + 1}`;\n\t\tconst tx = new NeonTransaction(this.dialect, this.session, this.schema, this.nestedIndex + 1);\n\t\tawait tx.execute(sql.raw(`savepoint ${savepointName}`));\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait tx.execute(sql.raw(`release savepoint ${savepointName}`));\n\t\t\treturn result;\n\t\t} catch (e) {\n\t\t\tawait tx.execute(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t\tthrow e;\n\t\t}\n\t}\n}\n\nexport interface NeonQueryResultHKT extends QueryResultHKT {\n\ttype: QueryResult<Assume<this['row'], QueryResultRow>>;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAQO;AACP,oBAA2B;AAE3B,oBAA2B;AAE3B,qBAA8B;AAG9B,qBAA2C;AAE3C,iBAAkD;AAClD,mBAA0C;AAInC,MAAM,0BAAyD,+BAAmB;AAAA,EAMxF,YACS,QACR,aACQ,QACA,QACA,QACR,MACQ,oBACP;AACD,UAAM,EAAE,KAAK,aAAa,OAAO,CAAC;AAR1B;AAEA;AACA;AACA;AAEA;AAGR,SAAK,iBAAiB;AAAA,MACrB;AAAA,MACA,MAAM;AAAA,IACP;AACA,SAAK,cAAc;AAAA,MAClB;AAAA,MACA,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,EACD;AAAA,EAxBA,QAAiB,wBAAU,IAAY;AAAA,EAE/B;AAAA,EACA;AAAA,EAuBR,MAAM,QAAQ,oBAAyD,CAAC,GAA0B;AACjG,UAAM,aAAS,6BAAiB,KAAK,QAAQ,iBAAiB;AAE9D,SAAK,OAAO,SAAS,KAAK,eAAe,MAAM,MAAM;AAErD,UAAM,EAAE,QAAQ,QAAQ,gBAAgB,UAAU,aAAa,OAAO,qBAAqB,mBAAmB,IAC7G;AACD,QAAI,CAAC,UAAU,CAAC,oBAAoB;AACnC,aAAO,OAAO,MAAM,UAAU,MAAM;AAAA,IACrC;AAEA,UAAM,SAAS,MAAM,OAAO,MAAM,OAAO,MAAM;AAE/C,WAAO,qBACJ,mBAAmB,OAAO,IAAI,IAC9B,OAAO,KAAK,IAAI,CAAC,YAAQ,2BAA2B,QAAS,KAAK,mBAAmB,CAAC;AAAA,EAC1F;AAAA,EAEA,IAAI,oBAAyD,CAAC,GAAsB;AACnF,UAAM,aAAS,6BAAiB,KAAK,QAAQ,iBAAiB;AAC9D,SAAK,OAAO,SAAS,KAAK,eAAe,MAAM,MAAM;AACrD,WAAO,KAAK,OAAO,MAAM,KAAK,gBAAgB,MAAM,EAAE,KAAK,CAAC,WAAW,OAAO,IAAI;AAAA,EACnF;AAAA,EAEA,OAAO,oBAAyD,CAAC,GAAyB;AACzF,UAAM,aAAS,6BAAiB,KAAK,QAAQ,iBAAiB;AAC9D,SAAK,OAAO,SAAS,KAAK,eAAe,MAAM,MAAM;AACrD,WAAO,KAAK,OAAO,MAAM,KAAK,aAAa,MAAM,EAAE,KAAK,CAAC,WAAW,OAAO,IAAI;AAAA,EAChF;AACD;AAMO,MAAM,oBAGH,yBAAoD;AAAA,EAK7D,YACS,QACR,SACQ,QACA,UAA8B,CAAC,GACtC;AACD,UAAM,OAAO;AALL;AAEA;AACA;AAGR,SAAK,SAAS,QAAQ,UAAU,IAAI,yBAAW;AAAA,EAChD;AAAA,EAZA,QAAiB,wBAAU,IAAY;AAAA,EAE/B;AAAA,EAYR,aACC,OACA,QACA,MACA,oBACqB;AACrB,WAAO,IAAI,kBAAkB,KAAK,QAAQ,MAAM,KAAK,MAAM,QAAQ,KAAK,QAAQ,QAAQ,MAAM,kBAAkB;AAAA,EACjH;AAAA,EAEA,MAAM,MAAM,OAAe,QAAyC;AACnE,SAAK,OAAO,SAAS,OAAO,MAAM;AAClC,UAAM,SAAS,MAAM,KAAK,OAAO,MAAM;AAAA,MACtC,SAAS;AAAA,MACT,MAAM;AAAA,MACN,QAAQ;AAAA,IACT,CAAC;AACD,WAAO;AAAA,EACR;AAAA,EAEA,MAAM,aACL,OACA,QAC0B;AAC1B,WAAO,KAAK,OAAO,MAAS,OAAO,MAAM;AAAA,EAC1C;AAAA,EAEA,MAAe,YACd,aACA,SAA8B,CAAC,GAClB;AACb,UAAM,UAAU,KAAK,kBAAkB,yBACpC,IAAI,YAAY,MAAM,KAAK,OAAO,QAAQ,GAAG,KAAK,SAAS,KAAK,QAAQ,KAAK,OAAO,IACpF;AACH,UAAM,KAAK,IAAI,gBAAgB,KAAK,SAAS,SAAS,KAAK,MAAM;AACjE,UAAM,GAAG,QAAQ,uBAAY,GAAG,wBAAwB,MAAM,CAAC,EAAE;AACjE,QAAI;AACH,YAAM,SAAS,MAAM,YAAY,EAAE;AACnC,YAAM,GAAG,QAAQ,sBAAW;AAC5B,aAAO;AAAA,IACR,SAAS,OAAO;AACf,YAAM,GAAG,QAAQ,wBAAa;AAC9B,YAAM;AAAA,IACP,UAAE;AACD,UAAI,KAAK,kBAAkB,wBAAM;AAChC,QAAC,QAAQ,OAAsB,QAAQ;AAAA,MACxC;AAAA,IACD;AAAA,EACD;AACD;AAEO,MAAM,wBAGH,6BAAwD;AAAA,EACjE,QAAiB,wBAAU,IAAY;AAAA,EAEvC,MAAe,YAAe,aAAoF;AACjH,UAAM,gBAAgB,KAAK,KAAK,cAAc,CAAC;AAC/C,UAAM,KAAK,IAAI,gBAAgB,KAAK,SAAS,KAAK,SAAS,KAAK,QAAQ,KAAK,cAAc,CAAC;AAC5F,UAAM,GAAG,QAAQ,eAAI,IAAI,aAAa,aAAa,EAAE,CAAC;AACtD,QAAI;AACH,YAAM,SAAS,MAAM,YAAY,EAAE;AACnC,YAAM,GAAG,QAAQ,eAAI,IAAI,qBAAqB,aAAa,EAAE,CAAC;AAC9D,aAAO;AAAA,IACR,SAAS,GAAG;AACX,YAAM,GAAG,QAAQ,eAAI,IAAI,yBAAyB,aAAa,EAAE,CAAC;AAClE,YAAM;AAAA,IACP;AAAA,EACD;AACD;","names":[]}
|
|
@@ -5,20 +5,20 @@ import type { PgDialect } from "../pg-core/dialect.cjs";
|
|
|
5
5
|
import { PgTransaction } from "../pg-core/index.cjs";
|
|
6
6
|
import type { SelectedFieldsOrdered } from "../pg-core/query-builders/select.types.cjs";
|
|
7
7
|
import type { PgTransactionConfig, PreparedQueryConfig, QueryResultHKT } from "../pg-core/session.cjs";
|
|
8
|
-
import {
|
|
8
|
+
import { PgPreparedQuery, PgSession } from "../pg-core/session.cjs";
|
|
9
9
|
import type { RelationalSchemaConfig, TablesRelationalConfig } from "../relations.cjs";
|
|
10
10
|
import { type Query } from "../sql/sql.cjs";
|
|
11
11
|
import { type Assume } from "../utils.cjs";
|
|
12
12
|
export type NeonClient = Pool | PoolClient | Client;
|
|
13
|
-
export declare class NeonPreparedQuery<T extends PreparedQueryConfig> extends
|
|
13
|
+
export declare class NeonPreparedQuery<T extends PreparedQueryConfig> extends PgPreparedQuery<T> {
|
|
14
14
|
private client;
|
|
15
15
|
private params;
|
|
16
16
|
private logger;
|
|
17
17
|
private fields;
|
|
18
18
|
private customResultMapper?;
|
|
19
19
|
static readonly [entityKind]: string;
|
|
20
|
-
private
|
|
21
|
-
private
|
|
20
|
+
private rawQueryConfig;
|
|
21
|
+
private queryConfig;
|
|
22
22
|
constructor(client: NeonClient, queryString: string, params: unknown[], logger: Logger, fields: SelectedFieldsOrdered | undefined, name: string | undefined, customResultMapper?: ((rows: unknown[][]) => T['execute']) | undefined);
|
|
23
23
|
execute(placeholderValues?: Record<string, unknown> | undefined): Promise<T['execute']>;
|
|
24
24
|
all(placeholderValues?: Record<string, unknown> | undefined): Promise<T['all']>;
|
|
@@ -34,7 +34,7 @@ export declare class NeonSession<TFullSchema extends Record<string, unknown>, TS
|
|
|
34
34
|
static readonly [entityKind]: string;
|
|
35
35
|
private logger;
|
|
36
36
|
constructor(client: NeonClient, dialect: PgDialect, schema: RelationalSchemaConfig<TSchema> | undefined, options?: NeonSessionOptions);
|
|
37
|
-
prepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(query: Query, fields: SelectedFieldsOrdered | undefined, name: string | undefined, customResultMapper?: (rows: unknown[][]) => T['execute']):
|
|
37
|
+
prepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(query: Query, fields: SelectedFieldsOrdered | undefined, name: string | undefined, customResultMapper?: (rows: unknown[][]) => T['execute']): PgPreparedQuery<T>;
|
|
38
38
|
query(query: string, params: unknown[]): Promise<QueryResult>;
|
|
39
39
|
queryObjects<T extends QueryResultRow>(query: string, params: unknown[]): Promise<QueryResult<T>>;
|
|
40
40
|
transaction<T>(transaction: (tx: NeonTransaction<TFullSchema, TSchema>) => Promise<T>, config?: PgTransactionConfig): Promise<T>;
|
|
@@ -5,20 +5,20 @@ import type { PgDialect } from "../pg-core/dialect.js";
|
|
|
5
5
|
import { PgTransaction } from "../pg-core/index.js";
|
|
6
6
|
import type { SelectedFieldsOrdered } from "../pg-core/query-builders/select.types.js";
|
|
7
7
|
import type { PgTransactionConfig, PreparedQueryConfig, QueryResultHKT } from "../pg-core/session.js";
|
|
8
|
-
import {
|
|
8
|
+
import { PgPreparedQuery, PgSession } from "../pg-core/session.js";
|
|
9
9
|
import type { RelationalSchemaConfig, TablesRelationalConfig } from "../relations.js";
|
|
10
10
|
import { type Query } from "../sql/sql.js";
|
|
11
11
|
import { type Assume } from "../utils.js";
|
|
12
12
|
export type NeonClient = Pool | PoolClient | Client;
|
|
13
|
-
export declare class NeonPreparedQuery<T extends PreparedQueryConfig> extends
|
|
13
|
+
export declare class NeonPreparedQuery<T extends PreparedQueryConfig> extends PgPreparedQuery<T> {
|
|
14
14
|
private client;
|
|
15
15
|
private params;
|
|
16
16
|
private logger;
|
|
17
17
|
private fields;
|
|
18
18
|
private customResultMapper?;
|
|
19
19
|
static readonly [entityKind]: string;
|
|
20
|
-
private
|
|
21
|
-
private
|
|
20
|
+
private rawQueryConfig;
|
|
21
|
+
private queryConfig;
|
|
22
22
|
constructor(client: NeonClient, queryString: string, params: unknown[], logger: Logger, fields: SelectedFieldsOrdered | undefined, name: string | undefined, customResultMapper?: ((rows: unknown[][]) => T['execute']) | undefined);
|
|
23
23
|
execute(placeholderValues?: Record<string, unknown> | undefined): Promise<T['execute']>;
|
|
24
24
|
all(placeholderValues?: Record<string, unknown> | undefined): Promise<T['all']>;
|
|
@@ -34,7 +34,7 @@ export declare class NeonSession<TFullSchema extends Record<string, unknown>, TS
|
|
|
34
34
|
static readonly [entityKind]: string;
|
|
35
35
|
private logger;
|
|
36
36
|
constructor(client: NeonClient, dialect: PgDialect, schema: RelationalSchemaConfig<TSchema> | undefined, options?: NeonSessionOptions);
|
|
37
|
-
prepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(query: Query, fields: SelectedFieldsOrdered | undefined, name: string | undefined, customResultMapper?: (rows: unknown[][]) => T['execute']):
|
|
37
|
+
prepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(query: Query, fields: SelectedFieldsOrdered | undefined, name: string | undefined, customResultMapper?: (rows: unknown[][]) => T['execute']): PgPreparedQuery<T>;
|
|
38
38
|
query(query: string, params: unknown[]): Promise<QueryResult>;
|
|
39
39
|
queryObjects<T extends QueryResultRow>(query: string, params: unknown[]): Promise<QueryResult<T>>;
|
|
40
40
|
transaction<T>(transaction: (tx: NeonTransaction<TFullSchema, TSchema>) => Promise<T>, config?: PgTransactionConfig): Promise<T>;
|
|
@@ -4,34 +4,34 @@ import {
|
|
|
4
4
|
import { entityKind } from "../entity.js";
|
|
5
5
|
import { NoopLogger } from "../logger.js";
|
|
6
6
|
import { PgTransaction } from "../pg-core/index.js";
|
|
7
|
-
import {
|
|
7
|
+
import { PgPreparedQuery, PgSession } from "../pg-core/session.js";
|
|
8
8
|
import { fillPlaceholders, sql } from "../sql/sql.js";
|
|
9
9
|
import { mapResultRow } from "../utils.js";
|
|
10
|
-
class NeonPreparedQuery extends
|
|
10
|
+
class NeonPreparedQuery extends PgPreparedQuery {
|
|
11
11
|
constructor(client, queryString, params, logger, fields, name, customResultMapper) {
|
|
12
|
-
super();
|
|
12
|
+
super({ sql: queryString, params });
|
|
13
13
|
this.client = client;
|
|
14
14
|
this.params = params;
|
|
15
15
|
this.logger = logger;
|
|
16
16
|
this.fields = fields;
|
|
17
17
|
this.customResultMapper = customResultMapper;
|
|
18
|
-
this.
|
|
18
|
+
this.rawQueryConfig = {
|
|
19
19
|
name,
|
|
20
20
|
text: queryString
|
|
21
21
|
};
|
|
22
|
-
this.
|
|
22
|
+
this.queryConfig = {
|
|
23
23
|
name,
|
|
24
24
|
text: queryString,
|
|
25
25
|
rowMode: "array"
|
|
26
26
|
};
|
|
27
27
|
}
|
|
28
28
|
static [entityKind] = "NeonPreparedQuery";
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
rawQueryConfig;
|
|
30
|
+
queryConfig;
|
|
31
31
|
async execute(placeholderValues = {}) {
|
|
32
32
|
const params = fillPlaceholders(this.params, placeholderValues);
|
|
33
|
-
this.logger.logQuery(this.
|
|
34
|
-
const { fields, client, rawQuery, query, joinsNotNullableMap, customResultMapper } = this;
|
|
33
|
+
this.logger.logQuery(this.rawQueryConfig.text, params);
|
|
34
|
+
const { fields, client, rawQueryConfig: rawQuery, queryConfig: query, joinsNotNullableMap, customResultMapper } = this;
|
|
35
35
|
if (!fields && !customResultMapper) {
|
|
36
36
|
return client.query(rawQuery, params);
|
|
37
37
|
}
|
|
@@ -40,13 +40,13 @@ class NeonPreparedQuery extends PreparedQuery {
|
|
|
40
40
|
}
|
|
41
41
|
all(placeholderValues = {}) {
|
|
42
42
|
const params = fillPlaceholders(this.params, placeholderValues);
|
|
43
|
-
this.logger.logQuery(this.
|
|
44
|
-
return this.client.query(this.
|
|
43
|
+
this.logger.logQuery(this.rawQueryConfig.text, params);
|
|
44
|
+
return this.client.query(this.rawQueryConfig, params).then((result) => result.rows);
|
|
45
45
|
}
|
|
46
46
|
values(placeholderValues = {}) {
|
|
47
47
|
const params = fillPlaceholders(this.params, placeholderValues);
|
|
48
|
-
this.logger.logQuery(this.
|
|
49
|
-
return this.client.query(this.
|
|
48
|
+
this.logger.logQuery(this.rawQueryConfig.text, params);
|
|
49
|
+
return this.client.query(this.queryConfig, params).then((result) => result.rows);
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
52
|
class NeonSession extends PgSession {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/neon-serverless/session.ts"],"sourcesContent":["import {\n\ttype Client,\n\tPool,\n\ttype PoolClient,\n\ttype QueryArrayConfig,\n\ttype QueryConfig,\n\ttype QueryResult,\n\ttype QueryResultRow,\n} from '@neondatabase/serverless';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { PgDialect } from '~/pg-core/dialect.ts';\nimport { PgTransaction } from '~/pg-core/index.ts';\nimport type { SelectedFieldsOrdered } from '~/pg-core/query-builders/select.types.ts';\nimport type { PgTransactionConfig, PreparedQueryConfig, QueryResultHKT } from '~/pg-core/session.ts';\nimport {
|
|
1
|
+
{"version":3,"sources":["../../src/neon-serverless/session.ts"],"sourcesContent":["import {\n\ttype Client,\n\tPool,\n\ttype PoolClient,\n\ttype QueryArrayConfig,\n\ttype QueryConfig,\n\ttype QueryResult,\n\ttype QueryResultRow,\n} from '@neondatabase/serverless';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { PgDialect } from '~/pg-core/dialect.ts';\nimport { PgTransaction } from '~/pg-core/index.ts';\nimport type { SelectedFieldsOrdered } from '~/pg-core/query-builders/select.types.ts';\nimport type { PgTransactionConfig, PreparedQueryConfig, QueryResultHKT } from '~/pg-core/session.ts';\nimport { PgPreparedQuery, PgSession } from '~/pg-core/session.ts';\nimport type { RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport { fillPlaceholders, type Query, sql } from '~/sql/sql.ts';\nimport { type Assume, mapResultRow } from '~/utils.ts';\n\nexport type NeonClient = Pool | PoolClient | Client;\n\nexport class NeonPreparedQuery<T extends PreparedQueryConfig> extends PgPreparedQuery<T> {\n\tstatic readonly [entityKind]: string = 'NeonPreparedQuery';\n\n\tprivate rawQueryConfig: QueryConfig;\n\tprivate queryConfig: QueryArrayConfig;\n\n\tconstructor(\n\t\tprivate client: NeonClient,\n\t\tqueryString: string,\n\t\tprivate params: unknown[],\n\t\tprivate logger: Logger,\n\t\tprivate fields: SelectedFieldsOrdered | undefined,\n\t\tname: string | undefined,\n\t\tprivate customResultMapper?: (rows: unknown[][]) => T['execute'],\n\t) {\n\t\tsuper({ sql: queryString, params });\n\t\tthis.rawQueryConfig = {\n\t\t\tname,\n\t\t\ttext: queryString,\n\t\t};\n\t\tthis.queryConfig = {\n\t\t\tname,\n\t\t\ttext: queryString,\n\t\t\trowMode: 'array',\n\t\t};\n\t}\n\n\tasync execute(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['execute']> {\n\t\tconst params = fillPlaceholders(this.params, placeholderValues);\n\n\t\tthis.logger.logQuery(this.rawQueryConfig.text, params);\n\n\t\tconst { fields, client, rawQueryConfig: rawQuery, queryConfig: query, joinsNotNullableMap, customResultMapper } =\n\t\t\tthis;\n\t\tif (!fields && !customResultMapper) {\n\t\t\treturn client.query(rawQuery, params);\n\t\t}\n\n\t\tconst result = await client.query(query, params);\n\n\t\treturn customResultMapper\n\t\t\t? customResultMapper(result.rows)\n\t\t\t: result.rows.map((row) => mapResultRow<T['execute']>(fields!, row, joinsNotNullableMap));\n\t}\n\n\tall(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['all']> {\n\t\tconst params = fillPlaceholders(this.params, placeholderValues);\n\t\tthis.logger.logQuery(this.rawQueryConfig.text, params);\n\t\treturn this.client.query(this.rawQueryConfig, params).then((result) => result.rows);\n\t}\n\n\tvalues(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['values']> {\n\t\tconst params = fillPlaceholders(this.params, placeholderValues);\n\t\tthis.logger.logQuery(this.rawQueryConfig.text, params);\n\t\treturn this.client.query(this.queryConfig, params).then((result) => result.rows);\n\t}\n}\n\nexport interface NeonSessionOptions {\n\tlogger?: Logger;\n}\n\nexport class NeonSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends PgSession<NeonQueryResultHKT, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'NeonSession';\n\n\tprivate logger: Logger;\n\n\tconstructor(\n\t\tprivate client: NeonClient,\n\t\tdialect: PgDialect,\n\t\tprivate schema: RelationalSchemaConfig<TSchema> | undefined,\n\t\tprivate options: NeonSessionOptions = {},\n\t) {\n\t\tsuper(dialect);\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t}\n\n\tprepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\tname: string | undefined,\n\t\tcustomResultMapper?: (rows: unknown[][]) => T['execute'],\n\t): PgPreparedQuery<T> {\n\t\treturn new NeonPreparedQuery(this.client, query.sql, query.params, this.logger, fields, name, customResultMapper);\n\t}\n\n\tasync query(query: string, params: unknown[]): Promise<QueryResult> {\n\t\tthis.logger.logQuery(query, params);\n\t\tconst result = await this.client.query({\n\t\t\trowMode: 'array',\n\t\t\ttext: query,\n\t\t\tvalues: params,\n\t\t});\n\t\treturn result;\n\t}\n\n\tasync queryObjects<T extends QueryResultRow>(\n\t\tquery: string,\n\t\tparams: unknown[],\n\t): Promise<QueryResult<T>> {\n\t\treturn this.client.query<T>(query, params);\n\t}\n\n\toverride async transaction<T>(\n\t\ttransaction: (tx: NeonTransaction<TFullSchema, TSchema>) => Promise<T>,\n\t\tconfig: PgTransactionConfig = {},\n\t): Promise<T> {\n\t\tconst session = this.client instanceof Pool // eslint-disable-line no-instanceof/no-instanceof\n\t\t\t? new NeonSession(await this.client.connect(), this.dialect, this.schema, this.options)\n\t\t\t: this;\n\t\tconst tx = new NeonTransaction(this.dialect, session, this.schema);\n\t\tawait tx.execute(sql`begin ${tx.getTransactionConfigSQL(config)}`);\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait tx.execute(sql`commit`);\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tawait tx.execute(sql`rollback`);\n\t\t\tthrow error;\n\t\t} finally {\n\t\t\tif (this.client instanceof Pool) { // eslint-disable-line no-instanceof/no-instanceof\n\t\t\t\t(session.client as PoolClient).release();\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport class NeonTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends PgTransaction<NeonQueryResultHKT, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'NeonTransaction';\n\n\toverride async transaction<T>(transaction: (tx: NeonTransaction<TFullSchema, TSchema>) => Promise<T>): Promise<T> {\n\t\tconst savepointName = `sp${this.nestedIndex + 1}`;\n\t\tconst tx = new NeonTransaction(this.dialect, this.session, this.schema, this.nestedIndex + 1);\n\t\tawait tx.execute(sql.raw(`savepoint ${savepointName}`));\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait tx.execute(sql.raw(`release savepoint ${savepointName}`));\n\t\t\treturn result;\n\t\t} catch (e) {\n\t\t\tawait tx.execute(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t\tthrow e;\n\t\t}\n\t}\n}\n\nexport interface NeonQueryResultHKT extends QueryResultHKT {\n\ttype: QueryResult<Assume<this['row'], QueryResultRow>>;\n}\n"],"mappings":"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","names":[]}
|