interaqt 1.6.0 → 1.7.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/agent/skill/interaqt-migration.md +18 -2
  2. package/agent/skill/interaqt-reference.md +1 -1
  3. package/dist/builtins/interaction/Data.d.ts +0 -41
  4. package/dist/builtins/interaction/Data.d.ts.map +1 -1
  5. package/dist/builtins/interaction/Interaction.d.ts +11 -4
  6. package/dist/builtins/interaction/Interaction.d.ts.map +1 -1
  7. package/dist/builtins/interaction/activity/ActivityCall.d.ts.map +1 -1
  8. package/dist/builtins/interaction/activity/ActivityManager.d.ts.map +1 -1
  9. package/dist/builtins/interaction/index.d.ts +0 -1
  10. package/dist/builtins/interaction/index.d.ts.map +1 -1
  11. package/dist/core/Any.d.ts.map +1 -1
  12. package/dist/core/Average.d.ts +5 -0
  13. package/dist/core/Average.d.ts.map +1 -1
  14. package/dist/core/BoolExp.d.ts +2 -0
  15. package/dist/core/BoolExp.d.ts.map +1 -1
  16. package/dist/core/Constraint.d.ts.map +1 -1
  17. package/dist/core/Count.d.ts +5 -0
  18. package/dist/core/Count.d.ts.map +1 -1
  19. package/dist/core/Custom.d.ts.map +1 -1
  20. package/dist/core/Entity.d.ts.map +1 -1
  21. package/dist/core/Every.d.ts +5 -0
  22. package/dist/core/Every.d.ts.map +1 -1
  23. package/dist/core/Property.d.ts.map +1 -1
  24. package/dist/core/RealDictionary.d.ts.map +1 -1
  25. package/dist/core/RealTime.d.ts.map +1 -1
  26. package/dist/core/Relation.d.ts +5 -0
  27. package/dist/core/Relation.d.ts.map +1 -1
  28. package/dist/core/ScopedSequence.d.ts.map +1 -1
  29. package/dist/core/SideEffect.d.ts.map +1 -1
  30. package/dist/core/StateMachine.d.ts.map +1 -1
  31. package/dist/core/StateNode.d.ts.map +1 -1
  32. package/dist/core/StateTransfer.d.ts.map +1 -1
  33. package/dist/core/Summation.d.ts +5 -0
  34. package/dist/core/Summation.d.ts.map +1 -1
  35. package/dist/core/Transform.d.ts +7 -0
  36. package/dist/core/Transform.d.ts.map +1 -1
  37. package/dist/core/WeightedSummation.d.ts.map +1 -1
  38. package/dist/core/init.d.ts.map +1 -1
  39. package/dist/core/types.d.ts.map +1 -1
  40. package/dist/core/utils.d.ts +5 -0
  41. package/dist/core/utils.d.ts.map +1 -1
  42. package/dist/drivers/Mysql.d.ts +2 -1
  43. package/dist/drivers/Mysql.d.ts.map +1 -1
  44. package/dist/drivers/PGLite.d.ts.map +1 -1
  45. package/dist/drivers/PostgreSQL.d.ts +1 -0
  46. package/dist/drivers/PostgreSQL.d.ts.map +1 -1
  47. package/dist/index.js +4061 -3844
  48. package/dist/index.js.map +1 -1
  49. package/dist/runtime/Controller.d.ts +15 -1
  50. package/dist/runtime/Controller.d.ts.map +1 -1
  51. package/dist/runtime/MonoSystem.d.ts +2 -0
  52. package/dist/runtime/MonoSystem.d.ts.map +1 -1
  53. package/dist/runtime/Scheduler.d.ts.map +1 -1
  54. package/dist/runtime/System.d.ts +2 -0
  55. package/dist/runtime/System.d.ts.map +1 -1
  56. package/dist/runtime/computations/Any.d.ts.map +1 -1
  57. package/dist/runtime/computations/Average.d.ts.map +1 -1
  58. package/dist/runtime/computations/Computation.d.ts +9 -0
  59. package/dist/runtime/computations/Computation.d.ts.map +1 -1
  60. package/dist/runtime/computations/Count.d.ts.map +1 -1
  61. package/dist/runtime/computations/Every.d.ts.map +1 -1
  62. package/dist/runtime/computations/StateMachine.d.ts.map +1 -1
  63. package/dist/runtime/computations/Summation.d.ts.map +1 -1
  64. package/dist/runtime/computations/WeightedSummation.d.ts.map +1 -1
  65. package/dist/runtime/migration.d.ts +10 -3
  66. package/dist/runtime/migration.d.ts.map +1 -1
  67. package/dist/storage/erstorage/AttributeQuery.d.ts +0 -1
  68. package/dist/storage/erstorage/AttributeQuery.d.ts.map +1 -1
  69. package/dist/storage/erstorage/CreationExecutor.d.ts +10 -12
  70. package/dist/storage/erstorage/CreationExecutor.d.ts.map +1 -1
  71. package/dist/storage/erstorage/DeletionExecutor.d.ts +15 -10
  72. package/dist/storage/erstorage/DeletionExecutor.d.ts.map +1 -1
  73. package/dist/storage/erstorage/EntityToTableMap.d.ts +14 -0
  74. package/dist/storage/erstorage/EntityToTableMap.d.ts.map +1 -1
  75. package/dist/storage/erstorage/FilteredEntityManager.d.ts +83 -18
  76. package/dist/storage/erstorage/FilteredEntityManager.d.ts.map +1 -1
  77. package/dist/storage/erstorage/MatchExp.d.ts +1 -1
  78. package/dist/storage/erstorage/MatchExp.d.ts.map +1 -1
  79. package/dist/storage/erstorage/MergedItemProcessor.d.ts +29 -15
  80. package/dist/storage/erstorage/MergedItemProcessor.d.ts.map +1 -1
  81. package/dist/storage/erstorage/QueryExecutor.d.ts +23 -1
  82. package/dist/storage/erstorage/QueryExecutor.d.ts.map +1 -1
  83. package/dist/storage/erstorage/RecordInfo.d.ts +1 -0
  84. package/dist/storage/erstorage/RecordInfo.d.ts.map +1 -1
  85. package/dist/storage/erstorage/RecordQuery.d.ts.map +1 -1
  86. package/dist/storage/erstorage/RecordQueryAgent.d.ts +22 -5
  87. package/dist/storage/erstorage/RecordQueryAgent.d.ts.map +1 -1
  88. package/dist/storage/erstorage/SQLBuilder.d.ts +9 -0
  89. package/dist/storage/erstorage/SQLBuilder.d.ts.map +1 -1
  90. package/dist/storage/erstorage/Setup.d.ts +22 -5
  91. package/dist/storage/erstorage/Setup.d.ts.map +1 -1
  92. package/dist/storage/erstorage/UpdateExecutor.d.ts +9 -13
  93. package/dist/storage/erstorage/UpdateExecutor.d.ts.map +1 -1
  94. package/package.json +2 -2
  95. package/agent/.claude/settings.local.json +0 -147
  96. package/dist/builtins/interaction/DataAttributives.d.ts +0 -37
  97. package/dist/builtins/interaction/DataAttributives.d.ts.map +0 -1
@@ -1,10 +1,9 @@
1
1
  import { EntityIdRef, Database, RecordMutationEvent } from '../../runtime';
2
2
  import { EntityToTableMap } from './EntityToTableMap.js';
3
3
  import { MatchExpressionData } from './MatchExp.js';
4
- import { RecordQuery } from './RecordQuery.js';
5
4
  import { SQLBuilder } from './SQLBuilder.js';
6
- import { FilteredEntityManager } from './FilteredEntityManager.js';
7
- import { Record } from './RecordQueryAgent.js';
5
+ import { DeletionMembershipSnapshot, FilteredEntityManager } from './FilteredEntityManager.js';
6
+ import { Record, RecordOperationAgent } from './RecordQueryAgent.js';
8
7
  import { QueryExecutor } from './QueryExecutor.js';
