@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,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JOIN result selector visitor
|
|
3
|
+
* Handles result selector expressions in JOIN operations
|
|
4
|
+
*/
|
|
5
|
+
import { visitJoinExpression } from "./expression.js";
|
|
6
|
+
/**
|
|
7
|
+
* Validate that a property value in JOIN result selector is allowed
|
|
8
|
+
*/
|
|
9
|
+
function validateJoinResultProperty(value, propertyName, context) {
|
|
10
|
+
// Remove parentheses
|
|
11
|
+
let expr = value;
|
|
12
|
+
while (expr.type === "ParenthesizedExpression") {
|
|
13
|
+
expr = expr.expression;
|
|
14
|
+
}
|
|
15
|
+
// Check allowed patterns:
|
|
16
|
+
// 1. Direct table reference: d (where d is a JOIN parameter)
|
|
17
|
+
// 2. Reference from joined object: joined.d (where joined is outer param)
|
|
18
|
+
// 3. Spread is handled separately
|
|
19
|
+
if (expr.type === "Identifier") {
|
|
20
|
+
const identName = expr.name;
|
|
21
|
+
// Check if this is the previous JOIN result parameter
|
|
22
|
+
if (context.joinResultParam === identName) {
|
|
23
|
+
return; // Valid - it's the previous JOIN result
|
|
24
|
+
}
|
|
25
|
+
// Otherwise must be a JOIN parameter (u, d, o, etc.)
|
|
26
|
+
if (!context.joinParams?.has(identName)) {
|
|
27
|
+
throw new Error(`Invalid value for property '${propertyName}' in JOIN result selector. ` +
|
|
28
|
+
`'${identName}' is not a table reference. ` +
|
|
29
|
+
`Only table references are allowed (e.g., { user: u, dept: d })`);
|
|
30
|
+
}
|
|
31
|
+
return; // Valid
|
|
32
|
+
}
|
|
33
|
+
if (expr.type === "MemberExpression") {
|
|
34
|
+
const memberExpr = expr;
|
|
35
|
+
if (memberExpr.object.type === "Identifier" && memberExpr.property.type === "Identifier") {
|
|
36
|
+
const objName = memberExpr.object.name;
|
|
37
|
+
// Check if this is accessing a property from the joined result
|
|
38
|
+
if (context.joinResultParam === objName) {
|
|
39
|
+
// This is like joined.u or joined.dept - valid
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// Any other pattern is invalid
|
|
45
|
+
throw new Error(`Invalid value for property '${propertyName}' in JOIN result selector. ` +
|
|
46
|
+
`Only table references are allowed. Valid patterns: ` +
|
|
47
|
+
`{ u: u, d: d } or { user: joined.u, dept: joined.d } or { ...joined, o: o }. ` +
|
|
48
|
+
`No computed values, field selections, or complex expressions allowed.`);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Visit JOIN result selector with proper parameter tracking
|
|
52
|
+
*/
|
|
53
|
+
export function visitJoinResultSelector(node, context, startCounter) {
|
|
54
|
+
let currentCounter = startCounter;
|
|
55
|
+
const autoParams = {};
|
|
56
|
+
// Unwrap parenthesized expressions
|
|
57
|
+
let expr = node;
|
|
58
|
+
while (expr.type === "ParenthesizedExpression") {
|
|
59
|
+
expr = expr.expression;
|
|
60
|
+
}
|
|
61
|
+
// Handle object expressions
|
|
62
|
+
if (expr.type === "ObjectExpression") {
|
|
63
|
+
const properties = {};
|
|
64
|
+
const objExpr = expr;
|
|
65
|
+
for (const prop of objExpr.properties) {
|
|
66
|
+
if (prop.type === "SpreadElement") {
|
|
67
|
+
// Handle spread operator: ...joined
|
|
68
|
+
const spreadArg = prop.argument;
|
|
69
|
+
if (spreadArg && spreadArg.type === "Identifier") {
|
|
70
|
+
// This is spreading a parameter (like ...joined)
|
|
71
|
+
// We'll handle this as copying all properties
|
|
72
|
+
// For now, mark it as a special case
|
|
73
|
+
const valueExpr = visitJoinExpression(spreadArg, context, currentCounter);
|
|
74
|
+
if (valueExpr && valueExpr.value) {
|
|
75
|
+
// Store spread as a special marker
|
|
76
|
+
properties["...spread"] = valueExpr.value;
|
|
77
|
+
currentCounter = valueExpr.counter;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
throw new Error("Invalid spread in JOIN result selector. " +
|
|
82
|
+
"Only spreading of the joined parameter is allowed (e.g., ...joined)");
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
else if (prop.type === "Property" && prop.key.type === "Identifier") {
|
|
86
|
+
const key = prop.key.name;
|
|
87
|
+
// Validate the property value is allowed in JOIN result selector
|
|
88
|
+
validateJoinResultProperty(prop.value, key, context);
|
|
89
|
+
const valueExpr = visitJoinExpression(prop.value, context, currentCounter);
|
|
90
|
+
if (valueExpr && valueExpr.value) {
|
|
91
|
+
properties[key] = valueExpr.value;
|
|
92
|
+
currentCounter = valueExpr.counter;
|
|
93
|
+
Object.assign(autoParams, valueExpr.autoParams);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
throw new Error("Invalid property type in JOIN result selector. " +
|
|
98
|
+
"Only simple property assignments and spread are allowed");
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return {
|
|
102
|
+
expression: {
|
|
103
|
+
type: "object",
|
|
104
|
+
properties,
|
|
105
|
+
},
|
|
106
|
+
autoParams,
|
|
107
|
+
counter: currentCounter,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
// For non-object expressions, use the regular visitor
|
|
111
|
+
const result = visitJoinExpression(expr, context, currentCounter);
|
|
112
|
+
if (result) {
|
|
113
|
+
return {
|
|
114
|
+
expression: result.value,
|
|
115
|
+
autoParams: result.autoParams,
|
|
116
|
+
counter: result.counter,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=result-selector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"result-selector.js","sourceRoot":"","sources":["../../../src/visitors/join/result-selector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JOIN result shape builder
|
|
3
|
+
* Builds ResultShape from JOIN result selector expressions
|
|
4
|
+
*/
|
|
5
|
+
import type { ResultShape, ShapeNode } from "../../query-tree/operations.js";
|
|
6
|
+
import type { Expression } from "../../expressions/expression.js";
|
|
7
|
+
/**
|
|
8
|
+
* Build a ResultShape from a JOIN result selector expression
|
|
9
|
+
* Preserves full nested structure for complete fidelity
|
|
10
|
+
*/
|
|
11
|
+
export declare function buildResultShape(expr: Expression | undefined, outerParam: string | null, innerParam: string | null, previousShape?: ResultShape): ResultShape | undefined;
|
|
12
|
+
/**
|
|
13
|
+
* Recursively build a ShapeNode from an expression
|
|
14
|
+
*/
|
|
15
|
+
export declare function buildShapeNode(expr: Expression, outerParam: string | null, innerParam: string | null, previousShape?: ResultShape): ShapeNode | undefined;
|
|
16
|
+
//# sourceMappingURL=shape.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shape.d.ts","sourceRoot":"","sources":["../../../src/visitors/join/shape.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EAIV,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EACV,UAAU,EAIX,MAAM,iCAAiC,CAAC;AAEzC;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,UAAU,GAAG,SAAS,EAC5B,UAAU,EAAE,MAAM,GAAG,IAAI,EACzB,UAAU,EAAE,MAAM,GAAG,IAAI,EACzB,aAAa,CAAC,EAAE,WAAW,GAC1B,WAAW,GAAG,SAAS,CAsBzB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,UAAU,EAChB,UAAU,EAAE,MAAM,GAAG,IAAI,EACzB,UAAU,EAAE,MAAM,GAAG,IAAI,EACzB,aAAa,CAAC,EAAE,WAAW,GAC1B,SAAS,GAAG,SAAS,CAgJvB"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JOIN result shape builder
|
|
3
|
+
* Builds ResultShape from JOIN result selector expressions
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Build a ResultShape from a JOIN result selector expression
|
|
7
|
+
* Preserves full nested structure for complete fidelity
|
|
8
|
+
*/
|
|
9
|
+
export function buildResultShape(expr, outerParam, innerParam, previousShape) {
|
|
10
|
+
if (!expr || expr.type !== "object") {
|
|
11
|
+
return undefined;
|
|
12
|
+
}
|
|
13
|
+
const rootNode = buildShapeNode(expr, outerParam, innerParam, previousShape);
|
|
14
|
+
// The root node should be an object shape
|
|
15
|
+
if (rootNode && rootNode.type === "object") {
|
|
16
|
+
return rootNode;
|
|
17
|
+
}
|
|
18
|
+
// If we got here but expr was an object, create an empty shape
|
|
19
|
+
// This is a fallback for when we can't fully process the shape
|
|
20
|
+
if (expr.type === "object") {
|
|
21
|
+
return {
|
|
22
|
+
type: "object",
|
|
23
|
+
properties: new Map(),
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Recursively build a ShapeNode from an expression
|
|
30
|
+
*/
|
|
31
|
+
export function buildShapeNode(expr, outerParam, innerParam, previousShape) {
|
|
32
|
+
switch (expr.type) {
|
|
33
|
+
case "object": {
|
|
34
|
+
const objExpr = expr;
|
|
35
|
+
const properties = new Map();
|
|
36
|
+
for (const [propName, propExpr] of Object.entries(objExpr.properties)) {
|
|
37
|
+
// Check if this is a spread marker
|
|
38
|
+
if (propName === "...spread" && previousShape) {
|
|
39
|
+
// Copy all properties from the previous shape
|
|
40
|
+
for (const [prevPropName, prevNode] of previousShape.properties) {
|
|
41
|
+
properties.set(prevPropName, prevNode);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
const node = buildShapeNode(propExpr, outerParam, innerParam, previousShape);
|
|
46
|
+
if (node) {
|
|
47
|
+
properties.set(propName, node);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
const result = {
|
|
52
|
+
type: "object",
|
|
53
|
+
properties,
|
|
54
|
+
};
|
|
55
|
+
return result;
|
|
56
|
+
}
|
|
57
|
+
case "param": {
|
|
58
|
+
// Parameter expressions should not appear in JOIN result selectors
|
|
59
|
+
// The visitor should have thrown an error before we get here
|
|
60
|
+
// But if somehow we get here, we should not process it
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
case "reference": {
|
|
64
|
+
// Handle table references (e.g., { u, d } in JOIN result selector)
|
|
65
|
+
const refExpr = expr;
|
|
66
|
+
// Check if this has a ColumnSource
|
|
67
|
+
if (refExpr.source) {
|
|
68
|
+
if (refExpr.source.type === "joinParam") {
|
|
69
|
+
return {
|
|
70
|
+
type: "reference",
|
|
71
|
+
sourceTable: refExpr.source.paramIndex,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// Fallback: Check if this uses the old table field with $param marker
|
|
76
|
+
if (refExpr.table && refExpr.table.startsWith("$param")) {
|
|
77
|
+
const paramIndex = parseInt(refExpr.table.substring(6), 10);
|
|
78
|
+
return {
|
|
79
|
+
type: "reference",
|
|
80
|
+
sourceTable: paramIndex,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
// Fallback: Check parameter names
|
|
84
|
+
if (outerParam && refExpr.table === outerParam) {
|
|
85
|
+
return {
|
|
86
|
+
type: "reference",
|
|
87
|
+
sourceTable: 0,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
if (innerParam && refExpr.table === innerParam) {
|
|
91
|
+
return {
|
|
92
|
+
type: "reference",
|
|
93
|
+
sourceTable: 1,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
return undefined;
|
|
97
|
+
}
|
|
98
|
+
case "column": {
|
|
99
|
+
const colExpr = expr;
|
|
100
|
+
// Check if this has a ColumnSource
|
|
101
|
+
if (colExpr.source) {
|
|
102
|
+
if (colExpr.source.type === "joinParam") {
|
|
103
|
+
return {
|
|
104
|
+
type: "column",
|
|
105
|
+
sourceTable: colExpr.source.paramIndex,
|
|
106
|
+
columnName: colExpr.name,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// Fallback: Check if this uses the old table field with $param marker
|
|
111
|
+
if (colExpr.table && colExpr.table.startsWith("$param")) {
|
|
112
|
+
const paramIndex = parseInt(colExpr.table.substring(6), 10);
|
|
113
|
+
// It's a column from that table
|
|
114
|
+
return {
|
|
115
|
+
type: "column",
|
|
116
|
+
sourceTable: paramIndex,
|
|
117
|
+
columnName: colExpr.name,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
// Fallback: Check if this is a property access using parameter names (e.g., u.name)
|
|
121
|
+
// This is a secondary check for cases where parameter names are provided
|
|
122
|
+
if (outerParam && colExpr.table === outerParam) {
|
|
123
|
+
return {
|
|
124
|
+
type: "column",
|
|
125
|
+
sourceTable: 0,
|
|
126
|
+
columnName: colExpr.name,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
if (innerParam && colExpr.table === innerParam) {
|
|
130
|
+
return {
|
|
131
|
+
type: "column",
|
|
132
|
+
sourceTable: 1,
|
|
133
|
+
columnName: colExpr.name,
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
// Direct parameter reference without table qualifier (e.g., { orderItem: oi })
|
|
137
|
+
if (!colExpr.table) {
|
|
138
|
+
if (outerParam && colExpr.name === outerParam) {
|
|
139
|
+
return {
|
|
140
|
+
type: "reference",
|
|
141
|
+
sourceTable: 0,
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
if (innerParam && colExpr.name === innerParam) {
|
|
145
|
+
return {
|
|
146
|
+
type: "reference",
|
|
147
|
+
sourceTable: 1,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return undefined;
|
|
152
|
+
}
|
|
153
|
+
// Add more cases as needed (arithmetic, concat, etc.)
|
|
154
|
+
}
|
|
155
|
+
return undefined;
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=shape.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shape.js","sourceRoot":"","sources":["../../../src/visitors/join/shape.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ORDER BY-specific context
|
|
3
|
+
* Manages state for ORDER BY key selector parsing
|
|
4
|
+
*/
|
|
5
|
+
export interface OrderByContext {
|
|
6
|
+
tableParams: Set<string>;
|
|
7
|
+
queryParams: Set<string>;
|
|
8
|
+
autoParams: Map<string, unknown>;
|
|
9
|
+
autoParamCounter: number;
|
|
10
|
+
currentTable?: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Create an ORDER BY parsing context
|
|
14
|
+
*/
|
|
15
|
+
export declare function createOrderByContext(tableParams: Set<string>, queryParams: Set<string>, startCounter?: number): OrderByContext;
|
|
16
|
+
/**
|
|
17
|
+
* Generate auto-parameter name for literal values
|
|
18
|
+
*/
|
|
19
|
+
export declare function createAutoParam(context: OrderByContext, value: unknown): string;
|
|
20
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/visitors/orderby/context.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,cAAc;IAE7B,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAGzB,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAGzB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,gBAAgB,EAAE,MAAM,CAAC;IAGzB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,EACxB,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,EACxB,YAAY,GAAE,MAAU,GACvB,cAAc,CAOhB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CAK/E"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ORDER BY-specific context
|
|
3
|
+
* Manages state for ORDER BY key selector parsing
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Create an ORDER BY parsing context
|
|
7
|
+
*/
|
|
8
|
+
export function createOrderByContext(tableParams, queryParams, startCounter = 0) {
|
|
9
|
+
return {
|
|
10
|
+
tableParams: new Set(tableParams),
|
|
11
|
+
queryParams: new Set(queryParams),
|
|
12
|
+
autoParams: new Map(),
|
|
13
|
+
autoParamCounter: startCounter,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Generate auto-parameter name for literal values
|
|
18
|
+
*/
|
|
19
|
+
export function createAutoParam(context, value) {
|
|
20
|
+
context.autoParamCounter++;
|
|
21
|
+
const paramName = `__p${context.autoParamCounter}`;
|
|
22
|
+
context.autoParams.set(paramName, value);
|
|
23
|
+
return paramName;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/visitors/orderby/context.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAiBH;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,WAAwB,EACxB,WAAwB,EACxB,eAAuB,CAAC;IAExB,OAAO;QACL,WAAW,EAAE,IAAI,GAAG,CAAC,WAAW,CAAC;QACjC,WAAW,EAAE,IAAI,GAAG,CAAC,WAAW,CAAC;QACjC,UAAU,EAAE,IAAI,GAAG,EAAE;QACrB,gBAAgB,EAAE,YAAY;KAC/B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,OAAuB,EAAE,KAAc;IACrE,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAC3B,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,gBAAgB,EAAE,CAAC;IACnD,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACzC,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/visitors/orderby/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/visitors/orderby/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ORDER BY key selector visitor
|
|
3
|
+
* Extracts the sorting key from lambda expressions
|
|
4
|
+
*/
|
|
5
|
+
import type { ValueExpression } from "../../expressions/expression.js";
|
|
6
|
+
import type { Expression as ASTExpression } from "../../parser/ast-types.js";
|
|
7
|
+
import type { OrderByContext } from "./context.js";
|
|
8
|
+
/**
|
|
9
|
+
* Visit key selector expression for ORDER BY
|
|
10
|
+
* Returns ValueExpression that can be used as sort key
|
|
11
|
+
*/
|
|
12
|
+
export declare function visitKeySelector(node: ASTExpression, context: OrderByContext): ValueExpression | null;
|
|
13
|
+
//# sourceMappingURL=key-selector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key-selector.d.ts","sourceRoot":"","sources":["../../../src/visitors/orderby/key-selector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,eAAe,EAKhB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,KAAK,EACV,UAAU,IAAI,aAAa,EAO5B,MAAM,2BAA2B,CAAC;AAEnC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAGnD;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,aAAa,EACnB,OAAO,EAAE,cAAc,GACtB,eAAe,GAAG,IAAI,CAuCxB"}
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ORDER BY key selector visitor
|
|
3
|
+
* Extracts the sorting key from lambda expressions
|
|
4
|
+
*/
|
|
5
|
+
import { createAutoParam } from "./context.js";
|
|
6
|
+
/**
|
|
7
|
+
* Visit key selector expression for ORDER BY
|
|
8
|
+
* Returns ValueExpression that can be used as sort key
|
|
9
|
+
*/
|
|
10
|
+
export function visitKeySelector(node, context) {
|
|
11
|
+
if (!node)
|
|
12
|
+
return null;
|
|
13
|
+
switch (node.type) {
|
|
14
|
+
case "MemberExpression":
|
|
15
|
+
return visitMemberAccess(node, context);
|
|
16
|
+
case "Identifier":
|
|
17
|
+
return visitIdentifier(node, context);
|
|
18
|
+
case "Literal":
|
|
19
|
+
case "NumericLiteral":
|
|
20
|
+
case "StringLiteral":
|
|
21
|
+
case "BooleanLiteral":
|
|
22
|
+
case "NullLiteral":
|
|
23
|
+
return visitLiteral(node, context);
|
|
24
|
+
case "BinaryExpression":
|
|
25
|
+
return visitBinaryExpression(node, context);
|
|
26
|
+
case "CallExpression":
|
|
27
|
+
return visitMethodCall(node, context);
|
|
28
|
+
case "UnaryExpression":
|
|
29
|
+
return visitUnaryExpression(node, context);
|
|
30
|
+
case "ConditionalExpression":
|
|
31
|
+
// TODO: Support CASE WHEN for complex sorting
|
|
32
|
+
return null;
|
|
33
|
+
case "ParenthesizedExpression": {
|
|
34
|
+
// Unwrap parentheses
|
|
35
|
+
const paren = node;
|
|
36
|
+
return visitKeySelector(paren.expression, context);
|
|
37
|
+
}
|
|
38
|
+
default:
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Visit member access (e.g., x.name, x.address.city)
|
|
44
|
+
*/
|
|
45
|
+
function visitMemberAccess(node, context) {
|
|
46
|
+
if (!node.computed && node.property.type === "Identifier") {
|
|
47
|
+
const propertyName = node.property.name;
|
|
48
|
+
// Simple member access: x.name
|
|
49
|
+
if (node.object.type === "Identifier") {
|
|
50
|
+
const objectName = node.object.name;
|
|
51
|
+
// Check if this is accessing a JOIN result property
|
|
52
|
+
const extContext = context;
|
|
53
|
+
if (extContext.joinResultParam === objectName && extContext.currentResultShape) {
|
|
54
|
+
const shapeProp = extContext.currentResultShape.properties.get(propertyName);
|
|
55
|
+
if (shapeProp) {
|
|
56
|
+
if (shapeProp.type === "column") {
|
|
57
|
+
// Direct column from JOIN result
|
|
58
|
+
return {
|
|
59
|
+
type: "column",
|
|
60
|
+
name: shapeProp.columnName || propertyName,
|
|
61
|
+
source: { type: "joinResult", tableIndex: shapeProp.sourceTable || 0 },
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// Table parameter column
|
|
67
|
+
if (context.tableParams.has(objectName)) {
|
|
68
|
+
return {
|
|
69
|
+
type: "column",
|
|
70
|
+
name: propertyName,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
// Query parameter property
|
|
74
|
+
if (context.queryParams.has(objectName)) {
|
|
75
|
+
return {
|
|
76
|
+
type: "param",
|
|
77
|
+
param: objectName,
|
|
78
|
+
property: propertyName,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// Nested member access: x.address.city
|
|
83
|
+
if (node.object.type === "MemberExpression") {
|
|
84
|
+
const innerColumn = visitMemberAccess(node.object, context);
|
|
85
|
+
if (innerColumn && innerColumn.type === "column") {
|
|
86
|
+
return {
|
|
87
|
+
type: "column",
|
|
88
|
+
name: `${innerColumn.name}.${propertyName}`,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Visit identifier
|
|
97
|
+
*/
|
|
98
|
+
function visitIdentifier(node, context) {
|
|
99
|
+
const name = node.name;
|
|
100
|
+
// Table parameter (entire row - unusual for ORDER BY)
|
|
101
|
+
if (context.tableParams.has(name)) {
|
|
102
|
+
return {
|
|
103
|
+
type: "column",
|
|
104
|
+
name,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
// Query parameter
|
|
108
|
+
if (context.queryParams.has(name)) {
|
|
109
|
+
return {
|
|
110
|
+
type: "param",
|
|
111
|
+
param: name,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Visit literal value
|
|
118
|
+
*/
|
|
119
|
+
function visitLiteral(node, context) {
|
|
120
|
+
// NULL is special - not parameterized
|
|
121
|
+
if (node.value === null) {
|
|
122
|
+
return {
|
|
123
|
+
type: "constant",
|
|
124
|
+
value: null,
|
|
125
|
+
valueType: "null",
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
// Auto-parameterize other literals
|
|
129
|
+
const paramName = createAutoParam(context, node.value);
|
|
130
|
+
return {
|
|
131
|
+
type: "param",
|
|
132
|
+
param: paramName,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Visit binary expression (arithmetic for computed sort keys)
|
|
137
|
+
*/
|
|
138
|
+
function visitBinaryExpression(node, context) {
|
|
139
|
+
// Only handle arithmetic operators for ORDER BY
|
|
140
|
+
if (!["+", "-", "*", "/", "%"].includes(node.operator)) {
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
const left = visitKeySelector(node.left, context);
|
|
144
|
+
const right = visitKeySelector(node.right, context);
|
|
145
|
+
if (!left || !right)
|
|
146
|
+
return null;
|
|
147
|
+
// Check for string concatenation
|
|
148
|
+
if (node.operator === "+" && (isStringExpression(left) || isStringExpression(right))) {
|
|
149
|
+
return {
|
|
150
|
+
type: "concat",
|
|
151
|
+
left,
|
|
152
|
+
right,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
// Regular arithmetic
|
|
156
|
+
return {
|
|
157
|
+
type: "arithmetic",
|
|
158
|
+
operator: node.operator,
|
|
159
|
+
left,
|
|
160
|
+
right,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Visit method call (e.g., x.name.toLowerCase())
|
|
165
|
+
*/
|
|
166
|
+
function visitMethodCall(node, context) {
|
|
167
|
+
if (node.callee.type !== "MemberExpression")
|
|
168
|
+
return null;
|
|
169
|
+
const memberCallee = node.callee;
|
|
170
|
+
if (memberCallee.property.type !== "Identifier")
|
|
171
|
+
return null;
|
|
172
|
+
const methodName = memberCallee.property.name;
|
|
173
|
+
// String methods for sorting
|
|
174
|
+
if (["toLowerCase", "toUpperCase"].includes(methodName)) {
|
|
175
|
+
const obj = visitKeySelector(memberCallee.object, context);
|
|
176
|
+
if (!obj)
|
|
177
|
+
return null;
|
|
178
|
+
return {
|
|
179
|
+
type: "stringMethod",
|
|
180
|
+
object: obj,
|
|
181
|
+
method: methodName,
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
return null;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Visit unary expression
|
|
188
|
+
*/
|
|
189
|
+
function visitUnaryExpression(node, context) {
|
|
190
|
+
// Unary minus for negative sorting
|
|
191
|
+
if (node.operator === "-") {
|
|
192
|
+
if (node.argument.type === "NumericLiteral" || node.argument.type === "Literal") {
|
|
193
|
+
const lit = node.argument;
|
|
194
|
+
if (typeof lit.value === "number") {
|
|
195
|
+
const value = -lit.value;
|
|
196
|
+
const paramName = createAutoParam(context, value);
|
|
197
|
+
return {
|
|
198
|
+
type: "param",
|
|
199
|
+
param: paramName,
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
// Negate other expressions
|
|
204
|
+
const arg = visitKeySelector(node.argument, context);
|
|
205
|
+
if (arg) {
|
|
206
|
+
return {
|
|
207
|
+
type: "arithmetic",
|
|
208
|
+
operator: "*",
|
|
209
|
+
left: { type: "constant", value: -1 },
|
|
210
|
+
right: arg,
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
// Unary plus (pass through)
|
|
215
|
+
if (node.operator === "+") {
|
|
216
|
+
return visitKeySelector(node.argument, context);
|
|
217
|
+
}
|
|
218
|
+
return null;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Check if expression is likely a string
|
|
222
|
+
*/
|
|
223
|
+
function isStringExpression(expr) {
|
|
224
|
+
if (expr.type === "constant") {
|
|
225
|
+
return typeof expr.value === "string";
|
|
226
|
+
}
|
|
227
|
+
if (expr.type === "concat") {
|
|
228
|
+
return true;
|
|
229
|
+
}
|
|
230
|
+
if (expr.type === "column") {
|
|
231
|
+
const name = expr.name.toLowerCase();
|
|
232
|
+
return name.includes("name") || name.includes("title") || name.includes("description");
|
|
233
|
+
}
|
|
234
|
+
return false;
|
|
235
|
+
}
|
|
236
|
+
//# sourceMappingURL=key-selector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key-selector.js","sourceRoot":"","sources":["../../../src/visitors/orderby/key-selector.ts"],"names":[],"mappings":"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"}
|