metal-orm 1.1.10 → 1.1.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +758 -769
- package/dist/index.cjs +106 -43
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -5
- package/dist/index.d.ts +5 -5
- package/dist/index.js +106 -43
- package/dist/index.js.map +1 -1
- package/package.json +100 -96
- package/scripts/generate-entities/render.mjs +21 -12
- package/scripts/generate-entities/schema.mjs +209 -195
- package/scripts/generate-entities/tree-detection.mjs +159 -153
- package/scripts/inflection/pt-br.mjs +468 -468
- package/scripts/run-eslint.mjs +33 -34
- package/scripts/show-sql-seed.sql +102 -0
- package/scripts/show-sql.mjs +321 -325
- package/src/bulk/bulk-delete-executor.ts +3 -5
- package/src/bulk/bulk-insert-executor.ts +7 -7
- package/src/bulk/bulk-update-executor.ts +2 -2
- package/src/bulk/bulk-upsert-executor.ts +5 -7
- package/src/codegen/naming-strategy.ts +54 -54
- package/src/codegen/typescript.ts +482 -482
- package/src/core/ast/adapters.ts +1 -1
- package/src/core/ast/builders.ts +123 -123
- package/src/core/ast/expression-builders.ts +745 -745
- package/src/core/ast/expression-nodes.ts +304 -304
- package/src/core/ast/expression-visitor.ts +212 -212
- package/src/core/ast/expression.ts +20 -20
- package/src/core/ast/helpers.ts +14 -14
- package/src/core/ast/join.ts +18 -18
- package/src/core/ast/query.ts +200 -200
- package/src/core/ddl/dialects/base-schema-dialect.ts +1 -1
- package/src/core/ddl/dialects/mssql-schema-dialect.ts +1 -1
- package/src/core/ddl/dialects/mysql-schema-dialect.ts +1 -1
- package/src/core/ddl/dialects/postgres-schema-dialect.ts +1 -1
- package/src/core/ddl/dialects/render-reference.test.ts +70 -70
- package/src/core/ddl/dialects/sqlite-schema-dialect.ts +1 -1
- package/src/core/ddl/introspect/catalogs/index.ts +5 -5
- package/src/core/ddl/introspect/catalogs/postgres.ts +146 -146
- package/src/core/ddl/introspect/context.ts +15 -15
- package/src/core/ddl/introspect/functions/postgres.ts +35 -35
- package/src/core/ddl/introspect/mysql.ts +113 -36
- package/src/core/ddl/introspect/registry.ts +40 -40
- package/src/core/ddl/introspect/run-select.ts +35 -35
- package/src/core/ddl/introspect/utils.ts +56 -56
- package/src/core/ddl/naming-strategy.ts +16 -16
- package/src/core/ddl/schema-dialect.ts +56 -56
- package/src/core/ddl/schema-diff.ts +234 -234
- package/src/core/ddl/schema-generator.ts +1 -1
- package/src/core/ddl/schema-introspect.ts +25 -25
- package/src/core/ddl/sql-writing.ts +171 -171
- package/src/core/dialect/abstract.ts +541 -541
- package/src/core/dialect/base/cte-compiler.ts +33 -33
- package/src/core/dialect/base/function-table-formatter.ts +103 -103
- package/src/core/dialect/base/groupby-compiler.ts +21 -21
- package/src/core/dialect/base/join-compiler.ts +25 -25
- package/src/core/dialect/base/orderby-compiler.ts +35 -35
- package/src/core/dialect/base/pagination-strategy.ts +32 -32
- package/src/core/dialect/base/returning-strategy.ts +57 -57
- package/src/core/dialect/base/sql-dialect.ts +294 -294
- package/src/core/dialect/dialect-factory.ts +91 -91
- package/src/core/dialect/mssql/functions.ts +120 -120
- package/src/core/dialect/mssql/index.ts +317 -317
- package/src/core/dialect/mysql/functions.ts +103 -103
- package/src/core/dialect/mysql/index.ts +105 -105
- package/src/core/dialect/postgres/functions.ts +108 -108
- package/src/core/dialect/postgres/index.ts +91 -91
- package/src/core/dialect/sqlite/functions.ts +129 -129
- package/src/core/dialect/sqlite/index.ts +67 -67
- package/src/core/driver/database-driver.ts +19 -19
- package/src/core/driver/mssql-driver.ts +23 -23
- package/src/core/driver/mysql-driver.ts +23 -23
- package/src/core/driver/postgres-driver.ts +23 -23
- package/src/core/driver/sqlite-driver.ts +23 -23
- package/src/core/execution/db-executor.ts +92 -92
- package/src/core/execution/executors/better-sqlite3-executor.ts +94 -94
- package/src/core/execution/executors/mssql-executor.ts +184 -184
- package/src/core/execution/executors/mysql-executor.ts +88 -88
- package/src/core/execution/executors/postgres-executor.ts +26 -26
- package/src/core/execution/executors/sqlite-executor.ts +42 -42
- package/src/core/execution/pooling/pool-types.ts +30 -30
- package/src/core/execution/pooling/pool.ts +275 -275
- package/src/core/functions/array.ts +35 -35
- package/src/core/functions/control-flow.ts +79 -79
- package/src/core/functions/datetime.ts +237 -237
- package/src/core/functions/json.ts +70 -70
- package/src/core/functions/numeric.ts +297 -297
- package/src/core/functions/text.ts +334 -334
- package/src/core/functions/types.ts +33 -33
- package/src/core/hydration/types.ts +51 -51
- package/src/core/sql/sql-operator-config.ts +39 -39
- package/src/core/sql/sql.ts +152 -152
- package/src/decorators/column-decorator.ts +87 -87
- package/src/decorators/decorator-metadata.ts +143 -143
- package/src/decorators/entity.ts +93 -93
- package/src/decorators/index.ts +39 -39
- package/src/decorators/relations.ts +231 -231
- package/src/decorators/transformers/built-in/string-transformers.ts +231 -231
- package/src/decorators/transformers/transformer-decorators.ts +134 -134
- package/src/decorators/transformers/transformer-executor.ts +171 -171
- package/src/decorators/transformers/transformer-metadata.ts +73 -73
- package/src/decorators/validators/built-in/br-cep-validator.ts +55 -55
- package/src/decorators/validators/built-in/br-cnpj-validator.ts +105 -105
- package/src/decorators/validators/built-in/br-cpf-validator.ts +103 -103
- package/src/decorators/validators/country-validator-registry.ts +64 -64
- package/src/decorators/validators/country-validators-decorators.ts +203 -203
- package/src/decorators/validators/country-validators.ts +105 -105
- package/src/decorators/validators/validator-metadata.ts +59 -59
- package/src/dto/dto-types.ts +226 -226
- package/src/dto/filter-types.ts +141 -141
- package/src/dto/index.ts +95 -95
- package/src/dto/openapi/generators/base.ts +29 -29
- package/src/dto/openapi/generators/column.ts +37 -37
- package/src/dto/openapi/generators/dto.ts +91 -91
- package/src/dto/openapi/generators/filter.ts +75 -75
- package/src/dto/openapi/generators/nested-dto.ts +618 -618
- package/src/dto/openapi/generators/pagination.ts +111 -111
- package/src/dto/openapi/generators/relation-filter.ts +228 -228
- package/src/dto/openapi/index.ts +12 -12
- package/src/dto/openapi/types.ts +101 -101
- package/src/dto/openapi/utilities.ts +95 -95
- package/src/dto/pagination-utils.ts +150 -150
- package/src/dto/transform.ts +197 -197
- package/src/index.ts +86 -86
- package/src/orm/als.ts +58 -58
- package/src/orm/domain-event-bus.ts +119 -119
- package/src/orm/entity-context.ts +86 -86
- package/src/orm/entity-materializer.ts +159 -159
- package/src/orm/entity-meta.ts +97 -97
- package/src/orm/entity-registry.ts +39 -39
- package/src/orm/entity-relation-cache.ts +39 -39
- package/src/orm/execute.ts +194 -194
- package/src/orm/execution-context.ts +18 -18
- package/src/orm/hydration-context.ts +26 -26
- package/src/orm/hydration.ts +112 -112
- package/src/orm/identity-map.ts +61 -61
- package/src/orm/interceptor-pipeline.ts +16 -16
- package/src/orm/lazy-batch/belongs-to-many.ts +119 -119
- package/src/orm/lazy-batch/belongs-to.ts +108 -108
- package/src/orm/lazy-batch/has-many.ts +69 -69
- package/src/orm/lazy-batch/has-one.ts +68 -68
- package/src/orm/lazy-batch/shared.ts +125 -125
- package/src/orm/orm-session.ts +620 -620
- package/src/orm/orm.ts +34 -34
- package/src/orm/pooled-executor-factory.ts +121 -121
- package/src/orm/query-logger.ts +40 -40
- package/src/orm/relation-change-processor.ts +420 -420
- package/src/orm/relations/belongs-to.ts +143 -143
- package/src/orm/relations/has-many.ts +204 -204
- package/src/orm/relations/has-one.ts +174 -174
- package/src/orm/relations/many-to-many.ts +288 -288
- package/src/orm/relations/morph-many.ts +156 -156
- package/src/orm/relations/morph-one.ts +151 -151
- package/src/orm/relations/morph-to.ts +162 -162
- package/src/orm/runtime-types.ts +92 -92
- package/src/orm/save-graph.ts +561 -561
- package/src/orm/transaction-runner.ts +24 -24
- package/src/orm/unit-of-work.ts +426 -426
- package/src/query/index.ts +69 -69
- package/src/query/target.ts +46 -46
- package/src/query-builder/column-selector.ts +81 -81
- package/src/query-builder/delete.ts +141 -141
- package/src/query-builder/insert-query-state.ts +149 -149
- package/src/query-builder/insert.ts +117 -117
- package/src/query-builder/query-ast-service.ts +287 -287
- package/src/query-builder/query-resolution.ts +78 -78
- package/src/query-builder/raw-column-parser.ts +38 -38
- package/src/query-builder/relation-filter-utils.ts +153 -153
- package/src/query-builder/relation-join-planner.ts +10 -10
- package/src/query-builder/relation-manager.ts +87 -87
- package/src/query-builder/relation-projection-helper.ts +102 -102
- package/src/query-builder/relation-types.ts +9 -9
- package/src/query-builder/relation-utils.ts +15 -15
- package/src/query-builder/select/cte-facet.ts +40 -40
- package/src/query-builder/select/from-facet.ts +80 -80
- package/src/query-builder/select/join-facet.ts +62 -62
- package/src/query-builder/select/predicate-facet.ts +104 -104
- package/src/query-builder/select/projection-facet.ts +70 -70
- package/src/query-builder/select/relation-facet.ts +81 -81
- package/src/query-builder/select/setop-facet.ts +36 -36
- package/src/query-builder/select-helpers.ts +1 -1
- package/src/query-builder/select-query-builder-deps.ts +130 -130
- package/src/query-builder/select-query-state.ts +207 -207
- package/src/query-builder/update.ts +151 -151
- package/src/schema/column-types.ts +322 -322
- package/src/schema/table-guards.ts +37 -37
- package/src/schema/table.ts +281 -281
- package/src/tree/index.ts +13 -13
- package/src/tree/nested-set-strategy.ts +545 -545
- package/src/tree/tree-decorator.ts +397 -397
- package/src/tree/tree-manager.ts +754 -754
- package/src/tree/tree-query.ts +427 -427
- package/src/tree/tree-types.ts +299 -299
|
@@ -1,81 +1,81 @@
|
|
|
1
|
-
import { ExpressionNode } from '../../core/ast/expression.js';
|
|
2
|
-
import { JoinKind } from '../../core/sql/sql.js';
|
|
3
|
-
import { SelectQueryBuilderContext } from '../select-query-builder-deps.js';
|
|
4
|
-
import { RelationManager } from '../relation-manager.js';
|
|
5
|
-
import { RelationIncludeOptions } from '../relation-types.js';
|
|
6
|
-
import { SelectQueryNode } from '../../core/ast/query.js';
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Facet responsible for relation operations (include, match, whereHas, etc.)
|
|
10
|
-
*/
|
|
11
|
-
export class SelectRelationFacet {
|
|
12
|
-
/**
|
|
13
|
-
* Creates a new SelectRelationFacet instance
|
|
14
|
-
* @param relationManager - Relation manager dependency
|
|
15
|
-
*/
|
|
16
|
-
constructor(private readonly relationManager: RelationManager) { }
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Matches records based on a relationship
|
|
20
|
-
* @param context - Current query context
|
|
21
|
-
* @param relationName - Name of the relationship
|
|
22
|
-
* @param predicate - Optional predicate
|
|
23
|
-
* @returns Updated query context with relation match
|
|
24
|
-
*/
|
|
25
|
-
match(
|
|
26
|
-
context: SelectQueryBuilderContext,
|
|
27
|
-
relationName: string,
|
|
28
|
-
predicate?: ExpressionNode
|
|
29
|
-
): SelectQueryBuilderContext {
|
|
30
|
-
return this.relationManager.match(context, relationName, predicate);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* Joins a related table
|
|
35
|
-
* @param context - Current query context
|
|
36
|
-
* @param relationName - Name of the relationship
|
|
37
|
-
* @param joinKind - Type of join
|
|
38
|
-
* @param extraCondition - Optional additional condition
|
|
39
|
-
* @returns Updated query context with relation join
|
|
40
|
-
*/
|
|
41
|
-
joinRelation(
|
|
42
|
-
context: SelectQueryBuilderContext,
|
|
43
|
-
relationName: string,
|
|
44
|
-
joinKind: JoinKind,
|
|
45
|
-
extraCondition?: ExpressionNode
|
|
46
|
-
): SelectQueryBuilderContext {
|
|
47
|
-
return this.relationManager.joinRelation(context, relationName, joinKind, extraCondition);
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Includes related data in the query results
|
|
52
|
-
* @param context - Current query context
|
|
53
|
-
* @param relationName - Name of the relationship to include
|
|
54
|
-
* @param options - Optional include options
|
|
55
|
-
* @returns Updated query context with relation inclusion
|
|
56
|
-
*/
|
|
57
|
-
include(
|
|
58
|
-
context: SelectQueryBuilderContext,
|
|
59
|
-
relationName: string,
|
|
60
|
-
options?: RelationIncludeOptions
|
|
61
|
-
): SelectQueryBuilderContext {
|
|
62
|
-
return this.relationManager.include(context, relationName, options);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Applies correlation for relation-based subqueries
|
|
67
|
-
* @param context - Current query context
|
|
68
|
-
* @param relationName - Name of the relationship
|
|
69
|
-
* @param subAst - Subquery AST
|
|
70
|
-
* @param extraCorrelate - Optional additional correlation
|
|
71
|
-
* @returns Modified subquery AST with correlation
|
|
72
|
-
*/
|
|
73
|
-
applyRelationCorrelation(
|
|
74
|
-
context: SelectQueryBuilderContext,
|
|
75
|
-
relationName: string,
|
|
76
|
-
subAst: SelectQueryNode,
|
|
77
|
-
extraCorrelate?: ExpressionNode
|
|
78
|
-
): SelectQueryNode {
|
|
79
|
-
return this.relationManager.applyRelationCorrelation(context, relationName, subAst, extraCorrelate);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
1
|
+
import { ExpressionNode } from '../../core/ast/expression.js';
|
|
2
|
+
import { JoinKind } from '../../core/sql/sql.js';
|
|
3
|
+
import { SelectQueryBuilderContext } from '../select-query-builder-deps.js';
|
|
4
|
+
import { RelationManager } from '../relation-manager.js';
|
|
5
|
+
import { RelationIncludeOptions } from '../relation-types.js';
|
|
6
|
+
import { SelectQueryNode } from '../../core/ast/query.js';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Facet responsible for relation operations (include, match, whereHas, etc.)
|
|
10
|
+
*/
|
|
11
|
+
export class SelectRelationFacet {
|
|
12
|
+
/**
|
|
13
|
+
* Creates a new SelectRelationFacet instance
|
|
14
|
+
* @param relationManager - Relation manager dependency
|
|
15
|
+
*/
|
|
16
|
+
constructor(private readonly relationManager: RelationManager) { }
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Matches records based on a relationship
|
|
20
|
+
* @param context - Current query context
|
|
21
|
+
* @param relationName - Name of the relationship
|
|
22
|
+
* @param predicate - Optional predicate
|
|
23
|
+
* @returns Updated query context with relation match
|
|
24
|
+
*/
|
|
25
|
+
match(
|
|
26
|
+
context: SelectQueryBuilderContext,
|
|
27
|
+
relationName: string,
|
|
28
|
+
predicate?: ExpressionNode
|
|
29
|
+
): SelectQueryBuilderContext {
|
|
30
|
+
return this.relationManager.match(context, relationName, predicate);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Joins a related table
|
|
35
|
+
* @param context - Current query context
|
|
36
|
+
* @param relationName - Name of the relationship
|
|
37
|
+
* @param joinKind - Type of join
|
|
38
|
+
* @param extraCondition - Optional additional condition
|
|
39
|
+
* @returns Updated query context with relation join
|
|
40
|
+
*/
|
|
41
|
+
joinRelation(
|
|
42
|
+
context: SelectQueryBuilderContext,
|
|
43
|
+
relationName: string,
|
|
44
|
+
joinKind: JoinKind,
|
|
45
|
+
extraCondition?: ExpressionNode
|
|
46
|
+
): SelectQueryBuilderContext {
|
|
47
|
+
return this.relationManager.joinRelation(context, relationName, joinKind, extraCondition);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Includes related data in the query results
|
|
52
|
+
* @param context - Current query context
|
|
53
|
+
* @param relationName - Name of the relationship to include
|
|
54
|
+
* @param options - Optional include options
|
|
55
|
+
* @returns Updated query context with relation inclusion
|
|
56
|
+
*/
|
|
57
|
+
include(
|
|
58
|
+
context: SelectQueryBuilderContext,
|
|
59
|
+
relationName: string,
|
|
60
|
+
options?: RelationIncludeOptions
|
|
61
|
+
): SelectQueryBuilderContext {
|
|
62
|
+
return this.relationManager.include(context, relationName, options);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Applies correlation for relation-based subqueries
|
|
67
|
+
* @param context - Current query context
|
|
68
|
+
* @param relationName - Name of the relationship
|
|
69
|
+
* @param subAst - Subquery AST
|
|
70
|
+
* @param extraCorrelate - Optional additional correlation
|
|
71
|
+
* @returns Modified subquery AST with correlation
|
|
72
|
+
*/
|
|
73
|
+
applyRelationCorrelation(
|
|
74
|
+
context: SelectQueryBuilderContext,
|
|
75
|
+
relationName: string,
|
|
76
|
+
subAst: SelectQueryNode,
|
|
77
|
+
extraCorrelate?: ExpressionNode
|
|
78
|
+
): SelectQueryNode {
|
|
79
|
+
return this.relationManager.applyRelationCorrelation(context, relationName, subAst, extraCorrelate);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
@@ -1,36 +1,36 @@
|
|
|
1
|
-
import { SelectQueryNode, SetOperationKind } from '../../core/ast/query.js';
|
|
2
|
-
import { SelectQueryBuilderContext, SelectQueryBuilderEnvironment } from '../select-query-builder-deps.js';
|
|
3
|
-
import { QueryAstService } from '../query-ast-service.js';
|
|
4
|
-
import { SelectQueryState } from '../select-query-state.js';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Facet responsible for set operations (UNION, INTERSECT, EXCEPT)
|
|
8
|
-
*/
|
|
9
|
-
export class SelectSetOpFacet {
|
|
10
|
-
/**
|
|
11
|
-
* Creates a new SelectSetOpFacet instance
|
|
12
|
-
* @param env - Query builder environment
|
|
13
|
-
* @param createAstService - Function to create AST service
|
|
14
|
-
*/
|
|
15
|
-
constructor(
|
|
16
|
-
private readonly env: SelectQueryBuilderEnvironment,
|
|
17
|
-
private readonly createAstService: (state: SelectQueryState) => QueryAstService
|
|
18
|
-
) { }
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Applies a set operation to the query
|
|
22
|
-
* @param context - Current query context
|
|
23
|
-
* @param operator - Set operation kind
|
|
24
|
-
* @param subAst - Subquery AST to combine
|
|
25
|
-
* @returns Updated query context with set operation
|
|
26
|
-
*/
|
|
27
|
-
applySetOperation(
|
|
28
|
-
context: SelectQueryBuilderContext,
|
|
29
|
-
operator: SetOperationKind,
|
|
30
|
-
subAst: SelectQueryNode
|
|
31
|
-
): SelectQueryBuilderContext {
|
|
32
|
-
const astService = this.createAstService(context.state);
|
|
33
|
-
const nextState = astService.withSetOperation(operator, subAst);
|
|
34
|
-
return { state: nextState, hydration: context.hydration };
|
|
35
|
-
}
|
|
36
|
-
}
|
|
1
|
+
import { SelectQueryNode, SetOperationKind } from '../../core/ast/query.js';
|
|
2
|
+
import { SelectQueryBuilderContext, SelectQueryBuilderEnvironment } from '../select-query-builder-deps.js';
|
|
3
|
+
import { QueryAstService } from '../query-ast-service.js';
|
|
4
|
+
import { SelectQueryState } from '../select-query-state.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Facet responsible for set operations (UNION, INTERSECT, EXCEPT)
|
|
8
|
+
*/
|
|
9
|
+
export class SelectSetOpFacet {
|
|
10
|
+
/**
|
|
11
|
+
* Creates a new SelectSetOpFacet instance
|
|
12
|
+
* @param env - Query builder environment
|
|
13
|
+
* @param createAstService - Function to create AST service
|
|
14
|
+
*/
|
|
15
|
+
constructor(
|
|
16
|
+
private readonly env: SelectQueryBuilderEnvironment,
|
|
17
|
+
private readonly createAstService: (state: SelectQueryState) => QueryAstService
|
|
18
|
+
) { }
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Applies a set operation to the query
|
|
22
|
+
* @param context - Current query context
|
|
23
|
+
* @param operator - Set operation kind
|
|
24
|
+
* @param subAst - Subquery AST to combine
|
|
25
|
+
* @returns Updated query context with set operation
|
|
26
|
+
*/
|
|
27
|
+
applySetOperation(
|
|
28
|
+
context: SelectQueryBuilderContext,
|
|
29
|
+
operator: SetOperationKind,
|
|
30
|
+
subAst: SelectQueryNode
|
|
31
|
+
): SelectQueryBuilderContext {
|
|
32
|
+
const astService = this.createAstService(context.state);
|
|
33
|
+
const nextState = astService.withSetOperation(operator, subAst);
|
|
34
|
+
return { state: nextState, hydration: context.hydration };
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -1,130 +1,130 @@
|
|
|
1
|
-
import { TableDef } from '../schema/table.js';
|
|
2
|
-
import { SelectQueryState } from './select-query-state.js';
|
|
3
|
-
import { HydrationManager } from './hydration-manager.js';
|
|
4
|
-
import { HydrationPlanner } from './hydration-planner.js';
|
|
5
|
-
import { QueryAstService } from './query-ast-service.js';
|
|
6
|
-
import { RelationService } from './relation-service.js';
|
|
7
|
-
import { ColumnSelector } from './column-selector.js';
|
|
8
|
-
import { RelationManager } from './relation-manager.js';
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Context for query building operations
|
|
12
|
-
*/
|
|
13
|
-
export interface SelectQueryBuilderContext {
|
|
14
|
-
/**
|
|
15
|
-
* Current query state
|
|
16
|
-
*/
|
|
17
|
-
readonly state: SelectQueryState;
|
|
18
|
-
/**
|
|
19
|
-
* Hydration manager for the query
|
|
20
|
-
*/
|
|
21
|
-
readonly hydration: HydrationManager;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Dependencies for query builder operations
|
|
26
|
-
*/
|
|
27
|
-
export interface SelectQueryBuilderDependencies {
|
|
28
|
-
/**
|
|
29
|
-
* Creates a new query state
|
|
30
|
-
* @param table - Table definition
|
|
31
|
-
* @returns New query state
|
|
32
|
-
*/
|
|
33
|
-
createState: (table: TableDef) => SelectQueryState;
|
|
34
|
-
/**
|
|
35
|
-
* Creates a new hydration manager
|
|
36
|
-
* @param table - Table definition
|
|
37
|
-
* @returns New hydration manager
|
|
38
|
-
*/
|
|
39
|
-
createHydration: (table: TableDef) => HydrationManager;
|
|
40
|
-
/**
|
|
41
|
-
* Creates a new hydration planner
|
|
42
|
-
* @param table - Table definition
|
|
43
|
-
* @returns Hydration planner
|
|
44
|
-
*/
|
|
45
|
-
createHydrationPlanner: (table: TableDef) => HydrationPlanner;
|
|
46
|
-
/**
|
|
47
|
-
* Creates a new query AST service
|
|
48
|
-
* @param table - Table definition
|
|
49
|
-
* @param state - Query state
|
|
50
|
-
* @returns New query AST service
|
|
51
|
-
*/
|
|
52
|
-
createQueryAstService: (table: TableDef, state: SelectQueryState) => QueryAstService;
|
|
53
|
-
/**
|
|
54
|
-
* Creates a new relation service
|
|
55
|
-
* @param table - Table definition
|
|
56
|
-
* @param state - Query state
|
|
57
|
-
* @param hydration - Hydration manager
|
|
58
|
-
* @returns New relation service
|
|
59
|
-
*/
|
|
60
|
-
createRelationService: (
|
|
61
|
-
table: TableDef,
|
|
62
|
-
state: SelectQueryState,
|
|
63
|
-
hydration: HydrationManager
|
|
64
|
-
) => RelationService;
|
|
65
|
-
/**
|
|
66
|
-
* Creates a new column selector
|
|
67
|
-
* @param env - Query builder environment
|
|
68
|
-
* @returns New column selector
|
|
69
|
-
*/
|
|
70
|
-
createColumnSelector: (env: SelectQueryBuilderEnvironment) => ColumnSelector;
|
|
71
|
-
/**
|
|
72
|
-
* Creates a new relation manager
|
|
73
|
-
* @param env - Query builder environment
|
|
74
|
-
* @returns New relation manager
|
|
75
|
-
*/
|
|
76
|
-
createRelationManager: (env: SelectQueryBuilderEnvironment) => RelationManager;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* Environment for query builder operations
|
|
81
|
-
*/
|
|
82
|
-
export interface SelectQueryBuilderEnvironment {
|
|
83
|
-
/**
|
|
84
|
-
* Table definition
|
|
85
|
-
*/
|
|
86
|
-
readonly table: TableDef;
|
|
87
|
-
/**
|
|
88
|
-
* Query builder dependencies
|
|
89
|
-
*/
|
|
90
|
-
readonly deps: SelectQueryBuilderDependencies;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
/**
|
|
94
|
-
* Default implementations for query builder dependencies
|
|
95
|
-
*/
|
|
96
|
-
const defaultCreateQueryAstService = (table: TableDef, state: SelectQueryState) => new QueryAstService(table, state);
|
|
97
|
-
const defaultCreateHydrationPlanner = (table: TableDef) => new HydrationPlanner(table);
|
|
98
|
-
|
|
99
|
-
const defaultCreateHydration = (table: TableDef, plannerFactory: (table: TableDef) => HydrationPlanner) =>
|
|
100
|
-
new HydrationManager(table, plannerFactory(table));
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* Resolves query builder dependencies by merging overrides with internal defaults
|
|
104
|
-
* @param overrides - Partial overrides for dependency factories
|
|
105
|
-
*/
|
|
106
|
-
export const resolveSelectQueryBuilderDependencies = (
|
|
107
|
-
overrides: Partial<SelectQueryBuilderDependencies> = {}
|
|
108
|
-
): SelectQueryBuilderDependencies => {
|
|
109
|
-
const createQueryAstService = overrides.createQueryAstService ?? defaultCreateQueryAstService;
|
|
110
|
-
const createHydrationPlanner = overrides.createHydrationPlanner ?? defaultCreateHydrationPlanner;
|
|
111
|
-
const createHydration =
|
|
112
|
-
overrides.createHydration ?? (table => defaultCreateHydration(table, createHydrationPlanner));
|
|
113
|
-
const createRelationService =
|
|
114
|
-
overrides.createRelationService ??
|
|
115
|
-
((table, state, hydration) => new RelationService(table, state, hydration, createQueryAstService));
|
|
116
|
-
const createColumnSelector = overrides.createColumnSelector ?? (env => new ColumnSelector(env));
|
|
117
|
-
const createRelationManager = overrides.createRelationManager ?? (env => new RelationManager(env));
|
|
118
|
-
|
|
119
|
-
return {
|
|
120
|
-
createState: overrides.createState ?? (table => new SelectQueryState(table)),
|
|
121
|
-
createHydration,
|
|
122
|
-
createHydrationPlanner,
|
|
123
|
-
createQueryAstService,
|
|
124
|
-
createRelationService,
|
|
125
|
-
createColumnSelector,
|
|
126
|
-
createRelationManager
|
|
127
|
-
};
|
|
128
|
-
};
|
|
129
|
-
|
|
130
|
-
export const defaultSelectQueryBuilderDependencies = resolveSelectQueryBuilderDependencies();
|
|
1
|
+
import { TableDef } from '../schema/table.js';
|
|
2
|
+
import { SelectQueryState } from './select-query-state.js';
|
|
3
|
+
import { HydrationManager } from './hydration-manager.js';
|
|
4
|
+
import { HydrationPlanner } from './hydration-planner.js';
|
|
5
|
+
import { QueryAstService } from './query-ast-service.js';
|
|
6
|
+
import { RelationService } from './relation-service.js';
|
|
7
|
+
import { ColumnSelector } from './column-selector.js';
|
|
8
|
+
import { RelationManager } from './relation-manager.js';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Context for query building operations
|
|
12
|
+
*/
|
|
13
|
+
export interface SelectQueryBuilderContext {
|
|
14
|
+
/**
|
|
15
|
+
* Current query state
|
|
16
|
+
*/
|
|
17
|
+
readonly state: SelectQueryState;
|
|
18
|
+
/**
|
|
19
|
+
* Hydration manager for the query
|
|
20
|
+
*/
|
|
21
|
+
readonly hydration: HydrationManager;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Dependencies for query builder operations
|
|
26
|
+
*/
|
|
27
|
+
export interface SelectQueryBuilderDependencies {
|
|
28
|
+
/**
|
|
29
|
+
* Creates a new query state
|
|
30
|
+
* @param table - Table definition
|
|
31
|
+
* @returns New query state
|
|
32
|
+
*/
|
|
33
|
+
createState: (table: TableDef) => SelectQueryState;
|
|
34
|
+
/**
|
|
35
|
+
* Creates a new hydration manager
|
|
36
|
+
* @param table - Table definition
|
|
37
|
+
* @returns New hydration manager
|
|
38
|
+
*/
|
|
39
|
+
createHydration: (table: TableDef) => HydrationManager;
|
|
40
|
+
/**
|
|
41
|
+
* Creates a new hydration planner
|
|
42
|
+
* @param table - Table definition
|
|
43
|
+
* @returns Hydration planner
|
|
44
|
+
*/
|
|
45
|
+
createHydrationPlanner: (table: TableDef) => HydrationPlanner;
|
|
46
|
+
/**
|
|
47
|
+
* Creates a new query AST service
|
|
48
|
+
* @param table - Table definition
|
|
49
|
+
* @param state - Query state
|
|
50
|
+
* @returns New query AST service
|
|
51
|
+
*/
|
|
52
|
+
createQueryAstService: (table: TableDef, state: SelectQueryState) => QueryAstService;
|
|
53
|
+
/**
|
|
54
|
+
* Creates a new relation service
|
|
55
|
+
* @param table - Table definition
|
|
56
|
+
* @param state - Query state
|
|
57
|
+
* @param hydration - Hydration manager
|
|
58
|
+
* @returns New relation service
|
|
59
|
+
*/
|
|
60
|
+
createRelationService: (
|
|
61
|
+
table: TableDef,
|
|
62
|
+
state: SelectQueryState,
|
|
63
|
+
hydration: HydrationManager
|
|
64
|
+
) => RelationService;
|
|
65
|
+
/**
|
|
66
|
+
* Creates a new column selector
|
|
67
|
+
* @param env - Query builder environment
|
|
68
|
+
* @returns New column selector
|
|
69
|
+
*/
|
|
70
|
+
createColumnSelector: (env: SelectQueryBuilderEnvironment) => ColumnSelector;
|
|
71
|
+
/**
|
|
72
|
+
* Creates a new relation manager
|
|
73
|
+
* @param env - Query builder environment
|
|
74
|
+
* @returns New relation manager
|
|
75
|
+
*/
|
|
76
|
+
createRelationManager: (env: SelectQueryBuilderEnvironment) => RelationManager;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Environment for query builder operations
|
|
81
|
+
*/
|
|
82
|
+
export interface SelectQueryBuilderEnvironment {
|
|
83
|
+
/**
|
|
84
|
+
* Table definition
|
|
85
|
+
*/
|
|
86
|
+
readonly table: TableDef;
|
|
87
|
+
/**
|
|
88
|
+
* Query builder dependencies
|
|
89
|
+
*/
|
|
90
|
+
readonly deps: SelectQueryBuilderDependencies;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Default implementations for query builder dependencies
|
|
95
|
+
*/
|
|
96
|
+
const defaultCreateQueryAstService = (table: TableDef, state: SelectQueryState) => new QueryAstService(table, state);
|
|
97
|
+
const defaultCreateHydrationPlanner = (table: TableDef) => new HydrationPlanner(table);
|
|
98
|
+
|
|
99
|
+
const defaultCreateHydration = (table: TableDef, plannerFactory: (table: TableDef) => HydrationPlanner) =>
|
|
100
|
+
new HydrationManager(table, plannerFactory(table));
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Resolves query builder dependencies by merging overrides with internal defaults
|
|
104
|
+
* @param overrides - Partial overrides for dependency factories
|
|
105
|
+
*/
|
|
106
|
+
export const resolveSelectQueryBuilderDependencies = (
|
|
107
|
+
overrides: Partial<SelectQueryBuilderDependencies> = {}
|
|
108
|
+
): SelectQueryBuilderDependencies => {
|
|
109
|
+
const createQueryAstService = overrides.createQueryAstService ?? defaultCreateQueryAstService;
|
|
110
|
+
const createHydrationPlanner = overrides.createHydrationPlanner ?? defaultCreateHydrationPlanner;
|
|
111
|
+
const createHydration =
|
|
112
|
+
overrides.createHydration ?? (table => defaultCreateHydration(table, createHydrationPlanner));
|
|
113
|
+
const createRelationService =
|
|
114
|
+
overrides.createRelationService ??
|
|
115
|
+
((table, state, hydration) => new RelationService(table, state, hydration, createQueryAstService));
|
|
116
|
+
const createColumnSelector = overrides.createColumnSelector ?? (env => new ColumnSelector(env));
|
|
117
|
+
const createRelationManager = overrides.createRelationManager ?? (env => new RelationManager(env));
|
|
118
|
+
|
|
119
|
+
return {
|
|
120
|
+
createState: overrides.createState ?? (table => new SelectQueryState(table)),
|
|
121
|
+
createHydration,
|
|
122
|
+
createHydrationPlanner,
|
|
123
|
+
createQueryAstService,
|
|
124
|
+
createRelationService,
|
|
125
|
+
createColumnSelector,
|
|
126
|
+
createRelationManager
|
|
127
|
+
};
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
export const defaultSelectQueryBuilderDependencies = resolveSelectQueryBuilderDependencies();
|