9
8
  /**
10
9
  * DeletionExecutor - 删除操作执行器
@@ -21,13 +20,10 @@ export declare class DeletionExecutor {
21
20
  private map;
22
21
  private database;
23
22
  private queryExecutor;
24
- private helper;
23
+ private agent;
25
24
  private sqlBuilder;
26
25
  private filteredEntityManager;
27
- constructor(map: EntityToTableMap, database: Database, queryExecutor: QueryExecutor, filteredEntityManager: FilteredEntityManager, sqlBuilder: SQLBuilder, helper: {
28
- findRecords: (entityQuery: RecordQuery, queryName: string) => Promise<Record[]>;
29
- relocateCombinedRecordDataForLink: (linkName: string, matchExpression: MatchExpressionData, moveSource: boolean, events?: RecordMutationEvent[]) => Promise<Record[]>;
30
- });
26
+ constructor(map: EntityToTableMap, database: Database, queryExecutor: QueryExecutor, filteredEntityManager: FilteredEntityManager, sqlBuilder: SQLBuilder, agent: RecordOperationAgent);
31
27
  /**
32
28
  * 删除记录(主入口)
33
29
  */
@@ -36,11 +32,20 @@ export declare class DeletionExecutor {
36
32
  * 删除记录的同行数据
37
33
  * 这里会把同表的 reliance,以及 reliance 的 reliance 都删除掉
38
34
  */
39
- deleteRecordSameRowData(recordName: string, records: EntityIdRef[], events?: RecordMutationEvent[], inSameRowDataOp?: boolean): Promise<Record[]>;
35
+ deleteRecordSameRowData(recordName: string, records: EntityIdRef[], events?: RecordMutationEvent[], inSameRowDataOp?: boolean, deletionSnapshot?: DeletionMembershipSnapshot): Promise<Record[]>;
36
+ /**
37
+ * 删除记录同行数据的实际实现。
38
+ * 事件按结构分组返回:
39
+ * - linkAndCascadeEvents:关系(link)删除事件、同表 reliance 级联删除事件、filtered entity 删除事件。
40
+ * - recordDeleteEvents:当前批次 record 本身的删除事件(与传入 records 一一对应)。
41
+ * @param deletionSnapshot 删除前采集的成员资格快照(删除后无法再求值谓词)。
42
+ * @param ledgerEvents 整个操作共享的 events 数组(用于成员资格事件的账本判重)。
43
+ */
44
+ private deleteRecordSameRowDataGrouped;
40
45
  /**
41
46
  * 处理被删除记录的依赖关系
42
47
  */
43
- handleDeletedRecordReliance(recordName: string, record: EntityIdRef, events?: RecordMutationEvent[]): Promise<EntityIdRef>;
48
+ handleDeletedRecordReliance(recordName: string, record: EntityIdRef, events?: RecordMutationEvent[], deletionSnapshot?: DeletionMembershipSnapshot, ledgerEvents?: RecordMutationEvent[]): Promise<EntityIdRef>;
44
49
  /**
45
50
  * 删除非依赖的独立链接记录
46
51
  */
@@ -1 +1 @@
1
- {"version":3,"file":"DeletionExecutor.d.ts","sourceRoot":"","sources":["../../../src/storage/erstorage/DeletionExecutor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAY,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAE9D,OAAO,EAAe,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE5D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD;;;;;;;;;;GAUG;AACH,qBAAa,gBAAgB;IAKrB,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,aAAa;IAGrB,OAAO,CAAC,MAAM;IATlB,OAAO,CAAC,UAAU,CAAY;IAC9B,OAAO,CAAC,qBAAqB,CAAuB;gBAGxC,GAAG,EAAE,gBAAgB,EACrB,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,aAAa,EACpC,qBAAqB,EAAE,qBAAqB,EAC5C,UAAU,EAAE,UAAU,EACd,MAAM,EAAE;QACZ,WAAW,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAChF,iCAAiC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE,mBAAmB,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,mBAAmB,EAAE,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;KACxK;IAML;;OAEG;IACG,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,CAAC,EAAE,mBAAmB,EAAE,EAAE,eAAe,UAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAsCjJ;;;OAGG;IACG,uBAAuB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,MAAM,CAAC,EAAE,mBAAmB,EAAE,EAAE,eAAe,UAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAoIrJ;;OAEG;IACG,2BAA2B,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,mBAAmB,EAAE;IAUzG;;OAEG;IACG,mCAAmC,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,MAAM,CAAC,EAAE,mBAAmB,EAAE;IAgBpH;;OAEG;IACG,4BAA4B,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,MAAM,CAAC,EAAE,mBAAmB,EAAE;IAyB7G;;OAEG;IACG,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,UAAU,UAAQ,EAAE,MAAM,SAAK,EAAE,MAAM,CAAC,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAU/J"}
1
+ {"version":3,"file":"DeletionExecutor.d.ts","sourceRoot":"","sources":["../../../src/storage/erstorage/DeletionExecutor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAY,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAI9D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,0BAA0B,EAAE,qBAAqB,EAAyB,MAAM,4BAA4B,CAAC;AACtH,OAAO,KAAK,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD;;;;;;;;;;GAUG;AACH,qBAAa,gBAAgB;IAKrB,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,KAAK;IAVjB,OAAO,CAAC,UAAU,CAAY;IAC9B,OAAO,CAAC,qBAAqB,CAAuB;gBAGxC,GAAG,EAAE,gBAAgB,EACrB,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,aAAa,EACpC,qBAAqB,EAAE,qBAAqB,EAC5C,UAAU,EAAE,UAAU,EAEd,KAAK,EAAE,oBAAoB;IAMvC;;OAEG;IACG,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,CAAC,EAAE,mBAAmB,EAAE,EAAE,eAAe,UAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAkDjJ;;;OAGG;IACG,uBAAuB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,MAAM,CAAC,EAAE,mBAAmB,EAAE,EAAE,eAAe,UAAQ,EAAE,gBAAgB,CAAC,EAAE,0BAA0B,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IASpM;;;;;;;OAOG;YACW,8BAA8B;IAwH5C;;OAEG;IACG,2BAA2B,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,mBAAmB,EAAE,EAAE,gBAAgB,CAAC,EAAE,0BAA0B,EAAE,YAAY,CAAC,EAAE,mBAAmB,EAAE;IAU9L;;OAEG;IACG,mCAAmC,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,MAAM,CAAC,EAAE,mBAAmB,EAAE;IAgBpH;;OAEG;IACG,4BAA4B,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,MAAM,CAAC,EAAE,mBAAmB,EAAE;IAyB7G;;OAEG;IACG,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,UAAU,UAAQ,EAAE,MAAM,SAAK,EAAE,MAAM,CAAC,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAU/J"}
@@ -44,6 +44,7 @@ export type RecordMapItem = {
44
44
  filteredBy?: string[];
45
45
  isFilteredRelation?: boolean;
46
46
  baseRelationName?: string;
47
+ isMergedAbstract?: boolean;
47
48
  };
48
49
  type RecordMap = {
49
50
  [k: string]: RecordMapItem;
@@ -87,6 +88,8 @@ type TableAndAliasStack = {
87
88
  export declare class EntityToTableMap {
88
89
  data: MapData;
89
90
  aliasManager?: AliasManager | undefined;
91
+ private recordInfoCache;
92
+ private infoByPathCache;
90
93
  constructor(data: MapData, aliasManager?: AliasManager | undefined);
91
94
  getRecord(recordName: string): RecordMapItem;
92
95
  getAttributeAndSymmetricDirection(rawAttributeName: string): [string, 'source' | 'target' | undefined];
@@ -96,6 +99,7 @@ export declare class EntityToTableMap {
96
99
  getLinkInfo(recordName: string, rawAttribute: string): LinkInfo;
97
100
  getLinkInfoByName(linkName: string): LinkInfo;
98
101
  getInfoByPath(namePath: string[]): AttributeInfo | undefined;
102
+ private computeInfoByPath;
99
103
  getTableAndAliasStack(namePath: string[]): TableAndAliasStack;
100
104
  getTableAliasAndFieldName(namePath: string[], attributeName: string, dontShrink?: boolean): [string, string, string];
101
105
  findManyToManySymmetricPath(namePath: string[]): string[] | undefined;
@@ -103,6 +107,16 @@ export declare class EntityToTableMap {
103
107
  getReverseAttribute(entityName: string, attribute: string): string;
104
108
  getReversePath(namePath: string[]): string[];
105
109
  groupAttributes(entityName: string, attributeNames: string[]): [AttributeInfo[], AttributeInfo[], AttributeInfo[]];
110
+ /**
111
+ * 获取压缩后的路径。
112
+ *
113
+ * 把路径中 `attr.&.source` / `attr.&.target` 这种"先进入关系,再回到关系端点"的段压缩掉:
114
+ * 当端点(source/target)指向的实体与 `attr` 本身指向的实体相同时,`attr.&.<endpoint>` 与 `attr` 等价。
115
+ * 例如 `owner.&.target.name`(owner 指向关系的 target 实体)压缩为 `owner.name`;
116
+ * 而 `owner.&.source.name`(回到关系的另一端)无法压缩,原样保留。
117
+ *
118
+ * 该函数被 filtered relation 的 rebase(MatchExp.rebase)依赖。
119
+ */
106
120
  getShrinkedAttribute(entityName: string, attributeName: string): string;
107
121
  }
108
122
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"EntityToTableMap.d.ts","sourceRoot":"","sources":["../../../src/storage/erstorage/EntityToTableMap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EntityToTableMap.d.ts","sourceRoot":"","sources":["../../../src/storage/erstorage/EntityToTableMap.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { MatchExpressionData } from './MatchExp.js';
2
2
  import { EntityToTableMap } from './EntityToTableMap.js';
3
- import { RecordQueryAgent } from './RecordQueryAgent.js';
3
+ import { RecordQueryAgent, Record } from './RecordQueryAgent.js';
4
4
  import { RecordMutationEvent } from '../../runtime';
5
5
  export interface FilteredEntityDependency {
6
6
  filteredEntityName: string;
@@ -13,13 +13,49 @@ export interface FilteredEntityDependency {
13
13
  }[];
14
14
  }
15
15
  /**
16
- * 管理 filtered entity 的所有功能,包括依赖分析、跨实体查询和级联事件处理
16
+ * 一次变更操作的"前置成员资格快照"。
17
+ * 在真正执行变更之前采集(beforeMutation 阶段),变更之后与新的求值结果做 diff(settle 阶段)。
18
+ */
19
+ export type MembershipCheck = {
20
+ dependency: FilteredEntityDependency;
21
+ recordIds: string[];
22
+ beforeMemberIds: Set<string>;
23
+ };
24
+ /**
25
+ * 删除操作的前置成员资格快照:recordName(base)下每条待删除记录当前所属的 filtered entity 集合。
26
+ */
27
+ export type DeletionMembershipSnapshot = {
28
+ recordName: string;
29
+ membersByFilteredEntity: Map<string, Set<string>>;
30
+ recordsById: Map<string, Record>;
31
+ children: DeletionMembershipSnapshot[];
32
+ };
33
+ /**
34
+ * 让子 events 数组共享父 events 数组的账本。
35
+ * CAUTION 删除流程为了控制事件顺序会先把事件收集到局部数组(如 linkAndCascadeEvents),
36
+ * 再拼接进操作级 events。若不共享账本,嵌套钩子与外层结算会因为账本割裂而重复发出成员资格事件。
37
+ */
38
+ export declare function shareMembershipLedger(childEvents: RecordMutationEvent[] | undefined, parentEvents: RecordMutationEvent[] | undefined): void;
39
+ /**
40
+ * 管理 filtered entity 的所有功能:依赖分析、成员资格求值与成员资格事件(membership diff)。
41
+ *
42
+ * 架构原则(无状态设计):
43
+ * - 查询侧:谓词重写(resolvedMatchExpression,由 MatchExp 构造器统一合并),实时正确。
44
+ * - 事件侧:变更时的成员资格 diff——变更前采集受影响记录及其成员资格(beforeMutation),
45
+ * 变更后重新求值并对比(settle),差异即事件。谓词永远只由 SQL 求值(与查询侧同一真相源),
46
+ * 不在内存中模拟谓词语义(避免出现第二套判定引擎)。
47
+ * - 没有任何持久化的成员标记,因此不存在"标记与数据脱同步"的脏状态,也没有并发下的
48
+ * 读-改-写丢失更新问题。
17
49
  */
18
50
  export declare class FilteredEntityManager {
19
51
  private map;
20
52
  private queryAgent;
21
53
  private dependencies;
22
54
  constructor(map: EntityToTableMap, queryAgent: RecordQueryAgent);
55
+ /**
56
+ * 初始化所有 filtered entity 的依赖关系(每个 MapData 只计算一次)
57
+ */
58
+ private initializeDependencies;
23
59
  /**
24
60
  * 分析 filtered entity 的过滤条件,提取所有依赖的实体和路径
25
61
  */
@@ -33,17 +69,21 @@ export declare class FilteredEntityManager {
33
69
  */
34
70
  getAffectedFilteredEntities(entityName: string): FilteredEntityDependency[];
35
71
  /**
36
- * 清除所有依赖关系
72
+ * 清除所有依赖关系(同时失效按 MapData 共享的缓存)
37
73
  */
38
74
  clear(): void;
39
75
  /**
40
- * 根据依赖关系和变更的记录,查找所有受影响的源记录
76
+ * 根据依赖路径反向查询受影响的源记录 id(批量)。
77
+ * path 为空时受影响的就是变更记录本身。
78
+ */
79
+ private findAffectedSourceRecordIds;
80
+ /**
81
+ * 批量检查记录是否满足 filtered entity 的条件,返回满足条件的 id 集合。
82
+ * CAUTION 一次 membership 查询覆盖所有记录,避免每条记录一次查询的 N+1。
41
83
  */
42
- findAffectedSourceRecords(dependency: FilteredEntityDependency, changedEntityName: string, changedRecordId: string, changedAttributes: string[]): Promise<{
43
- id: string;
44
- }[]>;
84
+ checkRecordsMatchFilter(recordIds: string[], entityName: string, matchExpression: MatchExpressionData): Promise<Set<string>>;
45
85
  /**
46
- * 检查记录是否满足 filtered entity 的条件
86
+ * 检查单条记录是否满足 filtered entity 的条件
47
87
  */
48
88
  checkRecordMatchesFilter(recordId: string, entityName: string, matchExpression: MatchExpressionData): Promise<boolean>;
49
89
  /**
@@ -51,20 +91,45 @@ export declare class FilteredEntityManager {
51
91
  */
52
92
  getFilteredEntitiesForBase(baseEntityName: string): Array<{
53
93
  name: string;
54
- matchExpression: any;
94
+ matchExpression: MatchExpressionData;
55
95
  }>;
56
96
  /**
57
- * 更新记录的 filtered entity 标记(主入口方法)
97
+ * 变更前采集:找出 changedFields 影响到的所有依赖,确定受影响的 base 记录集合,
98
+ * 并记录它们变更前的成员资格。必须在真正执行变更之前调用。
99
+ *
100
+ * CAUTION 受影响记录集合只在 before 阶段确定一次。对深层路径依赖(reverse path 查询),
101
+ * 该查询走的是"未被本次变更修改的关系段",因此变更前后集合一致;对变更记录自身(path 为空)
102
+ * 集合就是入参。settle 阶段不重复反查。
103
+ */
104
+ collectMembershipChecks(entityName: string, recordIds: string[], changedFields: string[] | undefined, events?: RecordMutationEvent[]): Promise<MembershipCheck[]>;
105
+ /**
106
+ * 关系(link)变更前采集:关系的建立/解除会改变两端实体的成员资格。
107
+ * endpoints 直接给出两端记录 id(不需要反查变更的关系段本身)。
108
+ */
109
+ collectLinkMembershipChecks(linkName: string, endpoints: {
110
+ sourceIds?: (string | undefined)[];
111
+ targetIds?: (string | undefined)[];
112
+ }, events?: RecordMutationEvent[]): Promise<MembershipCheck[]>;
113
+ /**
114
+ * 变更后结算:重新求值成员资格,与 before 快照(或账本中的最新已知状态)对比,
115
+ * 差异生成 create/delete 事件。
116
+ */
117
+ settleMembershipChecks(checks: MembershipCheck[], events?: RecordMutationEvent[]): Promise<void>;
118
+ /**
119
+ * 创建钩子:新记录的成员资格(before 恒为非成员),满足条件即产生 create 事件。
120
+ * 在记录(含其嵌套关联与关系)全部创建完成后调用。
121
+ */
122
+ handleRecordCreation(recordName: string, recordId: string, fullRecord: Record, events?: RecordMutationEvent[]): Promise<void>;
123
+ /**
124
+ * 删除前采集:待删除记录(含同表 reliance 树)当前所属的 filtered entity 集合。
125
+ * 必须在任何物理删除发生之前调用(谓词求值需要行与关系仍然存在)。
58
126
  */
59
- updateFilteredEntityFlags(entityName: string, recordId: string, events?: RecordMutationEvent[], originalRecord?: any, isCreation?: boolean, changedFields?: string[]): Promise<void>;
60
- isFlagEqual(flag1: {
61
- [key: string]: boolean;
62
- }, flag2: {
63
- [key: string]: boolean;
64
- }): boolean;
127
+ collectDeletionMemberships(recordName: string, records: Record[], events?: RecordMutationEvent[]): Promise<DeletionMembershipSnapshot | undefined>;
65
128
  /**
66
- * 更新单个依赖关系的 filtered entity 标记
129
+ * 删除结算:按删除前快照为每条记录的每个所属 filtered entity 产生 delete 事件。
130
+ * 事件 push 到 targetEvents(调用方控制排序位置:filtered delete 事件先于记录本身的 delete 事件),
131
+ * 账本仍然按 ledgerEvents(整个操作共享的 events 数组)判重。
67
132
  */
68
- private updateSingleFilteredEntityFlag;
133
+ settleDeletionMemberships(snapshot: DeletionMembershipSnapshot | undefined, recordName: string, records: Record[], targetEvents: RecordMutationEvent[], ledgerEvents?: RecordMutationEvent[]): void;
69
134
  }
70
135
  //# sourceMappingURL=FilteredEntityManager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FilteredEntityManager.d.ts","sourceRoot":"","sources":["../../../src/storage/erstorage/FilteredEntityManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAuB,MAAM,eAAe,CAAA;AAExE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAExD,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAE9C,MAAM,WAAW,wBAAwB;IACrC,kBAAkB,EAAE,MAAM,CAAA;IAC1B,cAAc,EAAE,MAAM,CAAA;IACtB,eAAe,EAAE,mBAAmB,CAAA;IACpC,YAAY,EAAE;QACV,UAAU,EAAE,MAAM,CAAA;QAClB,IAAI,EAAE,MAAM,EAAE,CAAA;QACd,UAAU,EAAE,MAAM,EAAE,CAAA;KACvB,EAAE,CAAA;CACN;AAED;;GAEG;AACH,qBAAa,qBAAqB;IAGlB,OAAO,CAAC,GAAG;IAAoB,OAAO,CAAC,UAAU;IAF7D,OAAO,CAAC,YAAY,CAAqD;gBAErD,GAAG,EAAE,gBAAgB,EAAU,UAAU,EAAE,gBAAgB;IAI/E;;OAEG;IACH,mBAAmB,CAAC,kBAAkB,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,eAAe,EAAE,mBAAmB,GAAG,wBAAwB;IA4BvI;;OAEG;IACH,OAAO,CAAC,iCAAiC;IAuEzC;;OAEG;IACH,2BAA2B,CAAC,UAAU,EAAE,MAAM,GAAG,wBAAwB,EAAE;IAI3E;;OAEG;IACH,KAAK;IAML;;OAEG;IACG,yBAAyB,CAC3B,UAAU,EAAE,wBAAwB,EACpC,iBAAiB,EAAE,MAAM,EACzB,eAAe,EAAE,MAAM,EACvB,iBAAiB,EAAE,MAAM,EAAE,GAC5B,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAuC5B;;OAEG;IACG,wBAAwB,CAC1B,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,mBAAmB,GACrC,OAAO,CAAC,OAAO,CAAC;IAwBnB;;OAEG;IACH,0BAA0B,CAAC,cAAc,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,GAAG,CAAA;KAAE,CAAC;IAmCjG;;OAEG;IACG,yBAAyB,CAC3B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,MAAM,GAAE,mBAAmB,EAAO,EAClC,cAAc,CAAC,EAAE,GAAG,EACpB,UAAU,CAAC,EAAE,OAAO,EACpB,aAAa,CAAC,EAAE,MAAM,EAAE,GACzB,OAAO,CAAC,IAAI,CAAC;IAyEhB,WAAW,CAAC,KAAK,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,EAAE,KAAK,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,GAAG,OAAO;IAO1F;;OAEG;YACW,8BAA8B;CA4E/C"}
1
+ {"version":3,"file":"FilteredEntityManager.d.ts","sourceRoot":"","sources":["../../../src/storage/erstorage/FilteredEntityManager.ts"],"names":[],"mappings":"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"}
@@ -40,7 +40,7 @@ export declare class MatchExp {
40
40
  getFinalFieldName(matchAttributePath: string[]): [string, string];
41
41
  getReferenceFieldValue(valueStr: string): string;
42
42
  getFinalFieldValue(isReferenceValue: boolean, key: string, value: [string, any], fieldName: string, fieldType: string | undefined, p: PlaceholderGen, db?: Database): [string, unknown[]];
43
- buildFieldMatchExpression(p: PlaceholderGen, db?: Database): BoolExp<FieldMatchAtom> | null;
43
+ buildFieldMatchExpression(p: PlaceholderGen, db?: Database, fnMatchHandler?: (atomData: FieldMatchAtom) => FieldMatchAtom): BoolExp<FieldMatchAtom> | null;
44
44
  and(condition: MatchAtom | MatchExp): MatchExp;
45
45
  rebase(attributeName: string): MatchExp;
46
46
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"MatchExp.d.ts","sourceRoot":"","sources":["../../../src/storage/erstorage/MatchExp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAwC,MAAM,OAAO,CAAC;AACrE,OAAO,EAAC,gBAAgB,EAAkB,MAAM,uBAAuB,CAAC;AAExE,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAC,QAAQ,EAAC,MAAM,UAAU,CAAC;AAClC,OAAO,EAAC,cAAc,EAAC,MAAM,iBAAiB,CAAC;AAE/C,MAAM,MAAM,SAAS,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAE,CAAA;AACzF,MAAM,MAAM,mBAAmB,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;AAEpD,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG;IACrC,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,EAAE,CAAA;IAEvB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAA;AAED,qBAAa,QAAQ;IA+DsB,GAAG,EAAE,gBAAgB;IAAqC,iBAAiB,CAAC,EAAE,MAAM;IAAS,YAAY,CAAC,EAAE,OAAO;WA9D5I,IAAI,CAAC,SAAS,EAAE,SAAS;WAQzB,UAAU,CAAC,SAAS,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE;WAYlD,SAAS,CAAC,UAAU,EAAE,SAAS,EAAE;IAQ/C;;;OAGG;WACW,YAAY,CAAC,UAAU,EAAE,mBAAmB,GAAG,MAAM,EAAE,EAAE;IA2BhE,eAAe,EAAE,eAAe,CAAA;IAChC,IAAI,CAAC,EAAE,mBAAmB,CAAA;IAC1B,UAAU,EAAE,MAAM,CAAA;gBACb,UAAU,EAAE,MAAM,EAAS,GAAG,EAAE,gBAAgB,EAAE,IAAI,CAAC,EAAE,mBAAmB,EAAS,iBAAiB,CAAC,EAAE,MAAM,YAAA,EAAS,YAAY,CAAC,EAAE,OAAO,YAAA;IAgB1J,uBAAuB,CAAC,SAAS,EAAE,mBAAmB,GAAG,mBAAmB;IA+C5E,cAAc,CAAC,SAAS,EAAE,mBAAmB,EAAE,eAAe,EAAE,eAAe;IA2C/E,iBAAiB,CAAC,kBAAkB,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAKjE,sBAAsB,CAAC,QAAQ,EAAE,MAAM;IASvC,kBAAkB,CAAC,gBAAgB,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,SAAS,EAAC,MAAM,EAAE,SAAS,EAAE,MAAM,GAAC,SAAS,EAAE,CAAC,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;IAqDtL,yBAAyB,CAAC,CAAC,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI;IAsF3F,GAAG,CAAC,SAAS,EAAE,SAAS,GAAC,QAAQ,GAAG,QAAQ;IAa5C,MAAM,CAAC,aAAa,EAAE,MAAM;IA2D5B;;;OAGG;IACH,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IASjC;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,gBAAgB,GAAG,QAAQ;CAUlF"}
1
+ {"version":3,"file":"MatchExp.d.ts","sourceRoot":"","sources":["../../../src/storage/erstorage/MatchExp.ts"],"names":[],"mappings":"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"}
@@ -1,25 +1,39 @@
1
1
  import { EntityInstance, RelationInstance } from '../../core';
2
2
  export type MergedItem = EntityInstance | RelationInstance;
3
3
  export type InputItem = EntityInstance | RelationInstance;
4
- export interface MergedItemConfig<T extends MergedItem> {
5
- name: string;
6
- inputItems: T[];
7
- inputFieldName: string;
8
- }
9
- /**
10
- * 统一处理 merged entity 和 merged relation 的处理器
11
- */
12
- export declare function buildEntityTree(entities: EntityInstance[]): Map<string, string[]>;
13
- export declare function buildRelationTree(relations: RelationInstance[]): Map<string, string[]>;
14
4
  /**
15
- * 统一处理所有 merged items (entities 和 relations)
5
+ * merged entity/relation 的判别列(discriminator column)名。
6
+ *
7
+ * merged item 本质是单表继承(Single Table Inheritance):所有 input 的记录存放在同一张
8
+ * 物理表中,用一个字符串判别列记录"记录以哪个具体类型创建"。
9
+ * - 记录创建时 `__type` = 创建所用实体的具体类型名(filtered entity 取其 root base 名)。
10
+ * - 普通 input 的成员条件:`__type = 'X'`(等值匹配,可索引,无跨 driver JSON 兼容问题)。
11
+ * - filtered input 的成员条件:`__type = '根 base 名' AND 谓词`(谓词声明式,随数据变化自然进出)。
12
+ * - merged item 的成员条件:各 input 成员条件的 OR。
16
13
  */
17
- export declare function processMergedItems(entities: EntityInstance[], relations: RelationInstance[]): {
14
+ export declare const MERGED_TYPE_ATTR = "__type";
15
+ export interface ProcessMergedItemsResult {
18
16
  entities: EntityInstance[];
19
17
  relations: RelationInstance[];
20
- };
18
+ /**
19
+ * 抽象名集合:不允许以这些名字直接创建记录。
20
+ * 包括所有 merged item 名、以 merged item 为(传递)base 的 filtered item 名,
21
+ * 以及内部生成的虚拟 base 名。
22
+ */
23
+ abstractNames: Set<string>;
24
+ }
25
+ /**
26
+ * 统一处理所有 merged items (entities 和 relations)。
27
+ *
28
+ * merged item 被"编译"为 filtered item 视图:
29
+ * 1. 物理 base(merged item 自身或虚拟 base)持有合并后的 properties + `__type` 判别列。
30
+ * 2. 每个 input 变成物理 base 上的 filtered item,成员条件用 `__type` 表达。
31
+ * 3. filtered input 的 root base(如 CustomerBase)同样 rebase 为 filtered item,保持可查询性。
32
+ * 之后查询重写与事件(membership diff)完全复用 filtered entity 的统一机制,无需独立代码路径。
33
+ */
34
+ export declare function processMergedItems(entities: EntityInstance[], relations: RelationInstance[]): ProcessMergedItemsResult;
21
35
  /**
22
- * input item 创建 filtered item
36
+ * 构建 base/input 树(name -> 直接子孙 names),用于 mergeProperties 的 defaultValue 分发。
23
37
  */
24
- export declare function createFilteredItemFromInput<T extends MergedItem>(inputItem: T, baseItem: T, inputFieldName: string): [T, T];
38
+ export declare function buildItemTree(items: MergedItem[]): Map<string, string[]>;
25
39
  //# sourceMappingURL=MergedItemProcessor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MergedItemProcessor.d.ts","sourceRoot":"","sources":["../../../src/storage/erstorage/MergedItemProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAA8D,MAAM,OAAO,CAAC;AAIrH,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG,gBAAgB,CAAC;AAC3D,MAAM,MAAM,SAAS,GAAG,cAAc,GAAG,gBAAgB,CAAC;AAE1D,MAAM,WAAW,gBAAgB,CAAC,CAAC,SAAS,UAAU;IAClD,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,CAAC,EAAE,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,cAAc,EAAE,yBAYrD;AAEL,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,gBAAgB,EAAE,yBAmB1D;AACL;;GAEG;AACH,wBAAgB,kBAAkB,CAC1B,QAAQ,EAAE,cAAc,EAAE,EAC1B,SAAS,EAAE,gBAAgB,EAAE,GAC9B;IAAE,QAAQ,EAAE,cAAc,EAAE,CAAC;IAAC,SAAS,EAAE,gBAAgB,EAAE,CAAA;CAAE,CAsB/D;AA+XL;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,CAAC,SAAS,UAAU,EACxD,SAAS,EAAE,CAAC,EACZ,QAAQ,EAAE,CAAC,EACX,cAAc,EAAE,MAAM,GACvB,CAAC,CAAC,EAAE,CAAC,CAAC,CAgDR"}
1
+ {"version":3,"file":"MergedItemProcessor.d.ts","sourceRoot":"","sources":["../../../src/storage/erstorage/MergedItemProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAA8D,MAAM,OAAO,CAAC;AAGrH,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG,gBAAgB,CAAC;AAC3D,MAAM,MAAM,SAAS,GAAG,cAAc,GAAG,gBAAgB,CAAC;AAE1D;;;;;;;;;GASG;AACH,eAAO,MAAM,gBAAgB,WAAW,CAAC;AAEzC,MAAM,WAAW,wBAAwB;IACrC,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B;;;;OAIG;IACH,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC9B;AAgFD;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAC9B,QAAQ,EAAE,cAAc,EAAE,EAC1B,SAAS,EAAE,gBAAgB,EAAE,GAC9B,wBAAwB,CAoC1B;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,EAAE,yBAoBhD"}
@@ -40,16 +40,38 @@ export declare class QueryExecutor {
40
40
  /**
41
41
  * 结构化原始返回结果
42
42
  * @param rawReturns 数据库返回的原始结果
43
- * @param JSONFields JSON 字段列表
43
+ * @param recordName 根记录名(用于解析各级路径上的 JSON 字段)
44
44
  * @param fieldAliasMap 字段别名映射
45
45
  * @returns 结构化的 Record 数组
46
46
  */
47
47
  private structureRawReturns;
48
+ /**
49
+ * 去除完全相同的原始行(等价于 SQL DISTINCT)
50
+ * 用于消除 match 中出现 x:n 路径时 LEFT JOIN 产生的 fan-out 重复。
51
+ * 因为 SELECT 始终包含各级记录的 id,真正不同的记录必然有列差异,所以完全相同的行一定是重复行。
52
+ */
53
+ private dedupeIdenticalRows;
48
54
  /**
49
55
  * 查找记录(主查询方法)
50
56
  * CAUTION findRelatedRecords 中的递归调用会使得 includeRelationData 变为 true
51
57
  */
52
58
  findRecords(entityQuery: RecordQuery, queryName?: string, recordQueryRef?: RecordQueryRef, context?: RecursiveContext, forUpdate?: boolean): Promise<Record[]>;
59
+ /**
60
+ * 判断某个 x:n 关联查询能否按父 id 集合批量执行。
61
+ * 限制条件:
62
+ * - 至少两条父记录(单条时批量没有收益)。
63
+ * - 没有递归语义(父查询 label / 子查询 label/goto 需要 per-record 的递归上下文)。
64
+ * - 子查询没有 limit/offset(它们是 per-parent 语义,合并后无法保证)。
65
+ * - 关系是 1:n 且非对称:反向是 x:1,可以通过一次 JOIN 拿到父 id 做分组;
66
+ * n:n 的反向仍是 x:n,批量会引入 fan-out 与嵌套 N+1,保持逐条查询。
67
+ */
68
+ private canBatchXToManyQuery;
69
+ /**
70
+ * 按父 id 集合批量查询 x:n(1:n)关联记录,并按反向属性分组回填到各父记录上。
71
+ * 与 findXToManyRelatedRecords 的逐条语义保持一致(包括关系数据 & 的处理),
72
+ * 只是把"每个父记录一次查询"合并为"每批父记录一次查询"。
73
+ */
74
+ findXToManyRelatedRecordsBatched(recordName: string, attributeName: string, parentRecords: Record[], relatedRecordQuery: RecordQuery, recordQueryRef: RecordQueryRef, context: RecursiveContext): Promise<void>;
53
75
  /**
54
76
  * 补全 x:1 遗留记录(x:1 主干上的 x:n 枝干)
55
77
  */
@@ -1 +1 @@
1
- {"version":3,"file":"QueryExecutor.d.ts","sourceRoot":"","sources":["../../../src/storage/erstorage/QueryExecutor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AACnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,WAAW,EAAgC,MAAM,kBAAkB,CAAA;AAE5E,OAAO,EAAE,gBAAgB,EAAc,MAAM,4BAA4B,CAAA;AAMzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAEnD;;;;;GAKG;AACH,qBAAa,cAAc;IAGJ,WAAW,EAAE,WAAW;IAFpC,iBAAiB,2BAAiC;gBAEtC,WAAW,EAAE,WAAW;IAK3C,gCAAgC,CAAC,WAAW,EAAE,WAAW;IASzD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW;IAInC,GAAG,CAAC,GAAG,EAAE,MAAM;CAGlB;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,aAAa;IAElB,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,UAAU;gBAFV,GAAG,EAAE,gBAAgB,EACrB,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,UAAU;IAGlC;;;;;;OAMG;IACH,OAAO,CAAC,mBAAmB;IAqB3B;;;OAGG;IACG,WAAW,CACb,WAAW,EAAE,WAAW,EACxB,SAAS,SAAK,EACd,cAAc,CAAC,EAAE,cAAc,EAC/B,OAAO,GAAE,gBAAmD,EAC5D,SAAS,UAAQ,GAClB,OAAO,CAAC,MAAM,EAAE,CAAC;IAkIpB;;OAEG;IACG,6BAA6B,CAC/B,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,MAAM,EAAE,EACjB,cAAc,EAAE,cAAc,EAC9B,OAAO,EAAE,gBAAgB;IAuD7B;;;OAGG;IACG,yBAAyB,CAC3B,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,EAChB,kBAAkB,EAAE,WAAW,EAC/B,cAAc,EAAE,cAAc,EAC9B,OAAO,EAAE,gBAAgB;IAmF7B;;OAEG;IACG,QAAQ,CACV,UAAU,EAAE,MAAM,EAClB,gBAAgB,EAAE,MAAM,EACxB,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC;CA0CnC"}
1
+ {"version":3,"file":"QueryExecutor.d.ts","sourceRoot":"","sources":["../../../src/storage/erstorage/QueryExecutor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AACnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,WAAW,EAAgC,MAAM,kBAAkB,CAAA;AAE5E,OAAO,EAAE,gBAAgB,EAAc,MAAM,4BAA4B,CAAA;AAMzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAEnD;;;;;GAKG;AACH,qBAAa,cAAc;IAGJ,WAAW,EAAE,WAAW;IAFpC,iBAAiB,2BAAiC;gBAEtC,WAAW,EAAE,WAAW;IAK3C,gCAAgC,CAAC,WAAW,EAAE,WAAW;IASzD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW;IAInC,GAAG,CAAC,GAAG,EAAE,MAAM;CAGlB;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,aAAa;IAElB,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,UAAU;gBAFV,GAAG,EAAE,gBAAgB,EACrB,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,UAAU;IAGlC;;;;;;OAMG;IACH,OAAO,CAAC,mBAAmB;IA8C3B;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAc3B;;;OAGG;IACG,WAAW,CACb,WAAW,EAAE,WAAW,EACxB,SAAS,SAAK,EACd,cAAc,CAAC,EAAE,cAAc,EAC/B,OAAO,GAAE,gBAAmD,EAC5D,SAAS,UAAQ,GAClB,OAAO,CAAC,MAAM,EAAE,CAAC;IAsJpB;;;;;;;;OAQG;IACH,OAAO,CAAC,oBAAoB;IAW5B;;;;OAIG;IACG,gCAAgC,CAClC,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,MAAM,EAAE,EACvB,kBAAkB,EAAE,WAAW,EAC/B,cAAc,EAAE,cAAc,EAC9B,OAAO,EAAE,gBAAgB,GAC1B,OAAO,CAAC,IAAI,CAAC;IAyFhB;;OAEG;IACG,6BAA6B,CAC/B,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,MAAM,EAAE,EACjB,cAAc,EAAE,cAAc,EAC9B,OAAO,EAAE,gBAAgB;IAuD7B;;;OAGG;IACG,yBAAyB,CAC3B,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,EAChB,kBAAkB,EAAE,WAAW,EAC/B,cAAc,EAAE,cAAc,EAC9B,OAAO,EAAE,gBAAgB;IAmF7B;;OAEG;IACG,QAAQ,CACV,UAAU,EAAE,MAAM,EAClB,gBAAgB,EAAE,MAAM,EACxB,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC;CA0CnC"}
@@ -28,6 +28,7 @@ export declare class RecordInfo {
28
28
  get filteredBy(): RecordInfo[] | undefined;
29
29
  get isFilteredEntity(): boolean | undefined;
30
30
  get isFilteredRelation(): boolean | undefined;
31
+ get isMergedAbstract(): boolean | undefined;
31
32
  get baseRelationName(): string | undefined;
32
33
  get resolvedBaseRecordName(): string | undefined;
33
34
  get resolvedMatchExpression(): MatchExpressionData | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"RecordInfo.d.ts","sourceRoot":"","sources":["../../../src/storage/erstorage/RecordInfo.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAC,gBAAgB,EAAmB,aAAa,EAAiB,MAAM,uBAAuB,CAAC;AAEvG,qBAAa,UAAU;IAGA,IAAI,EAAE,MAAM;IAAS,GAAG,EAAE,gBAAgB;IAF7D,IAAI,EAAE,aAAa,CAAA;gBAEA,IAAI,EAAE,MAAM,EAAS,GAAG,EAAE,gBAAgB;IAI7D,IAAI,UAAU,wBAEb;IAED,IAAI,eAAe,oBAIlB;IAED,IAAI,KAAK,WAER;IAED,IAAI,OAAO,uBAEV;IAED,IAAI,UAAU,aAIb;IAED,IAAI,aAAa,IAAI,MAAM,EAAE,CAsB5B;IAED,IAAI,sBAAsB,oBAIzB;IACD,IAAI,SAAS,IAAI,MAAM,EAAE,CAExB;IAGD,IAAI,uBAAuB,oBAO1B;IAED,IAAI,sBAAsB,oBAQzB;IACD,IAAI,8BAA8B,oBAMjC;IAGD,IAAI,QAAQ,IAAI,aAAa,EAAE,CAM9B;IAED,IAAI,mBAAmB,IAAI,aAAa,EAAE,CAIzC;IAED,IAAI,sBAAsB,IAAI,aAAa,EAAE,CAI5C;IAED,IAAI,iBAAiB,IAAI,aAAa,EAAE,CAIvC;IAED,IAAI,eAAe,oBAMlB;IAED,gBAAgB,CAAC,SAAS,EAAE,MAAM;IAIlC,IAAI,cAAc,uBAEjB;IAED,IAAI,eAAe,4DAElB;IAED,IAAI,UAAU,6BAEb;IAED,IAAI,gBAAgB,wBAEnB;IAED,IAAI,kBAAkB,wBAErB;IAED,IAAI,gBAAgB,uBAEnB;IAED,IAAI,sBAAsB,uBAEzB;IAED,IAAI,uBAAuB,4DAE1B;CACJ"}
1
+ {"version":3,"file":"RecordInfo.d.ts","sourceRoot":"","sources":["../../../src/storage/erstorage/RecordInfo.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAC,gBAAgB,EAAmB,aAAa,EAAiB,MAAM,uBAAuB,CAAC;AAEvG,qBAAa,UAAU;IAGA,IAAI,EAAE,MAAM;IAAS,GAAG,EAAE,gBAAgB;IAF7D,IAAI,EAAE,aAAa,CAAA;gBAEA,IAAI,EAAE,MAAM,EAAS,GAAG,EAAE,gBAAgB;IAI7D,IAAI,UAAU,wBAEb;IAED,IAAI,eAAe,oBAIlB;IAED,IAAI,KAAK,WAER;IAED,IAAI,OAAO,uBAEV;IAED,IAAI,UAAU,aAIb;IAED,IAAI,aAAa,IAAI,MAAM,EAAE,CAsB5B;IAED,IAAI,sBAAsB,oBAIzB;IACD,IAAI,SAAS,IAAI,MAAM,EAAE,CAExB;IAGD,IAAI,uBAAuB,oBAO1B;IAED,IAAI,sBAAsB,oBAQzB;IACD,IAAI,8BAA8B,oBAMjC;IAGD,IAAI,QAAQ,IAAI,aAAa,EAAE,CAM9B;IAED,IAAI,mBAAmB,IAAI,aAAa,EAAE,CAIzC;IAED,IAAI,sBAAsB,IAAI,aAAa,EAAE,CAI5C;IAED,IAAI,iBAAiB,IAAI,aAAa,EAAE,CAIvC;IAED,IAAI,eAAe,oBAMlB;IAED,gBAAgB,CAAC,SAAS,EAAE,MAAM;IAIlC,IAAI,cAAc,uBAEjB;IAED,IAAI,eAAe,4DAElB;IAED,IAAI,UAAU,6BAEb;IAED,IAAI,gBAAgB,wBAEnB;IAED,IAAI,kBAAkB,wBAErB;IAED,IAAI,gBAAgB,wBAEnB;IAED,IAAI,gBAAgB,uBAEnB;IAED,IAAI,sBAAsB,uBAEzB;IAED,IAAI,uBAAuB,4DAE1B;CACJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"RecordQuery.d.ts","sourceRoot":"","sources":["../../../src/storage/erstorage/RecordQuery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAE,mBAAmB,EAAC,MAAM,eAAe,CAAC;AAC5D,OAAO,EAAC,cAAc,EAAE,kBAAkB,EAAC,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAC,QAAQ,EAAE,YAAY,EAAC,MAAM,eAAe,CAAC;AACrD,OAAO,EAAC,gBAAgB,EAAC,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAC,aAAa,EAAC,MAAM,oBAAoB,CAAC;AAEjD,OAAO,EAAC,gBAAgB,EAAC,MAAM,4BAA4B,CAAC;AAE5D,MAAM,MAAM,eAAe,GAAG;IAC1B,eAAe,CAAC,EAAE,mBAAmB,CAAC;IACtC,cAAc,CAAC,EAAE,kBAAkB,CAAC;IACpC,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAG,CAAC,IAAI,EAAC,gBAAgB,KAAK,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAA;CAC7D,CAAA;AAGD,qBAAa,WAAW;IAgDT,UAAU,EAAE,MAAM;IAClB,GAAG,EAAE,gBAAgB;IACrB,eAAe,EAAE,QAAQ;IACzB,cAAc,EAAE,cAAc;IAC9B,QAAQ,EAAE,QAAQ;IAClB,iBAAiB,CAAC,EAAE,MAAM;IAC1B,YAAY,CAAC,EAAC,MAAM;IACpB,aAAa,CAAC,EAAC,MAAM;IACrB,gBAAgB,CAAC,EAAC,OAAO;IACzB,SAAS;IACT,KAAK,CAAC,EAAE,MAAM;IACd,IAAI,CAAC,EAAE,MAAM;IACb,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,gBAAgB,KAAK,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAE9D,KAAK,CAAC,EAAE,MAAM;IA7DzB,MAAM,CAAC,MAAM,CACT,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,gBAAgB,EACrB,IAAI,EAAE,eAAe,EACrB,iBAAiB,CAAC,EAAE,MAAM,EAC1B,YAAY,CAAC,EAAC,MAAM,EACpB,aAAa,CAAC,EAAC,MAAM,EACrB,gBAAgB,CAAC,EAAE,OAAO,EAC1B,SAAS,UAAQ,EACjB,KAAK,CAAC,EAAE,MAAM;gBAsCP,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,gBAAgB,EACrB,eAAe,EAAE,QAAQ,EACzB,cAAc,EAAE,cAAc,EAC9B,QAAQ,EAAE,QAAQ,EAClB,iBAAiB,CAAC,EAAE,MAAM,YAAA,EAC1B,YAAY,CAAC,EAAC,MAAM,YAAA,EACpB,aAAa,CAAC,EAAC,MAAM,YAAA,EACrB,gBAAgB,CAAC,EAAC,OAAO,YAAA,EACzB,SAAS,UAAQ,EACjB,KAAK,CAAC,EAAE,MAAM,YAAA,EACd,IAAI,CAAC,EAAE,MAAM,YAAA,EACb,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,gBAAgB,KAAK,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,aAAA,EAE9D,KAAK,CAAC,EAAE,MAAM,YAAA;IAEzB,OAAO,IAAI,eAAe;IAS1B,MAAM,CAAC,EAAE,eAAe,EAAE,cAAc,EAAE,QAAQ,EAAE,EAAG;QAAE,eAAe,CAAC,EAAE,QAAQ,CAAC;QAAC,cAAc,CAAC,EAAE,cAAc,CAAC;QAAC,QAAQ,CAAC,EAAE,QAAQ,CAAA;KAAC;CAiB7I;AAGD,qBAAa,eAAe;IAOb,UAAU,EAAE,MAAM;IAClB,GAAG,EAAE,gBAAgB;IACrB,YAAY,CAAC,EAAC,MAAM;IACpB,aAAa,CAAC,EAAE,MAAM;IACtB,IAAI,CAAC,EAAE;QAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE;YAAC,CAAC,CAAC,EAAC,MAAM,GAAG,eAAe,CAAA;SAAC,CAAA;KAAC;IACjE,MAAM,CAAC,EAAE,eAAe;IACxB,mBAAmB,CAAC,EAAG,eAAe;IAZ1C,MAAM,EAAE,MAAM,EAAE,CAAI;IACpB,OAAO,EAAE;QAAC,CAAC,CAAC,EAAC,MAAM,GAAG,eAAe,CAAA;KAAC,CAAA;IACtC,IAAI,CAAC,EAAE,aAAa,CAAA;gBAIhB,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,gBAAgB,EACrB,YAAY,CAAC,EAAC,MAAM,YAAA,EACpB,aAAa,CAAC,EAAE,MAAM,YAAA,EACtB,IAAI,CAAC,EAAE;QAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE;YAAC,CAAC,CAAC,EAAC,MAAM,GAAG,eAAe,CAAA;SAAC,CAAA;KAAC,YAAA,EACjE,MAAM,CAAC,EAAE,eAAe,YAAA,EACxB,mBAAmB,CAAC,EAAG,eAAe,YAAA;IAUjD,QAAQ,CAAC,QAAQ,EAAC,MAAM,EAAE;IAgB1B,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,eAAe;IAyBvD,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,EAAC,eAAe,KAAK,IAAI;IAGlD,WAAW;IAGX,KAAK,CAAC,SAAS,EAAE,eAAe,GAAG,eAAe;IA0BlD,OAAO;;;CAgBV;AAED,eAAO,MAAM,WAAW,MAAM,CAAA;AAC9B,eAAO,MAAM,eAAe,MAAM,CAAA"}
1
+ {"version":3,"file":"RecordQuery.d.ts","sourceRoot":"","sources":["../../../src/storage/erstorage/RecordQuery.ts"],"names":[],"mappings":"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"}
@@ -9,7 +9,28 @@ import { RecordQueryRef } from './QueryExecutor.js';
9
9
  export type Record = EntityIdRef & {
10
10
  [k: string]: any;
11
11
  };
12
- export declare class RecordQueryAgent {
12
+ /**
13
+ * executor 之间互相回调所依赖的聚合操作契约。
14
+ *
15
+ * CAUTION CreationExecutor/UpdateExecutor/DeletionExecutor 与 RecordQueryAgent 本质上是同一个聚合,
16
+ * 按文件拆分只是物理组织。这里用显式接口取代原先手工拼装的函数字典(那种写法依赖
17
+ * "恰好方法名匹配"的隐式约定),使循环回调成为受类型约束的显式契约。
18
+ */
19
+ export interface RecordOperationAgent {
20
+ findRecords(entityQuery: RecordQuery, queryName?: string): Promise<Record[]>;
21
+ createRecord(newEntityData: NewRecordData, queryName?: string, events?: RecordMutationEvent[]): Promise<EntityIdRef>;
22
+ createRecordDependency(newRecordData: NewRecordData, events?: RecordMutationEvent[]): Promise<NewRecordData>;
23
+ updateRecord(entityName: string, matchExpressionData: MatchExpressionData, newEntityData: NewRecordData, events?: RecordMutationEvent[]): Promise<Record[]>;
24
+ unlink(linkName: string, matchExpressionData: MatchExpressionData, moveSource?: boolean, reason?: string, events?: RecordMutationEvent[]): Promise<Record[]>;
25
+ deleteRecordSameRowData(recordName: string, records: EntityIdRef[], events?: RecordMutationEvent[], inSameRowDataOp?: boolean): Promise<Record[]>;
26
+ addLinkFromRecord(entity: string, attribute: string, entityId: string, relatedEntityId: string, attributes?: RawEntityData, events?: RecordMutationEvent[]): Promise<EntityIdRef>;
27
+ preprocessSameRowData(newEntityData: NewRecordData, isUpdate?: boolean, events?: RecordMutationEvent[], oldRecord?: Record): Promise<NewRecordData>;
28
+ flashOutCombinedRecordsAndMergedLinks(newEntityData: NewRecordData, events?: RecordMutationEvent[], reason?: string): Promise<{
29
+ [k: string]: RawEntityData;
30
+ }>;
31
+ relocateCombinedRecordDataForLink(linkName: string, matchExpressionData: MatchExpressionData, moveSource?: boolean, events?: RecordMutationEvent[]): Promise<Record[]>;
32
+ }
33
+ export declare class RecordQueryAgent implements RecordOperationAgent {
13
34
  map: EntityToTableMap;
14
35
  database: Database;
15
36
  getPlaceholder: () => PlaceholderGen;
@@ -20,10 +41,6 @@ export declare class RecordQueryAgent {
20
41
  private deletionExecutor;
21
42
  private updateExecutor;
22
43
  constructor(map: EntityToTableMap, database: Database);
23
- /**
24
- * 初始化所有 filtered entity 的依赖关系
25
- */
26
- private initializeFilteredEntityDependencies;
27
44
  /**
28
45
  * 查找记录(主查询方法)- 委托给 QueryExecutor
29
46
  * CAUTION findRelatedRecords 中的递归调用会使得 includeRelationData 变为 true
@@ -1 +1 @@
1
- {"version":3,"file":"RecordQueryAgent.d.ts","sourceRoot":"","sources":["../../../src/storage/erstorage/RecordQueryAgent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RecordQueryAgent.d.ts","sourceRoot":"","sources":["../../../src/storage/erstorage/RecordQueryAgent.ts"],"names":[],"mappings":"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"}
@@ -74,8 +74,17 @@ export declare class SQLBuilder {
74
74
  * 根据查询树递归计算所有需要 JOIN 的表
75
75
  */
76
76
  getJoinTables(queryTree: RecordQueryTree, context?: string[], parentInfos?: [string, string, string]): JoinTables;
77
+ /**
78
+ * 解析单个函数匹配原子(EXIST 子查询)
79
+ * CAUTION 必须在 buildFieldMatchExpression 遍历原子时就地调用,
80
+ * 这样 EXIST 内层子查询消耗的占位符编号才能和外层值原子保持树序一致(PG 系编号占位符依赖这一点)。
81
+ */
82
+ parseFunctionMatchAtom(entityName: string, atomData: FieldMatchAtom, contextRootEntity: string | undefined, p: PlaceholderGen): FieldMatchAtom;
77
83
  /**
78
84
  * 解析匹配表达式中的 EXIST 子查询
85
+ * CAUTION 该方法保留用于外部(测试等)单独调用。注意在使用编号型占位符的数据库上,
86
+ * 应通过 buildFieldMatchExpression 的 fnMatchHandler 就地处理(见 buildXToOneFindQuery),
87
+ * 否则占位符编号会和参数收集顺序错位。
79
88
  */
80
89
  parseMatchExpressionValue(entityName: string, fieldMatchExp: BoolExp<FieldMatchAtom> | null, contextRootEntity: string | undefined, p: PlaceholderGen): BoolExp<FieldMatchAtom> | null;
81
90
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"SQLBuilder.d.ts","sourceRoot":"","sources":["../../../src/storage/erstorage/SQLBuilder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SQLBuilder.d.ts","sourceRoot":"","sources":["../../../src/storage/erstorage/SQLBuilder.ts"],"names":[],"mappings":"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"}
@@ -64,10 +64,6 @@ export declare class DBSetup {
64
64
  joinTables(joinTargetRecord: string, record: string, link: string): string[] | undefined;
65
65
  combineRecordTable(mergeTarget: string, toMerge: string, link: string): string[] | undefined;
66
66
  renameTableWithJoinedEntities(originTableName: string): void;
67
- resolveBaseSourceEntityAndFilter(entity: EntityInstance): {
68
- baseEntity: any;
69
- matchExpression: any;
70
- } | undefined;
71
67
  /**
72
68
  * 验证 filtered entity 的过滤条件中的路径不包含 x:n 关系
73
69
  */
@@ -78,7 +74,13 @@ export declare class DBSetup {
78
74
  private validateSinglePath;
79
75
  private currentFilteredEntityName?;
80
76
  /**
81
- * 递归收集所有依赖于给定实体的 filtered entities(包括级联的)
77
+ * 获取 entity/relation 的有效名字(未命名 relation 使用自动生成名)。
78
+ */
79
+ private getItemEffectiveName;
80
+ /**
81
+ * 递归收集所有依赖于给定实体的 filtered entities(包括级联的)。
82
+ * CAUTION 用名字而不是实例身份比较:merged item 处理阶段会克隆实体图
83
+ * (RefContainer.add 会克隆虚拟 base),实例身份在图手术后不可靠,而名字全局唯一。
82
84
  */
83
85
  private collectAllFilteredEntities;
84
86
  createRecord(entity: EntityInstance | RelationInstance, isRelation?: boolean): RecordMapItem;
@@ -132,11 +134,26 @@ export declare class DBSetup {
132
134
  * 复制 attributes 对象,保留函数引用
133
135
  */
134
136
  private copyAttributes;
137
+ /**
138
+ * 校验 entity/relation 的 name 满足 nameFormat 约束。
139
+ * CAUTION name 会被用作表名/字段名/别名直接插值进 SQL(如 CREATE TABLE "${name}"),
140
+ * 这里是 storage 的入口防线(Entity.create/Relation.create 已经先校验过一次,
141
+ * 但实例可能绕过 Klass 工厂直接构造,所以这里必须再校验)。
142
+ */
143
+ private static readonly VALID_NAME_FORMAT;
144
+ private validateRecordNames;
135
145
  buildMap(): void;
136
146
  /**
137
147
  * 统一处理 merged entities 和 merged relations
138
148
  */
149
+ private mergedAbstractNames;
139
150
  private processMergedItems;
151
+ /**
152
+ * 标记抽象记录(merged item 及其派生名)。
153
+ * merged item 是联合类型(抽象类型),直接以它的名义创建记录无法确定具体 __type,
154
+ * 必须在运行期显式报错(explicit control),而不是静默接受产生不属于任何 input 的记录。
155
+ */
156
+ private markMergedAbstractRecords;
140
157
  mergeRecords(): void;
141
158
  assignTableAndField(): void;
142
159
  buildTables(): void;