@contember/engine-content-api 1.2.0-alpha.10 → 1.2.0-alpha.11

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 (236) hide show
  1. package/dist/src/acl/PredicateFactory.d.ts +1 -1
  2. package/dist/src/acl/PredicateFactory.d.ts.map +1 -1
  3. package/dist/src/acl/PredicateFactory.js +6 -13
  4. package/dist/src/acl/PredicateFactory.js.map +1 -1
  5. package/dist/src/acl/PredicatesInjector.d.ts +1 -1
  6. package/dist/src/acl/PredicatesInjector.d.ts.map +1 -1
  7. package/dist/src/acl/PredicatesInjector.js +13 -20
  8. package/dist/src/acl/PredicatesInjector.js.map +1 -1
  9. package/dist/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducerExecutionHandler.d.ts +0 -1
  10. package/dist/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducerExecutionHandler.d.ts.map +1 -1
  11. package/dist/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducerExecutionHandler.js +14 -15
  12. package/dist/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducerExecutionHandler.js.map +1 -1
  13. package/dist/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.d.ts +1 -1
  14. package/dist/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.d.ts.map +1 -1
  15. package/dist/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.js +1 -1
  16. package/dist/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.js.map +1 -1
  17. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyCountVisitor.d.ts +5 -4
  18. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyCountVisitor.d.ts.map +1 -1
  19. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyCountVisitor.js +11 -14
  20. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyCountVisitor.js.map +1 -1
  21. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyExecutionHandler.d.ts.map +1 -1
  22. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyExecutionHandler.js +2 -2
  23. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyExecutionHandler.js.map +1 -1
  24. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyFieldProviderVisitor.d.ts +3 -3
  25. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyFieldProviderVisitor.d.ts.map +1 -1
  26. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyFieldProviderVisitor.js +3 -3
  27. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyFieldProviderVisitor.js.map +1 -1
  28. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyNodesVisitor.d.ts +5 -4
  29. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyNodesVisitor.d.ts.map +1 -1
  30. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyNodesVisitor.js +11 -15
  31. package/dist/src/extensions/paginatedHasMany/PaginatedHasManyNodesVisitor.js.map +1 -1
  32. package/dist/src/input-validation/ColumnValueResolver.d.ts +4 -3
  33. package/dist/src/input-validation/ColumnValueResolver.d.ts.map +1 -1
  34. package/dist/src/input-validation/ColumnValueResolver.js.map +1 -1
  35. package/dist/src/input-validation/EntityRulesResolver.js +4 -4
  36. package/dist/src/input-validation/EntityRulesResolver.js.map +1 -1
  37. package/dist/src/input-validation/QueryAstFactory.js +1 -1
  38. package/dist/src/input-validation/QueryAstFactory.js.map +1 -1
  39. package/dist/src/input-validation/ValidationDataSelector.js +1 -1
  40. package/dist/src/input-validation/ValidationDataSelector.js.map +1 -1
  41. package/dist/src/input-validation/preValidation/CreateInputPreValidationProcessor.d.ts +7 -8
  42. package/dist/src/input-validation/preValidation/CreateInputPreValidationProcessor.d.ts.map +1 -1
  43. package/dist/src/input-validation/preValidation/CreateInputPreValidationProcessor.js.map +1 -1
  44. package/dist/src/input-validation/preValidation/InputPreValidator.js +4 -4
  45. package/dist/src/input-validation/preValidation/InputPreValidator.js.map +1 -1
  46. package/dist/src/input-validation/preValidation/UpdateInputPreValidationProcessor.d.ts +7 -8
  47. package/dist/src/input-validation/preValidation/UpdateInputPreValidationProcessor.d.ts.map +1 -1
  48. package/dist/src/input-validation/preValidation/UpdateInputPreValidationProcessor.js.map +1 -1
  49. package/dist/src/inputProcessing/CreateInputProcessor.d.ts +8 -9
  50. package/dist/src/inputProcessing/CreateInputProcessor.d.ts.map +1 -1
  51. package/dist/src/inputProcessing/CreateInputVisitor.d.ts +7 -7
  52. package/dist/src/inputProcessing/CreateInputVisitor.d.ts.map +1 -1
  53. package/dist/src/inputProcessing/CreateInputVisitor.js +15 -46
  54. package/dist/src/inputProcessing/CreateInputVisitor.js.map +1 -1
  55. package/dist/src/inputProcessing/UpdateInputProcessor.d.ts +8 -9
  56. package/dist/src/inputProcessing/UpdateInputProcessor.d.ts.map +1 -1
  57. package/dist/src/inputProcessing/UpdateInputVisitor.d.ts +7 -7
  58. package/dist/src/inputProcessing/UpdateInputVisitor.d.ts.map +1 -1
  59. package/dist/src/inputProcessing/UpdateInputVisitor.js +13 -28
  60. package/dist/src/inputProcessing/UpdateInputVisitor.js.map +1 -1
  61. package/dist/src/inputProcessing/index.d.ts +0 -1
  62. package/dist/src/inputProcessing/index.d.ts.map +1 -1
  63. package/dist/src/inputProcessing/index.js +0 -1
  64. package/dist/src/inputProcessing/index.js.map +1 -1
  65. package/dist/src/introspection/IntrospectionSchemaFactory.js +7 -7
  66. package/dist/src/introspection/IntrospectionSchemaFactory.js.map +1 -1
  67. package/dist/src/mapper/Mapper.d.ts +6 -6
  68. package/dist/src/mapper/Mapper.d.ts.map +1 -1
  69. package/dist/src/mapper/Mapper.js +28 -23
  70. package/dist/src/mapper/Mapper.js.map +1 -1
  71. package/dist/src/mapper/MapperContainer.d.ts.map +1 -1
  72. package/dist/src/mapper/MapperContainer.js +2 -2
  73. package/dist/src/mapper/MapperContainer.js.map +1 -1
  74. package/dist/src/mapper/delete/DeleteExecutor.js +3 -3
  75. package/dist/src/mapper/delete/DeleteExecutor.js.map +1 -1
  76. package/dist/src/mapper/insert/SqlCreateInputProcessor.d.ts +4 -2
  77. package/dist/src/mapper/insert/SqlCreateInputProcessor.d.ts.map +1 -1
  78. package/dist/src/mapper/insert/SqlCreateInputProcessor.js.map +1 -1
  79. package/dist/src/mapper/select/JoinVisitor.d.ts +6 -6
  80. package/dist/src/mapper/select/JoinVisitor.d.ts.map +1 -1
  81. package/dist/src/mapper/select/JoinVisitor.js +6 -6
  82. package/dist/src/mapper/select/JoinVisitor.js.map +1 -1
  83. package/dist/src/mapper/select/RelationFetcher.d.ts +11 -19
  84. package/dist/src/mapper/select/RelationFetcher.d.ts.map +1 -1
  85. package/dist/src/mapper/select/RelationFetcher.js +34 -25
  86. package/dist/src/mapper/select/RelationFetcher.js.map +1 -1
  87. package/dist/src/mapper/select/SelectBuilder.d.ts +2 -1
  88. package/dist/src/mapper/select/SelectBuilder.d.ts.map +1 -1
  89. package/dist/src/mapper/select/SelectBuilder.js +4 -2
  90. package/dist/src/mapper/select/SelectBuilder.js.map +1 -1
  91. package/dist/src/mapper/select/SelectBuilderFactory.d.ts +2 -1
  92. package/dist/src/mapper/select/SelectBuilderFactory.d.ts.map +1 -1
  93. package/dist/src/mapper/select/SelectExecutionHandler.d.ts +1 -0
  94. package/dist/src/mapper/select/SelectExecutionHandler.d.ts.map +1 -1
  95. package/dist/src/mapper/select/WhereBuilder.d.ts +3 -2
  96. package/dist/src/mapper/select/WhereBuilder.d.ts.map +1 -1
  97. package/dist/src/mapper/select/WhereBuilder.js +29 -24
  98. package/dist/src/mapper/select/WhereBuilder.js.map +1 -1
  99. package/dist/src/mapper/select/handlers/FieldsVisitor.d.ts +9 -8
  100. package/dist/src/mapper/select/handlers/FieldsVisitor.d.ts.map +1 -1
  101. package/dist/src/mapper/select/handlers/FieldsVisitor.js +33 -25
  102. package/dist/src/mapper/select/handlers/FieldsVisitor.js.map +1 -1
  103. package/dist/src/mapper/select/handlers/FieldsVisitorFactory.d.ts.map +1 -1
  104. package/dist/src/mapper/select/handlers/FieldsVisitorFactory.js +1 -1
  105. package/dist/src/mapper/select/handlers/FieldsVisitorFactory.js.map +1 -1
  106. package/dist/src/mapper/select/optimizer/ConditionOptimizer.d.ts.map +1 -1
  107. package/dist/src/mapper/select/optimizer/ConditionOptimizer.js +6 -0
  108. package/dist/src/mapper/select/optimizer/ConditionOptimizer.js.map +1 -1
  109. package/dist/src/mapper/select/optimizer/WhereOptimizer.d.ts +2 -1
  110. package/dist/src/mapper/select/optimizer/WhereOptimizer.d.ts.map +1 -1
  111. package/dist/src/mapper/select/optimizer/WhereOptimizer.js +52 -20
  112. package/dist/src/mapper/select/optimizer/WhereOptimizer.js.map +1 -1
  113. package/dist/src/mapper/select/optimizer/WhereReplacer.d.ts +4 -1
  114. package/dist/src/mapper/select/optimizer/WhereReplacer.d.ts.map +1 -1
  115. package/dist/src/mapper/select/optimizer/WhereReplacer.js +4 -3
  116. package/dist/src/mapper/select/optimizer/WhereReplacer.js.map +1 -1
  117. package/dist/src/mapper/update/SqlUpdateInputProcessor.d.ts +2 -3
  118. package/dist/src/mapper/update/SqlUpdateInputProcessor.d.ts.map +1 -1
  119. package/dist/src/mapper/update/SqlUpdateInputProcessor.js.map +1 -1
  120. package/dist/src/mapper/update/UpdateBuilder.js +3 -3
  121. package/dist/src/mapper/update/UpdateBuilder.js.map +1 -1
  122. package/dist/src/resolvers/MutationResolver.js +1 -1
  123. package/dist/src/resolvers/MutationResolver.js.map +1 -1
  124. package/dist/src/resolvers/ReadHelpers.js +3 -3
  125. package/dist/src/resolvers/ReadHelpers.js.map +1 -1
  126. package/dist/src/resolvers/ReadResolver.js +2 -2
  127. package/dist/src/resolvers/ReadResolver.js.map +1 -1
  128. package/dist/src/schema/FieldAccessVisitor.d.ts +2 -2
  129. package/dist/src/schema/FieldAccessVisitor.d.ts.map +1 -1
  130. package/dist/src/schema/FieldAccessVisitor.js +2 -2
  131. package/dist/src/schema/FieldAccessVisitor.js.map +1 -1
  132. package/dist/src/schema/OrderByTypeProvider.js +1 -1
  133. package/dist/src/schema/OrderByTypeProvider.js.map +1 -1
  134. package/dist/src/schema/WhereTypeProvider.js +4 -4
  135. package/dist/src/schema/WhereTypeProvider.js.map +1 -1
  136. package/dist/src/schema/entities/FieldArgsVisitor.d.ts +3 -3
  137. package/dist/src/schema/entities/FieldArgsVisitor.d.ts.map +1 -1
  138. package/dist/src/schema/entities/FieldArgsVisitor.js +3 -3
  139. package/dist/src/schema/entities/FieldArgsVisitor.js.map +1 -1
  140. package/dist/src/schema/entities/FieldTypeVisitor.d.ts +3 -3
  141. package/dist/src/schema/entities/FieldTypeVisitor.d.ts.map +1 -1
  142. package/dist/src/schema/entities/FieldTypeVisitor.js +3 -3
  143. package/dist/src/schema/entities/FieldTypeVisitor.js.map +1 -1
  144. package/dist/src/schema/mutations/CreateEntityInputFieldVisitor.d.ts +3 -3
  145. package/dist/src/schema/mutations/CreateEntityInputFieldVisitor.d.ts.map +1 -1
  146. package/dist/src/schema/mutations/CreateEntityInputFieldVisitor.js +3 -3
  147. package/dist/src/schema/mutations/CreateEntityInputFieldVisitor.js.map +1 -1
  148. package/dist/src/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.d.ts +6 -6
  149. package/dist/src/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.d.ts.map +1 -1
  150. package/dist/src/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.js +6 -6
  151. package/dist/src/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.js.map +1 -1
  152. package/dist/src/schema/mutations/CreateEntityRelationInputFieldVisitor.d.ts +3 -3
  153. package/dist/src/schema/mutations/CreateEntityRelationInputFieldVisitor.d.ts.map +1 -1
  154. package/dist/src/schema/mutations/CreateEntityRelationInputFieldVisitor.js +5 -5
  155. package/dist/src/schema/mutations/CreateEntityRelationInputFieldVisitor.js.map +1 -1
  156. package/dist/src/schema/mutations/UpdateEntityInputFieldVisitor.d.ts +10 -4
  157. package/dist/src/schema/mutations/UpdateEntityInputFieldVisitor.d.ts.map +1 -1
  158. package/dist/src/schema/mutations/UpdateEntityInputFieldVisitor.js +3 -3
  159. package/dist/src/schema/mutations/UpdateEntityInputFieldVisitor.js.map +1 -1
  160. package/dist/src/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.d.ts +6 -6
  161. package/dist/src/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.d.ts.map +1 -1
  162. package/dist/src/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.js +6 -6
  163. package/dist/src/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.js.map +1 -1
  164. package/dist/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.d.ts +2 -2
  165. package/dist/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.d.ts.map +1 -1
  166. package/dist/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.js +2 -2
  167. package/dist/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.js.map +1 -1
  168. package/dist/src/tsconfig.tsbuildinfo +1 -1
  169. package/dist/src/utils/uniqueWhereFields.js +3 -3
  170. package/dist/src/utils/uniqueWhereFields.js.map +1 -1
  171. package/dist/tests/cases/unit/predicatesFactory.test.js +7 -1
  172. package/dist/tests/cases/unit/predicatesFactory.test.js.map +1 -1
  173. package/dist/tests/cases/unit/whereOptimizer.test.js +82 -0
  174. package/dist/tests/cases/unit/whereOptimizer.test.js.map +1 -1
  175. package/dist/tests/tsconfig.tsbuildinfo +1 -1
  176. package/package.json +10 -10
  177. package/src/acl/PredicateFactory.ts +7 -14
  178. package/src/acl/PredicatesInjector.ts +13 -18
  179. package/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducerExecutionHandler.ts +17 -24
  180. package/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.ts +1 -6
  181. package/src/extensions/paginatedHasMany/PaginatedHasManyCountVisitor.ts +10 -28
  182. package/src/extensions/paginatedHasMany/PaginatedHasManyExecutionHandler.ts +6 -3
  183. package/src/extensions/paginatedHasMany/PaginatedHasManyFieldProviderVisitor.ts +4 -22
  184. package/src/extensions/paginatedHasMany/PaginatedHasManyNodesVisitor.ts +10 -29
  185. package/src/input-validation/ColumnValueResolver.ts +2 -3
  186. package/src/input-validation/EntityRulesResolver.ts +4 -4
  187. package/src/input-validation/QueryAstFactory.ts +1 -1
  188. package/src/input-validation/ValidationDataSelector.ts +1 -1
  189. package/src/input-validation/preValidation/CreateInputPreValidationProcessor.ts +7 -8
  190. package/src/input-validation/preValidation/InputPreValidator.ts +4 -4
  191. package/src/input-validation/preValidation/UpdateInputPreValidationProcessor.ts +7 -8
  192. package/src/inputProcessing/CreateInputProcessor.ts +8 -9
  193. package/src/inputProcessing/CreateInputVisitor.ts +27 -89
  194. package/src/inputProcessing/UpdateInputProcessor.ts +8 -9
  195. package/src/inputProcessing/UpdateInputVisitor.ts +25 -71
  196. package/src/inputProcessing/index.ts +0 -1
  197. package/src/introspection/IntrospectionSchemaFactory.ts +7 -7
  198. package/src/mapper/Mapper.ts +36 -33
  199. package/src/mapper/MapperContainer.ts +3 -2
  200. package/src/mapper/delete/DeleteExecutor.ts +3 -3
  201. package/src/mapper/insert/SqlCreateInputProcessor.ts +3 -3
  202. package/src/mapper/select/JoinVisitor.ts +6 -33
  203. package/src/mapper/select/RelationFetcher.ts +49 -50
  204. package/src/mapper/select/SelectBuilder.ts +3 -1
  205. package/src/mapper/select/SelectBuilderFactory.ts +2 -1
  206. package/src/mapper/select/SelectExecutionHandler.ts +1 -0
  207. package/src/mapper/select/WhereBuilder.ts +45 -34
  208. package/src/mapper/select/handlers/FieldsVisitor.ts +32 -49
  209. package/src/mapper/select/handlers/FieldsVisitorFactory.ts +1 -0
  210. package/src/mapper/select/optimizer/ConditionOptimizer.ts +6 -0
  211. package/src/mapper/select/optimizer/WhereOptimizer.ts +58 -20
  212. package/src/mapper/select/optimizer/WhereReplacer.ts +8 -3
  213. package/src/mapper/update/SqlUpdateInputProcessor.ts +1 -1
  214. package/src/mapper/update/UpdateBuilder.ts +3 -3
  215. package/src/resolvers/MutationResolver.ts +1 -1
  216. package/src/resolvers/ReadHelpers.ts +3 -3
  217. package/src/resolvers/ReadResolver.ts +2 -2
  218. package/src/schema/FieldAccessVisitor.ts +2 -2
  219. package/src/schema/OrderByTypeProvider.ts +1 -1
  220. package/src/schema/WhereTypeProvider.ts +4 -4
  221. package/src/schema/entities/FieldArgsVisitor.ts +3 -3
  222. package/src/schema/entities/FieldTypeVisitor.ts +3 -3
  223. package/src/schema/mutations/CreateEntityInputFieldVisitor.ts +3 -6
  224. package/src/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.ts +6 -20
  225. package/src/schema/mutations/CreateEntityRelationInputFieldVisitor.ts +5 -18
  226. package/src/schema/mutations/UpdateEntityInputFieldVisitor.ts +3 -6
  227. package/src/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.ts +6 -20
  228. package/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.ts +2 -12
  229. package/src/utils/uniqueWhereFields.ts +3 -3
  230. package/tests/cases/unit/predicatesFactory.test.ts +8 -2
  231. package/tests/cases/unit/whereOptimizer.test.ts +94 -0
  232. package/dist/src/inputProcessing/InputContext.d.ts +0 -43
  233. package/dist/src/inputProcessing/InputContext.d.ts.map +0 -1
  234. package/dist/src/inputProcessing/InputContext.js +0 -3
  235. package/dist/src/inputProcessing/InputContext.js.map +0 -1
  236. package/src/inputProcessing/InputContext.ts +0 -49
