neoorm 0.1.5 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +206 -21
- package/dist/bin/neoorm.js +70 -4
- package/dist/bin/neoorm.js.map +1 -1
- package/dist/codegen/diff-manifest.d.ts +3 -0
- package/dist/codegen/diff-manifest.d.ts.map +1 -1
- package/dist/codegen/diff-manifest.js +15 -0
- package/dist/codegen/diff-manifest.js.map +1 -1
- package/dist/codegen/emit-includes.d.ts.map +1 -1
- package/dist/codegen/emit-includes.js +7 -1
- package/dist/codegen/emit-includes.js.map +1 -1
- package/dist/codegen/emit-models.d.ts.map +1 -1
- package/dist/codegen/emit-models.js +28 -6
- package/dist/codegen/emit-models.js.map +1 -1
- package/dist/codegen/generate.d.ts +7 -3
- package/dist/codegen/generate.d.ts.map +1 -1
- package/dist/codegen/generate.js +17 -7
- package/dist/codegen/generate.js.map +1 -1
- package/dist/codegen/schema-to-manifest.d.ts.map +1 -1
- package/dist/codegen/schema-to-manifest.js +11 -0
- package/dist/codegen/schema-to-manifest.js.map +1 -1
- package/dist/dialect/types.d.ts +1 -0
- package/dist/dialect/types.d.ts.map +1 -1
- package/dist/index.d.ts +8 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/init/scaffold.d.ts +19 -0
- package/dist/init/scaffold.d.ts.map +1 -0
- package/dist/init/scaffold.js +92 -0
- package/dist/init/scaffold.js.map +1 -0
- package/dist/init/templates.d.ts +4 -0
- package/dist/init/templates.d.ts.map +1 -0
- package/dist/init/templates.js +44 -0
- package/dist/init/templates.js.map +1 -0
- package/dist/migrate/runner.d.ts +5 -0
- package/dist/migrate/runner.d.ts.map +1 -1
- package/dist/migrate/runner.js +67 -1
- package/dist/migrate/runner.js.map +1 -1
- package/dist/plugins/builtin.d.ts.map +1 -1
- package/dist/plugins/builtin.js +6 -0
- package/dist/plugins/builtin.js.map +1 -1
- package/dist/plugins/json/operators.d.ts +3 -0
- package/dist/plugins/json/operators.d.ts.map +1 -0
- package/dist/plugins/json/operators.js +65 -0
- package/dist/plugins/json/operators.js.map +1 -0
- package/dist/plugins/types.d.ts +1 -0
- package/dist/plugins/types.d.ts.map +1 -1
- package/dist/runtime/client.d.ts +30 -3
- package/dist/runtime/client.d.ts.map +1 -1
- package/dist/runtime/client.js +46 -27
- package/dist/runtime/client.js.map +1 -1
- package/dist/runtime/errors.d.ts +20 -0
- package/dist/runtime/errors.d.ts.map +1 -0
- package/dist/runtime/errors.js +68 -0
- package/dist/runtime/errors.js.map +1 -0
- package/dist/runtime/pg-error.d.ts +19 -0
- package/dist/runtime/pg-error.d.ts.map +1 -0
- package/dist/runtime/pg-error.js +110 -0
- package/dist/runtime/pg-error.js.map +1 -0
- package/dist/runtime/query/aggregate.d.ts +11 -0
- package/dist/runtime/query/aggregate.d.ts.map +1 -0
- package/dist/runtime/query/aggregate.js +44 -0
- package/dist/runtime/query/aggregate.js.map +1 -0
- package/dist/runtime/query/compile.d.ts +15 -5
- package/dist/runtime/query/compile.d.ts.map +1 -1
- package/dist/runtime/query/compile.js +72 -13
- package/dist/runtime/query/compile.js.map +1 -1
- package/dist/runtime/query/count.d.ts +3 -3
- package/dist/runtime/query/count.d.ts.map +1 -1
- package/dist/runtime/query/count.js +7 -4
- package/dist/runtime/query/count.js.map +1 -1
- package/dist/runtime/query/create.d.ts +7 -4
- package/dist/runtime/query/create.d.ts.map +1 -1
- package/dist/runtime/query/create.js +33 -16
- package/dist/runtime/query/create.js.map +1 -1
- package/dist/runtime/query/cursor-codec.d.ts +3 -0
- package/dist/runtime/query/cursor-codec.d.ts.map +1 -0
- package/dist/runtime/query/cursor-codec.js +27 -0
- package/dist/runtime/query/cursor-codec.js.map +1 -0
- package/dist/runtime/query/cursor.d.ts +22 -0
- package/dist/runtime/query/cursor.d.ts.map +1 -0
- package/dist/runtime/query/cursor.js +84 -0
- package/dist/runtime/query/cursor.js.map +1 -0
- package/dist/runtime/query/delete.d.ts +4 -4
- package/dist/runtime/query/delete.d.ts.map +1 -1
- package/dist/runtime/query/delete.js +11 -7
- package/dist/runtime/query/delete.js.map +1 -1
- package/dist/runtime/query/execute.d.ts +16 -0
- package/dist/runtime/query/execute.d.ts.map +1 -0
- package/dist/runtime/query/execute.js +74 -0
- package/dist/runtime/query/execute.js.map +1 -0
- package/dist/runtime/query/find.d.ts +7 -5
- package/dist/runtime/query/find.d.ts.map +1 -1
- package/dist/runtime/query/find.js +134 -19
- package/dist/runtime/query/find.js.map +1 -1
- package/dist/runtime/query/paginate.d.ts +17 -0
- package/dist/runtime/query/paginate.d.ts.map +1 -0
- package/dist/runtime/query/paginate.js +35 -0
- package/dist/runtime/query/paginate.js.map +1 -0
- package/dist/runtime/query/relation-writes.d.ts +5 -4
- package/dist/runtime/query/relation-writes.d.ts.map +1 -1
- package/dist/runtime/query/relation-writes.js +117 -38
- package/dist/runtime/query/relation-writes.js.map +1 -1
- package/dist/runtime/query/update.d.ts +4 -4
- package/dist/runtime/query/update.d.ts.map +1 -1
- package/dist/runtime/query/update.js +63 -21
- package/dist/runtime/query/update.js.map +1 -1
- package/dist/runtime/query/updated-at.d.ts +6 -0
- package/dist/runtime/query/updated-at.d.ts.map +1 -0
- package/dist/runtime/query/updated-at.js +21 -0
- package/dist/runtime/query/updated-at.js.map +1 -0
- package/dist/runtime/query/upsert.d.ts +2 -2
- package/dist/runtime/query/upsert.d.ts.map +1 -1
- package/dist/runtime/query/upsert.js +12 -8
- package/dist/runtime/query/upsert.js.map +1 -1
- package/dist/runtime/types.d.ts +19 -10
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/schema/column-where.d.ts +14 -1
- package/dist/schema/column-where.d.ts.map +1 -1
- package/dist/schema/column.d.ts +4 -0
- package/dist/schema/column.d.ts.map +1 -1
- package/dist/schema/column.js +6 -0
- package/dist/schema/column.js.map +1 -1
- package/dist/schema/index.d.ts +1 -1
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/nested-relation-types.d.ts +1 -0
- package/dist/schema/nested-relation-types.d.ts.map +1 -1
- package/dist/schema/relation-types.d.ts +42 -0
- package/dist/schema/relation-types.d.ts.map +1 -1
- package/dist/schema/types.d.ts +60 -3
- package/dist/schema/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/runtime/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAG1B,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,YAAY,EAAiB,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/runtime/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export type QueryOperation = "select" | "insert" | "update" | "delete" | "upsert" | "raw";
|
|
2
|
+
export type QueryErrorContext = {
|
|
3
|
+
operation: QueryOperation;
|
|
4
|
+
tableAccessor?: string;
|
|
5
|
+
tableSqlName?: string;
|
|
6
|
+
columnTsName?: string;
|
|
7
|
+
columnSqlName?: string;
|
|
8
|
+
sql: string;
|
|
9
|
+
pgCode?: string;
|
|
10
|
+
constraint?: string;
|
|
11
|
+
detail?: string;
|
|
12
|
+
migrationHint?: string;
|
|
13
|
+
};
|
|
14
|
+
export declare function formatQueryError(context: QueryErrorContext): string;
|
|
15
|
+
export declare class NeoOrmQueryError extends Error {
|
|
16
|
+
readonly context: QueryErrorContext;
|
|
17
|
+
readonly cause: unknown;
|
|
18
|
+
constructor(context: QueryErrorContext, cause?: unknown);
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/runtime/errors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GACtB,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,KAAK,CAAC;AAEV,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,EAAE,cAAc,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAqBF,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CA4CnE;AAED,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;IACpC,SAAkB,KAAK,EAAE,OAAO,CAAC;gBAErB,OAAO,EAAE,iBAAiB,EAAE,KAAK,CAAC,EAAE,OAAO;CAMxD"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
const OPERATION_LABEL = {
|
|
2
|
+
select: "Select",
|
|
3
|
+
insert: "Insert",
|
|
4
|
+
update: "Update",
|
|
5
|
+
delete: "Delete",
|
|
6
|
+
upsert: "Upsert",
|
|
7
|
+
raw: "Query",
|
|
8
|
+
};
|
|
9
|
+
function operationTarget(context) {
|
|
10
|
+
if (context.tableAccessor) {
|
|
11
|
+
return `"${context.tableAccessor}"`;
|
|
12
|
+
}
|
|
13
|
+
if (context.tableSqlName) {
|
|
14
|
+
return `"${context.tableSqlName}"`;
|
|
15
|
+
}
|
|
16
|
+
return "query";
|
|
17
|
+
}
|
|
18
|
+
export function formatQueryError(context) {
|
|
19
|
+
const label = OPERATION_LABEL[context.operation];
|
|
20
|
+
const target = operationTarget(context);
|
|
21
|
+
const reason = context.detail ?? "database error";
|
|
22
|
+
const lines = [`${label} on ${target} failed: ${reason}`];
|
|
23
|
+
if (context.tableAccessor || context.tableSqlName) {
|
|
24
|
+
const parts = [];
|
|
25
|
+
if (context.tableAccessor)
|
|
26
|
+
parts.push(`accessor: ${context.tableAccessor}`);
|
|
27
|
+
if (context.tableSqlName)
|
|
28
|
+
parts.push(`SQL: "${context.tableSqlName}"`);
|
|
29
|
+
lines.push(` Table: ${parts.join(", ")}`);
|
|
30
|
+
}
|
|
31
|
+
if (context.columnTsName || context.columnSqlName) {
|
|
32
|
+
if (context.columnTsName &&
|
|
33
|
+
context.columnSqlName &&
|
|
34
|
+
context.columnTsName !== context.columnSqlName) {
|
|
35
|
+
lines.push(` Column: ${context.columnTsName} (SQL: "${context.columnSqlName}")`);
|
|
36
|
+
}
|
|
37
|
+
else if (context.columnTsName) {
|
|
38
|
+
lines.push(` Column: ${context.columnTsName}`);
|
|
39
|
+
}
|
|
40
|
+
else if (context.columnSqlName) {
|
|
41
|
+
lines.push(` Column: SQL: "${context.columnSqlName}"`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (context.constraint) {
|
|
45
|
+
lines.push(` Constraint: ${context.constraint}`);
|
|
46
|
+
}
|
|
47
|
+
if (context.pgCode) {
|
|
48
|
+
lines.push(` PostgreSQL code: ${context.pgCode}`);
|
|
49
|
+
}
|
|
50
|
+
if (context.sql) {
|
|
51
|
+
lines.push(` SQL: ${context.sql}`);
|
|
52
|
+
}
|
|
53
|
+
if (context.migrationHint) {
|
|
54
|
+
lines.push(` Migration: ${context.migrationHint}`);
|
|
55
|
+
}
|
|
56
|
+
return lines.join("\n");
|
|
57
|
+
}
|
|
58
|
+
export class NeoOrmQueryError extends Error {
|
|
59
|
+
context;
|
|
60
|
+
cause;
|
|
61
|
+
constructor(context, cause) {
|
|
62
|
+
super(formatQueryError(context));
|
|
63
|
+
this.name = "NeoOrmQueryError";
|
|
64
|
+
this.context = context;
|
|
65
|
+
this.cause = cause;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/runtime/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Manifest } from "../dialect/types.js";
|
|
2
|
+
import type { QueryErrorContext, QueryOperation } from "./errors.js";
|
|
3
|
+
export type PgErrorLike = {
|
|
4
|
+
code?: string;
|
|
5
|
+
message?: string;
|
|
6
|
+
detail?: string;
|
|
7
|
+
table?: string;
|
|
8
|
+
column?: string;
|
|
9
|
+
constraint?: string;
|
|
10
|
+
schema?: string;
|
|
11
|
+
};
|
|
12
|
+
export declare function isPgError(err: unknown): err is PgErrorLike;
|
|
13
|
+
export declare function truncateSql(sql: string, maxLen?: number): string;
|
|
14
|
+
export declare function isSchemaDriftPgCode(code: string | undefined): boolean;
|
|
15
|
+
export declare function enrichPgError(err: PgErrorLike, manifest: Manifest, base: Pick<QueryErrorContext, "operation" | "sql"> & {
|
|
16
|
+
tableAccessor?: string;
|
|
17
|
+
}): QueryErrorContext;
|
|
18
|
+
export declare function emptyReturningContext(operation: Extract<QueryOperation, "insert" | "upsert">, manifest: Manifest, tableAccessor: string, sql: string): QueryErrorContext;
|
|
19
|
+
//# sourceMappingURL=pg-error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pg-error.d.ts","sourceRoot":"","sources":["../../src/runtime/pg-error.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAiB,MAAM,qBAAqB,CAAC;AACnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAErE,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,WAAW,CAO1D;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,SAAM,GAAG,MAAM,CAM7D;AAyDD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAErE;AAED,wBAAgB,aAAa,CAC3B,GAAG,EAAE,WAAW,EAChB,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,IAAI,CAAC,iBAAiB,EAAE,WAAW,GAAG,KAAK,CAAC,GAAG;IAAE,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9E,iBAAiB,CAwCnB;AAED,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,OAAO,CAAC,cAAc,EAAE,QAAQ,GAAG,QAAQ,CAAC,EACvD,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,MAAM,GACV,iBAAiB,CAYnB"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
export function isPgError(err) {
|
|
2
|
+
return (typeof err === "object" &&
|
|
3
|
+
err !== null &&
|
|
4
|
+
"code" in err &&
|
|
5
|
+
typeof err.code === "string");
|
|
6
|
+
}
|
|
7
|
+
export function truncateSql(sql, maxLen = 240) {
|
|
8
|
+
const collapsed = sql.replace(/\s+/g, " ").trim();
|
|
9
|
+
if (collapsed.length <= maxLen) {
|
|
10
|
+
return collapsed;
|
|
11
|
+
}
|
|
12
|
+
return `${collapsed.slice(0, maxLen - 1)}…`;
|
|
13
|
+
}
|
|
14
|
+
function findTableBySqlName(manifest, sqlName) {
|
|
15
|
+
if (!sqlName)
|
|
16
|
+
return undefined;
|
|
17
|
+
return Object.values(manifest.tables).find((table) => table.sqlName === sqlName);
|
|
18
|
+
}
|
|
19
|
+
function findTableByAccessor(manifest, accessor) {
|
|
20
|
+
if (!accessor)
|
|
21
|
+
return undefined;
|
|
22
|
+
return manifest.tables[accessor];
|
|
23
|
+
}
|
|
24
|
+
function resolveColumnNames(table, sqlColumn) {
|
|
25
|
+
if (!sqlColumn) {
|
|
26
|
+
return {};
|
|
27
|
+
}
|
|
28
|
+
const col = table?.columns.find((c) => c.sqlName === sqlColumn);
|
|
29
|
+
return {
|
|
30
|
+
columnSqlName: sqlColumn,
|
|
31
|
+
columnTsName: col?.tsName ?? sqlColumn,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
function headlineForPgCode(err) {
|
|
35
|
+
switch (err.code) {
|
|
36
|
+
case "23502":
|
|
37
|
+
return err.column
|
|
38
|
+
? `null value in column "${err.column}" violates not-null constraint`
|
|
39
|
+
: "null value violates not-null constraint";
|
|
40
|
+
case "23505":
|
|
41
|
+
return err.constraint
|
|
42
|
+
? `duplicate key value violates unique constraint "${err.constraint}"`
|
|
43
|
+
: "duplicate key value violates unique constraint";
|
|
44
|
+
case "23503":
|
|
45
|
+
return err.constraint
|
|
46
|
+
? `foreign key violation on constraint "${err.constraint}"`
|
|
47
|
+
: "foreign key violation";
|
|
48
|
+
case "23514":
|
|
49
|
+
return err.constraint
|
|
50
|
+
? `check constraint "${err.constraint}" violated`
|
|
51
|
+
: "check constraint violated";
|
|
52
|
+
case "42P01":
|
|
53
|
+
return err.message ?? "relation does not exist";
|
|
54
|
+
case "42703":
|
|
55
|
+
return err.column
|
|
56
|
+
? `column "${err.column}" does not exist`
|
|
57
|
+
: (err.message ?? "column does not exist");
|
|
58
|
+
default:
|
|
59
|
+
return err.message ?? "database error";
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
const SCHEMA_DRIFT_CODES = new Set(["42P01", "42703", "23503"]);
|
|
63
|
+
export function isSchemaDriftPgCode(code) {
|
|
64
|
+
return code !== undefined && SCHEMA_DRIFT_CODES.has(code);
|
|
65
|
+
}
|
|
66
|
+
export function enrichPgError(err, manifest, base) {
|
|
67
|
+
const table = findTableByAccessor(manifest, base.tableAccessor) ??
|
|
68
|
+
findTableBySqlName(manifest, err.table);
|
|
69
|
+
const { columnTsName, columnSqlName } = resolveColumnNames(table, err.column);
|
|
70
|
+
const context = {
|
|
71
|
+
operation: base.operation,
|
|
72
|
+
sql: truncateSql(base.sql),
|
|
73
|
+
detail: err.detail ? `${headlineForPgCode(err)} (${err.detail})` : headlineForPgCode(err),
|
|
74
|
+
};
|
|
75
|
+
const tableAccessor = base.tableAccessor ?? table?.accessor;
|
|
76
|
+
if (tableAccessor !== undefined) {
|
|
77
|
+
context.tableAccessor = tableAccessor;
|
|
78
|
+
}
|
|
79
|
+
const tableSqlName = table?.sqlName ?? err.table;
|
|
80
|
+
if (tableSqlName !== undefined) {
|
|
81
|
+
context.tableSqlName = tableSqlName;
|
|
82
|
+
}
|
|
83
|
+
if (columnTsName !== undefined) {
|
|
84
|
+
context.columnTsName = columnTsName;
|
|
85
|
+
}
|
|
86
|
+
if (columnSqlName !== undefined) {
|
|
87
|
+
context.columnSqlName = columnSqlName;
|
|
88
|
+
}
|
|
89
|
+
if (err.code !== undefined) {
|
|
90
|
+
context.pgCode = err.code;
|
|
91
|
+
}
|
|
92
|
+
if (err.constraint !== undefined) {
|
|
93
|
+
context.constraint = err.constraint;
|
|
94
|
+
}
|
|
95
|
+
return context;
|
|
96
|
+
}
|
|
97
|
+
export function emptyReturningContext(operation, manifest, tableAccessor, sql) {
|
|
98
|
+
const table = manifest.tables[tableAccessor];
|
|
99
|
+
const context = {
|
|
100
|
+
operation,
|
|
101
|
+
tableAccessor,
|
|
102
|
+
sql: truncateSql(sql),
|
|
103
|
+
detail: `${operation === "insert" ? "INSERT" : "UPSERT"} … RETURNING returned no row`,
|
|
104
|
+
};
|
|
105
|
+
if (table?.sqlName !== undefined) {
|
|
106
|
+
context.tableSqlName = table.sqlName;
|
|
107
|
+
}
|
|
108
|
+
return context;
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=pg-error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pg-error.js","sourceRoot":"","sources":["../../src/runtime/pg-error.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Executor } from "../executor.js";
|
|
2
|
+
import { type QueryRuntime } from "./execute.js";
|
|
3
|
+
export declare function aggregateRecords(executor: Executor, runtime: QueryRuntime, tableAccessor: string, args: {
|
|
4
|
+
where?: Record<string, unknown>;
|
|
5
|
+
_count?: true;
|
|
6
|
+
_avg?: Record<string, true>;
|
|
7
|
+
_sum?: Record<string, true>;
|
|
8
|
+
_min?: Record<string, true>;
|
|
9
|
+
_max?: Record<string, true>;
|
|
10
|
+
}): Promise<Record<string, unknown>>;
|
|
11
|
+
//# sourceMappingURL=aggregate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aggregate.d.ts","sourceRoot":"","sources":["../../../src/runtime/query/aggregate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAO/C,OAAO,EAAE,KAAK,YAAY,EAAe,MAAM,cAAc,CAAC;AA2B9D,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,YAAY,EACrB,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE;IACJ,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,MAAM,CAAC,EAAE,IAAI,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;CAC7B,GACA,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CA4BlC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { postgresDialect } from "../../dialect/postgres.js";
|
|
2
|
+
import { buildAggregateQuery, compileWhere, } from "./compile.js";
|
|
3
|
+
import { runQueryOne } from "./execute.js";
|
|
4
|
+
function parseAggregateRow(row, selectors) {
|
|
5
|
+
const result = {};
|
|
6
|
+
if (selectors._count) {
|
|
7
|
+
result["_count"] = row["_count"] ?? 0;
|
|
8
|
+
}
|
|
9
|
+
for (const key of ["_avg", "_sum", "_min", "_max"]) {
|
|
10
|
+
const fieldMap = selectors[key];
|
|
11
|
+
if (!fieldMap)
|
|
12
|
+
continue;
|
|
13
|
+
const bucket = {};
|
|
14
|
+
for (const colName of Object.keys(fieldMap)) {
|
|
15
|
+
bucket[colName] = row[`${key}_${colName}`] ?? null;
|
|
16
|
+
}
|
|
17
|
+
if (Object.keys(bucket).length > 0) {
|
|
18
|
+
result[key] = bucket;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return result;
|
|
22
|
+
}
|
|
23
|
+
export async function aggregateRecords(executor, runtime, tableAccessor, args) {
|
|
24
|
+
const { manifest } = runtime;
|
|
25
|
+
const table = manifest.tables[tableAccessor];
|
|
26
|
+
if (!table)
|
|
27
|
+
throw new Error(`Unknown table: ${tableAccessor}`);
|
|
28
|
+
const selectors = {};
|
|
29
|
+
if (args._count)
|
|
30
|
+
selectors._count = true;
|
|
31
|
+
if (args._avg)
|
|
32
|
+
selectors._avg = args._avg;
|
|
33
|
+
if (args._sum)
|
|
34
|
+
selectors._sum = args._sum;
|
|
35
|
+
if (args._min)
|
|
36
|
+
selectors._min = args._min;
|
|
37
|
+
if (args._max)
|
|
38
|
+
selectors._max = args._max;
|
|
39
|
+
const { sql: whereSql, params } = compileWhere(manifest, table, args.where, postgresDialect);
|
|
40
|
+
const query = buildAggregateQuery(table, selectors, whereSql);
|
|
41
|
+
const row = await runQueryOne(executor, runtime, { operation: "select", tableAccessor }, query, params);
|
|
42
|
+
return parseAggregateRow(row ?? {}, selectors);
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=aggregate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aggregate.js","sourceRoot":"","sources":["../../../src/runtime/query/aggregate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EACL,mBAAmB,EACnB,YAAY,GAEb,MAAM,cAAc,CAAC;AACtB,OAAO,EAAqB,WAAW,EAAE,MAAM,cAAc,CAAC;AAE9D,SAAS,iBAAiB,CACxB,GAA4B,EAC5B,SAA6B;IAE7B,MAAM,MAAM,GAA4B,EAAE,CAAC;IAE3C,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;QACrB,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAU,EAAE,CAAC;QAC5D,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,QAAQ;YAAE,SAAS;QACxB,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5C,MAAM,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,IAAI,OAAO,EAAE,CAAC,IAAI,IAAI,CAAC;QACrD,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,QAAkB,EAClB,OAAqB,EACrB,aAAqB,EACrB,IAOC;IAED,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAC7B,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAC7C,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,aAAa,EAAE,CAAC,CAAC;IAE/D,MAAM,SAAS,GAAuB,EAAE,CAAC;IACzC,IAAI,IAAI,CAAC,MAAM;QAAE,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC;IACzC,IAAI,IAAI,CAAC,IAAI;QAAE,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IAC1C,IAAI,IAAI,CAAC,IAAI;QAAE,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IAC1C,IAAI,IAAI,CAAC,IAAI;QAAE,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IAC1C,IAAI,IAAI,CAAC,IAAI;QAAE,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IAE1C,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,YAAY,CAC5C,QAAQ,EACR,KAAK,EACL,IAAI,CAAC,KAAK,EACV,eAAe,CAChB,CAAC;IACF,MAAM,KAAK,GAAG,mBAAmB,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC9D,MAAM,GAAG,GAAG,MAAM,WAAW,CAC3B,QAAQ,EACR,OAAO,EACP,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,EACtC,KAAK,EACL,MAAM,CACP,CAAC;IAEF,OAAO,iBAAiB,CAAC,GAAG,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC;AACjD,CAAC"}
|
|
@@ -1,26 +1,36 @@
|
|
|
1
|
-
import type { Dialect, Manifest, ManifestTable } from "../../dialect/types.js";
|
|
1
|
+
import type { Dialect, Manifest, ManifestColumn, ManifestTable } from "../../dialect/types.js";
|
|
2
2
|
export type WhereClause = {
|
|
3
3
|
sql: string;
|
|
4
4
|
params: unknown[];
|
|
5
5
|
};
|
|
6
|
+
export declare function serializeColumnValue(col: ManifestColumn, value: unknown): unknown;
|
|
6
7
|
export declare function compileWhere(manifest: Manifest, table: ManifestTable, where: Record<string, unknown> | undefined, dialect: Dialect, startParamIndex?: number): WhereClause;
|
|
7
8
|
export declare function compileOrderBy(table: ManifestTable, orderBy: Record<string, string> | undefined): string;
|
|
8
9
|
export declare function normalizeSelectColumns(select?: readonly string[] | Record<string, boolean | undefined>): readonly string[] | undefined;
|
|
9
10
|
export declare function buildSelectColumns(table: ManifestTable, select?: readonly string[]): string;
|
|
10
11
|
export declare function buildFindByIdQuery(table: ManifestTable): string;
|
|
11
|
-
export declare function buildFindManyQuery(table: ManifestTable, whereSql: string, orderSql: string, limit?: number, offset?: number): string;
|
|
12
|
+
export declare function buildFindManyQuery(table: ManifestTable, whereSql: string, orderSql: string, limit?: number, offset?: number, distinctOn?: readonly string[]): string;
|
|
13
|
+
export declare function buildPaginateQuery(table: ManifestTable, whereSql: string, orderSql: string, take: number): string;
|
|
12
14
|
export declare function buildCountQuery(table: ManifestTable, whereSql: string): string;
|
|
13
|
-
export
|
|
15
|
+
export type AggregateSelectors = {
|
|
16
|
+
_count?: true;
|
|
17
|
+
_avg?: Record<string, true>;
|
|
18
|
+
_sum?: Record<string, true>;
|
|
19
|
+
_min?: Record<string, true>;
|
|
20
|
+
_max?: Record<string, true>;
|
|
21
|
+
};
|
|
22
|
+
export declare function buildAggregateQuery(table: ManifestTable, selectors: AggregateSelectors, whereSql: string): string;
|
|
23
|
+
export declare function buildUpsertQuery(table: ManifestTable, insertKeys: string[], updateKeys: string[], conflictSqlColumns: readonly string[], exprSets?: string[]): string;
|
|
14
24
|
export declare function buildInsertQuery(table: ManifestTable, dataKeys: string[]): string;
|
|
15
25
|
export declare function buildInsertManyValueRows(table: ManifestTable, dataKeys: string[], rows: Array<Array<unknown | undefined>>): {
|
|
16
26
|
valueRows: string[];
|
|
17
27
|
values: unknown[];
|
|
18
28
|
};
|
|
19
29
|
export declare function buildInsertManyQuery(table: ManifestTable, dataKeys: string[], valueRows: string[]): string;
|
|
20
|
-
export declare function buildUpdateQuery(table: ManifestTable, dataKeys: string[], whereSql: string): string;
|
|
30
|
+
export declare function buildUpdateQuery(table: ManifestTable, dataKeys: string[], whereSql: string, exprSets?: string[]): string;
|
|
21
31
|
export declare function buildDeleteQuery(table: ManifestTable, whereSql: string): string;
|
|
22
32
|
export declare function buildDeleteManyQuery(table: ManifestTable, whereSql: string): string;
|
|
23
|
-
export declare function buildUpdateManyQuery(table: ManifestTable, dataKeys: string[], whereSql: string): string;
|
|
33
|
+
export declare function buildUpdateManyQuery(table: ManifestTable, dataKeys: string[], whereSql: string, exprSets?: string[]): string;
|
|
24
34
|
export declare function dataToSqlValues(table: ManifestTable, data: Record<string, unknown>, options?: {
|
|
25
35
|
excludePrimary?: boolean;
|
|
26
36
|
}): {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../../src/runtime/query/compile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,QAAQ,
|
|
1
|
+
{"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../../src/runtime/query/compile.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,7 +19,7 @@ function pluginWhereOperators(col) {
|
|
|
19
19
|
return {};
|
|
20
20
|
return getColumnType(col.kind)?.whereOperators ?? {};
|
|
21
21
|
}
|
|
22
|
-
function serializeColumnValue(col, value) {
|
|
22
|
+
export function serializeColumnValue(col, value) {
|
|
23
23
|
if (col.kind === "fk")
|
|
24
24
|
return value;
|
|
25
25
|
const plugin = getColumnType(col.kind);
|
|
@@ -329,9 +329,18 @@ export function buildFindByIdQuery(table) {
|
|
|
329
329
|
const selectCols = buildSelectColumns(table);
|
|
330
330
|
return `SELECT ${selectCols} FROM ${quoteIdentifier(table.sqlName)} WHERE ${sqlCol} = $1`;
|
|
331
331
|
}
|
|
332
|
-
export function buildFindManyQuery(table, whereSql, orderSql, limit, offset) {
|
|
332
|
+
export function buildFindManyQuery(table, whereSql, orderSql, limit, offset, distinctOn) {
|
|
333
333
|
const selectCols = buildSelectColumns(table);
|
|
334
|
-
let sql =
|
|
334
|
+
let sql = "SELECT ";
|
|
335
|
+
if (distinctOn && distinctOn.length > 0) {
|
|
336
|
+
const distinctCols = distinctOn
|
|
337
|
+
.map((tsName) => table.columns.find((c) => c.tsName === tsName))
|
|
338
|
+
.filter((col) => col !== undefined)
|
|
339
|
+
.map((col) => quoteIdentifier(col.sqlName))
|
|
340
|
+
.join(", ");
|
|
341
|
+
sql += `DISTINCT ON (${distinctCols}) `;
|
|
342
|
+
}
|
|
343
|
+
sql += `${selectCols} FROM ${quoteIdentifier(table.sqlName)}`;
|
|
335
344
|
if (whereSql)
|
|
336
345
|
sql += ` ${whereSql}`;
|
|
337
346
|
if (orderSql)
|
|
@@ -342,13 +351,58 @@ export function buildFindManyQuery(table, whereSql, orderSql, limit, offset) {
|
|
|
342
351
|
sql += ` OFFSET ${offset}`;
|
|
343
352
|
return sql;
|
|
344
353
|
}
|
|
354
|
+
export function buildPaginateQuery(table, whereSql, orderSql, take) {
|
|
355
|
+
return buildFindManyQuery(table, whereSql, orderSql, take + 1);
|
|
356
|
+
}
|
|
345
357
|
export function buildCountQuery(table, whereSql) {
|
|
346
358
|
let sql = `SELECT COUNT(*)::int AS count FROM ${quoteIdentifier(table.sqlName)}`;
|
|
347
359
|
if (whereSql)
|
|
348
360
|
sql += ` ${whereSql}`;
|
|
349
361
|
return sql;
|
|
350
362
|
}
|
|
351
|
-
|
|
363
|
+
function aggregateSqlCol(table, tsName) {
|
|
364
|
+
const col = table.columns.find((c) => c.tsName === tsName);
|
|
365
|
+
if (!col)
|
|
366
|
+
return undefined;
|
|
367
|
+
const sqlCol = quoteIdentifier(col.sqlName);
|
|
368
|
+
if (col.kind === "decimal")
|
|
369
|
+
return `${sqlCol}::numeric`;
|
|
370
|
+
return sqlCol;
|
|
371
|
+
}
|
|
372
|
+
export function buildAggregateQuery(table, selectors, whereSql) {
|
|
373
|
+
const parts = [];
|
|
374
|
+
if (selectors._count) {
|
|
375
|
+
parts.push('COUNT(*)::int AS "_count"');
|
|
376
|
+
}
|
|
377
|
+
for (const colName of Object.keys(selectors._avg ?? {})) {
|
|
378
|
+
const sqlCol = aggregateSqlCol(table, colName);
|
|
379
|
+
if (sqlCol)
|
|
380
|
+
parts.push(`AVG(${sqlCol}) AS "_avg_${colName}"`);
|
|
381
|
+
}
|
|
382
|
+
for (const colName of Object.keys(selectors._sum ?? {})) {
|
|
383
|
+
const sqlCol = aggregateSqlCol(table, colName);
|
|
384
|
+
if (sqlCol)
|
|
385
|
+
parts.push(`SUM(${sqlCol}) AS "_sum_${colName}"`);
|
|
386
|
+
}
|
|
387
|
+
for (const colName of Object.keys(selectors._min ?? {})) {
|
|
388
|
+
const sqlCol = aggregateSqlCol(table, colName);
|
|
389
|
+
if (sqlCol)
|
|
390
|
+
parts.push(`MIN(${sqlCol}) AS "_min_${colName}"`);
|
|
391
|
+
}
|
|
392
|
+
for (const colName of Object.keys(selectors._max ?? {})) {
|
|
393
|
+
const sqlCol = aggregateSqlCol(table, colName);
|
|
394
|
+
if (sqlCol)
|
|
395
|
+
parts.push(`MAX(${sqlCol}) AS "_max_${colName}"`);
|
|
396
|
+
}
|
|
397
|
+
if (parts.length === 0) {
|
|
398
|
+
throw new Error("aggregate requires at least one selector");
|
|
399
|
+
}
|
|
400
|
+
let sql = `SELECT ${parts.join(", ")} FROM ${quoteIdentifier(table.sqlName)}`;
|
|
401
|
+
if (whereSql)
|
|
402
|
+
sql += ` ${whereSql}`;
|
|
403
|
+
return sql;
|
|
404
|
+
}
|
|
405
|
+
export function buildUpsertQuery(table, insertKeys, updateKeys, conflictSqlColumns, exprSets = []) {
|
|
352
406
|
const insertCols = insertKeys.map((k) => {
|
|
353
407
|
const col = table.columns.find((c) => c.tsName === k);
|
|
354
408
|
return quoteIdentifier(col?.sqlName ?? k);
|
|
@@ -367,11 +421,14 @@ export function buildUpsertQuery(table, insertKeys, updateKeys, conflictSqlColum
|
|
|
367
421
|
const sqlCol = quoteIdentifier(col?.sqlName ?? k);
|
|
368
422
|
return `${sqlCol} = EXCLUDED.${sqlCol}`;
|
|
369
423
|
})
|
|
370
|
-
:
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
424
|
+
: exprSets.length === 0
|
|
425
|
+
? conflictSqlColumns.map((c) => {
|
|
426
|
+
const sqlCol = quoteIdentifier(c);
|
|
427
|
+
return `${sqlCol} = EXCLUDED.${sqlCol}`;
|
|
428
|
+
})
|
|
429
|
+
: [];
|
|
430
|
+
const allUpdateSets = [...updateSets, ...exprSets];
|
|
431
|
+
return `INSERT INTO ${quoteIdentifier(table.sqlName)} (${insertCols.join(", ")}) VALUES (${insertPlaceholders}) ON CONFLICT (${conflictCols}) DO UPDATE SET ${allUpdateSets.join(", ")} RETURNING ${selectCols}`;
|
|
375
432
|
}
|
|
376
433
|
export function buildInsertQuery(table, dataKeys) {
|
|
377
434
|
const cols = dataKeys.map((k) => {
|
|
@@ -418,11 +475,12 @@ export function buildInsertManyQuery(table, dataKeys, valueRows) {
|
|
|
418
475
|
const selectCols = buildSelectColumns(table);
|
|
419
476
|
return `INSERT INTO ${quoteIdentifier(table.sqlName)} (${cols.join(", ")}) VALUES ${valueRows.join(", ")} RETURNING ${selectCols}`;
|
|
420
477
|
}
|
|
421
|
-
export function buildUpdateQuery(table, dataKeys, whereSql) {
|
|
422
|
-
const
|
|
478
|
+
export function buildUpdateQuery(table, dataKeys, whereSql, exprSets = []) {
|
|
479
|
+
const paramSets = dataKeys.map((k, i) => {
|
|
423
480
|
const col = table.columns.find((c) => c.tsName === k);
|
|
424
481
|
return buildSetExpression(col, i + 1);
|
|
425
482
|
});
|
|
483
|
+
const sets = [...paramSets, ...exprSets];
|
|
426
484
|
const selectCols = buildSelectColumns(table);
|
|
427
485
|
const whereOffset = dataKeys.length;
|
|
428
486
|
let sql = `UPDATE ${quoteIdentifier(table.sqlName)} SET ${sets.join(", ")}`;
|
|
@@ -449,11 +507,12 @@ export function buildDeleteManyQuery(table, whereSql) {
|
|
|
449
507
|
sql += ` ${whereSql}`;
|
|
450
508
|
return sql;
|
|
451
509
|
}
|
|
452
|
-
export function buildUpdateManyQuery(table, dataKeys, whereSql) {
|
|
453
|
-
const
|
|
510
|
+
export function buildUpdateManyQuery(table, dataKeys, whereSql, exprSets = []) {
|
|
511
|
+
const paramSets = dataKeys.map((k, i) => {
|
|
454
512
|
const col = table.columns.find((c) => c.tsName === k);
|
|
455
513
|
return buildSetExpression(col, i + 1);
|
|
456
514
|
});
|
|
515
|
+
const sets = [...paramSets, ...exprSets];
|
|
457
516
|
const whereOffset = dataKeys.length;
|
|
458
517
|
let sql = `UPDATE ${quoteIdentifier(table.sqlName)} SET ${sets.join(", ")}`;
|
|
459
518
|
if (whereSql) {
|