effect-qb 0.15.0 → 0.16.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/dist/mysql.js +362 -70
- package/dist/postgres/metadata.js +557 -27
- package/dist/postgres.js +5028 -4732
- package/package.json +2 -2
- package/src/internal/column-state.ts +7 -0
- package/src/internal/column.ts +22 -0
- package/src/internal/dialect.ts +12 -1
- package/src/internal/executor.ts +15 -4
- package/src/internal/predicate/analysis.ts +103 -1
- package/src/internal/predicate/atom.ts +7 -0
- package/src/internal/predicate/context.ts +156 -16
- package/src/internal/predicate/key.ts +46 -1
- package/src/internal/predicate/normalize.ts +115 -34
- package/src/internal/predicate/runtime.ts +118 -11
- package/src/internal/query.ts +328 -90
- package/src/internal/renderer.ts +4 -0
- package/src/internal/runtime/driver-value-mapping.ts +186 -0
- package/src/internal/scalar.ts +11 -0
- package/src/mysql/column.ts +1 -0
- package/src/mysql/executor.ts +20 -5
- package/src/mysql/internal/dialect.ts +12 -6
- package/src/mysql/internal/dsl.ts +268 -54
- package/src/mysql/internal/renderer.ts +11 -2
- package/src/mysql/internal/sql-expression-renderer.ts +54 -8
- package/src/mysql/renderer.ts +7 -2
- package/src/postgres/cast.ts +22 -7
- package/src/postgres/column.ts +1 -0
- package/src/postgres/executor.ts +20 -5
- package/src/postgres/internal/dialect.ts +12 -6
- package/src/postgres/internal/dsl.ts +285 -58
- package/src/postgres/internal/renderer.ts +11 -2
- package/src/postgres/internal/sql-expression-renderer.ts +60 -8
- package/src/postgres/renderer.ts +7 -2
- package/src/postgres/type.ts +4 -0
package/dist/mysql.js
CHANGED
|
@@ -24,6 +24,7 @@ __export(exports_column, {
|
|
|
24
24
|
json: () => json,
|
|
25
25
|
int: () => int,
|
|
26
26
|
generated: () => generated2,
|
|
27
|
+
driverValueMapping: () => driverValueMapping2,
|
|
27
28
|
default: () => default_2,
|
|
28
29
|
datetime: () => datetime,
|
|
29
30
|
date: () => date,
|
|
@@ -76,6 +77,7 @@ var makeColumnDefinition = (schema, metadata) => {
|
|
|
76
77
|
runtime: undefined,
|
|
77
78
|
dbType: metadata.dbType,
|
|
78
79
|
runtimeSchema: schema,
|
|
80
|
+
driverValueMapping: metadata.driverValueMapping,
|
|
79
81
|
nullability: metadata.nullable ? "maybe" : "never",
|
|
80
82
|
dialect: metadata.dbType.dialect,
|
|
81
83
|
kind: "scalar",
|
|
@@ -95,6 +97,7 @@ var makeColumnDefinition = (schema, metadata) => {
|
|
|
95
97
|
defaultValue: metadata.defaultValue,
|
|
96
98
|
generatedValue: metadata.generatedValue,
|
|
97
99
|
ddlType: metadata.ddlType,
|
|
100
|
+
driverValueMapping: metadata.driverValueMapping,
|
|
98
101
|
identity: metadata.identity,
|
|
99
102
|
enum: metadata.enum
|
|
100
103
|
};
|
|
@@ -111,6 +114,7 @@ var remapColumnDefinition = (column, options = {}) => {
|
|
|
111
114
|
runtime: undefined,
|
|
112
115
|
dbType: metadata.dbType,
|
|
113
116
|
runtimeSchema: schema,
|
|
117
|
+
driverValueMapping: metadata.driverValueMapping,
|
|
114
118
|
nullability: metadata.nullable ? "maybe" : "never",
|
|
115
119
|
dialect: metadata.dbType.dialect
|
|
116
120
|
};
|
|
@@ -129,6 +133,7 @@ var remapColumnDefinition = (column, options = {}) => {
|
|
|
129
133
|
defaultValue: metadata.defaultValue,
|
|
130
134
|
generatedValue: metadata.generatedValue,
|
|
131
135
|
ddlType: metadata.ddlType,
|
|
136
|
+
driverValueMapping: metadata.driverValueMapping,
|
|
132
137
|
identity: metadata.identity,
|
|
133
138
|
enum: metadata.enum
|
|
134
139
|
};
|
|
@@ -150,6 +155,7 @@ var bindColumn = (tableName, columnName, column, baseTableName, schemaName) => {
|
|
|
150
155
|
runtime: undefined,
|
|
151
156
|
dbType: column.metadata.dbType,
|
|
152
157
|
runtimeSchema: schema,
|
|
158
|
+
driverValueMapping: column.metadata.driverValueMapping,
|
|
153
159
|
nullability: column.metadata.nullable ? "maybe" : "never",
|
|
154
160
|
dialect: column.metadata.dbType.dialect,
|
|
155
161
|
kind: "scalar",
|
|
@@ -238,6 +244,10 @@ var ddlType = (sqlType) => (column) => mapColumn(column, {
|
|
|
238
244
|
...column.metadata,
|
|
239
245
|
ddlType: sqlType
|
|
240
246
|
});
|
|
247
|
+
var driverValueMapping = (mapping) => (column) => mapColumn(column, {
|
|
248
|
+
...column.metadata,
|
|
249
|
+
driverValueMapping: mapping
|
|
250
|
+
});
|
|
241
251
|
var array = (options) => (column) => remapColumnDefinition(column, {
|
|
242
252
|
schema: Schema2.Array(options?.nullableElements ? Schema2.NullOr(column.schema) : column.schema),
|
|
243
253
|
metadata: {
|
|
@@ -600,6 +610,7 @@ var primaryKey2 = primaryKey;
|
|
|
600
610
|
var unique2 = unique;
|
|
601
611
|
var default_2 = default_;
|
|
602
612
|
var generated2 = generated;
|
|
613
|
+
var driverValueMapping2 = driverValueMapping;
|
|
603
614
|
var references2 = references;
|
|
604
615
|
var schema2 = schema;
|
|
605
616
|
// src/mysql/errors/index.ts
|
|
@@ -110274,6 +110285,7 @@ var emptyContext = () => ({
|
|
|
110274
110285
|
nullKeys: new Set,
|
|
110275
110286
|
eqLiterals: new Map,
|
|
110276
110287
|
neqLiterals: new Map,
|
|
110288
|
+
literalSets: new Map,
|
|
110277
110289
|
sourceNames: new Set,
|
|
110278
110290
|
contradiction: false,
|
|
110279
110291
|
unknown: false
|
|
@@ -110283,6 +110295,7 @@ var cloneContext = (context) => ({
|
|
|
110283
110295
|
nullKeys: new Set(context.nullKeys),
|
|
110284
110296
|
eqLiterals: new Map(context.eqLiterals),
|
|
110285
110297
|
neqLiterals: new Map(Array.from(context.neqLiterals.entries(), ([key, values]) => [key, new Set(values)])),
|
|
110298
|
+
literalSets: new Map(Array.from(context.literalSets.entries(), ([key, values]) => [key, new Set(values)])),
|
|
110286
110299
|
sourceNames: new Set(context.sourceNames),
|
|
110287
110300
|
contradiction: context.contradiction,
|
|
110288
110301
|
unknown: context.unknown
|
|
@@ -110316,7 +110329,12 @@ var addEqLiteral = (context, key, value) => {
|
|
|
110316
110329
|
if (neqValues?.has(value)) {
|
|
110317
110330
|
context.contradiction = true;
|
|
110318
110331
|
}
|
|
110332
|
+
const existingSet = context.literalSets.get(key);
|
|
110333
|
+
if (existingSet !== undefined && !existingSet.has(value)) {
|
|
110334
|
+
context.contradiction = true;
|
|
110335
|
+
}
|
|
110319
110336
|
context.eqLiterals.set(key, value);
|
|
110337
|
+
context.literalSets.set(key, new Set([value]));
|
|
110320
110338
|
};
|
|
110321
110339
|
var addNeqLiteral = (context, key, value) => {
|
|
110322
110340
|
addNonNull(context, key);
|
|
@@ -110327,6 +110345,18 @@ var addNeqLiteral = (context, key, value) => {
|
|
|
110327
110345
|
values.add(value);
|
|
110328
110346
|
context.neqLiterals.set(key, values);
|
|
110329
110347
|
};
|
|
110348
|
+
var addLiteralSet = (context, key, values) => {
|
|
110349
|
+
addNonNull(context, key);
|
|
110350
|
+
const existingEq = context.eqLiterals.get(key);
|
|
110351
|
+
if (existingEq !== undefined && !values.has(existingEq)) {
|
|
110352
|
+
context.contradiction = true;
|
|
110353
|
+
}
|
|
110354
|
+
const existing = context.literalSets.get(key);
|
|
110355
|
+
context.literalSets.set(key, existing === undefined ? new Set(values) : new Set(Array.from(existing).filter((value) => values.has(value))));
|
|
110356
|
+
if (context.literalSets.get(key)?.size === 0) {
|
|
110357
|
+
context.contradiction = true;
|
|
110358
|
+
}
|
|
110359
|
+
};
|
|
110330
110360
|
var applyEqColumn = (context, left, right) => {
|
|
110331
110361
|
const leftValue = context.eqLiterals.get(left);
|
|
110332
110362
|
const rightValue = context.eqLiterals.get(right);
|
|
@@ -110366,6 +110396,9 @@ var applyAtom = (context, atom) => {
|
|
|
110366
110396
|
case "neq-literal":
|
|
110367
110397
|
addNeqLiteral(context, atom.key, atom.value);
|
|
110368
110398
|
return;
|
|
110399
|
+
case "literal-set":
|
|
110400
|
+
addLiteralSet(context, atom.key, new Set(atom.values));
|
|
110401
|
+
return;
|
|
110369
110402
|
case "eq-column":
|
|
110370
110403
|
applyEqColumn(context, atom.left, atom.right);
|
|
110371
110404
|
return;
|
|
@@ -110388,6 +110421,9 @@ var applyNegativeAtom = (context, atom) => {
|
|
|
110388
110421
|
case "neq-literal":
|
|
110389
110422
|
addEqLiteral(context, atom.key, atom.value);
|
|
110390
110423
|
return;
|
|
110424
|
+
case "literal-set":
|
|
110425
|
+
addNonNull(context, atom.key);
|
|
110426
|
+
return;
|
|
110391
110427
|
case "eq-column":
|
|
110392
110428
|
addNonNull(context, atom.left);
|
|
110393
110429
|
addNonNull(context, atom.right);
|
|
@@ -110420,6 +110456,17 @@ var intersectNeqLiterals = (left, right) => {
|
|
|
110420
110456
|
}
|
|
110421
110457
|
return result;
|
|
110422
110458
|
};
|
|
110459
|
+
var unionLiteralSets = (left, right) => {
|
|
110460
|
+
const result = new Map;
|
|
110461
|
+
for (const [key, leftValues] of left) {
|
|
110462
|
+
const rightValues = right.get(key);
|
|
110463
|
+
if (rightValues === undefined) {
|
|
110464
|
+
continue;
|
|
110465
|
+
}
|
|
110466
|
+
result.set(key, new Set([...leftValues, ...rightValues]));
|
|
110467
|
+
}
|
|
110468
|
+
return result;
|
|
110469
|
+
};
|
|
110423
110470
|
var intersectContexts = (left, right) => {
|
|
110424
110471
|
if (left.contradiction) {
|
|
110425
110472
|
return cloneContext(right);
|
|
@@ -110432,6 +110479,7 @@ var intersectContexts = (left, right) => {
|
|
|
110432
110479
|
nullKeys: new Set(Array.from(left.nullKeys).filter((key) => right.nullKeys.has(key))),
|
|
110433
110480
|
eqLiterals: intersectEqLiterals(left.eqLiterals, right.eqLiterals),
|
|
110434
110481
|
neqLiterals: intersectNeqLiterals(left.neqLiterals, right.neqLiterals),
|
|
110482
|
+
literalSets: unionLiteralSets(left.literalSets, right.literalSets),
|
|
110435
110483
|
sourceNames: new Set(Array.from(left.sourceNames).filter((name) => right.sourceNames.has(name))),
|
|
110436
110484
|
contradiction: false,
|
|
110437
110485
|
unknown: left.unknown || right.unknown
|
|
@@ -110505,6 +110553,45 @@ var columnKeyOfExpression = (value) => {
|
|
|
110505
110553
|
const ast = astOf(value);
|
|
110506
110554
|
return ast.kind === "column" ? `${ast.tableName}.${ast.columnName}` : undefined;
|
|
110507
110555
|
};
|
|
110556
|
+
var sameDbType = (left, right) => left.dialect === right.dialect && left.kind === right.kind;
|
|
110557
|
+
var jsonPathPredicateKeyOfExpression = (value) => {
|
|
110558
|
+
const ast = astOf(value);
|
|
110559
|
+
switch (ast.kind) {
|
|
110560
|
+
case "jsonGetText":
|
|
110561
|
+
case "jsonPathText":
|
|
110562
|
+
case "jsonAccessText":
|
|
110563
|
+
case "jsonTraverseText": {
|
|
110564
|
+
const jsonAst = ast;
|
|
110565
|
+
const segments = jsonAst.segments;
|
|
110566
|
+
if (segments.length === 0 || segments.length > 8) {
|
|
110567
|
+
return;
|
|
110568
|
+
}
|
|
110569
|
+
const path = [];
|
|
110570
|
+
for (const segment of segments) {
|
|
110571
|
+
if (typeof segment !== "object" || segment === null || segment.kind !== "key") {
|
|
110572
|
+
return;
|
|
110573
|
+
}
|
|
110574
|
+
path.push(segment.key);
|
|
110575
|
+
}
|
|
110576
|
+
if (path.length === 0) {
|
|
110577
|
+
return;
|
|
110578
|
+
}
|
|
110579
|
+
const baseKey = columnKeyOfExpression(jsonAst.base);
|
|
110580
|
+
return baseKey === undefined ? undefined : `${baseKey}#json:${path.join(".")}`;
|
|
110581
|
+
}
|
|
110582
|
+
default:
|
|
110583
|
+
return;
|
|
110584
|
+
}
|
|
110585
|
+
};
|
|
110586
|
+
var predicateKeyOfExpression = (value) => columnKeyOfExpression(value) ?? castPredicateKeyOfExpression(value) ?? jsonPathPredicateKeyOfExpression(value);
|
|
110587
|
+
var castPredicateKeyOfExpression = (value) => {
|
|
110588
|
+
const ast = astOf(value);
|
|
110589
|
+
if (ast.kind !== "cast") {
|
|
110590
|
+
return;
|
|
110591
|
+
}
|
|
110592
|
+
const source = ast.value;
|
|
110593
|
+
return sameDbType(source[TypeId].dbType, ast.target) ? predicateKeyOfExpression(source) : undefined;
|
|
110594
|
+
};
|
|
110508
110595
|
var valueKeyOfLiteral = (value) => {
|
|
110509
110596
|
if (typeof value === "string") {
|
|
110510
110597
|
return `string:${value}`;
|
|
@@ -110524,7 +110611,7 @@ var valueKeyOfLiteral = (value) => {
|
|
|
110524
110611
|
return "unknown";
|
|
110525
110612
|
};
|
|
110526
110613
|
var nonNullFactsOfExpression = (value) => {
|
|
110527
|
-
const key =
|
|
110614
|
+
const key = predicateKeyOfExpression(value);
|
|
110528
110615
|
return key === undefined ? undefined : atomFormula({ kind: "is-not-null", key });
|
|
110529
110616
|
};
|
|
110530
110617
|
var combineFacts = (left, right) => {
|
|
@@ -110537,8 +110624,8 @@ var combineFacts = (left, right) => {
|
|
|
110537
110624
|
return andFormula(left, right);
|
|
110538
110625
|
};
|
|
110539
110626
|
var formulaOfEq = (left, right) => {
|
|
110540
|
-
const leftKey =
|
|
110541
|
-
const rightKey =
|
|
110627
|
+
const leftKey = predicateKeyOfExpression(left);
|
|
110628
|
+
const rightKey = predicateKeyOfExpression(right);
|
|
110542
110629
|
const leftAst = astOf(left);
|
|
110543
110630
|
const rightAst = astOf(right);
|
|
110544
110631
|
const leftLiteral = leftAst.kind === "literal" ? leftAst.value : undefined;
|
|
@@ -110585,8 +110672,8 @@ var formulaOfEq = (left, right) => {
|
|
|
110585
110672
|
});
|
|
110586
110673
|
};
|
|
110587
110674
|
var formulaOfNeq = (left, right) => {
|
|
110588
|
-
const leftKey =
|
|
110589
|
-
const rightKey =
|
|
110675
|
+
const leftKey = predicateKeyOfExpression(left);
|
|
110676
|
+
const rightKey = predicateKeyOfExpression(right);
|
|
110590
110677
|
const leftAst = astOf(left);
|
|
110591
110678
|
const rightAst = astOf(right);
|
|
110592
110679
|
const leftLiteral = leftAst.kind === "literal" ? leftAst.value : undefined;
|
|
@@ -110629,8 +110716,8 @@ var formulaOfNeq = (left, right) => {
|
|
|
110629
110716
|
return combineFacts(nonNullFactsOfExpression(left), nonNullFactsOfExpression(right));
|
|
110630
110717
|
};
|
|
110631
110718
|
var formulaOfIsNotDistinctFrom = (left, right) => {
|
|
110632
|
-
const leftKey =
|
|
110633
|
-
const rightKey =
|
|
110719
|
+
const leftKey = predicateKeyOfExpression(left);
|
|
110720
|
+
const rightKey = predicateKeyOfExpression(right);
|
|
110634
110721
|
const leftAst = astOf(left);
|
|
110635
110722
|
const rightAst = astOf(right);
|
|
110636
110723
|
const leftLiteral = leftAst.kind === "literal" ? leftAst.value : undefined;
|
|
@@ -110736,11 +110823,11 @@ var formulaOfExpression = (value) => {
|
|
|
110736
110823
|
}
|
|
110737
110824
|
return unknownTag("literal:non-boolean");
|
|
110738
110825
|
case "isNull": {
|
|
110739
|
-
const key =
|
|
110826
|
+
const key = predicateKeyOfExpression(ast.value);
|
|
110740
110827
|
return key === undefined ? unknownTag("isNull:unsupported") : atomFormula({ kind: "is-null", key });
|
|
110741
110828
|
}
|
|
110742
110829
|
case "isNotNull": {
|
|
110743
|
-
const key =
|
|
110830
|
+
const key = predicateKeyOfExpression(ast.value);
|
|
110744
110831
|
return key === undefined ? unknownTag("isNotNull:unsupported") : atomFormula({ kind: "is-not-null", key });
|
|
110745
110832
|
}
|
|
110746
110833
|
case "not":
|
|
@@ -110759,7 +110846,15 @@ var formulaOfExpression = (value) => {
|
|
|
110759
110846
|
return anyFormula(ast.values.map((value2) => formulaOfExpression(value2)));
|
|
110760
110847
|
case "in": {
|
|
110761
110848
|
const [left, ...rest] = ast.values;
|
|
110762
|
-
|
|
110849
|
+
if (left === undefined) {
|
|
110850
|
+
return falseFormula();
|
|
110851
|
+
}
|
|
110852
|
+
const key = predicateKeyOfExpression(left);
|
|
110853
|
+
const literalValues = rest.map((entry) => {
|
|
110854
|
+
const entryAst = astOf(entry);
|
|
110855
|
+
return entryAst.kind === "literal" && entryAst.value !== null ? valueKeyOfLiteral(entryAst.value) : undefined;
|
|
110856
|
+
});
|
|
110857
|
+
return key !== undefined && literalValues.every((entry) => entry !== undefined) ? atomFormula({ kind: "literal-set", key, values: literalValues }) : anyFormula(rest.map((value2) => formulaOfEq(left, value2)));
|
|
110763
110858
|
}
|
|
110764
110859
|
case "notIn": {
|
|
110765
110860
|
const [left, ...rest] = ast.values;
|
|
@@ -110823,6 +110918,7 @@ var makeExpression = (state, ast) => {
|
|
|
110823
110918
|
runtime: state.runtime,
|
|
110824
110919
|
dbType: state.dbType,
|
|
110825
110920
|
runtimeSchema: state.runtimeSchema,
|
|
110921
|
+
driverValueMapping: state.driverValueMapping,
|
|
110826
110922
|
nullability: state.nullability,
|
|
110827
110923
|
dialect: state.dialect,
|
|
110828
110924
|
kind: state.kind ?? "scalar",
|
|
@@ -110831,7 +110927,7 @@ var makeExpression = (state, ast) => {
|
|
|
110831
110927
|
expression[TypeId2] = ast;
|
|
110832
110928
|
return expression;
|
|
110833
110929
|
};
|
|
110834
|
-
var makePlan = (state, ast, _assumptions, _capabilities, _statement, _target, _insertState) => {
|
|
110930
|
+
var makePlan = (state, ast, _assumptions, _capabilities, _statement, _target, _insertState, _facts) => {
|
|
110835
110931
|
const plan = Object.create(PlanProto);
|
|
110836
110932
|
Object.defineProperty(plan, "pipe", {
|
|
110837
110933
|
configurable: true,
|
|
@@ -110847,6 +110943,7 @@ var makePlan = (state, ast, _assumptions, _capabilities, _statement, _target, _i
|
|
|
110847
110943
|
availableNames: undefined,
|
|
110848
110944
|
grouped: undefined,
|
|
110849
110945
|
assumptions: _assumptions ?? trueFormula(),
|
|
110946
|
+
facts: _facts ?? undefined,
|
|
110850
110947
|
capabilities: undefined,
|
|
110851
110948
|
statement: _statement ?? "select",
|
|
110852
110949
|
target: _target ?? undefined,
|
|
@@ -112326,6 +112423,34 @@ var toDialectExpression = (value) => {
|
|
|
112326
112423
|
}
|
|
112327
112424
|
return literal(value);
|
|
112328
112425
|
};
|
|
112426
|
+
var retargetLiteralExpression = (value, target) => {
|
|
112427
|
+
const ast = value[TypeId2];
|
|
112428
|
+
if (ast.kind !== "literal") {
|
|
112429
|
+
return value;
|
|
112430
|
+
}
|
|
112431
|
+
const targetState = target[TypeId];
|
|
112432
|
+
return makeExpression({
|
|
112433
|
+
runtime: value[TypeId].runtime,
|
|
112434
|
+
dbType: targetState.dbType,
|
|
112435
|
+
runtimeSchema: targetState.runtimeSchema,
|
|
112436
|
+
driverValueMapping: targetState.driverValueMapping,
|
|
112437
|
+
nullability: value[TypeId].nullability,
|
|
112438
|
+
dialect: targetState.dialect,
|
|
112439
|
+
kind: "scalar",
|
|
112440
|
+
dependencies: {}
|
|
112441
|
+
}, ast);
|
|
112442
|
+
};
|
|
112443
|
+
var alignBinaryPredicateExpressions = (left, right) => {
|
|
112444
|
+
const leftAst = left[TypeId2];
|
|
112445
|
+
const rightAst = right[TypeId2];
|
|
112446
|
+
if (leftAst.kind === "literal" && rightAst.kind !== "literal") {
|
|
112447
|
+
return [retargetLiteralExpression(left, right), right];
|
|
112448
|
+
}
|
|
112449
|
+
if (rightAst.kind === "literal" && leftAst.kind !== "literal") {
|
|
112450
|
+
return [left, retargetLiteralExpression(right, left)];
|
|
112451
|
+
}
|
|
112452
|
+
return [left, right];
|
|
112453
|
+
};
|
|
112329
112454
|
var toDialectStringExpression = (value) => typeof value === "string" ? literal(value) : value;
|
|
112330
112455
|
var toDialectNumericExpression = (value) => typeof value === "number" ? literal(value) : value;
|
|
112331
112456
|
var flattenVariadicBooleanExpressions = (kind, values) => {
|
|
@@ -112394,8 +112519,7 @@ var extractRequiredFromDialectNumericInputRuntime = (value) => {
|
|
|
112394
112519
|
return Object.keys(expression[TypeId].dependencies);
|
|
112395
112520
|
};
|
|
112396
112521
|
var buildBinaryPredicate = (left, right, kind, nullability = "maybe") => {
|
|
112397
|
-
const leftExpression = toDialectExpression(left);
|
|
112398
|
-
const rightExpression = toDialectExpression(right);
|
|
112522
|
+
const [leftExpression, rightExpression] = alignBinaryPredicateExpressions(toDialectExpression(left), toDialectExpression(right));
|
|
112399
112523
|
return makeExpression({
|
|
112400
112524
|
runtime: true,
|
|
112401
112525
|
dbType: profile.boolDb,
|
|
@@ -112411,16 +112535,18 @@ var buildBinaryPredicate = (left, right, kind, nullability = "maybe") => {
|
|
|
112411
112535
|
};
|
|
112412
112536
|
var buildVariadicPredicate = (values, kind) => {
|
|
112413
112537
|
const expressions = values.map((value) => toDialectExpression(value));
|
|
112538
|
+
const [head, ...tail] = expressions;
|
|
112539
|
+
const alignedExpressions = head !== undefined && (kind === "in" || kind === "notIn" || kind === "between") ? [head, ...tail.map((value) => retargetLiteralExpression(value, head))] : expressions;
|
|
112414
112540
|
return makeExpression({
|
|
112415
112541
|
runtime: true,
|
|
112416
112542
|
dbType: profile.boolDb,
|
|
112417
112543
|
nullability: "maybe",
|
|
112418
|
-
dialect:
|
|
112544
|
+
dialect: alignedExpressions.find((value) => value[TypeId].dialect !== undefined)?.[TypeId].dialect ?? profile.dialect,
|
|
112419
112545
|
kind: "scalar",
|
|
112420
|
-
dependencies: mergeManyDependencies(
|
|
112546
|
+
dependencies: mergeManyDependencies(alignedExpressions)
|
|
112421
112547
|
}, {
|
|
112422
112548
|
kind,
|
|
112423
|
-
values:
|
|
112549
|
+
values: alignedExpressions
|
|
112424
112550
|
});
|
|
112425
112551
|
};
|
|
112426
112552
|
var eq = (...args) => {
|
|
@@ -112541,6 +112667,7 @@ var cast = (value, target) => {
|
|
|
112541
112667
|
runtime: undefined,
|
|
112542
112668
|
dbType: target,
|
|
112543
112669
|
runtimeSchema: undefined,
|
|
112670
|
+
driverValueMapping: target.driverValueMapping,
|
|
112544
112671
|
nullability: expression[TypeId].nullability,
|
|
112545
112672
|
dialect: expression[TypeId].dialect,
|
|
112546
112673
|
kind: expression[TypeId].kind,
|
|
@@ -112590,6 +112717,10 @@ var custom2 = (kind) => ({
|
|
|
112590
112717
|
dialect: profile.dialect,
|
|
112591
112718
|
kind
|
|
112592
112719
|
});
|
|
112720
|
+
var driverValueMapping3 = (dbType, mapping) => ({
|
|
112721
|
+
...dbType,
|
|
112722
|
+
driverValueMapping: mapping
|
|
112723
|
+
});
|
|
112593
112724
|
var type = {
|
|
112594
112725
|
...profile.type,
|
|
112595
112726
|
array: array2,
|
|
@@ -112599,7 +112730,8 @@ var type = {
|
|
|
112599
112730
|
domain,
|
|
112600
112731
|
enum: enum_,
|
|
112601
112732
|
set,
|
|
112602
|
-
custom: custom2
|
|
112733
|
+
custom: custom2,
|
|
112734
|
+
driverValueMapping: driverValueMapping3
|
|
112603
112735
|
};
|
|
112604
112736
|
var makeJsonDb = (kind) => ({
|
|
112605
112737
|
dialect: profile.dialect,
|
|
@@ -113112,6 +113244,8 @@ var scalar = (plan) => {
|
|
|
113112
113244
|
return makeExpression({
|
|
113113
113245
|
runtime: undefined,
|
|
113114
113246
|
dbType: expression[TypeId].dbType,
|
|
113247
|
+
runtimeSchema: expression[TypeId].runtimeSchema,
|
|
113248
|
+
driverValueMapping: expression[TypeId].driverValueMapping,
|
|
113115
113249
|
nullability: "maybe",
|
|
113116
113250
|
dialect: profile.dialect,
|
|
113117
113251
|
kind: "scalar",
|
|
@@ -113340,6 +113474,7 @@ var excluded = (value) => {
|
|
|
113340
113474
|
runtime: undefined,
|
|
113341
113475
|
dbType: value[TypeId].dbType,
|
|
113342
113476
|
runtimeSchema: value[TypeId].runtimeSchema,
|
|
113477
|
+
driverValueMapping: value[TypeId].driverValueMapping,
|
|
113343
113478
|
nullability: value[TypeId].nullability,
|
|
113344
113479
|
dialect: profile.dialect,
|
|
113345
113480
|
kind: "scalar",
|
|
@@ -113351,11 +113486,13 @@ var excluded = (value) => {
|
|
|
113351
113486
|
};
|
|
113352
113487
|
var toMutationValueExpression = (value, column2) => {
|
|
113353
113488
|
if (value !== null && typeof value === "object" && TypeId in value) {
|
|
113354
|
-
return value;
|
|
113489
|
+
return retargetLiteralExpression(value, column2);
|
|
113355
113490
|
}
|
|
113356
113491
|
return makeExpression({
|
|
113357
113492
|
runtime: value,
|
|
113358
113493
|
dbType: column2[TypeId].dbType,
|
|
113494
|
+
runtimeSchema: column2[TypeId].runtimeSchema,
|
|
113495
|
+
driverValueMapping: column2[TypeId].driverValueMapping,
|
|
113359
113496
|
nullability: value === null ? "always" : "never",
|
|
113360
113497
|
dialect: column2[TypeId].dialect,
|
|
113361
113498
|
kind: "scalar",
|
|
@@ -113397,6 +113534,7 @@ var makeColumnReferenceSelection = (alias2, selection) => {
|
|
|
113397
113534
|
runtime: undefined,
|
|
113398
113535
|
dbType: state.dbType,
|
|
113399
113536
|
runtimeSchema: state.runtimeSchema,
|
|
113537
|
+
driverValueMapping: state.driverValueMapping,
|
|
113400
113538
|
nullability: state.nullability,
|
|
113401
113539
|
dialect: state.dialect,
|
|
113402
113540
|
kind: "scalar",
|
|
@@ -113785,10 +113923,13 @@ import * as Stream2 from "effect/Stream";
|
|
|
113785
113923
|
import * as Chunk from "effect/Chunk";
|
|
113786
113924
|
import * as Effect from "effect/Effect";
|
|
113787
113925
|
import * as Option from "effect/Option";
|
|
113788
|
-
import * as
|
|
113926
|
+
import * as Schema9 from "effect/Schema";
|
|
113789
113927
|
import * as SqlClient from "@effect/sql/SqlClient";
|
|
113790
113928
|
import * as Stream from "effect/Stream";
|
|
113791
113929
|
|
|
113930
|
+
// src/internal/runtime/driver-value-mapping.ts
|
|
113931
|
+
import * as Schema7 from "effect/Schema";
|
|
113932
|
+
|
|
113792
113933
|
// src/internal/runtime/normalize.ts
|
|
113793
113934
|
var isRecord2 = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
113794
113935
|
var pad = (value, width = 2) => value.toString().padStart(width, "0");
|
|
@@ -114080,20 +114221,141 @@ var normalizeDbValue = (dbType, value) => {
|
|
|
114080
114221
|
}
|
|
114081
114222
|
};
|
|
114082
114223
|
|
|
114224
|
+
// src/internal/runtime/driver-value-mapping.ts
|
|
114225
|
+
var runtimeTagOfDbType = (dbType) => {
|
|
114226
|
+
if (dbType === undefined) {
|
|
114227
|
+
return;
|
|
114228
|
+
}
|
|
114229
|
+
if ("base" in dbType) {
|
|
114230
|
+
return runtimeTagOfDbType(dbType.base);
|
|
114231
|
+
}
|
|
114232
|
+
if ("element" in dbType) {
|
|
114233
|
+
return "array";
|
|
114234
|
+
}
|
|
114235
|
+
if ("fields" in dbType) {
|
|
114236
|
+
return "record";
|
|
114237
|
+
}
|
|
114238
|
+
if ("variant" in dbType && dbType.variant === "json") {
|
|
114239
|
+
return "json";
|
|
114240
|
+
}
|
|
114241
|
+
if ("variant" in dbType && (dbType.variant === "enum" || dbType.variant === "set")) {
|
|
114242
|
+
return "string";
|
|
114243
|
+
}
|
|
114244
|
+
return dbType.runtime;
|
|
114245
|
+
};
|
|
114246
|
+
var familyOfDbType = (dbType) => {
|
|
114247
|
+
if (dbType === undefined) {
|
|
114248
|
+
return;
|
|
114249
|
+
}
|
|
114250
|
+
if ("base" in dbType) {
|
|
114251
|
+
return familyOfDbType(dbType.base);
|
|
114252
|
+
}
|
|
114253
|
+
return dbType.family;
|
|
114254
|
+
};
|
|
114255
|
+
var mappingCandidates = (context) => {
|
|
114256
|
+
const dbType = context.dbType;
|
|
114257
|
+
const runtimeTag = runtimeTagOfDbType(dbType);
|
|
114258
|
+
const family = familyOfDbType(dbType);
|
|
114259
|
+
return [
|
|
114260
|
+
context.driverValueMapping,
|
|
114261
|
+
dbType?.driverValueMapping,
|
|
114262
|
+
dbType === undefined ? undefined : context.valueMappings?.[dbType.kind],
|
|
114263
|
+
family === undefined ? undefined : context.valueMappings?.[family],
|
|
114264
|
+
runtimeTag === undefined ? undefined : context.valueMappings?.[runtimeTag]
|
|
114265
|
+
];
|
|
114266
|
+
};
|
|
114267
|
+
var findMapping = (context, key2) => {
|
|
114268
|
+
for (const candidate of mappingCandidates(context)) {
|
|
114269
|
+
const value = candidate?.[key2];
|
|
114270
|
+
if (value !== undefined) {
|
|
114271
|
+
return value;
|
|
114272
|
+
}
|
|
114273
|
+
}
|
|
114274
|
+
return;
|
|
114275
|
+
};
|
|
114276
|
+
var encodeWithSchema = (schema4, value) => {
|
|
114277
|
+
if (schema4 === undefined) {
|
|
114278
|
+
return { value, encoded: false };
|
|
114279
|
+
}
|
|
114280
|
+
if (!Schema7.is(schema4)(value)) {
|
|
114281
|
+
return { value, encoded: false };
|
|
114282
|
+
}
|
|
114283
|
+
return {
|
|
114284
|
+
value: Schema7.encodeUnknownSync(schema4)(value),
|
|
114285
|
+
encoded: true
|
|
114286
|
+
};
|
|
114287
|
+
};
|
|
114288
|
+
var toDriverValue = (value, context) => {
|
|
114289
|
+
if (value === null) {
|
|
114290
|
+
return null;
|
|
114291
|
+
}
|
|
114292
|
+
const dbType = context.dbType;
|
|
114293
|
+
const encoded = encodeWithSchema(context.runtimeSchema, value);
|
|
114294
|
+
let current = encoded.value;
|
|
114295
|
+
const custom3 = findMapping(context, "toDriver");
|
|
114296
|
+
if (custom3 !== undefined && dbType !== undefined) {
|
|
114297
|
+
return custom3(current, dbType);
|
|
114298
|
+
}
|
|
114299
|
+
return dbType === undefined || !encoded.encoded ? current : normalizeDbValue(dbType, current);
|
|
114300
|
+
};
|
|
114301
|
+
var fromDriverValue = (value, context) => {
|
|
114302
|
+
if (value === null) {
|
|
114303
|
+
return null;
|
|
114304
|
+
}
|
|
114305
|
+
const dbType = context.dbType;
|
|
114306
|
+
const custom3 = findMapping(context, "fromDriver");
|
|
114307
|
+
if (custom3 !== undefined && dbType !== undefined) {
|
|
114308
|
+
return custom3(value, dbType);
|
|
114309
|
+
}
|
|
114310
|
+
return dbType === undefined ? value : normalizeDbValue(dbType, value);
|
|
114311
|
+
};
|
|
114312
|
+
var textCast = (sql) => `(${sql})::text`;
|
|
114313
|
+
var postgresJsonSql = (sql, dbType) => {
|
|
114314
|
+
const runtimeTag = runtimeTagOfDbType(dbType);
|
|
114315
|
+
switch (runtimeTag) {
|
|
114316
|
+
case "bigintString":
|
|
114317
|
+
case "decimalString":
|
|
114318
|
+
case "localDate":
|
|
114319
|
+
case "localTime":
|
|
114320
|
+
case "offsetTime":
|
|
114321
|
+
case "localDateTime":
|
|
114322
|
+
case "instant":
|
|
114323
|
+
case "year":
|
|
114324
|
+
return textCast(sql);
|
|
114325
|
+
case "bytes":
|
|
114326
|
+
return `encode(${sql}, 'base64')`;
|
|
114327
|
+
default:
|
|
114328
|
+
return sql;
|
|
114329
|
+
}
|
|
114330
|
+
};
|
|
114331
|
+
var renderSelectSql = (sql, context) => {
|
|
114332
|
+
const dbType = context.dbType;
|
|
114333
|
+
const custom3 = findMapping(context, "selectSql");
|
|
114334
|
+
return custom3 !== undefined && dbType !== undefined ? custom3(sql, dbType) : sql;
|
|
114335
|
+
};
|
|
114336
|
+
var renderJsonSelectSql = (sql, context) => {
|
|
114337
|
+
const dbType = context.dbType;
|
|
114338
|
+
const custom3 = findMapping(context, "jsonSelectSql");
|
|
114339
|
+
if (custom3 !== undefined && dbType !== undefined) {
|
|
114340
|
+
return custom3(sql, dbType);
|
|
114341
|
+
}
|
|
114342
|
+
return context.dialect === "postgres" && dbType !== undefined ? postgresJsonSql(sql, dbType) : sql;
|
|
114343
|
+
};
|
|
114344
|
+
|
|
114083
114345
|
// src/internal/runtime/schema.ts
|
|
114084
|
-
import * as
|
|
114346
|
+
import * as Schema8 from "effect/Schema";
|
|
114085
114347
|
import * as SchemaAST from "effect/SchemaAST";
|
|
114086
114348
|
var schemaCache = new WeakMap;
|
|
114087
114349
|
var runtimeSchemaForTag = (tag) => {
|
|
114088
114350
|
switch (tag) {
|
|
114089
114351
|
case "string":
|
|
114090
|
-
return
|
|
114352
|
+
return Schema8.String;
|
|
114091
114353
|
case "number":
|
|
114092
|
-
return
|
|
114354
|
+
return Schema8.Number;
|
|
114093
114355
|
case "bigintString":
|
|
114094
114356
|
return BigIntStringSchema;
|
|
114095
114357
|
case "boolean":
|
|
114096
|
-
return
|
|
114358
|
+
return Schema8.Boolean;
|
|
114097
114359
|
case "json":
|
|
114098
114360
|
return JsonValueSchema;
|
|
114099
114361
|
case "localDate":
|
|
@@ -114111,16 +114373,16 @@ var runtimeSchemaForTag = (tag) => {
|
|
|
114111
114373
|
case "decimalString":
|
|
114112
114374
|
return DecimalStringSchema;
|
|
114113
114375
|
case "bytes":
|
|
114114
|
-
return
|
|
114376
|
+
return Schema8.Uint8ArrayFromSelf;
|
|
114115
114377
|
case "array":
|
|
114116
|
-
return
|
|
114378
|
+
return Schema8.Array(Schema8.Unknown);
|
|
114117
114379
|
case "record":
|
|
114118
|
-
return
|
|
114119
|
-
key:
|
|
114120
|
-
value:
|
|
114380
|
+
return Schema8.Record({
|
|
114381
|
+
key: Schema8.String,
|
|
114382
|
+
value: Schema8.Unknown
|
|
114121
114383
|
});
|
|
114122
114384
|
case "null":
|
|
114123
|
-
return
|
|
114385
|
+
return Schema8.Null;
|
|
114124
114386
|
case "unknown":
|
|
114125
114387
|
return;
|
|
114126
114388
|
}
|
|
@@ -114133,22 +114395,22 @@ var runtimeSchemaForDbType = (dbType) => {
|
|
|
114133
114395
|
return runtimeSchemaForDbType(dbType.base);
|
|
114134
114396
|
}
|
|
114135
114397
|
if ("element" in dbType) {
|
|
114136
|
-
return
|
|
114398
|
+
return Schema8.Array(runtimeSchemaForDbType(dbType.element) ?? Schema8.Unknown);
|
|
114137
114399
|
}
|
|
114138
114400
|
if ("fields" in dbType) {
|
|
114139
|
-
const fields2 = Object.fromEntries(Object.entries(dbType.fields).map(([key2, field]) => [key2, runtimeSchemaForDbType(field) ??
|
|
114140
|
-
return
|
|
114401
|
+
const fields2 = Object.fromEntries(Object.entries(dbType.fields).map(([key2, field]) => [key2, runtimeSchemaForDbType(field) ?? Schema8.Unknown]));
|
|
114402
|
+
return Schema8.Struct(fields2);
|
|
114141
114403
|
}
|
|
114142
114404
|
if ("variant" in dbType && dbType.variant === "json") {
|
|
114143
114405
|
return JsonValueSchema;
|
|
114144
114406
|
}
|
|
114145
114407
|
if ("variant" in dbType && (dbType.variant === "enum" || dbType.variant === "set")) {
|
|
114146
|
-
return
|
|
114408
|
+
return Schema8.String;
|
|
114147
114409
|
}
|
|
114148
114410
|
const runtimeTag = runtimeTagOfBaseDbType2(dbType);
|
|
114149
114411
|
return runtimeTag === undefined ? undefined : runtimeSchemaForTag(runtimeTag);
|
|
114150
114412
|
};
|
|
114151
|
-
var makeSchemaFromAst = (ast) =>
|
|
114413
|
+
var makeSchemaFromAst = (ast) => Schema8.make(ast);
|
|
114152
114414
|
var unionAst = (asts) => {
|
|
114153
114415
|
if (asts.length === 0) {
|
|
114154
114416
|
return;
|
|
@@ -114246,7 +114508,7 @@ var unionSchemas = (schemas) => {
|
|
|
114246
114508
|
if (resolved.length === 1) {
|
|
114247
114509
|
return resolved[0];
|
|
114248
114510
|
}
|
|
114249
|
-
return
|
|
114511
|
+
return Schema8.Union(...resolved);
|
|
114250
114512
|
};
|
|
114251
114513
|
var firstSelectedExpression = (plan) => {
|
|
114252
114514
|
const selection = getAst(plan).select;
|
|
@@ -114281,9 +114543,9 @@ var jsonCompatibleSchema = (schema4) => {
|
|
|
114281
114543
|
};
|
|
114282
114544
|
var buildStructSchema = (entries, context) => {
|
|
114283
114545
|
const fields2 = Object.fromEntries(entries.map((entry) => [entry.key, expressionRuntimeSchema(entry.value, context) ?? JsonValueSchema]));
|
|
114284
|
-
return
|
|
114546
|
+
return Schema8.Struct(fields2);
|
|
114285
114547
|
};
|
|
114286
|
-
var buildTupleSchema = (values2, context) =>
|
|
114548
|
+
var buildTupleSchema = (values2, context) => Schema8.Tuple(...values2.map((value) => expressionRuntimeSchema(value, context) ?? JsonValueSchema));
|
|
114287
114549
|
var deriveCaseSchema = (ast, context) => {
|
|
114288
114550
|
if (context === undefined) {
|
|
114289
114551
|
return unionSchemas([
|
|
@@ -114323,10 +114585,10 @@ var deriveRuntimeSchema = (expression, context) => {
|
|
|
114323
114585
|
return state.runtimeSchema;
|
|
114324
114586
|
case "literal":
|
|
114325
114587
|
if (ast.value === null) {
|
|
114326
|
-
return
|
|
114588
|
+
return Schema8.Null;
|
|
114327
114589
|
}
|
|
114328
114590
|
if (typeof ast.value === "string" || typeof ast.value === "number" || typeof ast.value === "boolean") {
|
|
114329
|
-
return
|
|
114591
|
+
return Schema8.Literal(ast.value);
|
|
114330
114592
|
}
|
|
114331
114593
|
return runtimeSchemaForDbType(state.dbType);
|
|
114332
114594
|
case "cast":
|
|
@@ -114362,7 +114624,7 @@ var deriveRuntimeSchema = (expression, context) => {
|
|
|
114362
114624
|
case "jsonHasAllKeys":
|
|
114363
114625
|
case "jsonPathExists":
|
|
114364
114626
|
case "jsonPathMatch":
|
|
114365
|
-
return
|
|
114627
|
+
return Schema8.Boolean;
|
|
114366
114628
|
case "upper":
|
|
114367
114629
|
case "lower":
|
|
114368
114630
|
case "concat":
|
|
@@ -114371,10 +114633,10 @@ var deriveRuntimeSchema = (expression, context) => {
|
|
|
114371
114633
|
case "jsonAccessText":
|
|
114372
114634
|
case "jsonTraverseText":
|
|
114373
114635
|
case "jsonTypeOf":
|
|
114374
|
-
return
|
|
114636
|
+
return Schema8.String;
|
|
114375
114637
|
case "count":
|
|
114376
114638
|
case "jsonLength":
|
|
114377
|
-
return
|
|
114639
|
+
return Schema8.Number;
|
|
114378
114640
|
case "max":
|
|
114379
114641
|
case "min":
|
|
114380
114642
|
return expressionRuntimeSchema(ast.value, context);
|
|
@@ -114387,7 +114649,7 @@ var deriveRuntimeSchema = (expression, context) => {
|
|
|
114387
114649
|
return selection === undefined ? undefined : expressionRuntimeSchema(selection, context);
|
|
114388
114650
|
}
|
|
114389
114651
|
case "window":
|
|
114390
|
-
return ast.function === "over" && ast.value !== undefined ? expressionRuntimeSchema(ast.value, context) :
|
|
114652
|
+
return ast.function === "over" && ast.value !== undefined ? expressionRuntimeSchema(ast.value, context) : Schema8.Number;
|
|
114391
114653
|
case "jsonGet":
|
|
114392
114654
|
case "jsonPath":
|
|
114393
114655
|
case "jsonAccess":
|
|
@@ -114419,7 +114681,7 @@ var deriveRuntimeSchema = (expression, context) => {
|
|
|
114419
114681
|
case "jsonToJsonb":
|
|
114420
114682
|
return jsonCompatibleSchema(expressionRuntimeSchema(ast.value, context));
|
|
114421
114683
|
case "jsonKeys":
|
|
114422
|
-
return
|
|
114684
|
+
return Schema8.Array(Schema8.String);
|
|
114423
114685
|
}
|
|
114424
114686
|
};
|
|
114425
114687
|
var expressionRuntimeSchema = (expression, context) => {
|
|
@@ -114522,11 +114784,17 @@ var effectiveRuntimeNullability = (expression, scope) => {
|
|
|
114522
114784
|
}
|
|
114523
114785
|
return hasOptionalSourceDependency(expression, scope) ? "maybe" : nullability;
|
|
114524
114786
|
};
|
|
114525
|
-
var decodeProjectionValue = (rendered, projection, expression, raw, scope, driverMode) => {
|
|
114787
|
+
var decodeProjectionValue = (rendered, projection, expression, raw, scope, driverMode, valueMappings) => {
|
|
114526
114788
|
let normalized = raw;
|
|
114527
114789
|
if (driverMode === "raw") {
|
|
114528
114790
|
try {
|
|
114529
|
-
normalized =
|
|
114791
|
+
normalized = fromDriverValue(raw, {
|
|
114792
|
+
dialect: rendered.dialect,
|
|
114793
|
+
dbType: expression[TypeId].dbType,
|
|
114794
|
+
runtimeSchema: expression[TypeId].runtimeSchema,
|
|
114795
|
+
driverValueMapping: expression[TypeId].driverValueMapping,
|
|
114796
|
+
valueMappings
|
|
114797
|
+
});
|
|
114530
114798
|
} catch (cause) {
|
|
114531
114799
|
throw makeRowDecodeError(rendered, projection, expression, raw, "normalize", cause);
|
|
114532
114800
|
}
|
|
@@ -114545,11 +114813,11 @@ var decodeProjectionValue = (rendered, projection, expression, raw, scope, drive
|
|
|
114545
114813
|
if (schema4 === undefined) {
|
|
114546
114814
|
return normalized;
|
|
114547
114815
|
}
|
|
114548
|
-
if (
|
|
114816
|
+
if (Schema9.is(schema4)(normalized)) {
|
|
114549
114817
|
return normalized;
|
|
114550
114818
|
}
|
|
114551
114819
|
try {
|
|
114552
|
-
return
|
|
114820
|
+
return Schema9.decodeUnknownSync(schema4)(normalized);
|
|
114553
114821
|
} catch (cause) {
|
|
114554
114822
|
throw makeRowDecodeError(rendered, projection, expression, raw, "schema", cause, normalized);
|
|
114555
114823
|
}
|
|
@@ -114558,6 +114826,7 @@ var makeRowDecoder = (rendered, plan, options2 = {}) => {
|
|
|
114558
114826
|
const projections = flattenSelection(getAst(plan).select);
|
|
114559
114827
|
const byAlias = new Map(projections.map((projection) => [projection.alias, projection.expression]));
|
|
114560
114828
|
const driverMode = options2.driverMode ?? "raw";
|
|
114829
|
+
const valueMappings = options2.valueMappings ?? rendered.valueMappings;
|
|
114561
114830
|
const scope = resolveImplicationScope(plan[TypeId3].available, getQueryState(plan).assumptions);
|
|
114562
114831
|
return (row) => {
|
|
114563
114832
|
const decoded = {};
|
|
@@ -114569,7 +114838,7 @@ var makeRowDecoder = (rendered, plan, options2 = {}) => {
|
|
|
114569
114838
|
if (expression === undefined) {
|
|
114570
114839
|
continue;
|
|
114571
114840
|
}
|
|
114572
|
-
setPath2(decoded, projection.path, decodeProjectionValue(rendered, projection, expression, row[projection.alias], scope, driverMode));
|
|
114841
|
+
setPath2(decoded, projection.path, decodeProjectionValue(rendered, projection, expression, row[projection.alias], scope, driverMode, valueMappings));
|
|
114573
114842
|
}
|
|
114574
114843
|
return decoded;
|
|
114575
114844
|
};
|
|
@@ -114628,6 +114897,7 @@ function make5(dialect, render) {
|
|
|
114628
114897
|
sql: rendered.sql,
|
|
114629
114898
|
params: rendered.params ?? [],
|
|
114630
114899
|
projections,
|
|
114900
|
+
valueMappings: rendered.valueMappings,
|
|
114631
114901
|
dialect,
|
|
114632
114902
|
[TypeId8]: {
|
|
114633
114903
|
row: undefined,
|
|
@@ -114640,14 +114910,19 @@ function make5(dialect, render) {
|
|
|
114640
114910
|
|
|
114641
114911
|
// src/mysql/internal/dialect.ts
|
|
114642
114912
|
var quoteIdentifier = (value) => `\`${value.replaceAll("`", "``")}\``;
|
|
114643
|
-
var renderLiteral = (value, state) => {
|
|
114644
|
-
|
|
114913
|
+
var renderLiteral = (value, state, context = {}) => {
|
|
114914
|
+
const driverValue = toDriverValue(value, {
|
|
114915
|
+
dialect: "mysql",
|
|
114916
|
+
valueMappings: state.valueMappings,
|
|
114917
|
+
...context
|
|
114918
|
+
});
|
|
114919
|
+
if (driverValue === null) {
|
|
114645
114920
|
return "null";
|
|
114646
114921
|
}
|
|
114647
|
-
if (typeof
|
|
114648
|
-
return
|
|
114922
|
+
if (typeof driverValue === "boolean") {
|
|
114923
|
+
return driverValue ? "true" : "false";
|
|
114649
114924
|
}
|
|
114650
|
-
state.params.push(
|
|
114925
|
+
state.params.push(driverValue);
|
|
114651
114926
|
return "?";
|
|
114652
114927
|
};
|
|
114653
114928
|
var mysqlDialect = {
|
|
@@ -114941,6 +115216,21 @@ var renderPostgresJsonValue = (value, state, dialect) => {
|
|
|
114941
115216
|
const rendered = renderExpression(value, state, dialect);
|
|
114942
115217
|
return value[TypeId].dbType.kind === "jsonb" ? rendered : `cast(${rendered} as jsonb)`;
|
|
114943
115218
|
};
|
|
115219
|
+
var expressionDriverContext = (expression, state, dialect) => ({
|
|
115220
|
+
dialect: dialect.name,
|
|
115221
|
+
valueMappings: state.valueMappings,
|
|
115222
|
+
dbType: expression[TypeId].dbType,
|
|
115223
|
+
runtimeSchema: expression[TypeId].runtimeSchema,
|
|
115224
|
+
driverValueMapping: expression[TypeId].driverValueMapping
|
|
115225
|
+
});
|
|
115226
|
+
var renderJsonInputExpression = (expression, state, dialect) => renderJsonSelectSql(renderExpression(expression, state, dialect), expressionDriverContext(expression, state, dialect));
|
|
115227
|
+
var encodeArrayValues = (values2, column2, state, dialect) => values2.map((value) => toDriverValue(value, {
|
|
115228
|
+
dialect: dialect.name,
|
|
115229
|
+
valueMappings: state.valueMappings,
|
|
115230
|
+
dbType: column2.metadata.dbType,
|
|
115231
|
+
runtimeSchema: column2.schema,
|
|
115232
|
+
driverValueMapping: column2.metadata.driverValueMapping
|
|
115233
|
+
}));
|
|
114944
115234
|
var renderPostgresJsonKind = (value) => value[TypeId].dbType.kind === "jsonb" ? "jsonb" : "json";
|
|
114945
115235
|
var renderJsonOpaquePath = (value, state, dialect) => {
|
|
114946
115236
|
if (isJsonPathValue2(value)) {
|
|
@@ -115069,7 +115359,7 @@ var renderJsonExpression = (expression, ast, state, dialect) => {
|
|
|
115069
115359
|
const entries = Array.isArray(ast.entries) ? ast.entries : [];
|
|
115070
115360
|
const renderedEntries = entries.flatMap((entry) => [
|
|
115071
115361
|
dialect.renderLiteral(entry.key, state),
|
|
115072
|
-
|
|
115362
|
+
renderJsonInputExpression(entry.value, state, dialect)
|
|
115073
115363
|
]);
|
|
115074
115364
|
if (dialect.name === "postgres") {
|
|
115075
115365
|
return `${postgresExpressionKind === "jsonb" ? "jsonb" : "json"}_build_object(${renderedEntries.join(", ")})`;
|
|
@@ -115081,7 +115371,7 @@ var renderJsonExpression = (expression, ast, state, dialect) => {
|
|
|
115081
115371
|
}
|
|
115082
115372
|
case "jsonBuildArray": {
|
|
115083
115373
|
const values2 = Array.isArray(ast.values) ? ast.values : [];
|
|
115084
|
-
const renderedValues = values2.map((value) =>
|
|
115374
|
+
const renderedValues = values2.map((value) => renderJsonInputExpression(value, state, dialect)).join(", ");
|
|
115085
115375
|
if (dialect.name === "postgres") {
|
|
115086
115376
|
return `${postgresExpressionKind === "jsonb" ? "jsonb" : "json"}_build_array(${renderedValues})`;
|
|
115087
115377
|
}
|
|
@@ -115095,7 +115385,7 @@ var renderJsonExpression = (expression, ast, state, dialect) => {
|
|
|
115095
115385
|
return;
|
|
115096
115386
|
}
|
|
115097
115387
|
if (dialect.name === "postgres") {
|
|
115098
|
-
return `to_json(${
|
|
115388
|
+
return `to_json(${renderJsonInputExpression(base, state, dialect)})`;
|
|
115099
115389
|
}
|
|
115100
115390
|
if (dialect.name === "mysql") {
|
|
115101
115391
|
return `cast(${renderExpression(base, state, dialect)} as json)`;
|
|
@@ -115106,7 +115396,7 @@ var renderJsonExpression = (expression, ast, state, dialect) => {
|
|
|
115106
115396
|
return;
|
|
115107
115397
|
}
|
|
115108
115398
|
if (dialect.name === "postgres") {
|
|
115109
|
-
return `to_jsonb(${
|
|
115399
|
+
return `to_jsonb(${renderJsonInputExpression(base, state, dialect)})`;
|
|
115110
115400
|
}
|
|
115111
115401
|
if (dialect.name === "mysql") {
|
|
115112
115402
|
return `cast(${renderExpression(base, state, dialect)} as json)`;
|
|
@@ -115293,7 +115583,7 @@ var renderSelectionList = (selection, state, dialect, validateAggregation) => {
|
|
|
115293
115583
|
}
|
|
115294
115584
|
const flattened = flattenSelection(selection);
|
|
115295
115585
|
const projections = selectionProjections(selection);
|
|
115296
|
-
const sql = flattened.map(({ expression, alias: alias2 }) => `${renderExpression(expression, state, dialect)} as ${dialect.quoteIdentifier(alias2)}`).join(", ");
|
|
115586
|
+
const sql = flattened.map(({ expression, alias: alias2 }) => `${renderSelectSql(renderExpression(expression, state, dialect), expressionDriverContext(expression, state, dialect))} as ${dialect.quoteIdentifier(alias2)}`).join(", ");
|
|
115297
115587
|
return {
|
|
115298
115588
|
sql,
|
|
115299
115589
|
projections
|
|
@@ -115373,11 +115663,11 @@ var renderQueryAst = (ast, state, dialect) => {
|
|
|
115373
115663
|
if (dialect.name === "postgres") {
|
|
115374
115664
|
const table = targetSource.source;
|
|
115375
115665
|
const fields2 = table[TypeId4].fields;
|
|
115376
|
-
const rendered = unnestSource.values.map((entry) => `cast(${dialect.renderLiteral(entry.values, state)} as ${renderCastType(dialect, fields2[entry.columnName].metadata.dbType)}[])`).join(", ");
|
|
115666
|
+
const rendered = unnestSource.values.map((entry) => `cast(${dialect.renderLiteral(encodeArrayValues(entry.values, fields2[entry.columnName], state, dialect), state)} as ${renderCastType(dialect, fields2[entry.columnName].metadata.dbType)}[])`).join(", ");
|
|
115377
115667
|
sql += ` (${columns}) select * from unnest(${rendered})`;
|
|
115378
115668
|
} else {
|
|
115379
115669
|
const rowCount = unnestSource.values[0]?.values.length ?? 0;
|
|
115380
|
-
const rows = Array.from({ length: rowCount }, (_, index4) => `(${unnestSource.values.map((entry) => dialect.renderLiteral(entry.values[index4], state)).join(", ")})`).join(", ");
|
|
115670
|
+
const rows = Array.from({ length: rowCount }, (_, index4) => `(${unnestSource.values.map((entry) => dialect.renderLiteral(entry.values[index4], state, targetSource.source[TypeId4].fields[entry.columnName][TypeId])).join(", ")})`).join(", ");
|
|
115381
115671
|
sql += ` (${columns}) values ${rows}`;
|
|
115382
115672
|
}
|
|
115383
115673
|
} else {
|
|
@@ -115638,7 +115928,7 @@ var renderExpression = (expression, state, dialect) => {
|
|
|
115638
115928
|
case "column":
|
|
115639
115929
|
return ast.tableName.length === 0 ? dialect.quoteIdentifier(ast.columnName) : `${dialect.quoteIdentifier(ast.tableName)}.${dialect.quoteIdentifier(ast.columnName)}`;
|
|
115640
115930
|
case "literal":
|
|
115641
|
-
return dialect.renderLiteral(ast.value, state);
|
|
115931
|
+
return dialect.renderLiteral(ast.value, state, expression[TypeId]);
|
|
115642
115932
|
case "excluded":
|
|
115643
115933
|
return dialect.name === "mysql" ? `values(${dialect.quoteIdentifier(ast.columnName)})` : `excluded.${dialect.quoteIdentifier(ast.columnName)}`;
|
|
115644
115934
|
case "cast":
|
|
@@ -115774,9 +116064,10 @@ var renderExpression = (expression, state, dialect) => {
|
|
|
115774
116064
|
};
|
|
115775
116065
|
|
|
115776
116066
|
// src/mysql/internal/renderer.ts
|
|
115777
|
-
var renderMysqlPlan = (plan) => {
|
|
116067
|
+
var renderMysqlPlan = (plan, options2 = {}) => {
|
|
115778
116068
|
const state = {
|
|
115779
116069
|
params: [],
|
|
116070
|
+
valueMappings: options2.valueMappings,
|
|
115780
116071
|
ctes: [],
|
|
115781
116072
|
cteNames: new Set
|
|
115782
116073
|
};
|
|
@@ -115784,7 +116075,8 @@ var renderMysqlPlan = (plan) => {
|
|
|
115784
116075
|
return {
|
|
115785
116076
|
sql: rendered.sql,
|
|
115786
116077
|
params: state.params,
|
|
115787
|
-
projections: rendered.projections
|
|
116078
|
+
projections: rendered.projections,
|
|
116079
|
+
valueMappings: state.valueMappings
|
|
115788
116080
|
};
|
|
115789
116081
|
};
|
|
115790
116082
|
|
|
@@ -115794,12 +116086,12 @@ var withSavepoint2 = withSavepoint;
|
|
|
115794
116086
|
function driver2(executeOrHandlers) {
|
|
115795
116087
|
return driver("mysql", executeOrHandlers);
|
|
115796
116088
|
}
|
|
115797
|
-
var fromDriver = (renderer, sqlDriver, driverMode = "raw") => ({
|
|
116089
|
+
var fromDriver = (renderer, sqlDriver, driverMode = "raw", valueMappings) => ({
|
|
115798
116090
|
dialect: "mysql",
|
|
115799
116091
|
execute(plan) {
|
|
115800
116092
|
const rendered = renderer.render(plan);
|
|
115801
116093
|
return Effect2.mapError(Effect2.flatMap(sqlDriver.execute(rendered), (rows) => Effect2.try({
|
|
115802
|
-
try: () => decodeRows(rendered, plan, rows, { driverMode }),
|
|
116094
|
+
try: () => decodeRows(rendered, plan, rows, { driverMode, valueMappings }),
|
|
115803
116095
|
catch: (error) => error
|
|
115804
116096
|
})), (error) => {
|
|
115805
116097
|
if (typeof error === "object" && error !== null && "_tag" in error && error._tag === "RowDecodeError") {
|
|
@@ -115812,7 +116104,7 @@ var fromDriver = (renderer, sqlDriver, driverMode = "raw") => ({
|
|
|
115812
116104
|
stream(plan) {
|
|
115813
116105
|
const rendered = renderer.render(plan);
|
|
115814
116106
|
return Stream2.mapError(Stream2.mapChunksEffect(sqlDriver.stream(rendered), (rows) => Effect2.try({
|
|
115815
|
-
try: () => decodeChunk(rendered, plan, rows, { driverMode }),
|
|
116107
|
+
try: () => decodeChunk(rendered, plan, rows, { driverMode, valueMappings }),
|
|
115816
116108
|
catch: (error) => error
|
|
115817
116109
|
})), (error) => {
|
|
115818
116110
|
if (typeof error === "object" && error !== null && "_tag" in error && error._tag === "RowDecodeError") {
|
|
@@ -115829,9 +116121,9 @@ var sqlClientDriver = () => driver2({
|
|
|
115829
116121
|
});
|
|
115830
116122
|
function make6(options2 = {}) {
|
|
115831
116123
|
if (options2.driver) {
|
|
115832
|
-
return fromDriver(options2.renderer ?? make5("mysql", renderMysqlPlan), options2.driver, options2.driverMode);
|
|
116124
|
+
return fromDriver(options2.renderer ?? make5("mysql", (plan) => renderMysqlPlan(plan, { valueMappings: options2.valueMappings })), options2.driver, options2.driverMode, options2.valueMappings);
|
|
115833
116125
|
}
|
|
115834
|
-
return fromDriver(options2.renderer ?? make5("mysql", renderMysqlPlan), sqlClientDriver(), options2.driverMode);
|
|
116126
|
+
return fromDriver(options2.renderer ?? make5("mysql", (plan) => renderMysqlPlan(plan, { valueMappings: options2.valueMappings })), sqlClientDriver(), options2.driverMode, options2.valueMappings);
|
|
115835
116127
|
}
|
|
115836
116128
|
var custom3 = (execute) => make4("mysql", execute);
|
|
115837
116129
|
// src/mysql/query.ts
|
|
@@ -115967,7 +116259,7 @@ __export(exports_renderer2, {
|
|
|
115967
116259
|
make: () => make8,
|
|
115968
116260
|
TypeId: () => TypeId8
|
|
115969
116261
|
});
|
|
115970
|
-
var make8 = () => make5("mysql", renderMysqlPlan);
|
|
116262
|
+
var make8 = (options3 = {}) => make5("mysql", (plan) => renderMysqlPlan(plan, options3));
|
|
115971
116263
|
var mysql = make8();
|
|
115972
116264
|
export {
|
|
115973
116265
|
exports_table2 as Table,
|