effect-qb 0.13.0 → 0.14.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.
Files changed (54) hide show
  1. package/README.md +6 -1431
  2. package/dist/mysql.js +1678 -355
  3. package/dist/postgres/metadata.js +2724 -0
  4. package/dist/postgres.js +7197 -5433
  5. package/package.json +8 -10
  6. package/src/internal/column-state.ts +84 -10
  7. package/src/internal/column.ts +556 -34
  8. package/src/internal/datatypes/define.ts +0 -30
  9. package/src/internal/executor.ts +45 -11
  10. package/src/internal/expression-ast.ts +4 -0
  11. package/src/internal/expression.ts +1 -1
  12. package/src/internal/implication-runtime.ts +171 -0
  13. package/src/internal/mysql-query.ts +7173 -0
  14. package/src/internal/mysql-renderer.ts +2 -2
  15. package/src/internal/plan.ts +14 -4
  16. package/src/internal/{query-factory.ts → postgres-query.ts} +619 -167
  17. package/src/internal/postgres-renderer.ts +2 -2
  18. package/src/internal/postgres-schema-model.ts +144 -0
  19. package/src/internal/predicate-analysis.ts +10 -0
  20. package/src/internal/predicate-context.ts +112 -36
  21. package/src/internal/predicate-formula.ts +31 -19
  22. package/src/internal/predicate-normalize.ts +177 -106
  23. package/src/internal/predicate-runtime.ts +676 -0
  24. package/src/internal/query.ts +455 -39
  25. package/src/internal/renderer.ts +2 -2
  26. package/src/internal/runtime-schema.ts +74 -20
  27. package/src/internal/schema-ddl.ts +55 -0
  28. package/src/internal/schema-derivation.ts +93 -21
  29. package/src/internal/schema-expression.ts +44 -0
  30. package/src/internal/sql-expression-renderer.ts +95 -31
  31. package/src/internal/table-options.ts +87 -7
  32. package/src/internal/table.ts +104 -41
  33. package/src/mysql/column.ts +1 -0
  34. package/src/mysql/datatypes/index.ts +17 -2
  35. package/src/mysql/function/core.ts +1 -0
  36. package/src/mysql/function/index.ts +1 -0
  37. package/src/mysql/private/query.ts +1 -13
  38. package/src/mysql/query.ts +5 -0
  39. package/src/postgres/cast.ts +31 -0
  40. package/src/postgres/column.ts +26 -0
  41. package/src/postgres/datatypes/index.ts +40 -5
  42. package/src/postgres/function/core.ts +12 -0
  43. package/src/postgres/function/index.ts +2 -1
  44. package/src/postgres/function/json.ts +499 -2
  45. package/src/postgres/metadata.ts +31 -0
  46. package/src/postgres/private/query.ts +1 -13
  47. package/src/postgres/query.ts +5 -2
  48. package/src/postgres/schema-expression.ts +16 -0
  49. package/src/postgres/schema-management.ts +204 -0
  50. package/src/postgres/schema.ts +35 -0
  51. package/src/postgres/table.ts +307 -41
  52. package/src/postgres/type.ts +4 -0
  53. package/src/postgres.ts +14 -0
  54. package/CHANGELOG.md +0 -134
@@ -79,120 +79,191 @@ type FormulaOfEq<
79
79
  : UnknownTag<"eq:unsupported">
80
80
  : AtomOf<import("./predicate-atom.js").EqColumnAtom<ColumnKeyOfExpression<Left>, ColumnKeyOfExpression<Right>>>
