uql-orm 0.7.5 → 0.7.6
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/CHANGELOG.md +6 -0
- package/dist/browser/uql-browser.min.js.map +1 -1
- package/dist/dialect/abstractSqlDialect.d.ts +8 -3
- package/dist/dialect/abstractSqlDialect.d.ts.map +1 -1
- package/dist/dialect/abstractSqlDialect.js +59 -19
- package/dist/dialect/abstractSqlDialect.js.map +1 -1
- package/dist/dialect/mysqlLikeSqlDialect.d.ts +4 -8
- package/dist/dialect/mysqlLikeSqlDialect.d.ts.map +1 -1
- package/dist/dialect/mysqlLikeSqlDialect.js +18 -48
- package/dist/dialect/mysqlLikeSqlDialect.js.map +1 -1
- package/dist/postgres/postgresDialect.d.ts +8 -8
- package/dist/postgres/postgresDialect.d.ts.map +1 -1
- package/dist/postgres/postgresDialect.js +34 -57
- package/dist/postgres/postgresDialect.js.map +1 -1
- package/package.json +2 -2
|
@@ -23,60 +23,30 @@ export class MysqlLikeSqlDialect extends AbstractSqlDialect {
|
|
|
23
23
|
// MySQL/MariaDB null-safe inequality: true when values differ or one side is NULL.
|
|
24
24
|
return `NOT (${field} <=> ${ph})`;
|
|
25
25
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
ctx.append('JSON_CONTAINS(');
|
|
35
|
-
this.getComparisonKey(ctx, entity, key, opts);
|
|
36
|
-
ctx.append(', ');
|
|
37
|
-
ctx.addValue(JSON.stringify(val));
|
|
38
|
-
ctx.append(')');
|
|
39
|
-
break;
|
|
40
|
-
case '$size':
|
|
41
|
-
// MySQL/MariaDB: Check JSON array length
|
|
42
|
-
// e.g., JSON_LENGTH(roles) = 3, or JSON_LENGTH(roles) >= 2
|
|
43
|
-
this.buildSizeComparison(ctx, () => {
|
|
44
|
-
ctx.append('JSON_LENGTH(');
|
|
45
|
-
this.getComparisonKey(ctx, entity, key, opts);
|
|
46
|
-
ctx.append(')');
|
|
47
|
-
}, val);
|
|
48
|
-
break;
|
|
49
|
-
default:
|
|
50
|
-
super.compareFieldOperator(ctx, entity, key, op, val, opts);
|
|
51
|
-
}
|
|
26
|
+
jsonAll(ctx, jsonField, value) {
|
|
27
|
+
return `JSON_CONTAINS(${jsonField}, ${this.addValue(ctx.values, JSON.stringify(value))})`;
|
|
28
|
+
}
|
|
29
|
+
jsonSize(ctx, jsonField, value) {
|
|
30
|
+
const tmpCtx = this.createContext();
|
|
31
|
+
this.buildSizeComparison(tmpCtx, () => tmpCtx.append(`JSON_LENGTH(${jsonField})`), value);
|
|
32
|
+
ctx.pushValue(...tmpCtx.values);
|
|
33
|
+
return tmpCtx.sql;
|
|
52
34
|
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
35
|
+
jsonElemMatch(ctx, jsonField, match) {
|
|
36
|
+
const isPrimitiveElement = Object.keys(match).some((k) => k.startsWith('$'));
|
|
37
|
+
if (isPrimitiveElement) {
|
|
38
|
+
const ops = Object.entries(match);
|
|
39
|
+
const conditions = ops.map(([op, opVal]) => this.buildJsonFieldCondition(ctx, () => 'jt.elem_text', '', op, opVal));
|
|
40
|
+
return `EXISTS (SELECT 1 FROM JSON_TABLE(${jsonField}, '$[*]' COLUMNS (elem_text TEXT PATH '$')) AS jt WHERE ${conditions.join(' AND ')})`;
|
|
41
|
+
}
|
|
60
42
|
const hasOperators = Object.values(match).some((v) => v && typeof v === 'object' && !Array.isArray(v) && Object.keys(v).some((k) => k.startsWith('$')));
|
|
61
43
|
if (!hasOperators) {
|
|
62
|
-
|
|
63
|
-
ctx.append('JSON_CONTAINS(');
|
|
64
|
-
this.getComparisonKey(ctx, entity, key, opts);
|
|
65
|
-
ctx.append(', ');
|
|
66
|
-
ctx.addValue(JSON.stringify([match]));
|
|
67
|
-
ctx.append(')');
|
|
68
|
-
return;
|
|
44
|
+
return `JSON_CONTAINS(${jsonField}, ${this.addValue(ctx.values, JSON.stringify([match]))})`;
|
|
69
45
|
}
|
|
70
|
-
// Complex case: use EXISTS with JSON_TABLE
|
|
71
|
-
// e.g., EXISTS (SELECT 1 FROM JSON_TABLE(addresses, '$[*]' COLUMNS (city VARCHAR(255) PATH '$.city')) AS jt WHERE jt.city LIKE ?)
|
|
72
46
|
const fields = Object.keys(match);
|
|
73
47
|
const columns = fields.map((f) => `${this.escapeId(f, true)} TEXT PATH '$.${this.escapeJsonKey(f)}'`).join(', ');
|
|
74
|
-
ctx.
|
|
75
|
-
|
|
76
|
-
ctx.append(`, '$[*]' COLUMNS (${columns})) AS jt WHERE `);
|
|
77
|
-
const conditions = buildElemMatchConditions(match, (field, op, opVal) => this.buildJsonFieldCondition(ctx, (f) => `jt.${this.escapeId(f, true)}`, field, op, opVal), (field, value) => `jt.${this.escapeId(field, true)} = ${this.addValue(ctx.values, value)}`);
|
|
78
|
-
ctx.append(conditions.join(' AND '));
|
|
79
|
-
ctx.append(')');
|
|
48
|
+
const conditions = buildElemMatchConditions(match, (field, op, opVal) => this.buildJsonFieldCondition(ctx, (f) => `jt.${this.escapeId(f, true)}`, field, op, opVal), (field, val) => `jt.${this.escapeId(field, true)} = ${this.addValue(ctx.values, val)}`);
|
|
49
|
+
return `EXISTS (SELECT 1 FROM JSON_TABLE(${jsonField}, '$[*]' COLUMNS (${columns})) AS jt WHERE ${conditions.join(' AND ')})`;
|
|
80
50
|
}
|
|
81
51
|
}
|
|
82
52
|
//# sourceMappingURL=mysqlLikeSqlDialect.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mysqlLikeSqlDialect.js","sourceRoot":"","sources":["../../src/dialect/mysqlLikeSqlDialect.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"mysqlLikeSqlDialect.js","sourceRoot":"","sources":["../../src/dialect/mysqlLikeSqlDialect.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AbstractSqlDialect } from '../dialect/index.js';
|
|
2
|
-
import { type Dialect, type EntityMeta, type
|
|
2
|
+
import { type Dialect, type EntityMeta, type FieldOptions, type JsonUpdateOp, type NamingStrategy, type QueryComparisonOptions, type QueryConflictPaths, type QueryContext, type QueryOptions, type QuerySizeComparisonOps, type QueryVectorSearch, type Type } from '../type/index.js';
|
|
3
3
|
export declare class PostgresDialect extends AbstractSqlDialect {
|
|
4
4
|
constructor(namingStrategy?: NamingStrategy, dialect?: Dialect);
|
|
5
5
|
normalizeValue(value: unknown): unknown;
|
|
@@ -7,13 +7,9 @@ export declare class PostgresDialect extends AbstractSqlDialect {
|
|
|
7
7
|
insert<E>(ctx: QueryContext, entity: Type<E>, payload: E | E[], opts?: QueryOptions): void;
|
|
8
8
|
upsert<E>(ctx: QueryContext, entity: Type<E>, conflictPaths: QueryConflictPaths<E>, payload: E | E[]): void;
|
|
9
9
|
compare<E>(ctx: QueryContext, entity: Type<E>, key: string, val: unknown, opts?: QueryComparisonOptions): void;
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
* - Simple objects (no operators): Use fast @> containment
|
|
14
|
-
* - Objects with operators ($ilike, $regex, etc.): Use EXISTS subquery
|
|
15
|
-
*/
|
|
16
|
-
private buildElemMatchCondition;
|
|
10
|
+
protected jsonAll(ctx: QueryContext, jsonField: string, value: unknown): string;
|
|
11
|
+
protected jsonSize(ctx: QueryContext, jsonField: string, value: number | QuerySizeComparisonOps): string;
|
|
12
|
+
protected jsonElemMatch(ctx: QueryContext, jsonField: string, match: Record<string, unknown>): string;
|
|
17
13
|
protected get regexpOp(): string;
|
|
18
14
|
protected ilikeExpr(f: string, ph: string): string;
|
|
19
15
|
protected get neOp(): string;
|
|
@@ -25,6 +21,10 @@ export declare class PostgresDialect extends AbstractSqlDialect {
|
|
|
25
21
|
/** Emit a pgvector distance expression: `"col" <op> $N::<vectorType>`. */
|
|
26
22
|
protected appendVectorSort<E>(ctx: QueryContext, meta: EntityMeta<E>, key: string, search: QueryVectorSearch): void;
|
|
27
23
|
protected formatJsonUpdate<E>(ctx: QueryContext, escapedCol: string, value: JsonUpdateOp<E>): void;
|
|
24
|
+
/**
|
|
25
|
+
* Helper to add a JSON value to context with appropriate stringification and cast.
|
|
26
|
+
*/
|
|
27
|
+
private jsonVal;
|
|
28
28
|
escape(value: unknown): string;
|
|
29
29
|
}
|
|
30
30
|
//# sourceMappingURL=postgresDialect.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgresDialect.d.ts","sourceRoot":"","sources":["../../src/postgres/postgresDialect.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAGzD,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,UAAU,EACf,KAAK,
|
|
1
|
+
{"version":3,"file":"postgresDialect.d.ts","sourceRoot":"","sources":["../../src/postgres/postgresDialect.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAGzD,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,UAAU,EACf,KAAK,YAAY,EAEjB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,YAAY,EACjB,KAAK,YAAY,EAEjB,KAAK,sBAAsB,EAE3B,KAAK,iBAAiB,EACtB,KAAK,IAAI,EAEV,MAAM,kBAAkB,CAAC;AAG1B,qBAAa,eAAgB,SAAQ,kBAAkB;gBACzC,cAAc,CAAC,EAAE,cAAc,EAAE,OAAO,GAAE,OAAoB;IAIjE,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAKvC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAIlC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,IAAI;IAK1F,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI;IAY3G,OAAO,CAAC,CAAC,EAChB,GAAG,EAAE,YAAY,EACjB,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EACf,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,OAAO,EACZ,IAAI,GAAE,sBAA2B,GAChC,IAAI;cAmBY,OAAO,CAAC,GAAG,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM;cAIrE,QAAQ,CAAC,GAAG,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,sBAAsB,GAAG,MAAM;cAO9F,aAAa,CAAC,GAAG,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM;IA4B9G,cAAuB,QAAQ,IAAI,MAAM,CAExC;cAEkB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM;IAI3D,cAAuB,IAAI,IAAI,MAAM,CAEpC;cAEkB,QAAQ,CAAC,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM;cAMvE,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;cAIjC,sBAAsB,CAAC,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAiB1G,mCAAmC;IACnC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAMhC;IAEF,0EAA0E;cACvD,gBAAgB,CAAC,CAAC,EACnC,GAAG,EAAE,YAAY,EACjB,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EACnB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,iBAAiB,GACxB,IAAI;cAQY,gBAAgB,CAAC,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI;IAuB3G;;OAEG;IACH,OAAO,CAAC,OAAO;IAQN,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM;CAGxC"}
|
|
@@ -9,9 +9,7 @@ export class PostgresDialect extends AbstractSqlDialect {
|
|
|
9
9
|
super(dialect, namingStrategy);
|
|
10
10
|
}
|
|
11
11
|
normalizeValue(value) {
|
|
12
|
-
if (typeof value === '
|
|
13
|
-
return value ? 'true' : 'false';
|
|
14
|
-
if (value !== null && typeof value === 'object')
|
|
12
|
+
if (value != null && typeof value === 'object')
|
|
15
13
|
return Array.isArray(value) ? toPgArray(value) : value;
|
|
16
14
|
return super.normalizeValue(value);
|
|
17
15
|
}
|
|
@@ -49,57 +47,28 @@ export class PostgresDialect extends AbstractSqlDialect {
|
|
|
49
47
|
}
|
|
50
48
|
super.compare(ctx, entity, key, val, opts);
|
|
51
49
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
// e.g., jsonb_array_length(roles) = 3, or jsonb_array_length(roles) >= 2
|
|
68
|
-
this.buildSizeComparison(ctx, () => {
|
|
69
|
-
ctx.append('jsonb_array_length(');
|
|
70
|
-
this.getComparisonKey(ctx, entity, key, opts);
|
|
71
|
-
ctx.append(')');
|
|
72
|
-
}, val);
|
|
73
|
-
break;
|
|
74
|
-
default:
|
|
75
|
-
super.compareFieldOperator(ctx, entity, key, op, val, opts);
|
|
50
|
+
jsonAll(ctx, jsonField, value) {
|
|
51
|
+
return `${jsonField} @> ${this.jsonVal(ctx, value)}`;
|
|
52
|
+
}
|
|
53
|
+
jsonSize(ctx, jsonField, value) {
|
|
54
|
+
const tmpCtx = this.createContext();
|
|
55
|
+
this.buildSizeComparison(tmpCtx, () => tmpCtx.append(`jsonb_array_length(${jsonField})`), value);
|
|
56
|
+
ctx.pushValue(...tmpCtx.values);
|
|
57
|
+
return tmpCtx.sql;
|
|
58
|
+
}
|
|
59
|
+
jsonElemMatch(ctx, jsonField, match) {
|
|
60
|
+
// Primitive element match: keys are operators (e.g. { $startsWith: 'ad' } on a string[])
|
|
61
|
+
const isPrimitiveElement = Object.keys(match).some((k) => k.startsWith('$'));
|
|
62
|
+
if (isPrimitiveElement) {
|
|
63
|
+
const conditions = Object.entries(match).map(([op, opVal]) => this.buildJsonFieldCondition(ctx, () => 'elem', '', op, opVal));
|
|
64
|
+
return `EXISTS (SELECT 1 FROM jsonb_array_elements_text(${jsonField}) AS elem WHERE ${conditions.join(' AND ')})`;
|
|
76
65
|
}
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Build $elemMatch condition for PostgreSQL JSONB arrays.
|
|
80
|
-
* - Simple objects (no operators): Use fast @> containment
|
|
81
|
-
* - Objects with operators ($ilike, $regex, etc.): Use EXISTS subquery
|
|
82
|
-
*/
|
|
83
|
-
buildElemMatchCondition(ctx, entity, key, match, opts) {
|
|
84
|
-
// Check if any field value contains operators
|
|
85
66
|
const hasOperators = Object.values(match).some((v) => v && typeof v === 'object' && !Array.isArray(v) && Object.keys(v).some((k) => k.startsWith('$')));
|
|
86
67
|
if (!hasOperators) {
|
|
87
|
-
|
|
88
|
-
// e.g., addresses @> '[{"city": "NYC"}]'::jsonb
|
|
89
|
-
this.getComparisonKey(ctx, entity, key, opts);
|
|
90
|
-
ctx.append(' @> ');
|
|
91
|
-
ctx.addValue(JSON.stringify([match]));
|
|
92
|
-
ctx.append('::text::jsonb');
|
|
93
|
-
return;
|
|
68
|
+
return `${jsonField} @> ${this.jsonVal(ctx, [match])}`;
|
|
94
69
|
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
ctx.append('EXISTS (SELECT 1 FROM jsonb_array_elements(');
|
|
98
|
-
this.getComparisonKey(ctx, entity, key, opts);
|
|
99
|
-
ctx.append(') AS elem WHERE ');
|
|
100
|
-
const conditions = buildElemMatchConditions(match, (field, op, opVal) => this.buildJsonFieldCondition(ctx, (f) => `elem->>'${this.escapeJsonKey(f)}'`, field, op, opVal), (field, value) => `elem->>'${this.escapeJsonKey(field)}' = ${this.addValue(ctx.values, value)}`);
|
|
101
|
-
ctx.append(conditions.join(' AND '));
|
|
102
|
-
ctx.append(')');
|
|
70
|
+
const conditions = buildElemMatchConditions(match, (field, op, opVal) => this.buildJsonFieldCondition(ctx, (f) => `elem->>'${this.escapeJsonKey(f)}'`, field, op, opVal), (field, val) => `elem->>'${this.escapeJsonKey(field)}' = ${this.addValue(ctx.values, val)}`);
|
|
71
|
+
return `EXISTS (SELECT 1 FROM jsonb_array_elements(${jsonField}) AS elem WHERE ${conditions.join(' AND ')})`;
|
|
103
72
|
}
|
|
104
73
|
get regexpOp() {
|
|
105
74
|
return '~';
|
|
@@ -125,8 +94,7 @@ export class PostgresDialect extends AbstractSqlDialect {
|
|
|
125
94
|
return;
|
|
126
95
|
}
|
|
127
96
|
if (isJsonType(field.type)) {
|
|
128
|
-
ctx.
|
|
129
|
-
ctx.append(`::text::${field.type}`);
|
|
97
|
+
ctx.append(this.jsonVal(ctx, value, field.type));
|
|
130
98
|
return;
|
|
131
99
|
}
|
|
132
100
|
if (field.type === 'vector' && Array.isArray(value)) {
|
|
@@ -155,16 +123,14 @@ export class PostgresDialect extends AbstractSqlDialect {
|
|
|
155
123
|
formatJsonUpdate(ctx, escapedCol, value) {
|
|
156
124
|
let expr = escapedCol;
|
|
157
125
|
if (hasKeys(value.$merge)) {
|
|
158
|
-
|
|
159
|
-
expr = `COALESCE(${escapedCol}, '{}') || ${this.placeholder(ctx.values.length)}::text::jsonb`;
|
|
126
|
+
expr = `COALESCE(${escapedCol}, '{}'::jsonb) || ${this.jsonVal(ctx, value.$merge)}`;
|
|
160
127
|
}
|
|
161
128
|
if (hasKeys(value.$push)) {
|
|
162
129
|
const push = value.$push;
|
|
163
130
|
for (const [key, v] of Object.entries(push)) {
|
|
164
131
|
const currentExpr = expr;
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
expr = `jsonb_set(${currentExpr}, '{${this.escapeJsonKey(key)}}', COALESCE((${currentExpr})->'${this.escapeJsonKey(key)}', '[]'::jsonb) || jsonb_build_array(${ph}::text::jsonb))`;
|
|
132
|
+
const ph = this.jsonVal(ctx, v);
|
|
133
|
+
expr = `jsonb_set(${currentExpr}, '{${this.escapeJsonKey(key)}}', COALESCE((${currentExpr})->'${this.escapeJsonKey(key)}', '[]'::jsonb) || jsonb_build_array(${ph}))`;
|
|
168
134
|
}
|
|
169
135
|
}
|
|
170
136
|
if (value.$unset?.length) {
|
|
@@ -174,6 +140,17 @@ export class PostgresDialect extends AbstractSqlDialect {
|
|
|
174
140
|
}
|
|
175
141
|
ctx.append(`${escapedCol} = ${expr}`);
|
|
176
142
|
}
|
|
143
|
+
/**
|
|
144
|
+
* Helper to add a JSON value to context with appropriate stringification and cast.
|
|
145
|
+
*/
|
|
146
|
+
jsonVal(ctx, value, type = 'jsonb') {
|
|
147
|
+
if (value instanceof QueryRaw)
|
|
148
|
+
return this.addValue(ctx.values, value);
|
|
149
|
+
if (value == null)
|
|
150
|
+
return `${this.addValue(ctx.values, null)}::${type}`;
|
|
151
|
+
const json = JSON.stringify(value);
|
|
152
|
+
return `(${this.addValue(ctx.values, json)}::text)::${type}`;
|
|
153
|
+
}
|
|
177
154
|
escape(value) {
|
|
178
155
|
return sqlstring.escape(value);
|
|
179
156
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgresDialect.js","sourceRoot":"","sources":["../../src/postgres/postgresDialect.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAWL,QAAQ,
|
|
1
|
+
{"version":3,"file":"postgresDialect.js","sourceRoot":"","sources":["../../src/postgres/postgresDialect.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"homepage": "https://uql-orm.dev",
|
|
4
4
|
"description": "Fast, type-safe TypeScript ORM — one API for every database",
|
|
5
5
|
"license": "MIT",
|
|
6
|
-
"version": "0.7.
|
|
6
|
+
"version": "0.7.6",
|
|
7
7
|
"type": "module",
|
|
8
8
|
"sideEffects": false,
|
|
9
9
|
"main": "./dist/index.js",
|
|
@@ -155,5 +155,5 @@
|
|
|
155
155
|
"publishConfig": {
|
|
156
156
|
"access": "public"
|
|
157
157
|
},
|
|
158
|
-
"gitHead": "
|
|
158
|
+
"gitHead": "7c020b10cf752cffdc30b04c9fb444a9260a0910"
|
|
159
159
|
}
|