@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,666 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AST to QueryOperation visitor
|
|
3
|
+
* Main entry point for the visitor-based parsing system
|
|
4
|
+
*/
|
|
5
|
+
// Import operation visitors
|
|
6
|
+
import { visitFromOperation } from "../visitors/from/index.js";
|
|
7
|
+
import { visitWhereOperation } from "../visitors/where/index.js";
|
|
8
|
+
import { visitSelectOperation } from "../visitors/select/index.js";
|
|
9
|
+
import { visitOrderByOperation, visitThenByOperation } from "../visitors/orderby/index.js";
|
|
10
|
+
import { visitTakeOperation } from "../visitors/take-skip/take.js";
|
|
11
|
+
import { visitSkipOperation } from "../visitors/take-skip/skip.js";
|
|
12
|
+
import { visitDistinctOperation } from "../visitors/distinct/index.js";
|
|
13
|
+
import { visitJoinOperation } from "../visitors/join/index.js";
|
|
14
|
+
import { visitGroupJoinOperation } from "../visitors/groupjoin/index.js";
|
|
15
|
+
import { visitSelectManyOperation } from "../visitors/select-many/index.js";
|
|
16
|
+
import { visitGroupByOperation } from "../visitors/groupby/index.js";
|
|
17
|
+
import { visitCountOperation } from "../visitors/count/index.js";
|
|
18
|
+
import { visitSumOperation } from "../visitors/aggregates/sum.js";
|
|
19
|
+
import { visitAverageOperation } from "../visitors/aggregates/average.js";
|
|
20
|
+
import { visitMinOperation } from "../visitors/aggregates/min.js";
|
|
21
|
+
import { visitMaxOperation } from "../visitors/aggregates/max.js";
|
|
22
|
+
import { visitFirstOperation } from "../visitors/predicates/first.js";
|
|
23
|
+
import { visitSingleOperation } from "../visitors/predicates/single.js";
|
|
24
|
+
import { visitLastOperation } from "../visitors/predicates/last.js";
|
|
25
|
+
import { visitAnyOperation } from "../visitors/boolean-predicates/any.js";
|
|
26
|
+
import { visitAllOperation } from "../visitors/boolean-predicates/all.js";
|
|
27
|
+
import { visitContainsOperation } from "../visitors/contains/index.js";
|
|
28
|
+
import { visitReverseOperation } from "../visitors/reverse/index.js";
|
|
29
|
+
// Data modification visitors
|
|
30
|
+
import { visitInsertOperation } from "../visitors/insert/index.js";
|
|
31
|
+
import { visitValuesOperation } from "../visitors/insert/values.js";
|
|
32
|
+
import { visitReturningOperation } from "../visitors/insert/returning.js";
|
|
33
|
+
import { visitUpdateOperation } from "../visitors/update/index.js";
|
|
34
|
+
import { visitSetOperation } from "../visitors/update/set.js";
|
|
35
|
+
import { visitWhereUpdateOperation } from "../visitors/update/where-update.js";
|
|
36
|
+
import { visitAllowFullUpdateOperation } from "../visitors/update/allow-full-update.js";
|
|
37
|
+
import { visitReturningUpdateOperation } from "../visitors/update/returning-update.js";
|
|
38
|
+
import { visitDeleteOperation } from "../visitors/delete/index.js";
|
|
39
|
+
import { visitWhereDeleteOperation } from "../visitors/delete/where-delete.js";
|
|
40
|
+
import { visitAllowFullDeleteOperation } from "../visitors/delete/allow-full-delete.js";
|
|
41
|
+
/**
|
|
42
|
+
* Convert AST to QueryOperation using visitor pattern
|
|
43
|
+
*/
|
|
44
|
+
export function convertAstToQueryOperationWithParams(ast, startCounter, existingAutoParams, maybeQueryBuilderParam) {
|
|
45
|
+
// Extract parameter info from the lambda
|
|
46
|
+
const extracted = extractParameters(ast);
|
|
47
|
+
// If no DSL param was extracted (e.g., for non-lambda expressions like q.from()),
|
|
48
|
+
// use the existing DSL param from parent context
|
|
49
|
+
const queryBuilderParam = extracted.queryBuilderParam || maybeQueryBuilderParam;
|
|
50
|
+
const { tableParams, queryParams, helpersParam } = extracted;
|
|
51
|
+
// Create shared visitor context
|
|
52
|
+
const visitorContext = {
|
|
53
|
+
queryBuilderParam: queryBuilderParam,
|
|
54
|
+
tableParams: new Set(tableParams),
|
|
55
|
+
queryParams: new Set(queryParams),
|
|
56
|
+
helpersParam,
|
|
57
|
+
autoParams: existingAutoParams || new Map(),
|
|
58
|
+
autoParamCounter: startCounter || 0,
|
|
59
|
+
autoParamInfos: new Map(), // Initialize enhanced field context tracking
|
|
60
|
+
};
|
|
61
|
+
// Visit the query chain
|
|
62
|
+
const operation = visitQueryChain(ast, visitorContext);
|
|
63
|
+
// Extract auto-params for return
|
|
64
|
+
const allAutoParams = Object.fromEntries(visitorContext.autoParams);
|
|
65
|
+
// Extract enhanced parameter info if available
|
|
66
|
+
const autoParamInfos = visitorContext.autoParamInfos
|
|
67
|
+
? Object.fromEntries(visitorContext.autoParamInfos)
|
|
68
|
+
: undefined;
|
|
69
|
+
return {
|
|
70
|
+
operation,
|
|
71
|
+
autoParams: allAutoParams,
|
|
72
|
+
autoParamInfos,
|
|
73
|
+
visitorContext,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Extract DSL, table, query, and helpers parameters from the root lambda
|
|
78
|
+
*/
|
|
79
|
+
function extractParameters(ast) {
|
|
80
|
+
const tableParams = new Set();
|
|
81
|
+
const queryParams = new Set();
|
|
82
|
+
let queryBuilderParam;
|
|
83
|
+
let helpersParam;
|
|
84
|
+
// Check if the root is an arrow function with params
|
|
85
|
+
// Signature: (q, p, h) => q.from(...).where(x => x.id == p.minId)
|
|
86
|
+
// where q = query builder, p = parameters, h = helpers
|
|
87
|
+
if (ast.type === "ArrowFunctionExpression") {
|
|
88
|
+
const arrow = ast;
|
|
89
|
+
if (arrow.params && arrow.params.length > 0) {
|
|
90
|
+
// First param is the query builder
|
|
91
|
+
const firstParam = arrow.params[0];
|
|
92
|
+
if (firstParam && firstParam.type === "Identifier") {
|
|
93
|
+
queryBuilderParam = firstParam.name;
|
|
94
|
+
}
|
|
95
|
+
else if (firstParam && firstParam.type === "AssignmentPattern") {
|
|
96
|
+
// Handle default parameters
|
|
97
|
+
const assignPattern = firstParam;
|
|
98
|
+
if (assignPattern.left?.type === "Identifier" && assignPattern.left.name) {
|
|
99
|
+
queryBuilderParam = assignPattern.left.name;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// Second param is query parameters
|
|
103
|
+
if (arrow.params.length > 1) {
|
|
104
|
+
const secondParam = arrow.params[1];
|
|
105
|
+
if (secondParam && secondParam.type === "Identifier") {
|
|
106
|
+
queryParams.add(secondParam.name);
|
|
107
|
+
}
|
|
108
|
+
else if (secondParam && secondParam.type === "AssignmentPattern") {
|
|
109
|
+
// Handle default parameters
|
|
110
|
+
const assignPattern = secondParam;
|
|
111
|
+
if (assignPattern.left?.type === "Identifier" && assignPattern.left.name) {
|
|
112
|
+
queryParams.add(assignPattern.left.name);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
// Third param is helpers
|
|
117
|
+
if (arrow.params.length > 2) {
|
|
118
|
+
const thirdParam = arrow.params[2];
|
|
119
|
+
if (thirdParam && thirdParam.type === "Identifier") {
|
|
120
|
+
helpersParam = thirdParam.name;
|
|
121
|
+
}
|
|
122
|
+
else if (thirdParam && thirdParam.type === "AssignmentPattern") {
|
|
123
|
+
// Handle default parameters: (q, p, h = createQueryHelpers())
|
|
124
|
+
const assignPattern = thirdParam;
|
|
125
|
+
if (assignPattern.left?.type === "Identifier" && assignPattern.left.name) {
|
|
126
|
+
helpersParam = assignPattern.left.name;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
else if (arrow.params.length === 2) {
|
|
131
|
+
// Old signature with 2 params: (p, h) => ...
|
|
132
|
+
// Second param might be helpers if no third param
|
|
133
|
+
// We'll handle this in visitCallExpression by checking if the first param is used as DSL
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// For parameterless lambdas, no query params or helpers
|
|
137
|
+
}
|
|
138
|
+
return { queryBuilderParam: queryBuilderParam, tableParams, queryParams, helpersParam };
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Visit a query chain and build the operation tree
|
|
142
|
+
*/
|
|
143
|
+
function visitQueryChain(ast, visitorContext) {
|
|
144
|
+
// If it's an arrow function, visit its body
|
|
145
|
+
if (ast.type === "ArrowFunctionExpression") {
|
|
146
|
+
const arrow = ast;
|
|
147
|
+
const body = arrow.body;
|
|
148
|
+
// Handle block statement body
|
|
149
|
+
if (body.type === "BlockStatement") {
|
|
150
|
+
// Look for return statement
|
|
151
|
+
const returnStmt = body.body.find((stmt) => stmt.type === "ReturnStatement");
|
|
152
|
+
if (returnStmt) {
|
|
153
|
+
const returnExpr = returnStmt.argument;
|
|
154
|
+
if (returnExpr) {
|
|
155
|
+
return visitQueryChain(returnExpr, visitorContext);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
// Expression body
|
|
161
|
+
return visitQueryChain(body, visitorContext);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// Handle call expressions (method calls)
|
|
165
|
+
if (ast.type === "CallExpression") {
|
|
166
|
+
return visitCallExpression(ast, visitorContext);
|
|
167
|
+
}
|
|
168
|
+
return null;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Check if a call expression is a DSL method call (e.g., q.from())
|
|
172
|
+
*/
|
|
173
|
+
function isDSLMethodCall(ast, queryBuilderParam) {
|
|
174
|
+
if (!queryBuilderParam) {
|
|
175
|
+
return false;
|
|
176
|
+
}
|
|
177
|
+
if (ast.callee.type === "MemberExpression") {
|
|
178
|
+
const memberExpr = ast.callee;
|
|
179
|
+
if (memberExpr.object.type === "Identifier") {
|
|
180
|
+
const objName = memberExpr.object.name;
|
|
181
|
+
return objName === queryBuilderParam;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
return false;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Check if a call expression is a bare DSL operation (e.g., from())
|
|
188
|
+
*/
|
|
189
|
+
function isBareDSLOperation(ast, methodName) {
|
|
190
|
+
return (ast.callee.type === "Identifier" &&
|
|
191
|
+
(methodName === "from" ||
|
|
192
|
+
methodName === "insertInto" ||
|
|
193
|
+
methodName === "update" ||
|
|
194
|
+
methodName === "deleteFrom"));
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Visit a call expression (method call)
|
|
198
|
+
*/
|
|
199
|
+
function visitCallExpression(ast, visitorContext) {
|
|
200
|
+
const methodName = getMethodName(ast);
|
|
201
|
+
if (!methodName) {
|
|
202
|
+
return null;
|
|
203
|
+
}
|
|
204
|
+
// Check if this is a DSL method call or bare operation
|
|
205
|
+
const isDSLCall = isDSLMethodCall(ast, visitorContext.queryBuilderParam);
|
|
206
|
+
const isBareCall = isBareDSLOperation(ast, methodName);
|
|
207
|
+
// Handle root operations
|
|
208
|
+
if (methodName === "from" && (isDSLCall || isBareCall)) {
|
|
209
|
+
const operation = visitFromOperation(ast);
|
|
210
|
+
// Set current table in context for field tracking
|
|
211
|
+
if (operation) {
|
|
212
|
+
visitorContext.currentTable = operation.table;
|
|
213
|
+
}
|
|
214
|
+
// FROM doesn't have auto-params
|
|
215
|
+
return operation;
|
|
216
|
+
}
|
|
217
|
+
if (methodName === "insertInto" && (isDSLCall || isBareCall)) {
|
|
218
|
+
const operation = visitInsertOperation(ast);
|
|
219
|
+
// Set current table in context for field tracking
|
|
220
|
+
if (operation) {
|
|
221
|
+
visitorContext.currentTable = operation.table;
|
|
222
|
+
}
|
|
223
|
+
return operation;
|
|
224
|
+
}
|
|
225
|
+
if (methodName === "update" && (isDSLCall || isBareCall)) {
|
|
226
|
+
const operation = visitUpdateOperation(ast);
|
|
227
|
+
// Set current table in context for field tracking
|
|
228
|
+
if (operation) {
|
|
229
|
+
visitorContext.currentTable = operation.table;
|
|
230
|
+
}
|
|
231
|
+
return operation;
|
|
232
|
+
}
|
|
233
|
+
if (methodName === "deleteFrom" && (isDSLCall || isBareCall)) {
|
|
234
|
+
const operation = visitDeleteOperation(ast);
|
|
235
|
+
// Set current table in context for field tracking
|
|
236
|
+
if (operation) {
|
|
237
|
+
visitorContext.currentTable = operation.table;
|
|
238
|
+
}
|
|
239
|
+
return operation;
|
|
240
|
+
}
|
|
241
|
+
// For chained operations, first process the source
|
|
242
|
+
if (ast.callee.type === "MemberExpression") {
|
|
243
|
+
const memberExpr = ast.callee;
|
|
244
|
+
const source = visitQueryChain(memberExpr.object, visitorContext);
|
|
245
|
+
if (!source) {
|
|
246
|
+
return null;
|
|
247
|
+
}
|
|
248
|
+
// Visit specific operation based on method name
|
|
249
|
+
switch (methodName) {
|
|
250
|
+
case "where": {
|
|
251
|
+
// Handle WHERE for UPDATE and DELETE operations differently
|
|
252
|
+
if (source.operationType === "update") {
|
|
253
|
+
const result = visitWhereUpdateOperation(ast, source, visitorContext);
|
|
254
|
+
if (result) {
|
|
255
|
+
for (const [key, value] of Object.entries(result.autoParams)) {
|
|
256
|
+
visitorContext.autoParams.set(key, value);
|
|
257
|
+
}
|
|
258
|
+
return result.operation;
|
|
259
|
+
}
|
|
260
|
+
return null;
|
|
261
|
+
}
|
|
262
|
+
else if (source.operationType === "delete") {
|
|
263
|
+
const result = visitWhereDeleteOperation(ast, source, visitorContext);
|
|
264
|
+
if (result) {
|
|
265
|
+
for (const [key, value] of Object.entries(result.autoParams)) {
|
|
266
|
+
visitorContext.autoParams.set(key, value);
|
|
267
|
+
}
|
|
268
|
+
return result.operation;
|
|
269
|
+
}
|
|
270
|
+
return null;
|
|
271
|
+
}
|
|
272
|
+
// Regular WHERE for SELECT operations
|
|
273
|
+
const result = visitWhereOperation(ast, source, visitorContext);
|
|
274
|
+
if (result) {
|
|
275
|
+
// Merge auto-params back into context
|
|
276
|
+
for (const [key, value] of Object.entries(result.autoParams)) {
|
|
277
|
+
visitorContext.autoParams.set(key, value);
|
|
278
|
+
}
|
|
279
|
+
return result.operation;
|
|
280
|
+
}
|
|
281
|
+
return null;
|
|
282
|
+
}
|
|
283
|
+
case "select": {
|
|
284
|
+
const result = visitSelectOperation(ast, source, visitorContext);
|
|
285
|
+
if (result) {
|
|
286
|
+
// Merge auto-params back into context
|
|
287
|
+
for (const [key, value] of Object.entries(result.autoParams)) {
|
|
288
|
+
visitorContext.autoParams.set(key, value);
|
|
289
|
+
}
|
|
290
|
+
return result.operation;
|
|
291
|
+
}
|
|
292
|
+
return null;
|
|
293
|
+
}
|
|
294
|
+
case "orderBy":
|
|
295
|
+
case "orderByDescending": {
|
|
296
|
+
const result = visitOrderByOperation(ast, source, methodName, visitorContext);
|
|
297
|
+
if (result) {
|
|
298
|
+
// Merge auto-params back into context
|
|
299
|
+
for (const [key, value] of Object.entries(result.autoParams)) {
|
|
300
|
+
visitorContext.autoParams.set(key, value);
|
|
301
|
+
}
|
|
302
|
+
return result.operation;
|
|
303
|
+
}
|
|
304
|
+
return null;
|
|
305
|
+
}
|
|
306
|
+
case "thenBy":
|
|
307
|
+
case "thenByDescending": {
|
|
308
|
+
const result = visitThenByOperation(ast, source, methodName, visitorContext);
|
|
309
|
+
if (result) {
|
|
310
|
+
// Merge auto-params back into context
|
|
311
|
+
for (const [key, value] of Object.entries(result.autoParams)) {
|
|
312
|
+
visitorContext.autoParams.set(key, value);
|
|
313
|
+
}
|
|
314
|
+
return result.operation;
|
|
315
|
+
}
|
|
316
|
+
return null;
|
|
317
|
+
}
|
|
318
|
+
case "take": {
|
|
319
|
+
const result = visitTakeOperation(ast, source, methodName, visitorContext);
|
|
320
|
+
if (result) {
|
|
321
|
+
// Merge auto-params back into context
|
|
322
|
+
for (const [key, value] of Object.entries(result.autoParams)) {
|
|
323
|
+
visitorContext.autoParams.set(key, value);
|
|
324
|
+
}
|
|
325
|
+
return result.operation;
|
|
326
|
+
}
|
|
327
|
+
return null;
|
|
328
|
+
}
|
|
329
|
+
case "skip": {
|
|
330
|
+
const result = visitSkipOperation(ast, source, methodName, visitorContext);
|
|
331
|
+
if (result) {
|
|
332
|
+
// Merge auto-params back into context
|
|
333
|
+
for (const [key, value] of Object.entries(result.autoParams)) {
|
|
334
|
+
visitorContext.autoParams.set(key, value);
|
|
335
|
+
}
|
|
336
|
+
return result.operation;
|
|
337
|
+
}
|
|
338
|
+
return null;
|
|
339
|
+
}
|
|
340
|
+
case "distinct": {
|
|
341
|
+
const result = visitDistinctOperation(ast, source, methodName, visitorContext);
|
|
342
|
+
if (result) {
|
|
343
|
+
// No auto-params for distinct
|
|
344
|
+
return result.operation;
|
|
345
|
+
}
|
|
346
|
+
return null;
|
|
347
|
+
}
|
|
348
|
+
case "join": {
|
|
349
|
+
const result = visitJoinOperation(ast, source, methodName, visitorContext);
|
|
350
|
+
if (result) {
|
|
351
|
+
// Merge auto-params back into context if any
|
|
352
|
+
for (const [key, value] of Object.entries(result.autoParams)) {
|
|
353
|
+
visitorContext.autoParams.set(key, value);
|
|
354
|
+
}
|
|
355
|
+
// Update context with JOIN result shape for subsequent operations
|
|
356
|
+
const joinOp = result.operation;
|
|
357
|
+
if (joinOp.resultShape) {
|
|
358
|
+
visitorContext.currentResultShape = joinOp.resultShape;
|
|
359
|
+
// Create a virtual table parameter for the JOIN result
|
|
360
|
+
visitorContext.joinResultParam = "$joinResult";
|
|
361
|
+
visitorContext.tableParams.add("$joinResult");
|
|
362
|
+
}
|
|
363
|
+
return result.operation;
|
|
364
|
+
}
|
|
365
|
+
return null;
|
|
366
|
+
}
|
|
367
|
+
case "groupJoin": {
|
|
368
|
+
const result = visitGroupJoinOperation(ast, source, methodName, visitorContext);
|
|
369
|
+
if (result) {
|
|
370
|
+
for (const [key, value] of Object.entries(result.autoParams)) {
|
|
371
|
+
visitorContext.autoParams.set(key, value);
|
|
372
|
+
}
|
|
373
|
+
const groupJoinOp = result.operation;
|
|
374
|
+
if (groupJoinOp.resultShape) {
|
|
375
|
+
visitorContext.currentResultShape = groupJoinOp.resultShape;
|
|
376
|
+
visitorContext.joinResultParam = "$groupJoin";
|
|
377
|
+
visitorContext.tableParams.add("$groupJoin");
|
|
378
|
+
}
|
|
379
|
+
return result.operation;
|
|
380
|
+
}
|
|
381
|
+
return null;
|
|
382
|
+
}
|
|
383
|
+
case "selectMany": {
|
|
384
|
+
const result = visitSelectManyOperation(ast, source, methodName, visitorContext);
|
|
385
|
+
if (result) {
|
|
386
|
+
for (const [key, value] of Object.entries(result.autoParams)) {
|
|
387
|
+
visitorContext.autoParams.set(key, value);
|
|
388
|
+
}
|
|
389
|
+
const selectManyOp = result.operation;
|
|
390
|
+
if (selectManyOp.resultShape) {
|
|
391
|
+
visitorContext.currentResultShape = selectManyOp.resultShape;
|
|
392
|
+
visitorContext.joinResultParam = "$selectMany";
|
|
393
|
+
visitorContext.tableParams.add("$selectMany");
|
|
394
|
+
}
|
|
395
|
+
return result.operation;
|
|
396
|
+
}
|
|
397
|
+
return null;
|
|
398
|
+
}
|
|
399
|
+
case "groupBy": {
|
|
400
|
+
const result = visitGroupByOperation(ast, source, methodName, visitorContext);
|
|
401
|
+
if (result) {
|
|
402
|
+
// Merge auto-params back into context if any
|
|
403
|
+
for (const [key, value] of Object.entries(result.autoParams)) {
|
|
404
|
+
visitorContext.autoParams.set(key, value);
|
|
405
|
+
}
|
|
406
|
+
return result.operation;
|
|
407
|
+
}
|
|
408
|
+
return null;
|
|
409
|
+
}
|
|
410
|
+
case "count": {
|
|
411
|
+
const result = visitCountOperation(ast, source, methodName, visitorContext);
|
|
412
|
+
if (result) {
|
|
413
|
+
// Merge auto-params back into context if any
|
|
414
|
+
for (const [key, value] of Object.entries(result.autoParams)) {
|
|
415
|
+
visitorContext.autoParams.set(key, value);
|
|
416
|
+
}
|
|
417
|
+
return result.operation;
|
|
418
|
+
}
|
|
419
|
+
return null;
|
|
420
|
+
}
|
|
421
|
+
case "sum": {
|
|
422
|
+
const result = visitSumOperation(ast, source, methodName, visitorContext);
|
|
423
|
+
if (result) {
|
|
424
|
+
// Merge auto-params back into context if any
|
|
425
|
+
for (const [key, value] of Object.entries(result.autoParams)) {
|
|
426
|
+
visitorContext.autoParams.set(key, value);
|
|
427
|
+
}
|
|
428
|
+
return result.operation;
|
|
429
|
+
}
|
|
430
|
+
return null;
|
|
431
|
+
}
|
|
432
|
+
case "average":
|
|
433
|
+
case "avg": {
|
|
434
|
+
const result = visitAverageOperation(ast, source, methodName, visitorContext);
|
|
435
|
+
if (result) {
|
|
436
|
+
// Merge auto-params back into context if any
|
|
437
|
+
for (const [key, value] of Object.entries(result.autoParams)) {
|
|
438
|
+
visitorContext.autoParams.set(key, value);
|
|
439
|
+
}
|
|
440
|
+
return result.operation;
|
|
441
|
+
}
|
|
442
|
+
return null;
|
|
443
|
+
}
|
|
444
|
+
case "min": {
|
|
445
|
+
const result = visitMinOperation(ast, source, methodName, visitorContext);
|
|
446
|
+
if (result) {
|
|
447
|
+
// Merge auto-params back into context if any
|
|
448
|
+
for (const [key, value] of Object.entries(result.autoParams)) {
|
|
449
|
+
visitorContext.autoParams.set(key, value);
|
|
450
|
+
}
|
|
451
|
+
return result.operation;
|
|
452
|
+
}
|
|
453
|
+
return null;
|
|
454
|
+
}
|
|
455
|
+
case "max": {
|
|
456
|
+
const result = visitMaxOperation(ast, source, methodName, visitorContext);
|
|
457
|
+
if (result) {
|
|
458
|
+
// Merge auto-params back into context if any
|
|
459
|
+
for (const [key, value] of Object.entries(result.autoParams)) {
|
|
460
|
+
visitorContext.autoParams.set(key, value);
|
|
461
|
+
}
|
|
462
|
+
return result.operation;
|
|
463
|
+
}
|
|
464
|
+
return null;
|
|
465
|
+
}
|
|
466
|
+
case "first":
|
|
467
|
+
case "firstOrDefault": {
|
|
468
|
+
const result = visitFirstOperation(ast, source, methodName, visitorContext);
|
|
469
|
+
if (result) {
|
|
470
|
+
// Merge auto-params back into context if any
|
|
471
|
+
for (const [key, value] of Object.entries(result.autoParams)) {
|
|
472
|
+
visitorContext.autoParams.set(key, value);
|
|
473
|
+
}
|
|
474
|
+
return result.operation;
|
|
475
|
+
}
|
|
476
|
+
return null;
|
|
477
|
+
}
|
|
478
|
+
case "single":
|
|
479
|
+
case "singleOrDefault": {
|
|
480
|
+
const result = visitSingleOperation(ast, source, methodName, visitorContext);
|
|
481
|
+
if (result) {
|
|
482
|
+
// Merge auto-params back into context if any
|
|
483
|
+
for (const [key, value] of Object.entries(result.autoParams)) {
|
|
484
|
+
visitorContext.autoParams.set(key, value);
|
|
485
|
+
}
|
|
486
|
+
return result.operation;
|
|
487
|
+
}
|
|
488
|
+
return null;
|
|
489
|
+
}
|
|
490
|
+
case "last":
|
|
491
|
+
case "lastOrDefault": {
|
|
492
|
+
const result = visitLastOperation(ast, source, methodName, visitorContext);
|
|
493
|
+
if (result) {
|
|
494
|
+
// Merge auto-params back into context if any
|
|
495
|
+
for (const [key, value] of Object.entries(result.autoParams)) {
|
|
496
|
+
visitorContext.autoParams.set(key, value);
|
|
497
|
+
}
|
|
498
|
+
return result.operation;
|
|
499
|
+
}
|
|
500
|
+
return null;
|
|
501
|
+
}
|
|
502
|
+
case "any": {
|
|
503
|
+
const result = visitAnyOperation(ast, source, methodName, visitorContext);
|
|
504
|
+
if (result) {
|
|
505
|
+
// Merge auto-params back into context if any
|
|
506
|
+
for (const [key, value] of Object.entries(result.autoParams)) {
|
|
507
|
+
visitorContext.autoParams.set(key, value);
|
|
508
|
+
}
|
|
509
|
+
return result.operation;
|
|
510
|
+
}
|
|
511
|
+
return null;
|
|
512
|
+
}
|
|
513
|
+
case "all": {
|
|
514
|
+
const result = visitAllOperation(ast, source, methodName, visitorContext);
|
|
515
|
+
if (result) {
|
|
516
|
+
// Merge auto-params back into context if any
|
|
517
|
+
for (const [key, value] of Object.entries(result.autoParams)) {
|
|
518
|
+
visitorContext.autoParams.set(key, value);
|
|
519
|
+
}
|
|
520
|
+
return result.operation;
|
|
521
|
+
}
|
|
522
|
+
return null;
|
|
523
|
+
}
|
|
524
|
+
case "contains": {
|
|
525
|
+
const result = visitContainsOperation(ast, source, methodName, visitorContext);
|
|
526
|
+
if (result) {
|
|
527
|
+
// Merge auto-params back into context
|
|
528
|
+
for (const [key, value] of Object.entries(result.autoParams)) {
|
|
529
|
+
visitorContext.autoParams.set(key, value);
|
|
530
|
+
}
|
|
531
|
+
return result.operation;
|
|
532
|
+
}
|
|
533
|
+
return null;
|
|
534
|
+
}
|
|
535
|
+
case "reverse": {
|
|
536
|
+
const result = visitReverseOperation(ast, source, methodName, visitorContext);
|
|
537
|
+
if (result) {
|
|
538
|
+
// No auto-params for reverse
|
|
539
|
+
return result.operation;
|
|
540
|
+
}
|
|
541
|
+
return null;
|
|
542
|
+
}
|
|
543
|
+
// INSERT operations
|
|
544
|
+
case "values": {
|
|
545
|
+
if (source.operationType !== "insert") {
|
|
546
|
+
throw new Error("values() can only be called on INSERT operations");
|
|
547
|
+
}
|
|
548
|
+
const result = visitValuesOperation(ast, source, visitorContext);
|
|
549
|
+
if (result) {
|
|
550
|
+
for (const [key, value] of Object.entries(result.autoParams)) {
|
|
551
|
+
visitorContext.autoParams.set(key, value);
|
|
552
|
+
}
|
|
553
|
+
return result.operation;
|
|
554
|
+
}
|
|
555
|
+
return null;
|
|
556
|
+
}
|
|
557
|
+
case "returning": {
|
|
558
|
+
if (source.operationType === "insert") {
|
|
559
|
+
const result = visitReturningOperation(ast, source, visitorContext);
|
|
560
|
+
if (result) {
|
|
561
|
+
for (const [key, value] of Object.entries(result.autoParams)) {
|
|
562
|
+
visitorContext.autoParams.set(key, value);
|
|
563
|
+
}
|
|
564
|
+
return result.operation;
|
|
565
|
+
}
|
|
566
|
+
return null;
|
|
567
|
+
}
|
|
568
|
+
else if (source.operationType === "update") {
|
|
569
|
+
const result = visitReturningUpdateOperation(ast, source, visitorContext);
|
|
570
|
+
if (result) {
|
|
571
|
+
for (const [key, value] of Object.entries(result.autoParams)) {
|
|
572
|
+
visitorContext.autoParams.set(key, value);
|
|
573
|
+
}
|
|
574
|
+
return result.operation;
|
|
575
|
+
}
|
|
576
|
+
return null;
|
|
577
|
+
}
|
|
578
|
+
throw new Error("returning() can only be called on INSERT or UPDATE operations");
|
|
579
|
+
}
|
|
580
|
+
// UPDATE operations
|
|
581
|
+
case "set": {
|
|
582
|
+
if (source.operationType !== "update") {
|
|
583
|
+
throw new Error("set() can only be called on UPDATE operations");
|
|
584
|
+
}
|
|
585
|
+
const result = visitSetOperation(ast, source, visitorContext);
|
|
586
|
+
if (result) {
|
|
587
|
+
for (const [key, value] of Object.entries(result.autoParams)) {
|
|
588
|
+
visitorContext.autoParams.set(key, value);
|
|
589
|
+
}
|
|
590
|
+
return result.operation;
|
|
591
|
+
}
|
|
592
|
+
return null;
|
|
593
|
+
}
|
|
594
|
+
case "allowFullTableUpdate": {
|
|
595
|
+
if (source.operationType !== "update") {
|
|
596
|
+
throw new Error("allowFullTableUpdate() can only be called on UPDATE operations");
|
|
597
|
+
}
|
|
598
|
+
const result = visitAllowFullUpdateOperation(ast, source);
|
|
599
|
+
if (result) {
|
|
600
|
+
for (const [key, value] of Object.entries(result.autoParams)) {
|
|
601
|
+
visitorContext.autoParams.set(key, value);
|
|
602
|
+
}
|
|
603
|
+
return result.operation;
|
|
604
|
+
}
|
|
605
|
+
return null;
|
|
606
|
+
}
|
|
607
|
+
// DELETE operations
|
|
608
|
+
case "allowFullTableDelete": {
|
|
609
|
+
if (source.operationType !== "delete") {
|
|
610
|
+
throw new Error("allowFullTableDelete() can only be called on DELETE operations");
|
|
611
|
+
}
|
|
612
|
+
const result = visitAllowFullDeleteOperation(ast, source);
|
|
613
|
+
if (result) {
|
|
614
|
+
for (const [key, value] of Object.entries(result.autoParams)) {
|
|
615
|
+
visitorContext.autoParams.set(key, value);
|
|
616
|
+
}
|
|
617
|
+
return result.operation;
|
|
618
|
+
}
|
|
619
|
+
return null;
|
|
620
|
+
}
|
|
621
|
+
default:
|
|
622
|
+
// Handle WHERE based on source type
|
|
623
|
+
if (methodName === "where") {
|
|
624
|
+
if (source.operationType === "update") {
|
|
625
|
+
const result = visitWhereUpdateOperation(ast, source, visitorContext);
|
|
626
|
+
if (result) {
|
|
627
|
+
for (const [key, value] of Object.entries(result.autoParams)) {
|
|
628
|
+
visitorContext.autoParams.set(key, value);
|
|
629
|
+
}
|
|
630
|
+
return result.operation;
|
|
631
|
+
}
|
|
632
|
+
return null;
|
|
633
|
+
}
|
|
634
|
+
else if (source.operationType === "delete") {
|
|
635
|
+
const result = visitWhereDeleteOperation(ast, source, visitorContext);
|
|
636
|
+
if (result) {
|
|
637
|
+
for (const [key, value] of Object.entries(result.autoParams)) {
|
|
638
|
+
visitorContext.autoParams.set(key, value);
|
|
639
|
+
}
|
|
640
|
+
return result.operation;
|
|
641
|
+
}
|
|
642
|
+
return null;
|
|
643
|
+
}
|
|
644
|
+
}
|
|
645
|
+
console.warn(`Unknown query method: ${methodName}`);
|
|
646
|
+
return null;
|
|
647
|
+
}
|
|
648
|
+
}
|
|
649
|
+
return null;
|
|
650
|
+
}
|
|
651
|
+
/**
|
|
652
|
+
* Get method name from call expression
|
|
653
|
+
*/
|
|
654
|
+
function getMethodName(ast) {
|
|
655
|
+
if (ast.callee.type === "Identifier") {
|
|
656
|
+
return ast.callee.name;
|
|
657
|
+
}
|
|
658
|
+
if (ast.callee.type === "MemberExpression") {
|
|
659
|
+
const memberExpr = ast.callee;
|
|
660
|
+
if (memberExpr.property.type === "Identifier") {
|
|
661
|
+
return memberExpr.property.name;
|
|
662
|
+
}
|
|
663
|
+
}
|
|
664
|
+
return null;
|
|
665
|
+
}
|
|
666
|
+
//# sourceMappingURL=ast-visitor.js.map
|