81
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("./predicate-formula.js").NormalizeBooleanConstants<AnyFormula<Items>>
153
+
154
+ type AndFormulas<
155
+ Items extends readonly PredicateFormula[]
156
+ > = import("./predicate-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("./predicate-formula.js").NormalizeBooleanConstants<AllFormula<FormulaTupleOf<Values>>>
167
+
168
+ type AnyFormulaOfValues<
169
+ Values extends readonly Expression.Any[]
170
+ > = import("./predicate-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
+
82
194
  type FormulaOfVariadic<
83
195
  Kind extends ExpressionAst.VariadicKind,
84
196
  Values extends readonly Expression.Any[]
85
197
  > = Kind extends "and"
86
- ? import("./predicate-formula.js").NormalizeBooleanConstants<import("./predicate-formula.js").AllFormula<{
87
- readonly [K in keyof Values]: Values[K] extends Expression.Any ? FormulaOfExpression<Values[K]> : never
88
- } & readonly PredicateFormula[]>>
198
+ ? AllFormulaOfValues<Values>
89
199
  : Kind extends "or"
90
- ? import("./predicate-formula.js").NormalizeBooleanConstants<import("./predicate-formula.js").AnyFormula<{
91
- readonly [K in keyof Values]: Values[K] extends Expression.Any ? FormulaOfExpression<Values[K]> : never
92
- } & readonly PredicateFormula[]>>
93
- : Kind extends "in" | "notIn" | "between"
94
- ? FactsOfExpressions<Values> extends infer Facts extends PredicateFormula
95
- ? [Facts] extends [never]
96
- ? UnknownTag<`variadic:${Kind}`>
97
- : Facts
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
+ ? 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">
98
215
  : UnknownTag<`variadic:${Kind}`>
99
- : UnknownTag<`variadic:${Kind}`>
100
216
 
101
- export type FormulaOfExpression<Value extends Expression.Any> =
102
- AstOf<Value> extends infer Ast extends ExpressionAst.Any
103
- ? Ast extends ExpressionAst.LiteralNode<infer Literal>
104
- ? Literal extends true
105
- ? True
106
- : Literal extends false
107
- ? False
108
- : UnknownTag<"literal:non-boolean">
109
- : Ast extends ExpressionAst.UnaryNode<infer Kind extends ExpressionAst.UnaryKind, infer Inner extends Expression.Any>
110
- ? Kind extends "isNull"
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"
111
225
  ? [ColumnKeyOfExpression<Inner>] extends [never]
112
- ? UnknownTag<"isNull:unsupported">
113
- : AtomOf<NullAtom<ColumnKeyOfExpression<Inner>>>
114
- : Kind extends "isNotNull"
115
- ? [ColumnKeyOfExpression<Inner>] extends [never]
116
- ? UnknownTag<"isNotNull:unsupported">
117
- : AtomOf<NonNullAtom<ColumnKeyOfExpression<Inner>>>
118
- : Kind extends "not"
119
- ? import("./predicate-formula.js").Not<FormulaOfExpression<Inner>>
120
- : UnknownTag<`unary:${Kind}`>
121
- : Ast extends ExpressionAst.BinaryNode<"eq", infer Left extends Expression.Any, infer Right extends Expression.Any>
122
- ? FormulaOfEq<Left, Right>
123
- : Ast extends ExpressionAst.BinaryNode<"neq", infer Left extends Expression.Any, infer Right extends Expression.Any>
124
- ? Left extends Expression.Any
125
- ? Right extends Expression.Any
126
- ? [ColumnKeyOfExpression<Left>] extends [never]
127
- ? [ColumnKeyOfExpression<Right>] extends [never]
128
- ? LiteralValueOfExpression<Left> extends infer LeftLiteral
129
- ? LiteralValueOfExpression<Right> extends infer RightLiteral
130
- ? [LeftLiteral] extends [never]
131
- ? UnknownTag<"neq:unsupported">
132
- : [RightLiteral] extends [never]
133
- ? UnknownTag<"neq:unsupported">
134
- : LeftLiteral extends null
135
- ? False
136
- : RightLiteral extends null
137
- ? False
138
- : [LeftLiteral] extends [RightLiteral]
139
- ? False
140
- : True
141
- : UnknownTag<"neq:unsupported">
142
- : UnknownTag<"neq:unsupported">
143
- : CombineFacts<NonNullFactsOfExpression<Left>, NonNullFactsOfExpression<Right>>
144
- : CombineFacts<NonNullFactsOfExpression<Left>, NonNullFactsOfExpression<Right>>
145
- : UnknownTag<"neq:unsupported">
146
- : UnknownTag<"neq:unsupported">
147
- : Ast extends ExpressionAst.BinaryNode<infer Kind extends "lt" | "lte" | "gt" | "gte" | "like" | "ilike" | "isDistinctFrom" | "isNotDistinctFrom" | "contains" | "containedBy" | "overlaps", infer Left extends Expression.Any, infer Right extends Expression.Any>
148
- ? Kind extends "isNotDistinctFrom"
149
- ? Left extends Expression.Any
150
- ? Right extends Expression.Any
151
- ? LiteralValueOfExpression<Left> extends infer LeftLiteral
152
- ? LiteralValueOfExpression<Right> extends infer RightLiteral
153
- ? [LeftLiteral] extends [never]
154
- ? [RightLiteral] extends [never]
155
- ? UnknownTag<"isNotDistinctFrom:unsupported">
156
- : RightLiteral extends null
157
- ? [ColumnKeyOfExpression<Left>] extends [never]
158
- ? UnknownTag<"isNotDistinctFrom:unsupported">
159
- : AtomOf<NullAtom<ColumnKeyOfExpression<Left>>>
160
- : UnknownTag<"isNotDistinctFrom:unsupported">
161
- : LeftLiteral extends null
162
- ? [ColumnKeyOfExpression<Right>] extends [never]
163
- ? UnknownTag<"isNotDistinctFrom:unsupported">
164
- : AtomOf<NullAtom<ColumnKeyOfExpression<Right>>>
165
- : RightLiteral extends null
166
- ? [ColumnKeyOfExpression<Left>] extends [never]
167
- ? UnknownTag<"isNotDistinctFrom:unsupported">
168
- : AtomOf<NullAtom<ColumnKeyOfExpression<Left>>>
169
- : [ColumnKeyOfExpression<Left>] extends [never]
170
- ? [ColumnKeyOfExpression<Right>] extends [never]
171
- ? CombineFacts<NonNullFactsOfExpression<Left>, NonNullFactsOfExpression<Right>>
172
- : AtomOf<EqLiteralAtom<ColumnKeyOfExpression<Right>, ValueKey<LeftLiteral>>>
173
- : AtomOf<EqLiteralAtom<ColumnKeyOfExpression<Left>, ValueKey<RightLiteral>>>
174
- : UnknownTag<"isNotDistinctFrom:unsupported">
175
- : UnknownTag<"isNotDistinctFrom:unsupported">
176
- : UnknownTag<"isNotDistinctFrom:unsupported">
177
- : UnknownTag<"isNotDistinctFrom:unsupported">
178
- : Kind extends "isDistinctFrom"
179
- ? UnknownTag<"isDistinctFrom:unsupported">
180
- : CombineFacts<NonNullFactsOfExpression<Left>, NonNullFactsOfExpression<Right>>
181
- : Ast extends ExpressionAst.VariadicNode<"and", infer Values extends readonly Expression.Any[]>
182
- ? import("./predicate-formula.js").NormalizeBooleanConstants<import("./predicate-formula.js").AllFormula<{
183
- readonly [K in keyof Values]: Values[K] extends Expression.Any ? FormulaOfExpression<Values[K]> : never
184
- } & readonly PredicateFormula[]>>
185
- : Ast extends ExpressionAst.VariadicNode<"or", infer Values extends readonly Expression.Any[]>
186
- ? import("./predicate-formula.js").NormalizeBooleanConstants<import("./predicate-formula.js").AnyFormula<{
187
- readonly [K in keyof Values]: Values[K] extends Expression.Any ? FormulaOfExpression<Values[K]> : never
188
- } & readonly PredicateFormula[]>>
189
- : Ast extends ExpressionAst.VariadicNode<infer Kind extends "in" | "notIn" | "between", infer Values extends readonly Expression.Any[]>
190
- ? CombineFacts<NonNullFactsOfExpression<Values[number]>, UnknownTag<`variadic:${Kind}`>>
191
- : Ast extends ExpressionAst.BinaryNode<infer Kind extends ExpressionAst.BinaryKind, infer Left extends Expression.Any, infer Right extends Expression.Any>
192
- ? Kind extends "eq"
193
- ? FormulaOfEq<Left, Right>
194
- : CombineFacts<NonNullFactsOfExpression<Left>, NonNullFactsOfExpression<Right>>
195
- : UnknownTag<`expr:${Ast["kind"]}`>
226
+ ? UnknownTag<"isNotNull:unsupported">
227
+ : AtomOf<NonNullAtom<ColumnKeyOfExpression<Inner>>>
228
+ : Kind extends "not"
229
+ ? import("./predicate-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("./predicate-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>
196
267
  : UnknownTag<"missing-ast">
197
268
 
198
269
  export type FormulaOfPredicate<Value> =