effect-qb 0.13.0 → 0.15.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 +6 -1431
- package/dist/mysql.js +61945 -3611
- package/dist/postgres/metadata.js +2818 -0
- package/dist/postgres.js +9942 -5591
- package/package.json +21 -10
- package/src/internal/aggregation-validation.ts +3 -3
- package/src/internal/case-analysis.d.ts +18 -0
- package/src/internal/case-analysis.ts +4 -4
- package/src/internal/coercion/analysis.d.ts +7 -0
- package/src/internal/{coercion-analysis.ts → coercion/analysis.ts} +3 -3
- package/src/internal/coercion/errors.d.ts +17 -0
- package/src/internal/{coercion-errors.ts → coercion/errors.ts} +1 -1
- package/src/internal/coercion/kind.d.ts +4 -0
- package/src/internal/{coercion-kind.ts → coercion/kind.ts} +2 -2
- package/src/internal/{coercion-normalize.ts → coercion/normalize.ts} +1 -1
- package/src/internal/coercion/rules.d.ts +6 -0
- package/src/internal/{coercion-rules.ts → coercion/rules.ts} +2 -2
- package/src/internal/column-state.d.ts +190 -0
- package/src/internal/column-state.ts +119 -56
- package/src/internal/column.ts +387 -149
- package/src/internal/datatypes/define.d.ts +17 -0
- package/src/internal/datatypes/define.ts +18 -34
- package/src/internal/datatypes/lookup.d.ts +44 -0
- package/src/internal/datatypes/lookup.ts +61 -152
- package/src/internal/datatypes/shape.d.ts +16 -0
- package/src/internal/datatypes/shape.ts +1 -1
- package/src/internal/derived-table.d.ts +4 -0
- package/src/internal/derived-table.ts +21 -16
- package/src/internal/dsl-mutation-runtime.ts +378 -0
- package/src/internal/dsl-plan-runtime.ts +387 -0
- package/src/internal/dsl-query-runtime.ts +160 -0
- package/src/internal/dsl-transaction-ddl-runtime.ts +263 -0
- package/src/internal/executor.ts +173 -38
- package/src/internal/expression-ast.ts +19 -5
- package/src/internal/grouping-key.d.ts +3 -0
- package/src/internal/grouping-key.ts +1 -1
- package/src/internal/implication-runtime.d.ts +15 -0
- package/src/internal/implication-runtime.ts +171 -0
- package/src/internal/json/ast.d.ts +30 -0
- package/src/internal/json/ast.ts +1 -1
- package/src/internal/json/errors.d.ts +8 -0
- package/src/internal/json/path.d.ts +75 -0
- package/src/internal/json/path.ts +1 -1
- package/src/internal/json/types.d.ts +62 -0
- package/src/internal/predicate/analysis.d.ts +20 -0
- package/src/internal/{predicate-analysis.ts → predicate/analysis.ts} +13 -3
- package/src/internal/predicate/atom.d.ts +28 -0
- package/src/internal/{predicate-branches.ts → predicate/branches.ts} +2 -2
- package/src/internal/predicate/context.d.ts +67 -0
- package/src/internal/{predicate-context.ts → predicate/context.ts} +111 -32
- package/src/internal/predicate/formula.d.ts +35 -0
- package/src/internal/{predicate-formula.ts → predicate/formula.ts} +32 -20
- package/src/internal/predicate/key.d.ts +11 -0
- package/src/internal/{predicate-key.ts → predicate/key.ts} +2 -2
- package/src/internal/{predicate-nnf.ts → predicate/nnf.ts} +2 -2
- package/src/internal/predicate/normalize.d.ts +53 -0
- package/src/internal/predicate/normalize.ts +273 -0
- package/src/internal/predicate/runtime.d.ts +31 -0
- package/src/internal/predicate/runtime.ts +679 -0
- package/src/internal/projection-alias.d.ts +13 -0
- package/src/internal/projections.d.ts +31 -0
- package/src/internal/projections.ts +1 -1
- package/src/internal/query-ast.d.ts +217 -0
- package/src/internal/query-ast.ts +1 -1
- package/src/internal/query-requirements.d.ts +20 -0
- package/src/internal/query.d.ts +775 -0
- package/src/internal/query.ts +767 -275
- package/src/internal/renderer.ts +7 -21
- package/src/internal/row-set.d.ts +53 -0
- package/src/internal/{plan.ts → row-set.ts} +23 -11
- package/src/internal/{runtime-normalize.ts → runtime/normalize.ts} +9 -31
- package/src/internal/{runtime-schema.ts → runtime/schema.ts} +84 -55
- package/src/internal/runtime/value.d.ts +22 -0
- package/src/internal/{runtime-value.ts → runtime/value.ts} +2 -2
- package/src/internal/scalar.d.ts +107 -0
- package/src/internal/scalar.ts +191 -0
- package/src/internal/schema-derivation.d.ts +105 -0
- package/src/internal/schema-derivation.ts +93 -21
- package/src/internal/schema-expression.d.ts +18 -0
- package/src/internal/schema-expression.ts +75 -0
- package/src/internal/table-options.d.ts +94 -0
- package/src/internal/table-options.ts +94 -8
- package/src/internal/table.d.ts +173 -0
- package/src/internal/table.ts +135 -54
- package/src/mysql/column.ts +95 -18
- package/src/mysql/datatypes/index.ts +58 -3
- package/src/mysql/errors/generated.ts +57336 -0
- package/src/mysql/errors/index.ts +1 -0
- package/src/mysql/errors/normalize.ts +55 -53
- package/src/mysql/errors/types.ts +74 -0
- package/src/mysql/executor.ts +69 -7
- package/src/mysql/function/aggregate.ts +1 -5
- package/src/mysql/function/core.ts +1 -3
- package/src/mysql/function/index.ts +1 -1
- package/src/mysql/function/string.ts +1 -5
- package/src/mysql/function/temporal.ts +12 -15
- package/src/mysql/function/window.ts +1 -6
- package/src/{internal/mysql-dialect.ts → mysql/internal/dialect.ts} +1 -1
- package/src/mysql/internal/dsl.ts +6115 -0
- package/src/{internal/mysql-renderer.ts → mysql/internal/renderer.ts} +6 -6
- package/src/mysql/internal/sql-expression-renderer.ts +1455 -0
- package/src/mysql/json.ts +2 -0
- package/src/mysql/query.ts +111 -86
- package/src/mysql/renderer.ts +1 -1
- package/src/mysql/table.ts +1 -1
- package/src/mysql.ts +6 -4
- package/src/postgres/cast.ts +30 -0
- package/src/postgres/column.ts +178 -20
- package/src/postgres/datatypes/index.d.ts +515 -0
- package/src/postgres/datatypes/index.ts +49 -5
- package/src/postgres/datatypes/spec.d.ts +412 -0
- package/src/postgres/errors/generated.ts +2636 -0
- package/src/postgres/errors/index.ts +1 -0
- package/src/postgres/errors/normalize.ts +47 -62
- package/src/postgres/errors/types.ts +92 -34
- package/src/postgres/executor.ts +37 -5
- package/src/postgres/function/aggregate.ts +1 -5
- package/src/postgres/function/core.ts +20 -2
- package/src/postgres/function/index.ts +1 -1
- package/src/postgres/function/string.ts +1 -5
- package/src/postgres/function/temporal.ts +12 -15
- package/src/postgres/function/window.ts +1 -6
- package/src/{internal/postgres-dialect.ts → postgres/internal/dialect.ts} +1 -1
- package/src/{internal/query-factory.ts → postgres/internal/dsl.ts} +1568 -2120
- package/src/{internal/postgres-renderer.ts → postgres/internal/renderer.ts} +6 -6
- package/src/postgres/internal/schema-ddl.ts +108 -0
- package/src/postgres/internal/schema-model.ts +150 -0
- package/src/{internal → postgres/internal}/sql-expression-renderer.ts +112 -46
- package/src/postgres/json.ts +493 -0
- package/src/postgres/metadata.ts +31 -0
- package/src/postgres/query.ts +113 -86
- package/src/postgres/renderer.ts +3 -13
- package/src/postgres/schema-expression.ts +17 -0
- package/src/postgres/schema-management.ts +204 -0
- package/src/postgres/schema.ts +35 -0
- package/src/postgres/table.ts +316 -42
- package/src/postgres/type.ts +31 -0
- package/src/postgres.ts +20 -4
- package/CHANGELOG.md +0 -134
- package/src/internal/expression.ts +0 -327
- package/src/internal/predicate-normalize.ts +0 -202
- package/src/mysql/function/json.ts +0 -4
- package/src/mysql/private/query.ts +0 -13
- package/src/postgres/function/json.ts +0 -4
- package/src/postgres/private/query.ts +0 -13
- /package/src/internal/{predicate-atom.ts → predicate/atom.ts} +0 -0
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
import type * as Expression from "../scalar.js"
|
|
2
|
+
import type * as ExpressionAst from "../expression-ast.js"
|
|
3
|
+
import type { ColumnKeyOfExpression, ValueKey } from "./key.js"
|
|
4
|
+
import type { AllFormula, AnyFormula, AtomFormula, FalseFormula, NotFormula, PredicateFormula, TrueFormula } from "./formula.js"
|
|
5
|
+
import type { EqColumnAtom, EqLiteralAtom, NeqLiteralAtom, NonNullAtom, NullAtom, UnknownAtom } from "./atom.js"
|
|
6
|
+
|
|
7
|
+
type AstOf<Value extends Expression.Any> = Value extends {
|
|
8
|
+
readonly [ExpressionAst.TypeId]: infer Ast extends ExpressionAst.Any
|
|
9
|
+
} ? Ast : never
|
|
10
|
+
|
|
11
|
+
type LiteralValueOfExpression<Value extends Expression.Any> = AstOf<Value> extends ExpressionAst.LiteralNode<infer Literal>
|
|
12
|
+
? Literal
|
|
13
|
+
: never
|
|
14
|
+
|
|
15
|
+
type True = TrueFormula
|
|
16
|
+
type False = FalseFormula
|
|
17
|
+
|
|
18
|
+
type UnknownTag<Tag extends string> = AtomFormula<UnknownAtom<Tag>>
|
|
19
|
+
type AtomOf<Atom extends import("./atom.js").PredicateAtom> = AtomFormula<Atom>
|
|
20
|
+
type FactOf<Atom extends import("./atom.js").PredicateAtom> = AtomFormula<Atom>
|
|
21
|
+
|
|
22
|
+
type NonNullFactsOfExpression<Value extends Expression.Any> =
|
|
23
|
+
[ColumnKeyOfExpression<Value>] extends [never]
|
|
24
|
+
? never
|
|
25
|
+
: FactOf<NonNullAtom<ColumnKeyOfExpression<Value>>>
|
|
26
|
+
|
|
27
|
+
type CombineFacts<
|
|
28
|
+
Left extends PredicateFormula,
|
|
29
|
+
Right extends PredicateFormula
|
|
30
|
+
> = [Left] extends [never]
|
|
31
|
+
? Right
|
|
32
|
+
: [Right] extends [never]
|
|
33
|
+
? Left
|
|
34
|
+
: import("./formula.js").NormalizeBooleanConstants<AllFormula<[Left, Right]>>
|
|
35
|
+
|
|
36
|
+
type FactsOfExpressions<Values extends readonly Expression.Any[]> =
|
|
37
|
+
Values extends readonly [
|
|
38
|
+
infer Head extends Expression.Any,
|
|
39
|
+
...infer Tail extends readonly Expression.Any[]
|
|
40
|
+
]
|
|
41
|
+
? CombineFacts<FormulaOfExpression<Head>, FactsOfExpressions<Tail>>
|
|
42
|
+
: never
|
|
43
|
+
|
|
44
|
+
type FormulaOfEq<
|
|
45
|
+
Left extends Expression.Any,
|
|
46
|
+
Right extends Expression.Any
|
|
47
|
+
> =
|
|
48
|
+
[ColumnKeyOfExpression<Left>] extends [never]
|
|
49
|
+
? [ColumnKeyOfExpression<Right>] extends [never]
|
|
50
|
+
? LiteralValueOfExpression<Left> extends infer LeftLiteral
|
|
51
|
+
? LiteralValueOfExpression<Right> extends infer RightLiteral
|
|
52
|
+
? [LeftLiteral] extends [never]
|
|
53
|
+
? UnknownTag<"eq:unsupported">
|
|
54
|
+
: [RightLiteral] extends [never]
|
|
55
|
+
? UnknownTag<"eq:unsupported">
|
|
56
|
+
: LeftLiteral extends null
|
|
57
|
+
? False
|
|
58
|
+
: RightLiteral extends null
|
|
59
|
+
? False
|
|
60
|
+
: [LeftLiteral] extends [RightLiteral]
|
|
61
|
+
? True
|
|
62
|
+
: False
|
|
63
|
+
: UnknownTag<"eq:unsupported">
|
|
64
|
+
: UnknownTag<"eq:unsupported">
|
|
65
|
+
: LiteralValueOfExpression<Left> extends infer LeftLiteral
|
|
66
|
+
? [LeftLiteral] extends [never]
|
|
67
|
+
? UnknownTag<"eq:unsupported">
|
|
68
|
+
: LeftLiteral extends null
|
|
69
|
+
? False
|
|
70
|
+
: AtomOf<EqLiteralAtom<ColumnKeyOfExpression<Right>, ValueKey<LeftLiteral>>>
|
|
71
|
+
: UnknownTag<"eq:unsupported">
|
|
72
|
+
: [ColumnKeyOfExpression<Right>] extends [never]
|
|
73
|
+
? LiteralValueOfExpression<Right> extends infer RightLiteral
|
|
74
|
+
? [RightLiteral] extends [never]
|
|
75
|
+
? UnknownTag<"eq:unsupported">
|
|
76
|
+
: RightLiteral extends null
|
|
77
|
+
? False
|
|
78
|
+
: AtomOf<EqLiteralAtom<ColumnKeyOfExpression<Left>, ValueKey<RightLiteral>>>
|
|
79
|
+
: UnknownTag<"eq:unsupported">
|
|
80
|
+
: AtomOf<import("./atom.js").EqColumnAtom<ColumnKeyOfExpression<Left>, ColumnKeyOfExpression<Right>>>
|
|
81
|
+
|
|
82
|
+
type FormulaOfNeq<
|
|
83
|
+
Left extends Expression.Any,
|
|
84
|
+
Right extends Expression.Any
|
|
85
|
+
> =
|
|
86
|
+
[ColumnKeyOfExpression<Left>] extends [never]
|
|
87
|
+
? [ColumnKeyOfExpression<Right>] extends [never]
|
|
88
|
+
? LiteralValueOfExpression<Left> extends infer LeftLiteral
|
|
89
|
+
? LiteralValueOfExpression<Right> extends infer RightLiteral
|
|
90
|
+
? [LeftLiteral] extends [never]
|
|
91
|
+
? UnknownTag<"neq:unsupported">
|
|
92
|
+
: [RightLiteral] extends [never]
|
|
93
|
+
? UnknownTag<"neq:unsupported">
|
|
94
|
+
: LeftLiteral extends null
|
|
95
|
+
? False
|
|
96
|
+
: RightLiteral extends null
|
|
97
|
+
? False
|
|
98
|
+
: [LeftLiteral] extends [RightLiteral]
|
|
99
|
+
? False
|
|
100
|
+
: True
|
|
101
|
+
: UnknownTag<"neq:unsupported">
|
|
102
|
+
: UnknownTag<"neq:unsupported">
|
|
103
|
+
: LiteralValueOfExpression<Left> extends infer LeftLiteral
|
|
104
|
+
? [LeftLiteral] extends [never]
|
|
105
|
+
? UnknownTag<"neq:unsupported">
|
|
106
|
+
: LeftLiteral extends null
|
|
107
|
+
? False
|
|
108
|
+
: AtomOf<NeqLiteralAtom<ColumnKeyOfExpression<Right>, ValueKey<LeftLiteral>>>
|
|
109
|
+
: UnknownTag<"neq:unsupported">
|
|
110
|
+
: [ColumnKeyOfExpression<Right>] extends [never]
|
|
111
|
+
? LiteralValueOfExpression<Right> extends infer RightLiteral
|
|
112
|
+
? [RightLiteral] extends [never]
|
|
113
|
+
? UnknownTag<"neq:unsupported">
|
|
114
|
+
: RightLiteral extends null
|
|
115
|
+
? False
|
|
116
|
+
: AtomOf<NeqLiteralAtom<ColumnKeyOfExpression<Left>, ValueKey<RightLiteral>>>
|
|
117
|
+
: UnknownTag<"neq:unsupported">
|
|
118
|
+
: CombineFacts<NonNullFactsOfExpression<Left>, NonNullFactsOfExpression<Right>>
|
|
119
|
+
|
|
120
|
+
type FormulaOfIsNotDistinctFrom<
|
|
121
|
+
Left extends Expression.Any,
|
|
122
|
+
Right extends Expression.Any
|
|
123
|
+
> =
|
|
124
|
+
LiteralValueOfExpression<Left> extends infer LeftLiteral
|
|
125
|
+
? LiteralValueOfExpression<Right> extends infer RightLiteral
|
|
126
|
+
? [LeftLiteral] extends [never]
|
|
127
|
+
? [RightLiteral] extends [never]
|
|
128
|
+
? UnknownTag<"isNotDistinctFrom:unsupported">
|
|
129
|
+
: RightLiteral extends null
|
|
130
|
+
? [ColumnKeyOfExpression<Left>] extends [never]
|
|
131
|
+
? UnknownTag<"isNotDistinctFrom:unsupported">
|
|
132
|
+
: AtomOf<NullAtom<ColumnKeyOfExpression<Left>>>
|
|
133
|
+
: UnknownTag<"isNotDistinctFrom:unsupported">
|
|
134
|
+
: LeftLiteral extends null
|
|
135
|
+
? [ColumnKeyOfExpression<Right>] extends [never]
|
|
136
|
+
? UnknownTag<"isNotDistinctFrom:unsupported">
|
|
137
|
+
: AtomOf<NullAtom<ColumnKeyOfExpression<Right>>>
|
|
138
|
+
: RightLiteral extends null
|
|
139
|
+
? [ColumnKeyOfExpression<Left>] extends [never]
|
|
140
|
+
? UnknownTag<"isNotDistinctFrom:unsupported">
|
|
141
|
+
: AtomOf<NullAtom<ColumnKeyOfExpression<Left>>>
|
|
142
|
+
: [ColumnKeyOfExpression<Left>] extends [never]
|
|
143
|
+
? [ColumnKeyOfExpression<Right>] extends [never]
|
|
144
|
+
? CombineFacts<NonNullFactsOfExpression<Left>, NonNullFactsOfExpression<Right>>
|
|
145
|
+
: AtomOf<EqLiteralAtom<ColumnKeyOfExpression<Right>, ValueKey<LeftLiteral>>>
|
|
146
|
+
: AtomOf<EqLiteralAtom<ColumnKeyOfExpression<Left>, ValueKey<RightLiteral>>>
|
|
147
|
+
: UnknownTag<"isNotDistinctFrom:unsupported">
|
|
148
|
+
: UnknownTag<"isNotDistinctFrom:unsupported">
|
|
149
|
+
|
|
150
|
+
type OrFormulas<
|
|
151
|
+
Items extends readonly PredicateFormula[]
|
|
152
|
+
> = import("./formula.js").NormalizeBooleanConstants<AnyFormula<Items>>
|
|
153
|
+
|
|
154
|
+
type AndFormulas<
|
|
155
|
+
Items extends readonly PredicateFormula[]
|
|
156
|
+
> = import("./formula.js").NormalizeBooleanConstants<AllFormula<Items>>
|
|
157
|
+
|
|
158
|
+
type FormulaTupleOf<
|
|
159
|
+
Values extends readonly Expression.Any[]
|
|
160
|
+
> = {
|
|
161
|
+
readonly [K in keyof Values]: Values[K] extends Expression.Any ? FormulaOfExpression<Values[K]> : never
|
|
162
|
+
} & readonly PredicateFormula[]
|
|
163
|
+
|
|
164
|
+
type AllFormulaOfValues<
|
|
165
|
+
Values extends readonly Expression.Any[]
|
|
166
|
+
> = import("./formula.js").NormalizeBooleanConstants<AllFormula<FormulaTupleOf<Values>>>
|
|
167
|
+
|
|
168
|
+
type AnyFormulaOfValues<
|
|
169
|
+
Values extends readonly Expression.Any[]
|
|
170
|
+
> = import("./formula.js").NormalizeBooleanConstants<AnyFormula<FormulaTupleOf<Values>>>
|
|
171
|
+
|
|
172
|
+
type FormulaOfInValues<
|
|
173
|
+
Left extends Expression.Any,
|
|
174
|
+
Values extends readonly Expression.Any[],
|
|
175
|
+
Current extends readonly PredicateFormula[] = []
|
|
176
|
+
> = Values extends readonly [
|
|
177
|
+
infer Head extends Expression.Any,
|
|
178
|
+
...infer Tail extends readonly Expression.Any[]
|
|
179
|
+
]
|
|
180
|
+
? FormulaOfInValues<Left, Tail, [...Current, FormulaOfEq<Left, Head>]>
|
|
181
|
+
: Current
|
|
182
|
+
|
|
183
|
+
type FormulaOfNotInValues<
|
|
184
|
+
Left extends Expression.Any,
|
|
185
|
+
Values extends readonly Expression.Any[],
|
|
186
|
+
Current extends readonly PredicateFormula[] = []
|
|
187
|
+
> = Values extends readonly [
|
|
188
|
+
infer Head extends Expression.Any,
|
|
189
|
+
...infer Tail extends readonly Expression.Any[]
|
|
190
|
+
]
|
|
191
|
+
? FormulaOfNotInValues<Left, Tail, [...Current, FormulaOfNeq<Left, Head>]>
|
|
192
|
+
: Current
|
|
193
|
+
|
|
194
|
+
type FormulaOfVariadic<
|
|
195
|
+
Kind extends ExpressionAst.VariadicKind,
|
|
196
|
+
Values extends readonly Expression.Any[]
|
|
197
|
+
> = Kind extends "and"
|
|
198
|
+
? AllFormulaOfValues<Values>
|
|
199
|
+
: Kind extends "or"
|
|
200
|
+
? AnyFormulaOfValues<Values>
|
|
201
|
+
: Kind extends "in"
|
|
202
|
+
? Values extends readonly [infer Left extends Expression.Any, ...infer Tail extends readonly Expression.Any[]]
|
|
203
|
+
? OrFormulas<FormulaOfInValues<Left, Tail>>
|
|
204
|
+
: False
|
|
205
|
+
: Kind extends "notIn"
|
|
206
|
+
? Values extends readonly [infer Left extends Expression.Any, ...infer Tail extends readonly Expression.Any[]]
|
|
207
|
+
? CombineFacts<NonNullFactsOfExpression<Left>, AndFormulas<FormulaOfNotInValues<Left, Tail>>>
|
|
208
|
+
: True
|
|
209
|
+
: Kind extends "between"
|
|
210
|
+
? FactsOfExpressions<Values> extends infer Facts extends PredicateFormula
|
|
211
|
+
? [Facts] extends [never]
|
|
212
|
+
? UnknownTag<"variadic:between">
|
|
213
|
+
: CombineFacts<Facts, UnknownTag<"variadic:between">>
|
|
214
|
+
: UnknownTag<"variadic:between">
|
|
215
|
+
: UnknownTag<`variadic:${Kind}`>
|
|
216
|
+
|
|
217
|
+
type FormulaOfUnary<
|
|
218
|
+
Kind extends ExpressionAst.UnaryKind,
|
|
219
|
+
Inner extends Expression.Any
|
|
220
|
+
> = Kind extends "isNull"
|
|
221
|
+
? [ColumnKeyOfExpression<Inner>] extends [never]
|
|
222
|
+
? UnknownTag<"isNull:unsupported">
|
|
223
|
+
: AtomOf<NullAtom<ColumnKeyOfExpression<Inner>>>
|
|
224
|
+
: Kind extends "isNotNull"
|
|
225
|
+
? [ColumnKeyOfExpression<Inner>] extends [never]
|
|
226
|
+
? UnknownTag<"isNotNull:unsupported">
|
|
227
|
+
: AtomOf<NonNullAtom<ColumnKeyOfExpression<Inner>>>
|
|
228
|
+
: Kind extends "not"
|
|
229
|
+
? import("./formula.js").Not<FormulaOfExpression<Inner>>
|
|
230
|
+
: UnknownTag<`unary:${Kind}`>
|
|
231
|
+
|
|
232
|
+
type FormulaOfBinary<
|
|
233
|
+
Kind extends ExpressionAst.BinaryKind,
|
|
234
|
+
Left extends Expression.Any,
|
|
235
|
+
Right extends Expression.Any
|
|
236
|
+
> = Kind extends "eq"
|
|
237
|
+
? FormulaOfEq<Left, Right>
|
|
238
|
+
: Kind extends "neq"
|
|
239
|
+
? FormulaOfNeq<Left, Right>
|
|
240
|
+
: Kind extends "lt" | "lte" | "gt" | "gte" | "like" | "ilike" | "contains" | "containedBy" | "overlaps"
|
|
241
|
+
? CombineFacts<NonNullFactsOfExpression<Left>, NonNullFactsOfExpression<Right>>
|
|
242
|
+
: Kind extends "isNotDistinctFrom"
|
|
243
|
+
? FormulaOfIsNotDistinctFrom<Left, Right>
|
|
244
|
+
: Kind extends "isDistinctFrom"
|
|
245
|
+
? import("./formula.js").Not<FormulaOfIsNotDistinctFrom<Left, Right>>
|
|
246
|
+
: CombineFacts<NonNullFactsOfExpression<Left>, NonNullFactsOfExpression<Right>>
|
|
247
|
+
|
|
248
|
+
type FormulaOfAst<
|
|
249
|
+
Ast extends ExpressionAst.Any
|
|
250
|
+
> = [Ast] extends [ExpressionAst.LiteralNode<infer Literal>]
|
|
251
|
+
? Literal extends true
|
|
252
|
+
? True
|
|
253
|
+
: Literal extends false
|
|
254
|
+
? False
|
|
255
|
+
: UnknownTag<"literal:non-boolean">
|
|
256
|
+
: [Ast] extends [ExpressionAst.UnaryNode<infer Kind extends ExpressionAst.UnaryKind, infer Inner extends Expression.Any>]
|
|
257
|
+
? FormulaOfUnary<Kind, Inner>
|
|
258
|
+
: [Ast] extends [ExpressionAst.VariadicNode<infer Kind extends ExpressionAst.VariadicKind, infer Values extends readonly Expression.Any[]>]
|
|
259
|
+
? FormulaOfVariadic<Kind, Values>
|
|
260
|
+
: [Ast] extends [ExpressionAst.BinaryNode<infer Kind extends ExpressionAst.BinaryKind, infer Left extends Expression.Any, infer Right extends Expression.Any>]
|
|
261
|
+
? FormulaOfBinary<Kind, Left, Right>
|
|
262
|
+
: UnknownTag<`expr:${Ast["kind"]}`>
|
|
263
|
+
|
|
264
|
+
export type FormulaOfExpression<Value extends Expression.Any> =
|
|
265
|
+
[AstOf<Value>] extends [infer Ast extends ExpressionAst.Any]
|
|
266
|
+
? FormulaOfAst<Ast>
|
|
267
|
+
: UnknownTag<"missing-ast">
|
|
268
|
+
|
|
269
|
+
export type FormulaOfPredicate<Value> =
|
|
270
|
+
Value extends true ? True :
|
|
271
|
+
Value extends false ? False :
|
|
272
|
+
Value extends Expression.Any ? FormulaOfExpression<Value> :
|
|
273
|
+
UnknownTag<"predicate:unsupported">
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import * as Expression from "../scalar.js";
|
|
2
|
+
import type { PredicateAtom } from "./atom.js";
|
|
3
|
+
import type { AtomFormula, FalseFormula, PredicateFormula, TrueFormula } from "./formula.js";
|
|
4
|
+
export interface RuntimeContext {
|
|
5
|
+
readonly nonNullKeys: ReadonlySet<string>;
|
|
6
|
+
readonly nullKeys: ReadonlySet<string>;
|
|
7
|
+
readonly eqLiterals: ReadonlyMap<string, string>;
|
|
8
|
+
readonly neqLiterals: ReadonlyMap<string, ReadonlySet<string>>;
|
|
9
|
+
readonly sourceNames: ReadonlySet<string>;
|
|
10
|
+
readonly contradiction: boolean;
|
|
11
|
+
readonly unknown: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare const trueFormula: () => TrueFormula;
|
|
14
|
+
export declare const falseFormula: () => FalseFormula;
|
|
15
|
+
export declare const atomFormula: <Atom extends PredicateAtom>(atom: Atom) => AtomFormula<Atom>;
|
|
16
|
+
export declare const allFormula: (items: readonly PredicateFormula[]) => PredicateFormula;
|
|
17
|
+
export declare const anyFormula: (items: readonly PredicateFormula[]) => PredicateFormula;
|
|
18
|
+
export declare const notFormula: (item: PredicateFormula) => PredicateFormula;
|
|
19
|
+
export declare const andFormula: (left: PredicateFormula, right: PredicateFormula) => PredicateFormula;
|
|
20
|
+
export declare const orFormula: (left: PredicateFormula, right: PredicateFormula) => PredicateFormula;
|
|
21
|
+
export declare const analyzeFormula: (formula: PredicateFormula) => RuntimeContext;
|
|
22
|
+
export declare const normalizeFormula: (formula: PredicateFormula) => PredicateFormula;
|
|
23
|
+
export declare const formulaOfExpression: (value: Expression.Any) => PredicateFormula;
|
|
24
|
+
export declare const formulaOfPredicate: (value: boolean | Expression.Any) => PredicateFormula;
|
|
25
|
+
export declare const assumeFormulaTrue: (assumptions: PredicateFormula, formula: PredicateFormula) => PredicateFormula;
|
|
26
|
+
export declare const assumeFormulaFalse: (assumptions: PredicateFormula, formula: PredicateFormula) => PredicateFormula;
|
|
27
|
+
export declare const contradictsFormula: (assumptions: PredicateFormula, formula: PredicateFormula) => boolean;
|
|
28
|
+
export declare const impliesFormula: (assumptions: PredicateFormula, formula: PredicateFormula) => boolean;
|
|
29
|
+
export declare const guaranteedNonNullKeys: (assumptions: PredicateFormula) => ReadonlySet<string>;
|
|
30
|
+
export declare const guaranteedNullKeys: (assumptions: PredicateFormula) => ReadonlySet<string>;
|
|
31
|
+
export declare const guaranteedSourceNames: (assumptions: PredicateFormula) => ReadonlySet<string>;
|