@@ -26,29 +26,16 @@ export class CreateEntityRelationInputFieldVisitor implements
26
26
  throw new ImplementationException('CreateEntityRelationInputFieldVisitor: Not applicable for a column')
27
27
  }
28
28
 
29
- public visitHasOne(
30
- entity: Model.Entity,
31
- relation: Model.Relation & Model.NullableRelation,
32
- targetEntity: Model.Entity,
33
- targetRelation: Model.Relation | null,
34
- ): GraphQLInputObjectType | undefined {
35
- return this.createInputObject(entity, relation, targetEntity, targetRelation, false)
29
+ public visitHasOne(context: Model.ManyHasOneContext): GraphQLInputObjectType | undefined {
30
+ return this.createInputObject(context, false)
36
31
  }
37
32
 
38
- public visitHasMany(
39
- entity: Model.Entity,
40
- relation: Model.Relation,
41
- targetEntity: Model.Entity,
42
- targetRelation: Model.Relation | null,
43
- ): GraphQLInputObjectType | undefined {
44
- return this.createInputObject(entity, relation, targetEntity, targetRelation, true)
33
+ public visitHasMany(context: Model.OneHasManyContext): GraphQLInputObjectType | undefined {
34
+ return this.createInputObject(context, true)
45
35
  }
46
36
 
47
37
  public createInputObject(
48
- entity: Model.Entity,
49
- relation: Model.Relation,
50
- targetEntity: Model.Entity,
51
- targetRelation: Model.Relation | null,
38
+ { entity, relation, targetEntity, targetRelation }: Model.AnyRelationContext,
52
39
  withAliasField: boolean,
53
40
  ): GraphQLInputObjectType | undefined {
54
41
  const targetName = targetRelation ? targetRelation.name : undefined
@@ -14,7 +14,7 @@ export class UpdateEntityInputFieldVisitor implements
14
14
  private readonly updateEntityRelationInputProvider: UpdateEntityRelationInputProvider,
15
15
  ) {}
16
16
 
17
- public visitColumn(entity: Model.Entity, column: Model.AnyColumn): GraphQLInputFieldConfig | undefined {
17
+ public visitColumn({ entity, column }: Model.ColumnContext) {
18
18
  if (entity.primary === column.name) {
19
19
  return undefined
20
20
  }
@@ -27,10 +27,7 @@ export class UpdateEntityInputFieldVisitor implements
27
27
  }
28
28
  }
29
29
 
30
- public visitHasOne(
31
- entity: Model.Entity,
32
- relation: Model.Relation & Model.NullableRelation,
33
- ): GraphQLInputFieldConfig | undefined {
30
+ public visitHasOne({ entity, relation }: Model.AnyHasOneRelationContext) {
34
31
  const type = this.updateEntityRelationInputProvider.getUpdateEntityRelationInput(entity.name, relation.name)
35
32
  if (type === undefined) {
36
33
  return undefined
@@ -40,7 +37,7 @@ export class UpdateEntityInputFieldVisitor implements
40
37
  }
41
38
  }
42
39
 
43
- public visitHasMany(entity: Model.Entity, relation: Model.Relation): GraphQLInputFieldConfig | undefined {
40
+ public visitHasMany({ entity, relation }: Model.AnyHasManyRelationContext) {
44
41
  const type = this.updateEntityRelationInputProvider.getUpdateEntityRelationInput(entity.name, relation.name)
45
42
  if (type === undefined) {
46
43
  return undefined
@@ -11,23 +11,19 @@ export class UpdateEntityRelationAllowedOperationsVisitor implements
11
11
  throw new Error('UpdateEntityRelationAllowedOperationsVisitor: Not applicable for a column')
12
12
  }
13
13
 
14
- public visitManyHasManyInverse({}, {}, targetEntity: Model.Entity, targetRelation: Model.ManyHasManyOwningRelation) {
14
+ public visitManyHasManyInverse({ targetEntity, targetRelation }: Model.ManyHasManyInverseContext) {
15
15
  return this.getAllowedOperations(targetEntity, targetEntity, targetRelation)
16
16
  }
17
17
 
18
- public visitManyHasManyOwning(
19
- entity: Model.Entity,
20
- relation: Model.ManyHasManyOwningRelation,
21
- targetEntity: Model.Entity,
22
- ) {
18
+ public visitManyHasManyOwning({ entity, targetEntity, relation }: Model.ManyHasManyOwningContext) {
23
19
  return this.getAllowedOperations(targetEntity, entity, relation)
24
20
  }
25
21
 
26
- public visitOneHasMany({}, {}, targetEntity: Model.Entity, targetRelation: Model.ManyHasOneRelation) {
22
+ public visitOneHasMany({ targetRelation, targetEntity }: Model.OneHasManyContext) {
27
23
  return this.getAllowedOperations(targetEntity, targetEntity, targetRelation)
28
24
  }
29
25
 
30
- public visitManyHasOne(entity: Model.Entity, relation: Model.ManyHasOneRelation, targetEntity: Model.Entity) {
26
+ public visitManyHasOne({ targetEntity, relation, entity }: Model.ManyHasOneContext) {
31
27
  const operations = this.getAllowedOperations(targetEntity, entity, relation)
32
28
  if (relation.nullable) {
33
29
  return operations
@@ -39,12 +35,7 @@ export class UpdateEntityRelationAllowedOperationsVisitor implements
39
35
  return operations.filter(it => !forbiddenOperations.includes(it))
40
36
  }
41
37
 
42
- public visitOneHasOneInverse(
43
- {},
44
- relation: Model.OneHasOneInverseRelation,
45
- targetEntity: Model.Entity,
46
- targetRelation: Model.OneHasOneOwningRelation,
47
- ) {
38
+ public visitOneHasOneInverse({ relation, targetEntity, targetRelation }: Model.OneHasOneInverseContext) {
48
39
  const operations = this.getAllowedOperations(targetEntity, targetEntity, targetRelation)
49
40
  if (relation.nullable || targetRelation.nullable) {
50
41
  return operations
@@ -52,12 +43,7 @@ export class UpdateEntityRelationAllowedOperationsVisitor implements
52
43
  return operations.filter(it => it === Input.UpdateRelationOperation.update)
53
44
  }
54
45
 
55
- public visitOneHasOneOwning(
56
- entity: Model.Entity,
57
- relation: Model.OneHasOneOwningRelation,
58
- targetEntity: Model.Entity,
59
- targetRelation: Model.OneHasOneInverseRelation | null,
60
- ) {
46
+ public visitOneHasOneOwning({ targetEntity, entity, relation, targetRelation }: Model.OneHasOneOwningContext) {
61
47
  const operations = this.getAllowedOperations(targetEntity, entity, relation)
62
48
  if (relation.nullable || !targetRelation || targetRelation.nullable) {
63
49
  return operations
@@ -27,12 +27,7 @@ export class UpdateEntityRelationInputFieldVisitor implements
27
27
  throw new Error('UpdateEntityRelationInputFieldVisitor: Not applicable for a column')
28
28
  }
29
29
 
30
- public visitHasOne(
31
- entity: Model.Entity,
32
- relation: Model.Relation & Model.NullableRelation,
33
- targetEntity: Model.Entity,
34
- targetRelation: Model.Relation | null,
35
- ): GraphQLInputObjectType | undefined {
30
+ public visitHasOne({ targetRelation, targetEntity, relation, entity }: Model.AnyHasOneRelationContext) {
36
31
  const withoutRelation = targetRelation ? targetRelation.name : undefined
37
32
 
38
33
  const whereInput = this.createWhereInput(targetEntity)
@@ -84,12 +79,7 @@ export class UpdateEntityRelationInputFieldVisitor implements
84
79
  })
85
80
  }
86
81
 
87
- public visitHasMany(
88
- entity: Model.Entity,
89
- relation: Model.Relation,
90
- targetEntity: Model.Entity,
91
- targetRelation: Model.Relation | null,
92
- ): GraphQLInputObjectType | undefined {
82
+ public visitHasMany({ entity, relation, targetEntity, targetRelation }: Model.AnyHasManyRelationContext) {
93
83
  const withoutRelation = targetRelation ? targetRelation.name : undefined
94
84
 
95
85
  const whereInput = this.createWhereInput(targetEntity)
@@ -8,10 +8,10 @@ export const getFieldsForUniqueWhere = (schema: Model.Schema, entity: Model.Enti
8
8
  visitColumn: () => undefined,
9
9
  visitManyHasManyInverse: () => undefined,
10
10
  visitManyHasManyOwning: () => undefined,
11
- visitOneHasMany: ({}, relation) => [relation.name],
11
+ visitOneHasMany: ({ relation }) => [relation.name],
12
12
  visitManyHasOne: () => undefined,
13
- visitOneHasOneInverse: ({}, relation) => [relation.name],
14
- visitOneHasOneOwning: ({}, relation) => [relation.name],
13
+ visitOneHasOneInverse: ({ relation }) => [relation.name],
14
+ visitOneHasOneOwning: ({ relation }) => [relation.name],
15
15
  }),
16
16
  ).filter((it): it is [string] => !!it)
17
17
 
@@ -76,8 +76,14 @@ describe('Predicates factory', () => {
76
76
  it('eliminates a predicate', () => {
77
77
  const predicateFactory = new PredicateFactory(permissions, schema, new VariableInjector(schema, {}))
78
78
  const image = schema.entities['Image']
79
- const authorRelation = image.fields['authors'] as Model.AnyRelation
80
- const predicate = predicateFactory.create(image, Acl.Operation.read, undefined, authorRelation)
79
+ const authorRelation = image.fields['authors'] as Model.OneHasManyRelation
80
+ const predicate = predicateFactory.create(image, Acl.Operation.read, undefined, {
81
+ type: 'manyHasOne',
82
+ entity: schema.entities.Author,
83
+ relation: schema.entities.Author.fields.image as Model.ManyHasOneRelation,
84
+ targetEntity: image,
85
+ targetRelation: authorRelation,
86
+ })
81
87
  assert.deepStrictEqual(predicate, {
82
88
  or: [
83
89
  {
@@ -2,18 +2,21 @@ import { describe, it, assert } from 'vitest'
2
2
  import { ConditionOptimizer } from '../../../src/mapper/select/optimizer/ConditionOptimizer'
3
3
  import { SchemaDefinition as def } from '@contember/schema-definition'
4
4
  import { WhereOptimizer } from '../../../src/mapper/select/optimizer/WhereOptimizer'
5
+ import { acceptFieldVisitor } from '@contember/schema-utils'
5
6
 
6
7
  namespace TestModel {
7
8
  export class Author {
8
9
  name = def.stringColumn()
9
10
  isPublic = def.boolColumn().notNull()
10
11
  image = def.manyHasOne(Image, 'authors')
12
+ articles = def.oneHasMany(Article, 'author')
11
13
  }
12
14
 
13
15
  export class Article {
14
16
  title = def.stringColumn()
15
17
  isPublic = def.boolColumn().notNull()
16
18
  image = def.manyHasOne(Image, 'articles')
19
+ author = def.manyHasOne(Author, 'articles')
17
20
  }
18
21
 
19
22
  export class Image {
@@ -192,4 +195,95 @@ describe('where optimized', () => {
192
195
  ],
193
196
  })
194
197
  })
198
+
199
+
200
+ describe('remove id predicates', () => {
201
+
202
+ it('remove ID predicate when traversing from a relation - always', () => {
203
+ assert.deepStrictEqual(whereOptimizer.optimize({
204
+ image: { id: { isNull: false } },
205
+ }, model.entities.Author, [acceptFieldVisitor(model, 'Image', 'authors', {
206
+ visitColumn: () => {
207
+ throw new Error()
208
+ },
209
+ visitRelation: context => context,
210
+ })]), {
211
+ id: { always: true },
212
+ })
213
+ })
214
+
215
+
216
+ it('remove ID predicate when traversing from a relation - never', () => {
217
+ assert.deepStrictEqual(whereOptimizer.optimize({
218
+ image: { id: { isNull: true } },
219
+ }, model.entities.Author, [acceptFieldVisitor(model, 'Image', 'authors', {
220
+ visitColumn: () => {
221
+ throw new Error()
222
+ },
223
+ visitRelation: context => context,
224
+ })]), {
225
+ id: { never: true },
226
+ })
227
+ })
228
+
229
+ it('remove ID predicate when traversing in where', () => {
230
+ assert.deepStrictEqual(whereOptimizer.optimize({
231
+ authors: { image: { id: { isNull: false } } },
232
+ }, model.entities.Image, []), {
233
+ id: { always: true },
234
+ })
235
+ })
236
+
237
+ it('do not remove ID predicate when traversing from a has-many relation', () => {
238
+ assert.deepStrictEqual(whereOptimizer.optimize({
239
+ authors: { id: { isNull: false } },
240
+ }, model.entities.Image, [acceptFieldVisitor(model, 'Author', 'image', {
241
+ visitColumn: () => {
242
+ throw new Error()
243
+ },
244
+ visitRelation: context => context,
245
+ })]), {
246
+ authors: { id: { isNull: false } },
247
+ })
248
+ })
249
+
250
+ it('do not remove ID predicate when traversing from a nested has-many relation', () => {
251
+ assert.deepStrictEqual(whereOptimizer.optimize({
252
+ articles: { author: { id: { isNull: false } } },
253
+ }, model.entities.Image, [
254
+ acceptFieldVisitor(model, 'Author', 'articles', {
255
+ visitColumn: () => {
256
+ throw new Error()
257
+ },
258
+ visitRelation: context => context,
259
+ }),
260
+ acceptFieldVisitor(model, 'Article', 'image', {
261
+ visitColumn: () => {
262
+ throw new Error()
263
+ },
264
+ visitRelation: context => context,
265
+ }),
266
+ ]), {
267
+ articles: { author: { id: { isNull: false } } },
268
+ })
269
+ })
270
+
271
+ it('do not remove ID predicate when traversing in where over has-many relation', () => {
272
+ assert.deepStrictEqual(whereOptimizer.optimize({
273
+ image: { authors: { id: { isNull: false } } },
274
+ }, model.entities.Author, []), {
275
+ image: { authors: { id: { isNull: false } } },
276
+ })
277
+ })
278
+
279
+
280
+ it('do not remove ID predicate when traversing in where over has-many relation - nested', () => {
281
+ assert.deepStrictEqual(whereOptimizer.optimize({
282
+ image: { authors: { image: { id: { isNull: false } } } },
283
+ }, model.entities.Author, []), {
284
+ image: { authors: { image: { id: { isNull: false } } } },
285
+ })
286
+ })
287
+ })
195
288
  })
289
+
@@ -1,43 +0,0 @@
1
- import { Input, Model } from '@contember/schema';
2
- export interface ColumnContext {
3
- entity: Model.Entity;
4
- column: Model.AnyColumn;
5
- input: Input.ColumnValue | undefined;
6
- }
7
- export interface ManyHasManyInverseContext {
8
- entity: Model.Entity;
9
- relation: Model.ManyHasManyInverseRelation;
10
- targetEntity: Model.Entity;
11
- targetRelation: Model.ManyHasManyOwningRelation;
12
- }
13
- export interface ManyHasManyOwningContext {
14
- entity: Model.Entity;
15
- relation: Model.ManyHasManyOwningRelation;
16
- targetEntity: Model.Entity;
17
- targetRelation: Model.ManyHasManyInverseRelation | null;
18
- }
19
- export interface ManyHasOneContext {
20
- entity: Model.Entity;
21
- relation: Model.ManyHasOneRelation;
22
- targetEntity: Model.Entity;
23
- targetRelation: Model.OneHasManyRelation | null;
24
- }
25
- export interface OneHasManyContext {
26
- entity: Model.Entity;
27
- relation: Model.OneHasManyRelation;
28
- targetEntity: Model.Entity;
29
- targetRelation: Model.ManyHasOneRelation;
30
- }
31
- export interface OneHasOneInverseContext {
32
- entity: Model.Entity;
33
- relation: Model.OneHasOneInverseRelation;
34
- targetEntity: Model.Entity;
35
- targetRelation: Model.OneHasOneOwningRelation;
36
- }
37
- export interface OneHasOneOwningContext {
38
- entity: Model.Entity;
39
- relation: Model.OneHasOneOwningRelation;
40
- targetEntity: Model.Entity;
41
- targetRelation: Model.OneHasOneInverseRelation | null;
42
- }
43
- //# sourceMappingURL=InputContext.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"InputContext.d.ts","sourceRoot":"","sources":["../../../src/inputProcessing/InputContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAEhD,MAAM,WAAW,aAAa;IAC7B,MAAM,EAAE,KAAK,CAAC,MAAM,CAAA;IACpB,MAAM,EAAE,KAAK,CAAC,SAAS,CAAA;IACvB,KAAK,EAAE,KAAK,CAAC,WAAW,GAAG,SAAS,CAAA;CACpC;AAED,MAAM,WAAW,yBAAyB;IACzC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAA;IACpB,QAAQ,EAAE,KAAK,CAAC,0BAA0B,CAAA;IAC1C,YAAY,EAAE,KAAK,CAAC,MAAM,CAAA;IAC1B,cAAc,EAAE,KAAK,CAAC,yBAAyB,CAAA;CAC/C;AAED,MAAM,WAAW,wBAAwB;IACxC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAA;IACpB,QAAQ,EAAE,KAAK,CAAC,yBAAyB,CAAA;IACzC,YAAY,EAAE,KAAK,CAAC,MAAM,CAAA;IAC1B,cAAc,EAAE,KAAK,CAAC,0BAA0B,GAAG,IAAI,CAAA;CACvD;AAED,MAAM,WAAW,iBAAiB;IACjC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAA;IACpB,QAAQ,EAAE,KAAK,CAAC,kBAAkB,CAAA;IAClC,YAAY,EAAE,KAAK,CAAC,MAAM,CAAA;IAC1B,cAAc,EAAE,KAAK,CAAC,kBAAkB,GAAG,IAAI,CAAA;CAC/C;AAED,MAAM,WAAW,iBAAiB;IACjC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAA;IACpB,QAAQ,EAAE,KAAK,CAAC,kBAAkB,CAAA;IAClC,YAAY,EAAE,KAAK,CAAC,MAAM,CAAA;IAC1B,cAAc,EAAE,KAAK,CAAC,kBAAkB,CAAA;CACxC;AAED,MAAM,WAAW,uBAAuB;IACvC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAA;IACpB,QAAQ,EAAE,KAAK,CAAC,wBAAwB,CAAA;IACxC,YAAY,EAAE,KAAK,CAAC,MAAM,CAAA;IAC1B,cAAc,EAAE,KAAK,CAAC,uBAAuB,CAAA;CAC7C;AAED,MAAM,WAAW,sBAAsB;IACtC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAA;IACpB,QAAQ,EAAE,KAAK,CAAC,uBAAuB,CAAA;IACvC,YAAY,EAAE,KAAK,CAAC,MAAM,CAAA;IAC1B,cAAc,EAAE,KAAK,CAAC,wBAAwB,GAAG,IAAI,CAAA;CACrD"}
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=InputContext.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"InputContext.js","sourceRoot":"","sources":["../../../src/inputProcessing/InputContext.ts"],"names":[],"mappings":""}
@@ -1,49 +0,0 @@
1
- import { Input, Model } from '@contember/schema'
2
-
3
- export interface ColumnContext {
4
- entity: Model.Entity
5
- column: Model.AnyColumn
6
- input: Input.ColumnValue | undefined
7
- }
8
-
9
- export interface ManyHasManyInverseContext {
10
- entity: Model.Entity
11
- relation: Model.ManyHasManyInverseRelation
12
- targetEntity: Model.Entity
13
- targetRelation: Model.ManyHasManyOwningRelation
14
- }
15
-
16
- export interface ManyHasManyOwningContext {
17
- entity: Model.Entity
18
- relation: Model.ManyHasManyOwningRelation
19
- targetEntity: Model.Entity
20
- targetRelation: Model.ManyHasManyInverseRelation | null
21
- }
22
-
23
- export interface ManyHasOneContext {
24
- entity: Model.Entity
25
- relation: Model.ManyHasOneRelation
26
- targetEntity: Model.Entity
27
- targetRelation: Model.OneHasManyRelation | null
28
- }
29
-
30
- export interface OneHasManyContext {
31
- entity: Model.Entity
32
- relation: Model.OneHasManyRelation
33
- targetEntity: Model.Entity
34
- targetRelation: Model.ManyHasOneRelation
35
- }
36
-
37
- export interface OneHasOneInverseContext {
38
- entity: Model.Entity
39
- relation: Model.OneHasOneInverseRelation
40
- targetEntity: Model.Entity
41
- targetRelation: Model.OneHasOneOwningRelation
42
- }
43
-
44
- export interface OneHasOneOwningContext {
45
- entity: Model.Entity
46
- relation: Model.OneHasOneOwningRelation
47
- targetEntity: Model.Entity
48
- targetRelation: Model.OneHasOneInverseRelation | null
49
- }