@tinqerjs/tinqer 0.0.21
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/expressions/expression.d.ts +313 -0
- package/dist/expressions/expression.d.ts.map +1 -0
- package/dist/expressions/expression.js +56 -0
- package/dist/expressions/expression.js.map +1 -0
- package/dist/index.d.ts +34 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +34 -0
- package/dist/index.js.map +1 -0
- package/dist/linq/database-context.d.ts +18 -0
- package/dist/linq/database-context.d.ts.map +1 -0
- package/dist/linq/database-context.js +23 -0
- package/dist/linq/database-context.js.map +1 -0
- package/dist/linq/database-schema.d.ts +18 -0
- package/dist/linq/database-schema.d.ts.map +1 -0
- package/dist/linq/database-schema.js +23 -0
- package/dist/linq/database-schema.js.map +1 -0
- package/dist/linq/deletable.d.ts +30 -0
- package/dist/linq/deletable.d.ts.map +1 -0
- package/dist/linq/deletable.js +46 -0
- package/dist/linq/deletable.js.map +1 -0
- package/dist/linq/delete-from.d.ts +19 -0
- package/dist/linq/delete-from.d.ts.map +1 -0
- package/dist/linq/delete-from.js +11 -0
- package/dist/linq/delete-from.js.map +1 -0
- package/dist/linq/from.d.ts +19 -0
- package/dist/linq/from.d.ts.map +1 -0
- package/dist/linq/from.js +11 -0
- package/dist/linq/from.js.map +1 -0
- package/dist/linq/functions.d.ts +96 -0
- package/dist/linq/functions.d.ts.map +1 -0
- package/dist/linq/functions.js +136 -0
- package/dist/linq/functions.js.map +1 -0
- package/dist/linq/grouping.d.ts +26 -0
- package/dist/linq/grouping.d.ts.map +1 -0
- package/dist/linq/grouping.js +47 -0
- package/dist/linq/grouping.js.map +1 -0
- package/dist/linq/insert-into.d.ts +19 -0
- package/dist/linq/insert-into.d.ts.map +1 -0
- package/dist/linq/insert-into.js +11 -0
- package/dist/linq/insert-into.js.map +1 -0
- package/dist/linq/insertable.d.ts +30 -0
- package/dist/linq/insertable.d.ts.map +1 -0
- package/dist/linq/insertable.js +37 -0
- package/dist/linq/insertable.js.map +1 -0
- package/dist/linq/query-builder.d.ts +24 -0
- package/dist/linq/query-builder.d.ts.map +1 -0
- package/dist/linq/query-builder.js +21 -0
- package/dist/linq/query-builder.js.map +1 -0
- package/dist/linq/queryable.d.ts +61 -0
- package/dist/linq/queryable.d.ts.map +1 -0
- package/dist/linq/queryable.js +148 -0
- package/dist/linq/queryable.js.map +1 -0
- package/dist/linq/terminal-query.d.ts +10 -0
- package/dist/linq/terminal-query.d.ts.map +1 -0
- package/dist/linq/terminal-query.js +12 -0
- package/dist/linq/terminal-query.js.map +1 -0
- package/dist/linq/updatable.d.ts +57 -0
- package/dist/linq/updatable.d.ts.map +1 -0
- package/dist/linq/updatable.js +84 -0
- package/dist/linq/updatable.js.map +1 -0
- package/dist/linq/update.d.ts +19 -0
- package/dist/linq/update.d.ts.map +1 -0
- package/dist/linq/update.js +11 -0
- package/dist/linq/update.js.map +1 -0
- package/dist/parser/ast-types.d.ts +114 -0
- package/dist/parser/ast-types.d.ts.map +1 -0
- package/dist/parser/ast-types.js +6 -0
- package/dist/parser/ast-types.js.map +1 -0
- package/dist/parser/ast-visitor.d.ts +32 -0
- package/dist/parser/ast-visitor.d.ts.map +1 -0
- package/dist/parser/ast-visitor.js +666 -0
- package/dist/parser/ast-visitor.js.map +1 -0
- package/dist/parser/normalize-joins.d.ts +3 -0
- package/dist/parser/normalize-joins.d.ts.map +1 -0
- package/dist/parser/normalize-joins.js +109 -0
- package/dist/parser/normalize-joins.js.map +1 -0
- package/dist/parser/normalize-window-filters.d.ts +13 -0
- package/dist/parser/normalize-window-filters.d.ts.map +1 -0
- package/dist/parser/normalize-window-filters.js +212 -0
- package/dist/parser/normalize-window-filters.js.map +1 -0
- package/dist/parser/oxc-parser.d.ts +11 -0
- package/dist/parser/oxc-parser.d.ts.map +1 -0
- package/dist/parser/oxc-parser.js +27 -0
- package/dist/parser/oxc-parser.js.map +1 -0
- package/dist/parser/parse-cache-config.d.ts +31 -0
- package/dist/parser/parse-cache-config.d.ts.map +1 -0
- package/dist/parser/parse-cache-config.js +33 -0
- package/dist/parser/parse-cache-config.js.map +1 -0
- package/dist/parser/parse-cache.d.ts +65 -0
- package/dist/parser/parse-cache.d.ts.map +1 -0
- package/dist/parser/parse-cache.js +146 -0
- package/dist/parser/parse-cache.js.map +1 -0
- package/dist/parser/parse-query.d.ts +24 -0
- package/dist/parser/parse-query.d.ts.map +1 -0
- package/dist/parser/parse-query.js +118 -0
- package/dist/parser/parse-query.js.map +1 -0
- package/dist/parser/types.d.ts +11 -0
- package/dist/parser/types.d.ts.map +1 -0
- package/dist/parser/types.js +2 -0
- package/dist/parser/types.js.map +1 -0
- package/dist/plans/delete-plan.d.ts +44 -0
- package/dist/plans/delete-plan.d.ts.map +1 -0
- package/dist/plans/delete-plan.js +209 -0
- package/dist/plans/delete-plan.js.map +1 -0
- package/dist/plans/insert-plan.d.ts +50 -0
- package/dist/plans/insert-plan.d.ts.map +1 -0
- package/dist/plans/insert-plan.js +240 -0
- package/dist/plans/insert-plan.js.map +1 -0
- package/dist/plans/plan-execution.d.ts +39 -0
- package/dist/plans/plan-execution.d.ts.map +1 -0
- package/dist/plans/plan-execution.js +32 -0
- package/dist/plans/plan-execution.js.map +1 -0
- package/dist/plans/select-plan.d.ts +74 -0
- package/dist/plans/select-plan.d.ts.map +1 -0
- package/dist/plans/select-plan.js +551 -0
- package/dist/plans/select-plan.js.map +1 -0
- package/dist/plans/update-plan.d.ts +61 -0
- package/dist/plans/update-plan.d.ts.map +1 -0
- package/dist/plans/update-plan.js +297 -0
- package/dist/plans/update-plan.js.map +1 -0
- package/dist/query-tree/operations.d.ts +430 -0
- package/dist/query-tree/operations.d.ts.map +1 -0
- package/dist/query-tree/operations.js +8 -0
- package/dist/query-tree/operations.js.map +1 -0
- package/dist/visitors/aggregates/average.d.ts +11 -0
- package/dist/visitors/aggregates/average.d.ts.map +1 -0
- package/dist/visitors/aggregates/average.js +56 -0
- package/dist/visitors/aggregates/average.js.map +1 -0
- package/dist/visitors/aggregates/max.d.ts +11 -0
- package/dist/visitors/aggregates/max.d.ts.map +1 -0
- package/dist/visitors/aggregates/max.js +56 -0
- package/dist/visitors/aggregates/max.js.map +1 -0
- package/dist/visitors/aggregates/min.d.ts +11 -0
- package/dist/visitors/aggregates/min.d.ts.map +1 -0
- package/dist/visitors/aggregates/min.js +56 -0
- package/dist/visitors/aggregates/min.js.map +1 -0
- package/dist/visitors/aggregates/sum.d.ts +11 -0
- package/dist/visitors/aggregates/sum.d.ts.map +1 -0
- package/dist/visitors/aggregates/sum.js +56 -0
- package/dist/visitors/aggregates/sum.js.map +1 -0
- package/dist/visitors/ast-visitor.d.ts +15 -0
- package/dist/visitors/ast-visitor.d.ts.map +1 -0
- package/dist/visitors/ast-visitor.js +20 -0
- package/dist/visitors/ast-visitor.js.map +1 -0
- package/dist/visitors/boolean/comparison.d.ts +12 -0
- package/dist/visitors/boolean/comparison.d.ts.map +1 -0
- package/dist/visitors/boolean/comparison.js +128 -0
- package/dist/visitors/boolean/comparison.js.map +1 -0
- package/dist/visitors/boolean/logical.d.ts +12 -0
- package/dist/visitors/boolean/logical.d.ts.map +1 -0
- package/dist/visitors/boolean/logical.js +68 -0
- package/dist/visitors/boolean/logical.js.map +1 -0
- package/dist/visitors/boolean-predicates/all.d.ts +11 -0
- package/dist/visitors/boolean-predicates/all.d.ts.map +1 -0
- package/dist/visitors/boolean-predicates/all.js +49 -0
- package/dist/visitors/boolean-predicates/all.js.map +1 -0
- package/dist/visitors/boolean-predicates/any.d.ts +11 -0
- package/dist/visitors/boolean-predicates/any.d.ts.map +1 -0
- package/dist/visitors/boolean-predicates/any.js +48 -0
- package/dist/visitors/boolean-predicates/any.js.map +1 -0
- package/dist/visitors/common/identifier.d.ts +13 -0
- package/dist/visitors/common/identifier.d.ts.map +1 -0
- package/dist/visitors/common/identifier.js +46 -0
- package/dist/visitors/common/identifier.js.map +1 -0
- package/dist/visitors/common/literal.d.ts +13 -0
- package/dist/visitors/common/literal.d.ts.map +1 -0
- package/dist/visitors/common/literal.js +45 -0
- package/dist/visitors/common/literal.js.map +1 -0
- package/dist/visitors/common/member-access.d.ts +15 -0
- package/dist/visitors/common/member-access.d.ts.map +1 -0
- package/dist/visitors/common/member-access.js +192 -0
- package/dist/visitors/common/member-access.js.map +1 -0
- package/dist/visitors/contains/index.d.ts +11 -0
- package/dist/visitors/contains/index.d.ts.map +1 -0
- package/dist/visitors/contains/index.js +26 -0
- package/dist/visitors/contains/index.js.map +1 -0
- package/dist/visitors/count/index.d.ts +11 -0
- package/dist/visitors/count/index.d.ts.map +1 -0
- package/dist/visitors/count/index.js +47 -0
- package/dist/visitors/count/index.js.map +1 -0
- package/dist/visitors/delete/allow-full-delete.d.ts +14 -0
- package/dist/visitors/delete/allow-full-delete.d.ts.map +1 -0
- package/dist/visitors/delete/allow-full-delete.js +26 -0
- package/dist/visitors/delete/allow-full-delete.js.map +1 -0
- package/dist/visitors/delete/index.d.ts +10 -0
- package/dist/visitors/delete/index.d.ts.map +1 -0
- package/dist/visitors/delete/index.js +53 -0
- package/dist/visitors/delete/index.js.map +1 -0
- package/dist/visitors/delete/where-delete.d.ts +15 -0
- package/dist/visitors/delete/where-delete.d.ts.map +1 -0
- package/dist/visitors/delete/where-delete.js +59 -0
- package/dist/visitors/delete/where-delete.js.map +1 -0
- package/dist/visitors/distinct/index.d.ts +16 -0
- package/dist/visitors/distinct/index.d.ts.map +1 -0
- package/dist/visitors/distinct/index.js +20 -0
- package/dist/visitors/distinct/index.js.map +1 -0
- package/dist/visitors/from/index.d.ts +12 -0
- package/dist/visitors/from/index.d.ts.map +1 -0
- package/dist/visitors/from/index.js +58 -0
- package/dist/visitors/from/index.js.map +1 -0
- package/dist/visitors/groupby/index.d.ts +11 -0
- package/dist/visitors/groupby/index.d.ts.map +1 -0
- package/dist/visitors/groupby/index.js +51 -0
- package/dist/visitors/groupby/index.js.map +1 -0
- package/dist/visitors/groupjoin/index.d.ts +8 -0
- package/dist/visitors/groupjoin/index.d.ts.map +1 -0
- package/dist/visitors/groupjoin/index.js +184 -0
- package/dist/visitors/groupjoin/index.js.map +1 -0
- package/dist/visitors/index.d.ts +13 -0
- package/dist/visitors/index.d.ts.map +1 -0
- package/dist/visitors/index.js +266 -0
- package/dist/visitors/index.js.map +1 -0
- package/dist/visitors/insert/index.d.ts +10 -0
- package/dist/visitors/insert/index.d.ts.map +1 -0
- package/dist/visitors/insert/index.js +54 -0
- package/dist/visitors/insert/index.js.map +1 -0
- package/dist/visitors/insert/returning.d.ts +15 -0
- package/dist/visitors/insert/returning.d.ts.map +1 -0
- package/dist/visitors/insert/returning.js +60 -0
- package/dist/visitors/insert/returning.js.map +1 -0
- package/dist/visitors/insert/values.d.ts +15 -0
- package/dist/visitors/insert/values.d.ts.map +1 -0
- package/dist/visitors/insert/values.js +37 -0
- package/dist/visitors/insert/values.js.map +1 -0
- package/dist/visitors/join/context.d.ts +16 -0
- package/dist/visitors/join/context.d.ts.map +1 -0
- package/dist/visitors/join/context.js +6 -0
- package/dist/visitors/join/context.js.map +1 -0
- package/dist/visitors/join/expression.d.ts +16 -0
- package/dist/visitors/join/expression.d.ts.map +1 -0
- package/dist/visitors/join/expression.js +162 -0
- package/dist/visitors/join/expression.js.map +1 -0
- package/dist/visitors/join/index.d.ts +10 -0
- package/dist/visitors/join/index.d.ts.map +1 -0
- package/dist/visitors/join/index.js +9 -0
- package/dist/visitors/join/index.js.map +1 -0
- package/dist/visitors/join/join.d.ts +12 -0
- package/dist/visitors/join/join.d.ts.map +1 -0
- package/dist/visitors/join/join.js +348 -0
- package/dist/visitors/join/join.js.map +1 -0
- package/dist/visitors/join/result-selector.d.ts +16 -0
- package/dist/visitors/join/result-selector.d.ts.map +1 -0
- package/dist/visitors/join/result-selector.js +121 -0
- package/dist/visitors/join/result-selector.js.map +1 -0
- package/dist/visitors/join/shape.d.ts +16 -0
- package/dist/visitors/join/shape.d.ts.map +1 -0
- package/dist/visitors/join/shape.js +157 -0
- package/dist/visitors/join/shape.js.map +1 -0
- package/dist/visitors/orderby/context.d.ts +20 -0
- package/dist/visitors/orderby/context.d.ts.map +1 -0
- package/dist/visitors/orderby/context.js +25 -0
- package/dist/visitors/orderby/context.js.map +1 -0
- package/dist/visitors/orderby/index.d.ts +7 -0
- package/dist/visitors/orderby/index.d.ts.map +1 -0
- package/dist/visitors/orderby/index.js +7 -0
- package/dist/visitors/orderby/index.js.map +1 -0
- package/dist/visitors/orderby/key-selector.d.ts +13 -0
- package/dist/visitors/orderby/key-selector.d.ts.map +1 -0
- package/dist/visitors/orderby/key-selector.js +236 -0
- package/dist/visitors/orderby/key-selector.js.map +1 -0
- package/dist/visitors/orderby/orderby.d.ts +20 -0
- package/dist/visitors/orderby/orderby.d.ts.map +1 -0
- package/dist/visitors/orderby/orderby.js +83 -0
- package/dist/visitors/orderby/orderby.js.map +1 -0
- package/dist/visitors/orderby/thenby.d.ts +20 -0
- package/dist/visitors/orderby/thenby.d.ts.map +1 -0
- package/dist/visitors/orderby/thenby.js +76 -0
- package/dist/visitors/orderby/thenby.js.map +1 -0
- package/dist/visitors/predicates/first.d.ts +11 -0
- package/dist/visitors/predicates/first.d.ts.map +1 -0
- package/dist/visitors/predicates/first.js +47 -0
- package/dist/visitors/predicates/first.js.map +1 -0
- package/dist/visitors/predicates/last.d.ts +11 -0
- package/dist/visitors/predicates/last.d.ts.map +1 -0
- package/dist/visitors/predicates/last.js +48 -0
- package/dist/visitors/predicates/last.js.map +1 -0
- package/dist/visitors/predicates/single.d.ts +11 -0
- package/dist/visitors/predicates/single.d.ts.map +1 -0
- package/dist/visitors/predicates/single.js +48 -0
- package/dist/visitors/predicates/single.js.map +1 -0
- package/dist/visitors/reverse/index.d.ts +11 -0
- package/dist/visitors/reverse/index.d.ts.map +1 -0
- package/dist/visitors/reverse/index.js +14 -0
- package/dist/visitors/reverse/index.js.map +1 -0
- package/dist/visitors/select/context.d.ts +30 -0
- package/dist/visitors/select/context.d.ts.map +1 -0
- package/dist/visitors/select/context.js +30 -0
- package/dist/visitors/select/context.js.map +1 -0
- package/dist/visitors/select/index.d.ts +16 -0
- package/dist/visitors/select/index.d.ts.map +1 -0
- package/dist/visitors/select/index.js +180 -0
- package/dist/visitors/select/index.js.map +1 -0
- package/dist/visitors/select/projection.d.ts +13 -0
- package/dist/visitors/select/projection.d.ts.map +1 -0
- package/dist/visitors/select/projection.js +642 -0
- package/dist/visitors/select/projection.js.map +1 -0
- package/dist/visitors/select-many/index.d.ts +8 -0
- package/dist/visitors/select-many/index.d.ts.map +1 -0
- package/dist/visitors/select-many/index.js +244 -0
- package/dist/visitors/select-many/index.js.map +1 -0
- package/dist/visitors/shared/generic-visitor.d.ts +21 -0
- package/dist/visitors/shared/generic-visitor.d.ts.map +1 -0
- package/dist/visitors/shared/generic-visitor.js +32 -0
- package/dist/visitors/shared/generic-visitor.js.map +1 -0
- package/dist/visitors/shared/predicate-visitor.d.ts +21 -0
- package/dist/visitors/shared/predicate-visitor.d.ts.map +1 -0
- package/dist/visitors/shared/predicate-visitor.js +49 -0
- package/dist/visitors/shared/predicate-visitor.js.map +1 -0
- package/dist/visitors/shared/value-visitor.d.ts +21 -0
- package/dist/visitors/shared/value-visitor.d.ts.map +1 -0
- package/dist/visitors/shared/value-visitor.js +38 -0
- package/dist/visitors/shared/value-visitor.js.map +1 -0
- package/dist/visitors/take-skip/skip.d.ts +15 -0
- package/dist/visitors/take-skip/skip.d.ts.map +1 -0
- package/dist/visitors/take-skip/skip.js +209 -0
- package/dist/visitors/take-skip/skip.js.map +1 -0
- package/dist/visitors/take-skip/take.d.ts +15 -0
- package/dist/visitors/take-skip/take.d.ts.map +1 -0
- package/dist/visitors/take-skip/take.js +76 -0
- package/dist/visitors/take-skip/take.js.map +1 -0
- package/dist/visitors/types.d.ts +170 -0
- package/dist/visitors/types.d.ts.map +1 -0
- package/dist/visitors/types.js +184 -0
- package/dist/visitors/types.js.map +1 -0
- package/dist/visitors/update/allow-full-update.d.ts +14 -0
- package/dist/visitors/update/allow-full-update.d.ts.map +1 -0
- package/dist/visitors/update/allow-full-update.js +26 -0
- package/dist/visitors/update/allow-full-update.js.map +1 -0
- package/dist/visitors/update/index.d.ts +10 -0
- package/dist/visitors/update/index.d.ts.map +1 -0
- package/dist/visitors/update/index.js +54 -0
- package/dist/visitors/update/index.js.map +1 -0
- package/dist/visitors/update/returning-update.d.ts +15 -0
- package/dist/visitors/update/returning-update.d.ts.map +1 -0
- package/dist/visitors/update/returning-update.js +60 -0
- package/dist/visitors/update/returning-update.js.map +1 -0
- package/dist/visitors/update/set.d.ts +15 -0
- package/dist/visitors/update/set.d.ts.map +1 -0
- package/dist/visitors/update/set.js +46 -0
- package/dist/visitors/update/set.js.map +1 -0
- package/dist/visitors/update/where-update.d.ts +15 -0
- package/dist/visitors/update/where-update.d.ts.map +1 -0
- package/dist/visitors/update/where-update.js +59 -0
- package/dist/visitors/update/where-update.js.map +1 -0
- package/dist/visitors/utils.d.ts +36 -0
- package/dist/visitors/utils.d.ts.map +1 -0
- package/dist/visitors/utils.js +104 -0
- package/dist/visitors/utils.js.map +1 -0
- package/dist/visitors/value/array-literal.d.ts +12 -0
- package/dist/visitors/value/array-literal.d.ts.map +1 -0
- package/dist/visitors/value/array-literal.js +23 -0
- package/dist/visitors/value/array-literal.js.map +1 -0
- package/dist/visitors/value/call-expression.d.ts +12 -0
- package/dist/visitors/value/call-expression.d.ts.map +1 -0
- package/dist/visitors/value/call-expression.js +165 -0
- package/dist/visitors/value/call-expression.js.map +1 -0
- package/dist/visitors/value/object-literal.d.ts +12 -0
- package/dist/visitors/value/object-literal.d.ts.map +1 -0
- package/dist/visitors/value/object-literal.js +98 -0
- package/dist/visitors/value/object-literal.js.map +1 -0
- package/dist/visitors/visitor-utils.d.ts +22 -0
- package/dist/visitors/visitor-utils.d.ts.map +1 -0
- package/dist/visitors/visitor-utils.js +64 -0
- package/dist/visitors/visitor-utils.js.map +1 -0
- package/dist/visitors/where/boolean-method.d.ts +12 -0
- package/dist/visitors/where/boolean-method.d.ts.map +1 -0
- package/dist/visitors/where/boolean-method.js +150 -0
- package/dist/visitors/where/boolean-method.js.map +1 -0
- package/dist/visitors/where/case-insensitive-functions.d.ts +13 -0
- package/dist/visitors/where/case-insensitive-functions.d.ts.map +1 -0
- package/dist/visitors/where/case-insensitive-functions.js +72 -0
- package/dist/visitors/where/case-insensitive-functions.js.map +1 -0
- package/dist/visitors/where/column.d.ts +14 -0
- package/dist/visitors/where/column.d.ts.map +1 -0
- package/dist/visitors/where/column.js +57 -0
- package/dist/visitors/where/column.js.map +1 -0
- package/dist/visitors/where/comparison.d.ts +12 -0
- package/dist/visitors/where/comparison.d.ts.map +1 -0
- package/dist/visitors/where/comparison.js +141 -0
- package/dist/visitors/where/comparison.js.map +1 -0
- package/dist/visitors/where/context.d.ts +32 -0
- package/dist/visitors/where/context.d.ts.map +1 -0
- package/dist/visitors/where/context.js +18 -0
- package/dist/visitors/where/context.js.map +1 -0
- package/dist/visitors/where/index.d.ts +16 -0
- package/dist/visitors/where/index.d.ts.map +1 -0
- package/dist/visitors/where/index.js +82 -0
- package/dist/visitors/where/index.js.map +1 -0
- package/dist/visitors/where/logical.d.ts +12 -0
- package/dist/visitors/where/logical.d.ts.map +1 -0
- package/dist/visitors/where/logical.js +43 -0
- package/dist/visitors/where/logical.js.map +1 -0
- package/dist/visitors/where/predicate.d.ts +13 -0
- package/dist/visitors/where/predicate.d.ts.map +1 -0
- package/dist/visitors/where/predicate.js +131 -0
- package/dist/visitors/where/predicate.js.map +1 -0
- package/dist/visitors/where/value.d.ts +13 -0
- package/dist/visitors/where/value.d.ts.map +1 -0
- package/dist/visitors/where/value.js +356 -0
- package/dist/visitors/where/value.js.map +1 -0
- package/dist/visitors/window/index.d.ts +18 -0
- package/dist/visitors/window/index.d.ts.map +1 -0
- package/dist/visitors/window/index.js +156 -0
- package/dist/visitors/window/index.js.map +1 -0
- package/package.json +50 -0
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parse result cache implementation using LRU (Least Recently Used) eviction
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* LRU cache node
|
|
6
|
+
*/
|
|
7
|
+
class LRUNode {
|
|
8
|
+
constructor(key, value, prev = null, next = null) {
|
|
9
|
+
this.key = key;
|
|
10
|
+
this.value = value;
|
|
11
|
+
this.prev = prev;
|
|
12
|
+
this.next = next;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* LRU cache implementation for parse results
|
|
17
|
+
*/
|
|
18
|
+
export class ParseCache {
|
|
19
|
+
constructor(capacity) {
|
|
20
|
+
this.capacity = capacity;
|
|
21
|
+
this.cache = new Map();
|
|
22
|
+
this.head = null;
|
|
23
|
+
this.tail = null;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Get a cached parse result
|
|
27
|
+
*/
|
|
28
|
+
get(key) {
|
|
29
|
+
const node = this.cache.get(key);
|
|
30
|
+
if (!node) {
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
33
|
+
// Move to front (most recently used)
|
|
34
|
+
this.moveToFront(node);
|
|
35
|
+
return node.value;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Store a parse result in the cache
|
|
39
|
+
*/
|
|
40
|
+
set(key, value) {
|
|
41
|
+
if (this.capacity <= 0) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
const existing = this.cache.get(key);
|
|
45
|
+
if (existing) {
|
|
46
|
+
// Update existing node
|
|
47
|
+
existing.value = value;
|
|
48
|
+
this.moveToFront(existing);
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
// Create new node
|
|
52
|
+
const node = new LRUNode(key, value);
|
|
53
|
+
this.cache.set(key, node);
|
|
54
|
+
this.addToFront(node);
|
|
55
|
+
// Evict least recently used if over capacity
|
|
56
|
+
if (this.cache.size > this.capacity) {
|
|
57
|
+
this.evictLRU();
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Clear all cached entries
|
|
62
|
+
*/
|
|
63
|
+
clear() {
|
|
64
|
+
this.cache.clear();
|
|
65
|
+
this.head = null;
|
|
66
|
+
this.tail = null;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Update the cache capacity
|
|
70
|
+
*/
|
|
71
|
+
setCapacity(capacity) {
|
|
72
|
+
this.capacity = capacity;
|
|
73
|
+
if (capacity <= 0) {
|
|
74
|
+
this.clear();
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
// Evict oldest entries if current size exceeds new capacity
|
|
78
|
+
while (this.cache.size > capacity) {
|
|
79
|
+
this.evictLRU();
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Get current cache size
|
|
84
|
+
*/
|
|
85
|
+
size() {
|
|
86
|
+
return this.cache.size;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Move node to front of LRU list
|
|
90
|
+
*/
|
|
91
|
+
moveToFront(node) {
|
|
92
|
+
if (node === this.head) {
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
// Remove from current position
|
|
96
|
+
this.removeNode(node);
|
|
97
|
+
// Add to front
|
|
98
|
+
this.addToFront(node);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Add node to front of LRU list
|
|
102
|
+
*/
|
|
103
|
+
addToFront(node) {
|
|
104
|
+
node.next = this.head;
|
|
105
|
+
node.prev = null;
|
|
106
|
+
if (this.head) {
|
|
107
|
+
this.head.prev = node;
|
|
108
|
+
}
|
|
109
|
+
this.head = node;
|
|
110
|
+
if (!this.tail) {
|
|
111
|
+
this.tail = node;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Remove node from LRU list
|
|
116
|
+
*/
|
|
117
|
+
removeNode(node) {
|
|
118
|
+
if (node.prev) {
|
|
119
|
+
node.prev.next = node.next;
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
this.head = node.next;
|
|
123
|
+
}
|
|
124
|
+
if (node.next) {
|
|
125
|
+
node.next.prev = node.prev;
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
this.tail = node.prev;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Evict least recently used entry
|
|
133
|
+
*/
|
|
134
|
+
evictLRU() {
|
|
135
|
+
if (!this.tail) {
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
this.cache.delete(this.tail.key);
|
|
139
|
+
this.removeNode(this.tail);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Singleton parse cache instance
|
|
144
|
+
*/
|
|
145
|
+
export const parseCache = new ParseCache(1024);
|
|
146
|
+
//# sourceMappingURL=parse-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-cache.js","sourceRoot":"","sources":["../../src/parser/parse-cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Main parsing function for query builder functions
|
|
3
|
+
*/
|
|
4
|
+
import type { QueryOperation } from "../query-tree/operations.js";
|
|
5
|
+
import type { createQueryHelpers } from "../linq/functions.js";
|
|
6
|
+
import type { ParseQueryOptions } from "./types.js";
|
|
7
|
+
import type { VisitorContextSnapshot } from "../visitors/types.js";
|
|
8
|
+
/**
|
|
9
|
+
* Result of parsing a query, including auto-extracted parameters
|
|
10
|
+
*/
|
|
11
|
+
export interface ParseResult {
|
|
12
|
+
operation: QueryOperation;
|
|
13
|
+
autoParams: Record<string, string | number | boolean | null>;
|
|
14
|
+
autoParamInfos?: Record<string, unknown>;
|
|
15
|
+
contextSnapshot: VisitorContextSnapshot;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Parses a query builder function into a QueryOperation tree with auto-extracted parameters
|
|
19
|
+
* @param queryBuilder The function that builds the query with DSL context, params, and optional helpers
|
|
20
|
+
* @param options Parse options including cache control
|
|
21
|
+
* @returns The parsed result containing operation tree and auto-params, or null if parsing fails
|
|
22
|
+
*/
|
|
23
|
+
export declare function parseQuery<TContext, TParams, TQuery>(queryBuilder: ((ctx: TContext) => TQuery) | ((ctx: TContext, params: TParams) => TQuery) | ((ctx: TContext, params: TParams, helpers: ReturnType<typeof createQueryHelpers>) => TQuery), options?: ParseQueryOptions): ParseResult | null;
|
|
24
|
+
//# sourceMappingURL=parse-query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-query.d.ts","sourceRoot":"","sources":["../../src/parser/parse-query.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAMlE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAEnE;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,cAAc,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC;IAC7D,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,eAAe,EAAE,sBAAsB,CAAC;CACzC;AA0CD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAClD,YAAY,EACR,CAAC,CAAC,GAAG,EAAE,QAAQ,KAAK,MAAM,CAAC,GAC3B,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,KAAK,MAAM,CAAC,GAC5C,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,KAAK,MAAM,CAAC,EAChG,OAAO,GAAE,iBAAsB,GAC9B,WAAW,GAAG,IAAI,CAgFpB"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Main parsing function for query builder functions
|
|
3
|
+
*/
|
|
4
|
+
import { parseJavaScript } from "./oxc-parser.js";
|
|
5
|
+
import { convertAstToQueryOperationWithParams } from "./ast-visitor.js";
|
|
6
|
+
import { normalizeJoins } from "./normalize-joins.js";
|
|
7
|
+
import { wrapWindowFilters } from "./normalize-window-filters.js";
|
|
8
|
+
import { parseCache } from "./parse-cache.js";
|
|
9
|
+
import { getParseCacheConfig } from "./parse-cache-config.js";
|
|
10
|
+
import { snapshotVisitorContext } from "../visitors/types.js";
|
|
11
|
+
/**
|
|
12
|
+
* Deep freeze an object to make it immutable
|
|
13
|
+
*/
|
|
14
|
+
function deepFreeze(obj) {
|
|
15
|
+
Object.freeze(obj);
|
|
16
|
+
Object.getOwnPropertyNames(obj).forEach((prop) => {
|
|
17
|
+
const value = obj[prop];
|
|
18
|
+
if (value !== null && (typeof value === "object" || typeof value === "function")) {
|
|
19
|
+
deepFreeze(value);
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
return obj;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Freeze a parse result for caching
|
|
26
|
+
*/
|
|
27
|
+
function freezeParseResult(result) {
|
|
28
|
+
return deepFreeze({
|
|
29
|
+
operation: result.operation,
|
|
30
|
+
autoParams: result.autoParams,
|
|
31
|
+
autoParamInfos: result.autoParamInfos,
|
|
32
|
+
contextSnapshot: result.contextSnapshot,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Clone a cached parse result to return to caller
|
|
37
|
+
*/
|
|
38
|
+
function cloneParseResult(cached) {
|
|
39
|
+
return {
|
|
40
|
+
operation: cached.operation, // Frozen, safe to reuse
|
|
41
|
+
autoParams: { ...cached.autoParams }, // Clone params object
|
|
42
|
+
autoParamInfos: cached.autoParamInfos ? { ...cached.autoParamInfos } : undefined,
|
|
43
|
+
contextSnapshot: cached.contextSnapshot,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Parses a query builder function into a QueryOperation tree with auto-extracted parameters
|
|
48
|
+
* @param queryBuilder The function that builds the query with DSL context, params, and optional helpers
|
|
49
|
+
* @param options Parse options including cache control
|
|
50
|
+
* @returns The parsed result containing operation tree and auto-params, or null if parsing fails
|
|
51
|
+
*/
|
|
52
|
+
export function parseQuery(queryBuilder, options = {}) {
|
|
53
|
+
try {
|
|
54
|
+
// 1. Convert function to string
|
|
55
|
+
const fnString = queryBuilder.toString();
|
|
56
|
+
// 2. Check cache if enabled
|
|
57
|
+
const config = getParseCacheConfig();
|
|
58
|
+
const useCache = config.enabled && config.capacity > 0 && options.cache !== false;
|
|
59
|
+
if (useCache) {
|
|
60
|
+
const cached = parseCache.get(fnString);
|
|
61
|
+
if (cached) {
|
|
62
|
+
return cloneParseResult(cached);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// 3. Parse with OXC to get AST
|
|
66
|
+
const program = parseJavaScript(fnString);
|
|
67
|
+
if (!program) {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
// Extract the first statement's expression (the arrow function)
|
|
71
|
+
const programNode = program;
|
|
72
|
+
if (!programNode.body || programNode.body.length === 0) {
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
const firstStatement = programNode.body[0];
|
|
76
|
+
if (!firstStatement ||
|
|
77
|
+
firstStatement.type !== "ExpressionStatement" ||
|
|
78
|
+
!firstStatement.expression) {
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
const ast = firstStatement.expression;
|
|
82
|
+
// 4. Convert AST to QueryOperation tree with auto-params
|
|
83
|
+
const result = convertAstToQueryOperationWithParams(ast);
|
|
84
|
+
if (!result.operation) {
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
// Apply normalization passes
|
|
88
|
+
let normalizedOperation = result.operation
|
|
89
|
+
? normalizeJoins(result.operation)
|
|
90
|
+
: null;
|
|
91
|
+
if (!normalizedOperation) {
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
// Apply window filter wrapping normalization
|
|
95
|
+
normalizedOperation = wrapWindowFilters(normalizedOperation);
|
|
96
|
+
const parseResult = {
|
|
97
|
+
operation: normalizedOperation,
|
|
98
|
+
autoParams: result.autoParams,
|
|
99
|
+
autoParamInfos: result.autoParamInfos,
|
|
100
|
+
contextSnapshot: snapshotVisitorContext(result.visitorContext),
|
|
101
|
+
};
|
|
102
|
+
// Cache the result if caching is enabled
|
|
103
|
+
if (useCache) {
|
|
104
|
+
const frozen = freezeParseResult(parseResult);
|
|
105
|
+
parseCache.set(fnString, frozen);
|
|
106
|
+
return cloneParseResult(frozen);
|
|
107
|
+
}
|
|
108
|
+
return parseResult;
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
console.error("Failed to parse query:", error);
|
|
112
|
+
if (error instanceof Error) {
|
|
113
|
+
console.error("Stack trace:", error.stack);
|
|
114
|
+
}
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=parse-query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-query.js","sourceRoot":"","sources":["../../src/parser/parse-query.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/parser/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/parser/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { DatabaseSchema } from "../linq/database-context.js";
|
|
2
|
+
import type { QueryBuilder } from "../linq/query-builder.js";
|
|
3
|
+
import type { QueryHelpers } from "../linq/functions.js";
|
|
4
|
+
import type { Deletable, DeletableComplete } from "../linq/deletable.js";
|
|
5
|
+
import type { ParseQueryOptions } from "../parser/types.js";
|
|
6
|
+
import type { QueryOperation } from "../query-tree/operations.js";
|
|
7
|
+
import { type VisitorContextSnapshot } from "../visitors/types.js";
|
|
8
|
+
export interface DeletePlan<TRecord, TParams> {
|
|
9
|
+
readonly kind: "delete";
|
|
10
|
+
readonly operation: QueryOperation;
|
|
11
|
+
readonly autoParams: Record<string, unknown>;
|
|
12
|
+
readonly autoParamInfos?: Record<string, unknown>;
|
|
13
|
+
readonly contextSnapshot: VisitorContextSnapshot;
|
|
14
|
+
readonly parseOptions?: ParseQueryOptions;
|
|
15
|
+
readonly __type?: {
|
|
16
|
+
record: TRecord;
|
|
17
|
+
params: TParams;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
type DeletePlanState<TRecord, TParams> = DeletePlan<TRecord, TParams>;
|
|
21
|
+
export interface DeletePlanSql {
|
|
22
|
+
operation: QueryOperation;
|
|
23
|
+
params: Record<string, unknown>;
|
|
24
|
+
autoParamInfos?: Record<string, unknown>;
|
|
25
|
+
}
|
|
26
|
+
export declare class DeletePlanHandleInitial<TRecord, TParams> {
|
|
27
|
+
private readonly state;
|
|
28
|
+
constructor(state: DeletePlanState<TRecord, TParams>);
|
|
29
|
+
where(predicate: (item: TRecord) => boolean): DeletePlanHandleComplete<TRecord, TParams>;
|
|
30
|
+
where<ExtraParams extends object = Record<string, never>>(predicate: (item: TRecord, params: TParams & ExtraParams) => boolean): DeletePlanHandleComplete<TRecord, TParams & ExtraParams>;
|
|
31
|
+
allowFullTableDelete(): DeletePlanHandleComplete<TRecord, TParams>;
|
|
32
|
+
finalize(_params: TParams): DeletePlanSql;
|
|
33
|
+
toPlan(): DeletePlan<TRecord, TParams>;
|
|
34
|
+
}
|
|
35
|
+
export declare class DeletePlanHandleComplete<TRecord, TParams> {
|
|
36
|
+
private readonly state;
|
|
37
|
+
constructor(state: DeletePlanState<TRecord, TParams>);
|
|
38
|
+
finalize(params: TParams): DeletePlanSql;
|
|
39
|
+
toPlan(): DeletePlan<TRecord, TParams>;
|
|
40
|
+
execute(_params: TParams): Promise<void>;
|
|
41
|
+
}
|
|
42
|
+
export declare function defineDelete<TSchema, TParams = {}, TQuery = unknown>(schema: DatabaseSchema<TSchema>, builder: (queryBuilder: QueryBuilder<TSchema>, params: TParams, helpers?: QueryHelpers) => TQuery, options?: ParseQueryOptions): TQuery extends DeletableComplete<infer TTable> ? DeletePlanHandleComplete<TTable, TParams> : TQuery extends Deletable<infer TTable> ? DeletePlanHandleInitial<TTable, TParams> : never;
|
|
43
|
+
export {};
|
|
44
|
+
//# sourceMappingURL=delete-plan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete-plan.d.ts","sourceRoot":"","sources":["../../src/plans/delete-plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import { parseJavaScript } from "../parser/oxc-parser.js";
|
|
2
|
+
import { normalizeJoins } from "../parser/normalize-joins.js";
|
|
3
|
+
import { wrapWindowFilters } from "../parser/normalize-window-filters.js";
|
|
4
|
+
import { parseQuery } from "../parser/parse-query.js";
|
|
5
|
+
import { restoreVisitorContext, snapshotVisitorContext, } from "../visitors/types.js";
|
|
6
|
+
import { visitWhereDeleteOperation } from "../visitors/delete/where-delete.js";
|
|
7
|
+
import { visitAllowFullDeleteOperation } from "../visitors/delete/allow-full-delete.js";
|
|
8
|
+
function createInitialState(parseResult, options) {
|
|
9
|
+
const operationClone = cloneOperationTree(parseResult.operation);
|
|
10
|
+
return {
|
|
11
|
+
kind: "delete",
|
|
12
|
+
operation: operationClone,
|
|
13
|
+
autoParams: { ...parseResult.autoParams },
|
|
14
|
+
autoParamInfos: parseResult.autoParamInfos ? { ...parseResult.autoParamInfos } : undefined,
|
|
15
|
+
contextSnapshot: parseResult.contextSnapshot,
|
|
16
|
+
parseOptions: options,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
function createState(base, nextOperation, visitorContext) {
|
|
20
|
+
const nextSnapshot = snapshotVisitorContext(visitorContext);
|
|
21
|
+
const autoParamEntries = Array.from(visitorContext.autoParams.entries());
|
|
22
|
+
const autoParams = Object.fromEntries(autoParamEntries);
|
|
23
|
+
const autoParamInfos = visitorContext.autoParamInfos
|
|
24
|
+
? Object.fromEntries(visitorContext.autoParamInfos.entries())
|
|
25
|
+
: base.autoParamInfos;
|
|
26
|
+
const normalizedOperation = wrapWindowFilters(normalizeJoins(cloneOperationTree(nextOperation)));
|
|
27
|
+
return {
|
|
28
|
+
kind: "delete",
|
|
29
|
+
operation: normalizedOperation,
|
|
30
|
+
autoParams,
|
|
31
|
+
autoParamInfos,
|
|
32
|
+
contextSnapshot: nextSnapshot,
|
|
33
|
+
parseOptions: base.parseOptions,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
// -----------------------------------------------------------------------------
|
|
37
|
+
// Plan handle stages
|
|
38
|
+
// -----------------------------------------------------------------------------
|
|
39
|
+
// Initial stage - only table is specified
|
|
40
|
+
export class DeletePlanHandleInitial {
|
|
41
|
+
constructor(state) {
|
|
42
|
+
this.state = state;
|
|
43
|
+
}
|
|
44
|
+
// Implementation
|
|
45
|
+
where(predicate) {
|
|
46
|
+
const nextState = appendWhereDelete(this.state, predicate);
|
|
47
|
+
return new DeletePlanHandleComplete(nextState);
|
|
48
|
+
}
|
|
49
|
+
allowFullTableDelete() {
|
|
50
|
+
const nextState = appendAllowFullDelete(this.state);
|
|
51
|
+
return new DeletePlanHandleComplete(nextState);
|
|
52
|
+
}
|
|
53
|
+
finalize(_params) {
|
|
54
|
+
// Initial stage without WHERE clause - this would be dangerous SQL
|
|
55
|
+
throw new Error("DELETE requires a WHERE clause or explicit allowFullTableDelete");
|
|
56
|
+
}
|
|
57
|
+
toPlan() {
|
|
58
|
+
return this.state;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// After where() or allowFullTableDelete() is called
|
|
62
|
+
export class DeletePlanHandleComplete {
|
|
63
|
+
constructor(state) {
|
|
64
|
+
this.state = state;
|
|
65
|
+
}
|
|
66
|
+
finalize(params) {
|
|
67
|
+
const merged = mergeParams(this.state.autoParams, params);
|
|
68
|
+
return {
|
|
69
|
+
operation: this.state.operation,
|
|
70
|
+
params: merged,
|
|
71
|
+
autoParamInfos: this.state.autoParamInfos,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
toPlan() {
|
|
75
|
+
return this.state;
|
|
76
|
+
}
|
|
77
|
+
execute(_params) {
|
|
78
|
+
return Promise.reject(new Error("execute() is not implemented. Use adapter methods (toSql/executeDelete) instead."));
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
// Overload for direct table name - DISABLED FOR NOW
|
|
82
|
+
// export function defineDelete<
|
|
83
|
+
// TSchema,
|
|
84
|
+
// // eslint-disable-next-line @typescript-eslint/no-empty-object-type -- {} is correct for extensible empty object
|
|
85
|
+
// TParams = {},
|
|
86
|
+
// TTable extends keyof TSchema = keyof TSchema,
|
|
87
|
+
// >(
|
|
88
|
+
// schema: DatabaseSchema<TSchema>,
|
|
89
|
+
// table: TTable,
|
|
90
|
+
// options?: ParseQueryOptions,
|
|
91
|
+
// ): DeletePlanHandleInitial<TSchema[TTable], TParams>;
|
|
92
|
+
// Implementation
|
|
93
|
+
export function defineDelete(_schema, builder, options) {
|
|
94
|
+
// Parse the builder function to get the operation
|
|
95
|
+
const parseResult = parseQuery(builder, options);
|
|
96
|
+
if (!parseResult || parseResult.operation.operationType !== "delete") {
|
|
97
|
+
throw new Error("Failed to parse delete builder or not a delete operation");
|
|
98
|
+
}
|
|
99
|
+
const initialState = createInitialState(parseResult, options);
|
|
100
|
+
// Check the state of the parsed operation to return the appropriate handle
|
|
101
|
+
const deleteOp = parseResult.operation;
|
|
102
|
+
// Check if WHERE clause or allowFullTableDelete is present
|
|
103
|
+
if (deleteOp.predicate || deleteOp.allowFullTableDelete) {
|
|
104
|
+
return new DeletePlanHandleComplete(initialState);
|
|
105
|
+
}
|
|
106
|
+
return new DeletePlanHandleInitial(initialState);
|
|
107
|
+
}
|
|
108
|
+
// -----------------------------------------------------------------------------
|
|
109
|
+
// Helper functions for individual operations
|
|
110
|
+
// -----------------------------------------------------------------------------
|
|
111
|
+
function appendWhereDelete(state, predicate) {
|
|
112
|
+
const visitorContext = restoreVisitorContext(state.contextSnapshot);
|
|
113
|
+
const lambda = parseLambdaExpression(predicate, "where");
|
|
114
|
+
const call = createMethodCall("where", lambda);
|
|
115
|
+
const result = visitWhereDeleteOperation(call, state.operation, visitorContext);
|
|
116
|
+
if (!result) {
|
|
117
|
+
throw new Error("Failed to append where clause to delete plan");
|
|
118
|
+
}
|
|
119
|
+
visitorContext.autoParams = mergeAutoParams(visitorContext.autoParams, result.autoParams);
|
|
120
|
+
return createState(state, result.operation, visitorContext);
|
|
121
|
+
}
|
|
122
|
+
function appendAllowFullDelete(state) {
|
|
123
|
+
const visitorContext = restoreVisitorContext(state.contextSnapshot);
|
|
124
|
+
const call = createMethodCall("allowFullTableDelete");
|
|
125
|
+
const result = visitAllowFullDeleteOperation(call, state.operation);
|
|
126
|
+
if (!result) {
|
|
127
|
+
throw new Error("Failed to append allowFullTableDelete to delete plan");
|
|
128
|
+
}
|
|
129
|
+
return createState(state, result.operation, visitorContext);
|
|
130
|
+
}
|
|
131
|
+
// -----------------------------------------------------------------------------
|
|
132
|
+
// AST helpers
|
|
133
|
+
// -----------------------------------------------------------------------------
|
|
134
|
+
function parseLambdaExpression(lambda, label) {
|
|
135
|
+
const source = lambda.toString();
|
|
136
|
+
const program = parseJavaScript(source);
|
|
137
|
+
const body = program.body?.[0];
|
|
138
|
+
if (!body || body.type !== "ExpressionStatement") {
|
|
139
|
+
throw new Error(`${label} expects an arrow function expression`);
|
|
140
|
+
}
|
|
141
|
+
const expression = body.expression;
|
|
142
|
+
if (expression.type !== "ArrowFunctionExpression") {
|
|
143
|
+
throw new Error(`${label} expects an arrow function expression`);
|
|
144
|
+
}
|
|
145
|
+
return expression;
|
|
146
|
+
}
|
|
147
|
+
function createMethodCall(methodName, argument) {
|
|
148
|
+
return {
|
|
149
|
+
type: "CallExpression",
|
|
150
|
+
callee: {
|
|
151
|
+
type: "MemberExpression",
|
|
152
|
+
object: {
|
|
153
|
+
type: "Identifier",
|
|
154
|
+
name: "__plan",
|
|
155
|
+
},
|
|
156
|
+
property: {
|
|
157
|
+
type: "Identifier",
|
|
158
|
+
name: methodName,
|
|
159
|
+
},
|
|
160
|
+
computed: false,
|
|
161
|
+
optional: false,
|
|
162
|
+
},
|
|
163
|
+
arguments: argument ? [argument] : [],
|
|
164
|
+
optional: false,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
function mergeAutoParams(existing, additions) {
|
|
168
|
+
const result = new Map(existing);
|
|
169
|
+
for (const [key, value] of Object.entries(additions)) {
|
|
170
|
+
result.set(key, value);
|
|
171
|
+
}
|
|
172
|
+
return result;
|
|
173
|
+
}
|
|
174
|
+
function mergeParams(autoParams, params) {
|
|
175
|
+
return {
|
|
176
|
+
...autoParams,
|
|
177
|
+
...params,
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
function cloneOperationTree(operation) {
|
|
181
|
+
// Deep clone that preserves Maps and other complex structures
|
|
182
|
+
function deepClone(obj) {
|
|
183
|
+
if (obj === null || typeof obj !== "object") {
|
|
184
|
+
return obj;
|
|
185
|
+
}
|
|
186
|
+
// Handle Map instances
|
|
187
|
+
if (obj instanceof Map) {
|
|
188
|
+
const clonedMap = new Map();
|
|
189
|
+
for (const [key, value] of obj) {
|
|
190
|
+
clonedMap.set(key, deepClone(value));
|
|
191
|
+
}
|
|
192
|
+
return clonedMap;
|
|
193
|
+
}
|
|
194
|
+
// Handle Array instances
|
|
195
|
+
if (Array.isArray(obj)) {
|
|
196
|
+
return obj.map((item) => deepClone(item));
|
|
197
|
+
}
|
|
198
|
+
// Handle regular objects
|
|
199
|
+
const clonedObj = {};
|
|
200
|
+
for (const key in obj) {
|
|
201
|
+
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
202
|
+
clonedObj[key] = deepClone(obj[key]);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return clonedObj;
|
|
206
|
+
}
|
|
207
|
+
return deepClone(operation);
|
|
208
|
+
}
|
|
209
|
+
//# sourceMappingURL=delete-plan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete-plan.js","sourceRoot":"","sources":["../../src/plans/delete-plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { DatabaseSchema } from "../linq/database-context.js";
|
|
2
|
+
import type { QueryBuilder } from "../linq/query-builder.js";
|
|
3
|
+
import type { QueryHelpers } from "../linq/functions.js";
|
|
4
|
+
import type { Insertable, InsertableWithReturning } from "../linq/insertable.js";
|
|
5
|
+
import type { ParseQueryOptions } from "../parser/types.js";
|
|
6
|
+
import type { QueryOperation } from "../query-tree/operations.js";
|
|
7
|
+
import { type VisitorContextSnapshot } from "../visitors/types.js";
|
|
8
|
+
export interface InsertPlan<TRecord, TParams> {
|
|
9
|
+
readonly kind: "insert";
|
|
10
|
+
readonly operation: QueryOperation;
|
|
11
|
+
readonly autoParams: Record<string, unknown>;
|
|
12
|
+
readonly autoParamInfos?: Record<string, unknown>;
|
|
13
|
+
readonly contextSnapshot: VisitorContextSnapshot;
|
|
14
|
+
readonly parseOptions?: ParseQueryOptions;
|
|
15
|
+
readonly __type?: {
|
|
16
|
+
record: TRecord;
|
|
17
|
+
params: TParams;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
type InsertPlanState<TRecord, TParams> = InsertPlan<TRecord, TParams>;
|
|
21
|
+
export interface InsertPlanSql {
|
|
22
|
+
operation: QueryOperation;
|
|
23
|
+
params: Record<string, unknown>;
|
|
24
|
+
autoParamInfos?: Record<string, unknown>;
|
|
25
|
+
}
|
|
26
|
+
export declare class InsertPlanHandleInitial<TRecord, TParams> {
|
|
27
|
+
private readonly state;
|
|
28
|
+
constructor(state: InsertPlanState<TRecord, TParams>);
|
|
29
|
+
values(values: Partial<TRecord>): InsertPlanHandleWithValues<TRecord, TParams>;
|
|
30
|
+
finalize(_params: TParams): InsertPlanSql;
|
|
31
|
+
toPlan(): InsertPlan<TRecord, TParams>;
|
|
32
|
+
}
|
|
33
|
+
export declare class InsertPlanHandleWithValues<TRecord, TParams> {
|
|
34
|
+
private readonly state;
|
|
35
|
+
constructor(state: InsertPlanState<TRecord, TParams>);
|
|
36
|
+
returning<TResult>(selector: (item: TRecord) => TResult): InsertPlanHandleWithReturning<TResult, TParams>;
|
|
37
|
+
finalize(params: TParams): InsertPlanSql;
|
|
38
|
+
toPlan(): InsertPlan<TRecord, TParams>;
|
|
39
|
+
execute(_params: TParams): Promise<void>;
|
|
40
|
+
}
|
|
41
|
+
export declare class InsertPlanHandleWithReturning<TResult, TParams> {
|
|
42
|
+
private readonly state;
|
|
43
|
+
constructor(state: InsertPlanState<TResult, TParams>);
|
|
44
|
+
finalize(params: TParams): InsertPlanSql;
|
|
45
|
+
toPlan(): InsertPlan<TResult, TParams>;
|
|
46
|
+
execute(_params: TParams): Promise<TResult>;
|
|
47
|
+
}
|
|
48
|
+
export declare function defineInsert<TSchema, TParams = {}, TQuery = unknown>(schema: DatabaseSchema<TSchema>, builder: (queryBuilder: QueryBuilder<TSchema>, params: TParams, helpers?: QueryHelpers) => TQuery, options?: ParseQueryOptions): TQuery extends InsertableWithReturning<unknown, infer TReturning> ? InsertPlanHandleWithReturning<TReturning, TParams> : TQuery extends Insertable<infer TTable> ? InsertPlanHandleInitial<TTable, TParams> : never;
|
|
49
|
+
export {};
|
|
50
|
+
//# sourceMappingURL=insert-plan.d.ts.map
|