@contember/engine-content-api 2.1.0-alpha.9 → 2.1.0-beta.2

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 (1030) hide show
  1. package/CLAUDE.md +54 -0
  2. package/dist/development/index.cjs +1 -2
  3. package/dist/development/index.cjs.map +1 -1
  4. package/dist/development/index.js +2 -3
  5. package/dist/development/index.js.map +1 -1
  6. package/dist/development/src/ExecutionContainer.cjs +120 -31
  7. package/dist/development/src/ExecutionContainer.cjs.map +1 -1
  8. package/dist/development/src/ExecutionContainer.js +121 -32
  9. package/dist/development/src/ExecutionContainer.js.map +1 -1
  10. package/dist/development/src/acl/Authorizator.cjs.map +1 -1
  11. package/dist/development/src/acl/Authorizator.js.map +1 -1
  12. package/dist/development/src/acl/EvaluatedPredicateReplacer.cjs.map +1 -1
  13. package/dist/development/src/acl/EvaluatedPredicateReplacer.js.map +1 -1
  14. package/dist/development/src/acl/PermissionFactory.cjs +29 -15
  15. package/dist/development/src/acl/PermissionFactory.cjs.map +1 -1
  16. package/dist/development/src/acl/PermissionFactory.js +29 -15
  17. package/dist/development/src/acl/PermissionFactory.js.map +1 -1
  18. package/dist/development/src/acl/PredicateFactory.cjs +33 -13
  19. package/dist/development/src/acl/PredicateFactory.cjs.map +1 -1
  20. package/dist/development/src/acl/PredicateFactory.js +33 -13
  21. package/dist/development/src/acl/PredicateFactory.js.map +1 -1
  22. package/dist/development/src/acl/PredicatesInjector.cjs +105 -13
  23. package/dist/development/src/acl/PredicatesInjector.cjs.map +1 -1
  24. package/dist/development/src/acl/PredicatesInjector.js +105 -13
  25. package/dist/development/src/acl/PredicatesInjector.js.map +1 -1
  26. package/dist/development/src/acl/VariableInjector.cjs.map +1 -1
  27. package/dist/development/src/acl/VariableInjector.js.map +1 -1
  28. package/dist/development/src/acl/VariableUtils.cjs.map +1 -1
  29. package/dist/development/src/acl/VariableUtils.js.map +1 -1
  30. package/dist/development/src/exception.cjs.map +1 -1
  31. package/dist/development/src/exception.js.map +1 -1
  32. package/dist/development/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducer.cjs.map +1 -1
  33. package/dist/development/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducer.js.map +1 -1
  34. package/dist/development/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducerExecutionHandler.cjs.map +1 -1
  35. package/dist/development/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducerExecutionHandler.js.map +1 -1
  36. package/dist/development/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.cjs +4 -4
  37. package/dist/development/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.cjs.map +1 -1
  38. package/dist/development/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.js +4 -4
  39. package/dist/development/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.js.map +1 -1
  40. package/dist/development/src/extensions/paginatedHasMany/PaginatedHasManyCountVisitor.cjs.map +1 -1
  41. package/dist/development/src/extensions/paginatedHasMany/PaginatedHasManyCountVisitor.js.map +1 -1
  42. package/dist/development/src/extensions/paginatedHasMany/PaginatedHasManyExecutionHandler.cjs.map +1 -1
  43. package/dist/development/src/extensions/paginatedHasMany/PaginatedHasManyExecutionHandler.js.map +1 -1
  44. package/dist/development/src/extensions/paginatedHasMany/PaginatedHasManyFieldProvider.cjs.map +1 -1
  45. package/dist/development/src/extensions/paginatedHasMany/PaginatedHasManyFieldProvider.js.map +1 -1
  46. package/dist/development/src/extensions/paginatedHasMany/PaginatedHasManyFieldProviderVisitor.cjs.map +1 -1
  47. package/dist/development/src/extensions/paginatedHasMany/PaginatedHasManyFieldProviderVisitor.js.map +1 -1
  48. package/dist/development/src/extensions/paginatedHasMany/PaginatedHasManyNodesVisitor.cjs.map +1 -1
  49. package/dist/development/src/extensions/paginatedHasMany/PaginatedHasManyNodesVisitor.js.map +1 -1
  50. package/dist/development/src/input-validation/ColumnValueResolver.cjs.map +1 -1
  51. package/dist/development/src/input-validation/ColumnValueResolver.js.map +1 -1
  52. package/dist/development/src/input-validation/EntityRulesResolver.cjs.map +1 -1
  53. package/dist/development/src/input-validation/EntityRulesResolver.js.map +1 -1
  54. package/dist/development/src/input-validation/QueryAstFactory.cjs.map +1 -1
  55. package/dist/development/src/input-validation/QueryAstFactory.js.map +1 -1
  56. package/dist/development/src/input-validation/ValidationContext.cjs.map +1 -1
  57. package/dist/development/src/input-validation/ValidationContext.js.map +1 -1
  58. package/dist/development/src/input-validation/ValidationDataSelector.cjs.map +1 -1
  59. package/dist/development/src/input-validation/ValidationDataSelector.js.map +1 -1
  60. package/dist/development/src/input-validation/ValidationEvaluation.cjs.map +1 -1
  61. package/dist/development/src/input-validation/ValidationEvaluation.js.map +1 -1
  62. package/dist/development/src/input-validation/ValidationPath.cjs.map +1 -1
  63. package/dist/development/src/input-validation/ValidationPath.js.map +1 -1
  64. package/dist/development/src/input-validation/dependencies/DependencyCollector.cjs +3 -3
  65. package/dist/development/src/input-validation/dependencies/DependencyCollector.cjs.map +1 -1
  66. package/dist/development/src/input-validation/dependencies/DependencyCollector.js +3 -3
  67. package/dist/development/src/input-validation/dependencies/DependencyCollector.js.map +1 -1
  68. package/dist/development/src/input-validation/dependencies/DependencyMerger.cjs.map +1 -1
  69. package/dist/development/src/input-validation/dependencies/DependencyMerger.js.map +1 -1
  70. package/dist/development/src/input-validation/preValidation/CreateInputPreValidationProcessor.cjs.map +1 -1
  71. package/dist/development/src/input-validation/preValidation/CreateInputPreValidationProcessor.js.map +1 -1
  72. package/dist/development/src/input-validation/preValidation/InputPreValidator.cjs +2 -4
  73. package/dist/development/src/input-validation/preValidation/InputPreValidator.cjs.map +1 -1
  74. package/dist/development/src/input-validation/preValidation/InputPreValidator.js +2 -4
  75. package/dist/development/src/input-validation/preValidation/InputPreValidator.js.map +1 -1
  76. package/dist/development/src/input-validation/preValidation/UpdateInputPreValidationProcessor.cjs.map +1 -1
  77. package/dist/development/src/input-validation/preValidation/UpdateInputPreValidationProcessor.js.map +1 -1
  78. package/dist/development/src/inputProcessing/CreateInputVisitor.cjs +6 -4
  79. package/dist/development/src/inputProcessing/CreateInputVisitor.cjs.map +1 -1
  80. package/dist/development/src/inputProcessing/CreateInputVisitor.js +6 -4
  81. package/dist/development/src/inputProcessing/CreateInputVisitor.js.map +1 -1
  82. package/dist/development/src/inputProcessing/FieldNode.cjs.map +1 -1
  83. package/dist/development/src/inputProcessing/FieldNode.js.map +1 -1
  84. package/dist/development/src/inputProcessing/ObjectNode.cjs.map +1 -1
  85. package/dist/development/src/inputProcessing/ObjectNode.js.map +1 -1
  86. package/dist/development/src/inputProcessing/UniqueWhereExpander.cjs.map +1 -1
  87. package/dist/development/src/inputProcessing/UniqueWhereExpander.js.map +1 -1
  88. package/dist/development/src/inputProcessing/UpdateInputVisitor.cjs +7 -5
  89. package/dist/development/src/inputProcessing/UpdateInputVisitor.cjs.map +1 -1
  90. package/dist/development/src/inputProcessing/UpdateInputVisitor.js +7 -5
  91. package/dist/development/src/inputProcessing/UpdateInputVisitor.js.map +1 -1
  92. package/dist/development/src/introspection/IntrospectionSchemaDefinitionFactory.cjs.map +1 -1
  93. package/dist/development/src/introspection/IntrospectionSchemaDefinitionFactory.js.map +1 -1
  94. package/dist/development/src/introspection/IntrospectionSchemaFactory.cjs.map +1 -1
  95. package/dist/development/src/introspection/IntrospectionSchemaFactory.js.map +1 -1
  96. package/dist/development/src/introspection/content-schema.types.cjs.map +1 -1
  97. package/dist/development/src/introspection/content-schema.types.js.map +1 -1
  98. package/dist/development/src/introspection/introspection.schema.cjs.map +1 -1
  99. package/dist/development/src/introspection/introspection.schema.js.map +1 -1
  100. package/dist/development/src/mapper/CheckedPrimary.cjs.map +1 -1
  101. package/dist/development/src/mapper/CheckedPrimary.js.map +1 -1
  102. package/dist/development/src/mapper/ColumnValue.cjs.map +1 -1
  103. package/dist/development/src/mapper/ColumnValue.js.map +1 -1
  104. package/dist/development/src/mapper/ErrorUtils.cjs.map +1 -1
  105. package/dist/development/src/mapper/ErrorUtils.js +1 -1
  106. package/dist/development/src/mapper/ErrorUtils.js.map +1 -1
  107. package/dist/development/src/mapper/EventManager.cjs.map +1 -1
  108. package/dist/development/src/mapper/EventManager.js.map +1 -1
  109. package/dist/development/src/mapper/JunctionTableManager.cjs +16 -2
  110. package/dist/development/src/mapper/JunctionTableManager.cjs.map +1 -1
  111. package/dist/development/src/mapper/JunctionTableManager.js +17 -3
  112. package/dist/development/src/mapper/JunctionTableManager.js.map +1 -1
  113. package/dist/development/src/mapper/Mapper.cjs +8 -7
  114. package/dist/development/src/mapper/Mapper.cjs.map +1 -1
  115. package/dist/development/src/mapper/Mapper.js +8 -7
  116. package/dist/development/src/mapper/Mapper.js.map +1 -1
  117. package/dist/development/src/mapper/MapperFactory.cjs.map +1 -1
  118. package/dist/development/src/mapper/MapperFactory.js.map +1 -1
  119. package/dist/development/src/mapper/MutationProcessorHelper.cjs.map +1 -1
  120. package/dist/development/src/mapper/MutationProcessorHelper.js.map +1 -1
  121. package/dist/development/src/mapper/Result.cjs +1 -1
  122. package/dist/development/src/mapper/Result.cjs.map +1 -1
  123. package/dist/development/src/mapper/Result.js +1 -1
  124. package/dist/development/src/mapper/Result.js.map +1 -1
  125. package/dist/development/src/mapper/delete/DeleteExecutor.cjs.map +1 -1
  126. package/dist/development/src/mapper/delete/DeleteExecutor.js.map +1 -1
  127. package/dist/development/src/mapper/delete/DeleteState.cjs.map +1 -1
  128. package/dist/development/src/mapper/delete/DeleteState.js.map +1 -1
  129. package/dist/development/src/mapper/delete/DeletedEntitiesStorage.cjs.map +1 -1
  130. package/dist/development/src/mapper/delete/DeletedEntitiesStorage.js.map +1 -1
  131. package/dist/development/src/mapper/delete/helpers.cjs.map +1 -1
  132. package/dist/development/src/mapper/delete/helpers.js.map +1 -1
  133. package/dist/development/src/mapper/insert/InsertBuilder.cjs +27 -31
  134. package/dist/development/src/mapper/insert/InsertBuilder.cjs.map +1 -1
  135. package/dist/development/src/mapper/insert/InsertBuilder.js +27 -31
  136. package/dist/development/src/mapper/insert/InsertBuilder.js.map +1 -1
  137. package/dist/development/src/mapper/insert/InsertBuilderFactory.cjs.map +1 -1
  138. package/dist/development/src/mapper/insert/InsertBuilderFactory.js.map +1 -1
  139. package/dist/development/src/mapper/insert/Inserter.cjs.map +1 -1
  140. package/dist/development/src/mapper/insert/Inserter.js.map +1 -1
  141. package/dist/development/src/mapper/insert/SqlCreateInputProcessor.cjs.map +1 -1
  142. package/dist/development/src/mapper/insert/SqlCreateInputProcessor.js.map +1 -1
  143. package/dist/development/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.cjs.map +1 -1
  144. package/dist/development/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.js.map +1 -1
  145. package/dist/development/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.cjs.map +1 -1
  146. package/dist/development/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.js.map +1 -1
  147. package/dist/development/src/mapper/insert/relations/OneHasManyCreateInputProcessor.cjs.map +1 -1
  148. package/dist/development/src/mapper/insert/relations/OneHasManyCreateInputProcessor.js.map +1 -1
  149. package/dist/development/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.cjs.map +1 -1
  150. package/dist/development/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.js.map +1 -1
  151. package/dist/development/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.cjs.map +1 -1
  152. package/dist/development/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.js.map +1 -1
  153. package/dist/development/src/mapper/select/ConditionBuilder.cjs +7 -5
  154. package/dist/development/src/mapper/select/ConditionBuilder.cjs.map +1 -1
  155. package/dist/development/src/mapper/select/ConditionBuilder.js +8 -6
  156. package/dist/development/src/mapper/select/ConditionBuilder.js.map +1 -1
  157. package/dist/development/src/mapper/select/JoinBuilder.cjs.map +1 -1
  158. package/dist/development/src/mapper/select/JoinBuilder.js.map +1 -1
  159. package/dist/development/src/mapper/select/JoinVisitor.cjs.map +1 -1
  160. package/dist/development/src/mapper/select/JoinVisitor.js.map +1 -1
  161. package/dist/development/src/mapper/select/OrderByBuilder.cjs.map +1 -1
  162. package/dist/development/src/mapper/select/OrderByBuilder.js.map +1 -1
  163. package/dist/development/src/mapper/select/OrderByHelper.cjs.map +1 -1
  164. package/dist/development/src/mapper/select/OrderByHelper.js.map +1 -1
  165. package/dist/development/src/mapper/select/Path.cjs.map +1 -1
  166. package/dist/development/src/mapper/select/Path.js.map +1 -1
  167. package/dist/development/src/mapper/select/RelationFetcher.cjs.map +1 -1
  168. package/dist/development/src/mapper/select/RelationFetcher.js.map +1 -1
  169. package/dist/development/src/mapper/select/SelectBuilder.cjs +7 -10
  170. package/dist/development/src/mapper/select/SelectBuilder.cjs.map +1 -1
  171. package/dist/development/src/mapper/select/SelectBuilder.js +7 -10
  172. package/dist/development/src/mapper/select/SelectBuilder.js.map +1 -1
  173. package/dist/development/src/mapper/select/SelectHydrator.cjs +1 -1
  174. package/dist/development/src/mapper/select/SelectHydrator.cjs.map +1 -1
  175. package/dist/development/src/mapper/select/SelectHydrator.js +1 -1
  176. package/dist/development/src/mapper/select/SelectHydrator.js.map +1 -1
  177. package/dist/development/src/mapper/select/WhereBuilder.cjs +20 -18
  178. package/dist/development/src/mapper/select/WhereBuilder.cjs.map +1 -1
  179. package/dist/development/src/mapper/select/WhereBuilder.js +20 -18
  180. package/dist/development/src/mapper/select/WhereBuilder.js.map +1 -1
  181. package/dist/development/src/mapper/select/handlers/FieldsVisitor.cjs +3 -2
  182. package/dist/development/src/mapper/select/handlers/FieldsVisitor.cjs.map +1 -1
  183. package/dist/development/src/mapper/select/handlers/FieldsVisitor.js +3 -2
  184. package/dist/development/src/mapper/select/handlers/FieldsVisitor.js.map +1 -1
  185. package/dist/development/src/mapper/select/handlers/FieldsVisitorFactory.cjs.map +1 -1
  186. package/dist/development/src/mapper/select/handlers/FieldsVisitorFactory.js.map +1 -1
  187. package/dist/development/src/mapper/select/handlers/MetaHandler.cjs.map +1 -1
  188. package/dist/development/src/mapper/select/handlers/MetaHandler.js.map +1 -1
  189. package/dist/development/src/mapper/select/optimizer/ConditionOptimizer.cjs.map +1 -1
  190. package/dist/development/src/mapper/select/optimizer/ConditionOptimizer.js.map +1 -1
  191. package/dist/development/src/mapper/select/optimizer/WhereOptimizer.cjs +7 -3
  192. package/dist/development/src/mapper/select/optimizer/WhereOptimizer.cjs.map +1 -1
  193. package/dist/development/src/mapper/select/optimizer/WhereOptimizer.js +7 -3
  194. package/dist/development/src/mapper/select/optimizer/WhereOptimizer.js.map +1 -1
  195. package/dist/development/src/mapper/select/optimizer/WhereReplacer.cjs.map +1 -1
  196. package/dist/development/src/mapper/select/optimizer/WhereReplacer.js.map +1 -1
  197. package/dist/development/src/mapper/select/optimizer/helpers.cjs.map +1 -1
  198. package/dist/development/src/mapper/select/optimizer/helpers.js.map +1 -1
  199. package/dist/development/src/mapper/update/SqlUpdateInputProcessor.cjs.map +1 -1
  200. package/dist/development/src/mapper/update/SqlUpdateInputProcessor.js.map +1 -1
  201. package/dist/development/src/mapper/update/UpdateBuilder.cjs +64 -68
  202. package/dist/development/src/mapper/update/UpdateBuilder.cjs.map +1 -1
  203. package/dist/development/src/mapper/update/UpdateBuilder.js +64 -68
  204. package/dist/development/src/mapper/update/UpdateBuilder.js.map +1 -1
  205. package/dist/development/src/mapper/update/UpdateBuilderFactory.cjs.map +1 -1
  206. package/dist/development/src/mapper/update/UpdateBuilderFactory.js.map +1 -1
  207. package/dist/development/src/mapper/update/Updater.cjs +15 -3
  208. package/dist/development/src/mapper/update/Updater.cjs.map +1 -1
  209. package/dist/development/src/mapper/update/Updater.js +16 -4
  210. package/dist/development/src/mapper/update/Updater.js.map +1 -1
  211. package/dist/development/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.cjs.map +1 -1
  212. package/dist/development/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.js.map +1 -1
  213. package/dist/development/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.cjs.map +1 -1
  214. package/dist/development/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.js.map +1 -1
  215. package/dist/development/src/mapper/update/relations/OneHasManyUpdateInputProcessor.cjs.map +1 -1
  216. package/dist/development/src/mapper/update/relations/OneHasManyUpdateInputProcessor.js.map +1 -1
  217. package/dist/development/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.cjs.map +1 -1
  218. package/dist/development/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.js.map +1 -1
  219. package/dist/development/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.cjs.map +1 -1
  220. package/dist/development/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.js.map +1 -1
  221. package/dist/development/src/resolvers/GraphQlQueryAstFactory.cjs.map +1 -1
  222. package/dist/development/src/resolvers/GraphQlQueryAstFactory.js.map +1 -1
  223. package/dist/development/src/resolvers/MutationResolver.cjs.map +1 -1
  224. package/dist/development/src/resolvers/MutationResolver.js.map +1 -1
  225. package/dist/development/src/resolvers/ReadHelpers.cjs.map +1 -1
  226. package/dist/development/src/resolvers/ReadHelpers.js.map +1 -1
  227. package/dist/development/src/resolvers/ReadResolver.cjs.map +1 -1
  228. package/dist/development/src/resolvers/ReadResolver.js.map +1 -1
  229. package/dist/development/src/resolvers/RefreshViewResolver.cjs.map +1 -1
  230. package/dist/development/src/resolvers/RefreshViewResolver.js.map +1 -1
  231. package/dist/development/src/resolvers/ValidationResolver.cjs.map +1 -1
  232. package/dist/development/src/resolvers/ValidationResolver.js.map +1 -1
  233. package/dist/development/src/schema/ColumnTypeResolver.cjs.map +1 -1
  234. package/dist/development/src/schema/ColumnTypeResolver.js.map +1 -1
  235. package/dist/development/src/schema/ConditionTypeProvider.cjs +2 -0
  236. package/dist/development/src/schema/ConditionTypeProvider.cjs.map +1 -1
  237. package/dist/development/src/schema/ConditionTypeProvider.js +3 -1
  238. package/dist/development/src/schema/ConditionTypeProvider.js.map +1 -1
  239. package/dist/development/src/schema/CustomTypesProvider.cjs.map +1 -1
  240. package/dist/development/src/schema/CustomTypesProvider.js.map +1 -1
  241. package/dist/development/src/schema/EntityTypeProvider.cjs +1 -3
  242. package/dist/development/src/schema/EntityTypeProvider.cjs.map +1 -1
  243. package/dist/development/src/schema/EntityTypeProvider.js +1 -3
  244. package/dist/development/src/schema/EntityTypeProvider.js.map +1 -1
  245. package/dist/development/src/schema/EnumsProvider.cjs.map +1 -1
  246. package/dist/development/src/schema/EnumsProvider.js.map +1 -1
  247. package/dist/development/src/schema/FieldAccessVisitor.cjs.map +1 -1
  248. package/dist/development/src/schema/FieldAccessVisitor.js.map +1 -1
  249. package/dist/development/src/schema/GraphQlSchemaBuilder.cjs +5 -11
  250. package/dist/development/src/schema/GraphQlSchemaBuilder.cjs.map +1 -1
  251. package/dist/development/src/schema/GraphQlSchemaBuilder.js +5 -11
  252. package/dist/development/src/schema/GraphQlSchemaBuilder.js.map +1 -1
  253. package/dist/development/src/schema/GraphQlSchemaBuilderFactory.cjs +103 -3
  254. package/dist/development/src/schema/GraphQlSchemaBuilderFactory.cjs.map +1 -1
  255. package/dist/development/src/schema/GraphQlSchemaBuilderFactory.js +103 -3
  256. package/dist/development/src/schema/GraphQlSchemaBuilderFactory.js.map +1 -1
  257. package/dist/development/src/schema/MutationProvider.cjs.map +1 -1
  258. package/dist/development/src/schema/MutationProvider.js +2 -2
  259. package/dist/development/src/schema/MutationProvider.js.map +1 -1
  260. package/dist/development/src/schema/OperationExtension.cjs +0 -1
  261. package/dist/development/src/schema/OperationExtension.cjs.map +1 -1
  262. package/dist/development/src/schema/OperationExtension.js +0 -1
  263. package/dist/development/src/schema/OperationExtension.js.map +1 -1
  264. package/dist/development/src/schema/OrderByTypeProvider.cjs.map +1 -1
  265. package/dist/development/src/schema/OrderByTypeProvider.js +1 -1
  266. package/dist/development/src/schema/OrderByTypeProvider.js.map +1 -1
  267. package/dist/development/src/schema/PaginatedFieldConfigFactory.cjs.map +1 -1
  268. package/dist/development/src/schema/PaginatedFieldConfigFactory.js +1 -1
  269. package/dist/development/src/schema/PaginatedFieldConfigFactory.js.map +1 -1
  270. package/dist/development/src/schema/QueryProvider.cjs.map +1 -1
  271. package/dist/development/src/schema/QueryProvider.js +2 -2
  272. package/dist/development/src/schema/QueryProvider.js.map +1 -1
  273. package/dist/development/src/schema/RefreshViewMutationProvider.cjs.map +1 -1
  274. package/dist/development/src/schema/RefreshViewMutationProvider.js.map +1 -1
  275. package/dist/development/src/schema/ResultSchemaTypeProvider.cjs.map +1 -1
  276. package/dist/development/src/schema/ResultSchemaTypeProvider.js.map +1 -1
  277. package/dist/development/src/schema/ValidationQueriesProvider.cjs +2 -8
  278. package/dist/development/src/schema/ValidationQueriesProvider.cjs.map +1 -1
  279. package/dist/development/src/schema/ValidationQueriesProvider.js +2 -8
  280. package/dist/development/src/schema/ValidationQueriesProvider.js.map +1 -1
  281. package/dist/development/src/schema/WhereTypeProvider.cjs +1 -3
  282. package/dist/development/src/schema/WhereTypeProvider.cjs.map +1 -1
  283. package/dist/development/src/schema/WhereTypeProvider.js +1 -3
  284. package/dist/development/src/schema/WhereTypeProvider.js.map +1 -1
  285. package/dist/development/src/schema/entities/FieldArgsVisitor.cjs.map +1 -1
  286. package/dist/development/src/schema/entities/FieldArgsVisitor.js.map +1 -1
  287. package/dist/development/src/schema/entities/FieldTypeVisitor.cjs.map +1 -1
  288. package/dist/development/src/schema/entities/FieldTypeVisitor.js.map +1 -1
  289. package/dist/development/src/schema/mutations/ConnectOrCreateRelationInputProvider.cjs.map +1 -1
  290. package/dist/development/src/schema/mutations/ConnectOrCreateRelationInputProvider.js.map +1 -1
  291. package/dist/development/src/schema/mutations/CreateEntityInputFieldVisitor.cjs.map +1 -1
  292. package/dist/development/src/schema/mutations/CreateEntityInputFieldVisitor.js.map +1 -1
  293. package/dist/development/src/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.cjs.map +1 -1
  294. package/dist/development/src/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.js.map +1 -1
  295. package/dist/development/src/schema/mutations/CreateEntityRelationInputFieldVisitor.cjs.map +1 -1
  296. package/dist/development/src/schema/mutations/CreateEntityRelationInputFieldVisitor.js.map +1 -1
  297. package/dist/development/src/schema/mutations/CreateEntityRelationInputProvider.cjs.map +1 -1
  298. package/dist/development/src/schema/mutations/CreateEntityRelationInputProvider.js.map +1 -1
  299. package/dist/development/src/schema/mutations/EntityInputProvider.cjs.map +1 -1
  300. package/dist/development/src/schema/mutations/EntityInputProvider.js.map +1 -1
  301. package/dist/development/src/schema/mutations/UpdateEntityInputFieldVisitor.cjs.map +1 -1
  302. package/dist/development/src/schema/mutations/UpdateEntityInputFieldVisitor.js.map +1 -1
  303. package/dist/development/src/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.cjs.map +1 -1
  304. package/dist/development/src/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.js.map +1 -1
  305. package/dist/development/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.cjs.map +1 -1
  306. package/dist/development/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.js +1 -1
  307. package/dist/development/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.js.map +1 -1
  308. package/dist/development/src/schema/mutations/UpdateEntityRelationInputProvider.cjs.map +1 -1
  309. package/dist/development/src/schema/mutations/UpdateEntityRelationInputProvider.js.map +1 -1
  310. package/dist/development/src/schema/utils.cjs.map +1 -1
  311. package/dist/development/src/schema/utils.js.map +1 -1
  312. package/dist/development/src/utils/Mutex.cjs.map +1 -1
  313. package/dist/development/src/utils/Mutex.js.map +1 -1
  314. package/dist/development/src/utils/ResolveInfoUtils.cjs.map +1 -1
  315. package/dist/development/src/utils/ResolveInfoUtils.js.map +1 -1
  316. package/dist/development/src/utils/accessor.cjs.map +1 -1
  317. package/dist/development/src/utils/accessor.js.map +1 -1
  318. package/dist/development/src/utils/assertNever.cjs.map +1 -1
  319. package/dist/development/src/utils/assertNever.js.map +1 -1
  320. package/dist/development/src/utils/isIt.cjs.map +1 -1
  321. package/dist/development/src/utils/isIt.js.map +1 -1
  322. package/dist/development/src/utils/object.cjs.map +1 -1
  323. package/dist/development/src/utils/object.js.map +1 -1
  324. package/dist/development/src/utils/paginationUtils.cjs.map +1 -1
  325. package/dist/development/src/utils/paginationUtils.js.map +1 -1
  326. package/dist/development/src/utils/promises.cjs.map +1 -1
  327. package/dist/development/src/utils/promises.js.map +1 -1
  328. package/dist/development/src/utils/singletonFactory.cjs.map +1 -1
  329. package/dist/development/src/utils/singletonFactory.js.map +1 -1
  330. package/dist/development/src/utils/strings.cjs.map +1 -1
  331. package/dist/development/src/utils/strings.js.map +1 -1
  332. package/dist/development/src/utils/tuple.cjs.map +1 -1
  333. package/dist/development/src/utils/tuple.js.map +1 -1
  334. package/dist/development/src/utils/uniqueWhereFields.cjs.map +1 -1
  335. package/dist/development/src/utils/uniqueWhereFields.js.map +1 -1
  336. package/dist/development/src/utils/viewComputedId.cjs.map +1 -1
  337. package/dist/development/src/utils/viewComputedId.js.map +1 -1
  338. package/dist/production/index.cjs +1 -2
  339. package/dist/production/index.cjs.map +1 -1
  340. package/dist/production/index.js +2 -3
  341. package/dist/production/index.js.map +1 -1
  342. package/dist/production/src/ExecutionContainer.cjs +120 -31
  343. package/dist/production/src/ExecutionContainer.cjs.map +1 -1
  344. package/dist/production/src/ExecutionContainer.js +121 -32
  345. package/dist/production/src/ExecutionContainer.js.map +1 -1
  346. package/dist/production/src/acl/Authorizator.cjs.map +1 -1
  347. package/dist/production/src/acl/Authorizator.js.map +1 -1
  348. package/dist/production/src/acl/EvaluatedPredicateReplacer.cjs.map +1 -1
  349. package/dist/production/src/acl/EvaluatedPredicateReplacer.js.map +1 -1
  350. package/dist/production/src/acl/PermissionFactory.cjs +29 -15
  351. package/dist/production/src/acl/PermissionFactory.cjs.map +1 -1
  352. package/dist/production/src/acl/PermissionFactory.js +29 -15
  353. package/dist/production/src/acl/PermissionFactory.js.map +1 -1
  354. package/dist/production/src/acl/PredicateFactory.cjs +33 -13
  355. package/dist/production/src/acl/PredicateFactory.cjs.map +1 -1
  356. package/dist/production/src/acl/PredicateFactory.js +33 -13
  357. package/dist/production/src/acl/PredicateFactory.js.map +1 -1
  358. package/dist/production/src/acl/PredicatesInjector.cjs +105 -13
  359. package/dist/production/src/acl/PredicatesInjector.cjs.map +1 -1
  360. package/dist/production/src/acl/PredicatesInjector.js +105 -13
  361. package/dist/production/src/acl/PredicatesInjector.js.map +1 -1
  362. package/dist/production/src/acl/VariableInjector.cjs.map +1 -1
  363. package/dist/production/src/acl/VariableInjector.js.map +1 -1
  364. package/dist/production/src/acl/VariableUtils.cjs.map +1 -1
  365. package/dist/production/src/acl/VariableUtils.js.map +1 -1
  366. package/dist/production/src/exception.cjs.map +1 -1
  367. package/dist/production/src/exception.js.map +1 -1
  368. package/dist/production/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducer.cjs.map +1 -1
  369. package/dist/production/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducer.js.map +1 -1
  370. package/dist/production/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducerExecutionHandler.cjs.map +1 -1
  371. package/dist/production/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducerExecutionHandler.js.map +1 -1
  372. package/dist/production/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.cjs +4 -4
  373. package/dist/production/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.cjs.map +1 -1
  374. package/dist/production/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.js +4 -4
  375. package/dist/production/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.js.map +1 -1
  376. package/dist/production/src/extensions/paginatedHasMany/PaginatedHasManyCountVisitor.cjs.map +1 -1
  377. package/dist/production/src/extensions/paginatedHasMany/PaginatedHasManyCountVisitor.js.map +1 -1
  378. package/dist/production/src/extensions/paginatedHasMany/PaginatedHasManyExecutionHandler.cjs.map +1 -1
  379. package/dist/production/src/extensions/paginatedHasMany/PaginatedHasManyExecutionHandler.js.map +1 -1
  380. package/dist/production/src/extensions/paginatedHasMany/PaginatedHasManyFieldProvider.cjs.map +1 -1
  381. package/dist/production/src/extensions/paginatedHasMany/PaginatedHasManyFieldProvider.js.map +1 -1
  382. package/dist/production/src/extensions/paginatedHasMany/PaginatedHasManyFieldProviderVisitor.cjs.map +1 -1
  383. package/dist/production/src/extensions/paginatedHasMany/PaginatedHasManyFieldProviderVisitor.js.map +1 -1
  384. package/dist/production/src/extensions/paginatedHasMany/PaginatedHasManyNodesVisitor.cjs.map +1 -1
  385. package/dist/production/src/extensions/paginatedHasMany/PaginatedHasManyNodesVisitor.js.map +1 -1
  386. package/dist/production/src/input-validation/ColumnValueResolver.cjs.map +1 -1
  387. package/dist/production/src/input-validation/ColumnValueResolver.js.map +1 -1
  388. package/dist/production/src/input-validation/EntityRulesResolver.cjs.map +1 -1
  389. package/dist/production/src/input-validation/EntityRulesResolver.js.map +1 -1
  390. package/dist/production/src/input-validation/QueryAstFactory.cjs.map +1 -1
  391. package/dist/production/src/input-validation/QueryAstFactory.js.map +1 -1
  392. package/dist/production/src/input-validation/ValidationContext.cjs.map +1 -1
  393. package/dist/production/src/input-validation/ValidationContext.js.map +1 -1
  394. package/dist/production/src/input-validation/ValidationDataSelector.cjs.map +1 -1
  395. package/dist/production/src/input-validation/ValidationDataSelector.js.map +1 -1
  396. package/dist/production/src/input-validation/ValidationEvaluation.cjs.map +1 -1
  397. package/dist/production/src/input-validation/ValidationEvaluation.js.map +1 -1
  398. package/dist/production/src/input-validation/ValidationPath.cjs.map +1 -1
  399. package/dist/production/src/input-validation/ValidationPath.js.map +1 -1
  400. package/dist/production/src/input-validation/dependencies/DependencyCollector.cjs +3 -3
  401. package/dist/production/src/input-validation/dependencies/DependencyCollector.cjs.map +1 -1
  402. package/dist/production/src/input-validation/dependencies/DependencyCollector.js +3 -3
  403. package/dist/production/src/input-validation/dependencies/DependencyCollector.js.map +1 -1
  404. package/dist/production/src/input-validation/dependencies/DependencyMerger.cjs.map +1 -1
  405. package/dist/production/src/input-validation/dependencies/DependencyMerger.js.map +1 -1
  406. package/dist/production/src/input-validation/preValidation/CreateInputPreValidationProcessor.cjs.map +1 -1
  407. package/dist/production/src/input-validation/preValidation/CreateInputPreValidationProcessor.js.map +1 -1
  408. package/dist/production/src/input-validation/preValidation/InputPreValidator.cjs +2 -4
  409. package/dist/production/src/input-validation/preValidation/InputPreValidator.cjs.map +1 -1
  410. package/dist/production/src/input-validation/preValidation/InputPreValidator.js +2 -4
  411. package/dist/production/src/input-validation/preValidation/InputPreValidator.js.map +1 -1
  412. package/dist/production/src/input-validation/preValidation/UpdateInputPreValidationProcessor.cjs.map +1 -1
  413. package/dist/production/src/input-validation/preValidation/UpdateInputPreValidationProcessor.js.map +1 -1
  414. package/dist/production/src/inputProcessing/CreateInputVisitor.cjs +6 -4
  415. package/dist/production/src/inputProcessing/CreateInputVisitor.cjs.map +1 -1
  416. package/dist/production/src/inputProcessing/CreateInputVisitor.js +6 -4
  417. package/dist/production/src/inputProcessing/CreateInputVisitor.js.map +1 -1
  418. package/dist/production/src/inputProcessing/FieldNode.cjs.map +1 -1
  419. package/dist/production/src/inputProcessing/FieldNode.js.map +1 -1
  420. package/dist/production/src/inputProcessing/ObjectNode.cjs.map +1 -1
  421. package/dist/production/src/inputProcessing/ObjectNode.js.map +1 -1
  422. package/dist/production/src/inputProcessing/UniqueWhereExpander.cjs.map +1 -1
  423. package/dist/production/src/inputProcessing/UniqueWhereExpander.js.map +1 -1
  424. package/dist/production/src/inputProcessing/UpdateInputVisitor.cjs +7 -5
  425. package/dist/production/src/inputProcessing/UpdateInputVisitor.cjs.map +1 -1
  426. package/dist/production/src/inputProcessing/UpdateInputVisitor.js +7 -5
  427. package/dist/production/src/inputProcessing/UpdateInputVisitor.js.map +1 -1
  428. package/dist/production/src/introspection/IntrospectionSchemaDefinitionFactory.cjs.map +1 -1
  429. package/dist/production/src/introspection/IntrospectionSchemaDefinitionFactory.js.map +1 -1
  430. package/dist/production/src/introspection/IntrospectionSchemaFactory.cjs.map +1 -1
  431. package/dist/production/src/introspection/IntrospectionSchemaFactory.js.map +1 -1
  432. package/dist/production/src/introspection/content-schema.types.cjs.map +1 -1
  433. package/dist/production/src/introspection/content-schema.types.js.map +1 -1
  434. package/dist/production/src/introspection/introspection.schema.cjs.map +1 -1
  435. package/dist/production/src/introspection/introspection.schema.js.map +1 -1
  436. package/dist/production/src/mapper/CheckedPrimary.cjs.map +1 -1
  437. package/dist/production/src/mapper/CheckedPrimary.js.map +1 -1
  438. package/dist/production/src/mapper/ColumnValue.cjs.map +1 -1
  439. package/dist/production/src/mapper/ColumnValue.js.map +1 -1
  440. package/dist/production/src/mapper/ErrorUtils.cjs.map +1 -1
  441. package/dist/production/src/mapper/ErrorUtils.js +1 -1
  442. package/dist/production/src/mapper/ErrorUtils.js.map +1 -1
  443. package/dist/production/src/mapper/EventManager.cjs.map +1 -1
  444. package/dist/production/src/mapper/EventManager.js.map +1 -1
  445. package/dist/production/src/mapper/JunctionTableManager.cjs +16 -2
  446. package/dist/production/src/mapper/JunctionTableManager.cjs.map +1 -1
  447. package/dist/production/src/mapper/JunctionTableManager.js +17 -3
  448. package/dist/production/src/mapper/JunctionTableManager.js.map +1 -1
  449. package/dist/production/src/mapper/Mapper.cjs +8 -7
  450. package/dist/production/src/mapper/Mapper.cjs.map +1 -1
  451. package/dist/production/src/mapper/Mapper.js +8 -7
  452. package/dist/production/src/mapper/Mapper.js.map +1 -1
  453. package/dist/production/src/mapper/MapperFactory.cjs.map +1 -1
  454. package/dist/production/src/mapper/MapperFactory.js.map +1 -1
  455. package/dist/production/src/mapper/MutationProcessorHelper.cjs.map +1 -1
  456. package/dist/production/src/mapper/MutationProcessorHelper.js.map +1 -1
  457. package/dist/production/src/mapper/Result.cjs +1 -1
  458. package/dist/production/src/mapper/Result.cjs.map +1 -1
  459. package/dist/production/src/mapper/Result.js +1 -1
  460. package/dist/production/src/mapper/Result.js.map +1 -1
  461. package/dist/production/src/mapper/delete/DeleteExecutor.cjs.map +1 -1
  462. package/dist/production/src/mapper/delete/DeleteExecutor.js.map +1 -1
  463. package/dist/production/src/mapper/delete/DeleteState.cjs.map +1 -1
  464. package/dist/production/src/mapper/delete/DeleteState.js.map +1 -1
  465. package/dist/production/src/mapper/delete/DeletedEntitiesStorage.cjs.map +1 -1
  466. package/dist/production/src/mapper/delete/DeletedEntitiesStorage.js.map +1 -1
  467. package/dist/production/src/mapper/delete/helpers.cjs.map +1 -1
  468. package/dist/production/src/mapper/delete/helpers.js.map +1 -1
  469. package/dist/production/src/mapper/insert/InsertBuilder.cjs +27 -31
  470. package/dist/production/src/mapper/insert/InsertBuilder.cjs.map +1 -1
  471. package/dist/production/src/mapper/insert/InsertBuilder.js +27 -31
  472. package/dist/production/src/mapper/insert/InsertBuilder.js.map +1 -1
  473. package/dist/production/src/mapper/insert/InsertBuilderFactory.cjs.map +1 -1
  474. package/dist/production/src/mapper/insert/InsertBuilderFactory.js.map +1 -1
  475. package/dist/production/src/mapper/insert/Inserter.cjs.map +1 -1
  476. package/dist/production/src/mapper/insert/Inserter.js.map +1 -1
  477. package/dist/production/src/mapper/insert/SqlCreateInputProcessor.cjs.map +1 -1
  478. package/dist/production/src/mapper/insert/SqlCreateInputProcessor.js.map +1 -1
  479. package/dist/production/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.cjs.map +1 -1
  480. package/dist/production/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.js.map +1 -1
  481. package/dist/production/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.cjs.map +1 -1
  482. package/dist/production/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.js.map +1 -1
  483. package/dist/production/src/mapper/insert/relations/OneHasManyCreateInputProcessor.cjs.map +1 -1
  484. package/dist/production/src/mapper/insert/relations/OneHasManyCreateInputProcessor.js.map +1 -1
  485. package/dist/production/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.cjs.map +1 -1
  486. package/dist/production/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.js.map +1 -1
  487. package/dist/production/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.cjs.map +1 -1
  488. package/dist/production/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.js.map +1 -1
  489. package/dist/production/src/mapper/select/ConditionBuilder.cjs +7 -5
  490. package/dist/production/src/mapper/select/ConditionBuilder.cjs.map +1 -1
  491. package/dist/production/src/mapper/select/ConditionBuilder.js +8 -6
  492. package/dist/production/src/mapper/select/ConditionBuilder.js.map +1 -1
  493. package/dist/production/src/mapper/select/JoinBuilder.cjs.map +1 -1
  494. package/dist/production/src/mapper/select/JoinBuilder.js.map +1 -1
  495. package/dist/production/src/mapper/select/JoinVisitor.cjs.map +1 -1
  496. package/dist/production/src/mapper/select/JoinVisitor.js.map +1 -1
  497. package/dist/production/src/mapper/select/OrderByBuilder.cjs.map +1 -1
  498. package/dist/production/src/mapper/select/OrderByBuilder.js.map +1 -1
  499. package/dist/production/src/mapper/select/OrderByHelper.cjs.map +1 -1
  500. package/dist/production/src/mapper/select/OrderByHelper.js.map +1 -1
  501. package/dist/production/src/mapper/select/Path.cjs.map +1 -1
  502. package/dist/production/src/mapper/select/Path.js.map +1 -1
  503. package/dist/production/src/mapper/select/RelationFetcher.cjs.map +1 -1
  504. package/dist/production/src/mapper/select/RelationFetcher.js.map +1 -1
  505. package/dist/production/src/mapper/select/SelectBuilder.cjs +7 -10
  506. package/dist/production/src/mapper/select/SelectBuilder.cjs.map +1 -1
  507. package/dist/production/src/mapper/select/SelectBuilder.js +7 -10
  508. package/dist/production/src/mapper/select/SelectBuilder.js.map +1 -1
  509. package/dist/production/src/mapper/select/SelectHydrator.cjs +1 -1
  510. package/dist/production/src/mapper/select/SelectHydrator.cjs.map +1 -1
  511. package/dist/production/src/mapper/select/SelectHydrator.js +1 -1
  512. package/dist/production/src/mapper/select/SelectHydrator.js.map +1 -1
  513. package/dist/production/src/mapper/select/WhereBuilder.cjs +20 -18
  514. package/dist/production/src/mapper/select/WhereBuilder.cjs.map +1 -1
  515. package/dist/production/src/mapper/select/WhereBuilder.js +20 -18
  516. package/dist/production/src/mapper/select/WhereBuilder.js.map +1 -1
  517. package/dist/production/src/mapper/select/handlers/FieldsVisitor.cjs +3 -2
  518. package/dist/production/src/mapper/select/handlers/FieldsVisitor.cjs.map +1 -1
  519. package/dist/production/src/mapper/select/handlers/FieldsVisitor.js +3 -2
  520. package/dist/production/src/mapper/select/handlers/FieldsVisitor.js.map +1 -1
  521. package/dist/production/src/mapper/select/handlers/FieldsVisitorFactory.cjs.map +1 -1
  522. package/dist/production/src/mapper/select/handlers/FieldsVisitorFactory.js.map +1 -1
  523. package/dist/production/src/mapper/select/handlers/MetaHandler.cjs.map +1 -1
  524. package/dist/production/src/mapper/select/handlers/MetaHandler.js.map +1 -1
  525. package/dist/production/src/mapper/select/optimizer/ConditionOptimizer.cjs.map +1 -1
  526. package/dist/production/src/mapper/select/optimizer/ConditionOptimizer.js.map +1 -1
  527. package/dist/production/src/mapper/select/optimizer/WhereOptimizer.cjs +7 -3
  528. package/dist/production/src/mapper/select/optimizer/WhereOptimizer.cjs.map +1 -1
  529. package/dist/production/src/mapper/select/optimizer/WhereOptimizer.js +7 -3
  530. package/dist/production/src/mapper/select/optimizer/WhereOptimizer.js.map +1 -1
  531. package/dist/production/src/mapper/select/optimizer/WhereReplacer.cjs.map +1 -1
  532. package/dist/production/src/mapper/select/optimizer/WhereReplacer.js.map +1 -1
  533. package/dist/production/src/mapper/select/optimizer/helpers.cjs.map +1 -1
  534. package/dist/production/src/mapper/select/optimizer/helpers.js.map +1 -1
  535. package/dist/production/src/mapper/update/SqlUpdateInputProcessor.cjs.map +1 -1
  536. package/dist/production/src/mapper/update/SqlUpdateInputProcessor.js.map +1 -1
  537. package/dist/production/src/mapper/update/UpdateBuilder.cjs +64 -68
  538. package/dist/production/src/mapper/update/UpdateBuilder.cjs.map +1 -1
  539. package/dist/production/src/mapper/update/UpdateBuilder.js +64 -68
  540. package/dist/production/src/mapper/update/UpdateBuilder.js.map +1 -1
  541. package/dist/production/src/mapper/update/UpdateBuilderFactory.cjs.map +1 -1
  542. package/dist/production/src/mapper/update/UpdateBuilderFactory.js.map +1 -1
  543. package/dist/production/src/mapper/update/Updater.cjs +15 -3
  544. package/dist/production/src/mapper/update/Updater.cjs.map +1 -1
  545. package/dist/production/src/mapper/update/Updater.js +16 -4
  546. package/dist/production/src/mapper/update/Updater.js.map +1 -1
  547. package/dist/production/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.cjs.map +1 -1
  548. package/dist/production/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.js.map +1 -1
  549. package/dist/production/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.cjs.map +1 -1
  550. package/dist/production/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.js.map +1 -1
  551. package/dist/production/src/mapper/update/relations/OneHasManyUpdateInputProcessor.cjs.map +1 -1
  552. package/dist/production/src/mapper/update/relations/OneHasManyUpdateInputProcessor.js.map +1 -1
  553. package/dist/production/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.cjs.map +1 -1
  554. package/dist/production/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.js.map +1 -1
  555. package/dist/production/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.cjs.map +1 -1
  556. package/dist/production/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.js.map +1 -1
  557. package/dist/production/src/resolvers/GraphQlQueryAstFactory.cjs.map +1 -1
  558. package/dist/production/src/resolvers/GraphQlQueryAstFactory.js.map +1 -1
  559. package/dist/production/src/resolvers/MutationResolver.cjs.map +1 -1
  560. package/dist/production/src/resolvers/MutationResolver.js.map +1 -1
  561. package/dist/production/src/resolvers/ReadHelpers.cjs.map +1 -1
  562. package/dist/production/src/resolvers/ReadHelpers.js.map +1 -1
  563. package/dist/production/src/resolvers/ReadResolver.cjs.map +1 -1
  564. package/dist/production/src/resolvers/ReadResolver.js.map +1 -1
  565. package/dist/production/src/resolvers/RefreshViewResolver.cjs.map +1 -1
  566. package/dist/production/src/resolvers/RefreshViewResolver.js.map +1 -1
  567. package/dist/production/src/resolvers/ValidationResolver.cjs.map +1 -1
  568. package/dist/production/src/resolvers/ValidationResolver.js.map +1 -1
  569. package/dist/production/src/schema/ColumnTypeResolver.cjs.map +1 -1
  570. package/dist/production/src/schema/ColumnTypeResolver.js.map +1 -1
  571. package/dist/production/src/schema/ConditionTypeProvider.cjs +2 -0
  572. package/dist/production/src/schema/ConditionTypeProvider.cjs.map +1 -1
  573. package/dist/production/src/schema/ConditionTypeProvider.js +3 -1
  574. package/dist/production/src/schema/ConditionTypeProvider.js.map +1 -1
  575. package/dist/production/src/schema/CustomTypesProvider.cjs.map +1 -1
  576. package/dist/production/src/schema/CustomTypesProvider.js.map +1 -1
  577. package/dist/production/src/schema/EntityTypeProvider.cjs +1 -3
  578. package/dist/production/src/schema/EntityTypeProvider.cjs.map +1 -1
  579. package/dist/production/src/schema/EntityTypeProvider.js +1 -3
  580. package/dist/production/src/schema/EntityTypeProvider.js.map +1 -1
  581. package/dist/production/src/schema/EnumsProvider.cjs.map +1 -1
  582. package/dist/production/src/schema/EnumsProvider.js.map +1 -1
  583. package/dist/production/src/schema/FieldAccessVisitor.cjs.map +1 -1
  584. package/dist/production/src/schema/FieldAccessVisitor.js.map +1 -1
  585. package/dist/production/src/schema/GraphQlSchemaBuilder.cjs +5 -11
  586. package/dist/production/src/schema/GraphQlSchemaBuilder.cjs.map +1 -1
  587. package/dist/production/src/schema/GraphQlSchemaBuilder.js +5 -11
  588. package/dist/production/src/schema/GraphQlSchemaBuilder.js.map +1 -1
  589. package/dist/production/src/schema/GraphQlSchemaBuilderFactory.cjs +103 -3
  590. package/dist/production/src/schema/GraphQlSchemaBuilderFactory.cjs.map +1 -1
  591. package/dist/production/src/schema/GraphQlSchemaBuilderFactory.js +103 -3
  592. package/dist/production/src/schema/GraphQlSchemaBuilderFactory.js.map +1 -1
  593. package/dist/production/src/schema/MutationProvider.cjs.map +1 -1
  594. package/dist/production/src/schema/MutationProvider.js +2 -2
  595. package/dist/production/src/schema/MutationProvider.js.map +1 -1
  596. package/dist/production/src/schema/OperationExtension.cjs +0 -1
  597. package/dist/production/src/schema/OperationExtension.cjs.map +1 -1
  598. package/dist/production/src/schema/OperationExtension.js +0 -1
  599. package/dist/production/src/schema/OperationExtension.js.map +1 -1
  600. package/dist/production/src/schema/OrderByTypeProvider.cjs.map +1 -1
  601. package/dist/production/src/schema/OrderByTypeProvider.js +1 -1
  602. package/dist/production/src/schema/OrderByTypeProvider.js.map +1 -1
  603. package/dist/production/src/schema/PaginatedFieldConfigFactory.cjs.map +1 -1
  604. package/dist/production/src/schema/PaginatedFieldConfigFactory.js +1 -1
  605. package/dist/production/src/schema/PaginatedFieldConfigFactory.js.map +1 -1
  606. package/dist/production/src/schema/QueryProvider.cjs.map +1 -1
  607. package/dist/production/src/schema/QueryProvider.js +2 -2
  608. package/dist/production/src/schema/QueryProvider.js.map +1 -1
  609. package/dist/production/src/schema/RefreshViewMutationProvider.cjs.map +1 -1
  610. package/dist/production/src/schema/RefreshViewMutationProvider.js.map +1 -1
  611. package/dist/production/src/schema/ResultSchemaTypeProvider.cjs.map +1 -1
  612. package/dist/production/src/schema/ResultSchemaTypeProvider.js.map +1 -1
  613. package/dist/production/src/schema/ValidationQueriesProvider.cjs +2 -8
  614. package/dist/production/src/schema/ValidationQueriesProvider.cjs.map +1 -1
  615. package/dist/production/src/schema/ValidationQueriesProvider.js +2 -8
  616. package/dist/production/src/schema/ValidationQueriesProvider.js.map +1 -1
  617. package/dist/production/src/schema/WhereTypeProvider.cjs +1 -3
  618. package/dist/production/src/schema/WhereTypeProvider.cjs.map +1 -1
  619. package/dist/production/src/schema/WhereTypeProvider.js +1 -3
  620. package/dist/production/src/schema/WhereTypeProvider.js.map +1 -1
  621. package/dist/production/src/schema/entities/FieldArgsVisitor.cjs.map +1 -1
  622. package/dist/production/src/schema/entities/FieldArgsVisitor.js.map +1 -1
  623. package/dist/production/src/schema/entities/FieldTypeVisitor.cjs.map +1 -1
  624. package/dist/production/src/schema/entities/FieldTypeVisitor.js.map +1 -1
  625. package/dist/production/src/schema/mutations/ConnectOrCreateRelationInputProvider.cjs.map +1 -1
  626. package/dist/production/src/schema/mutations/ConnectOrCreateRelationInputProvider.js.map +1 -1
  627. package/dist/production/src/schema/mutations/CreateEntityInputFieldVisitor.cjs.map +1 -1
  628. package/dist/production/src/schema/mutations/CreateEntityInputFieldVisitor.js.map +1 -1
  629. package/dist/production/src/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.cjs.map +1 -1
  630. package/dist/production/src/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.js.map +1 -1
  631. package/dist/production/src/schema/mutations/CreateEntityRelationInputFieldVisitor.cjs.map +1 -1
  632. package/dist/production/src/schema/mutations/CreateEntityRelationInputFieldVisitor.js.map +1 -1
  633. package/dist/production/src/schema/mutations/CreateEntityRelationInputProvider.cjs.map +1 -1
  634. package/dist/production/src/schema/mutations/CreateEntityRelationInputProvider.js.map +1 -1
  635. package/dist/production/src/schema/mutations/EntityInputProvider.cjs.map +1 -1
  636. package/dist/production/src/schema/mutations/EntityInputProvider.js.map +1 -1
  637. package/dist/production/src/schema/mutations/UpdateEntityInputFieldVisitor.cjs.map +1 -1
  638. package/dist/production/src/schema/mutations/UpdateEntityInputFieldVisitor.js.map +1 -1
  639. package/dist/production/src/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.cjs.map +1 -1
  640. package/dist/production/src/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.js.map +1 -1
  641. package/dist/production/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.cjs.map +1 -1
  642. package/dist/production/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.js +1 -1
  643. package/dist/production/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.js.map +1 -1
  644. package/dist/production/src/schema/mutations/UpdateEntityRelationInputProvider.cjs.map +1 -1
  645. package/dist/production/src/schema/mutations/UpdateEntityRelationInputProvider.js.map +1 -1
  646. package/dist/production/src/schema/utils.cjs.map +1 -1
  647. package/dist/production/src/schema/utils.js.map +1 -1
  648. package/dist/production/src/utils/Mutex.cjs.map +1 -1
  649. package/dist/production/src/utils/Mutex.js.map +1 -1
  650. package/dist/production/src/utils/ResolveInfoUtils.cjs.map +1 -1
  651. package/dist/production/src/utils/ResolveInfoUtils.js.map +1 -1
  652. package/dist/production/src/utils/accessor.cjs.map +1 -1
  653. package/dist/production/src/utils/accessor.js.map +1 -1
  654. package/dist/production/src/utils/assertNever.cjs.map +1 -1
  655. package/dist/production/src/utils/assertNever.js.map +1 -1
  656. package/dist/production/src/utils/isIt.cjs.map +1 -1
  657. package/dist/production/src/utils/isIt.js.map +1 -1
  658. package/dist/production/src/utils/object.cjs.map +1 -1
  659. package/dist/production/src/utils/object.js.map +1 -1
  660. package/dist/production/src/utils/paginationUtils.cjs.map +1 -1
  661. package/dist/production/src/utils/paginationUtils.js.map +1 -1
  662. package/dist/production/src/utils/promises.cjs.map +1 -1
  663. package/dist/production/src/utils/promises.js.map +1 -1
  664. package/dist/production/src/utils/singletonFactory.cjs.map +1 -1
  665. package/dist/production/src/utils/singletonFactory.js.map +1 -1
  666. package/dist/production/src/utils/strings.cjs.map +1 -1
  667. package/dist/production/src/utils/strings.js.map +1 -1
  668. package/dist/production/src/utils/tuple.cjs.map +1 -1
  669. package/dist/production/src/utils/tuple.js.map +1 -1
  670. package/dist/production/src/utils/uniqueWhereFields.cjs.map +1 -1
  671. package/dist/production/src/utils/uniqueWhereFields.js.map +1 -1
  672. package/dist/production/src/utils/viewComputedId.cjs.map +1 -1
  673. package/dist/production/src/utils/viewComputedId.js.map +1 -1
  674. package/dist/tests/cases/integration/graphQlRequests/insert/subOperationFail.test.d.ts +2 -0
  675. package/dist/tests/cases/integration/graphQlRequests/insert/subOperationFail.test.d.ts.map +1 -0
  676. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/schema.d.ts.map +1 -1
  677. package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/schema.d.ts.map +1 -1
  678. package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/schema.d.ts.map +1 -1
  679. package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/schema.d.ts.map +1 -1
  680. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/schema.d.ts.map +1 -1
  681. package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/schema.d.ts.map +1 -1
  682. package/dist/tests/cases/integration/graphQlRequests/validation/conditions.test.d.ts.map +1 -1
  683. package/dist/tests/cases/integration/graphQlRequests/validation/requiredWhen.test.d.ts.map +1 -1
  684. package/dist/tests/cases/integration/graphQlRequests/validation/utils.d.ts.map +1 -1
  685. package/dist/tests/src/test.d.ts.map +1 -1
  686. package/dist/tests/tsconfig.tsbuildinfo +1 -1
  687. package/dist/types/ExecutionContainer.d.ts +32 -3
  688. package/dist/types/ExecutionContainer.d.ts.map +1 -1
  689. package/dist/types/acl/Authorizator.d.ts.map +1 -1
  690. package/dist/types/acl/EvaluatedPredicateReplacer.d.ts.map +1 -1
  691. package/dist/types/acl/PermissionFactory.d.ts +6 -0
  692. package/dist/types/acl/PermissionFactory.d.ts.map +1 -1
  693. package/dist/types/acl/PredicateFactory.d.ts +17 -6
  694. package/dist/types/acl/PredicateFactory.d.ts.map +1 -1
  695. package/dist/types/acl/PredicatesInjector.d.ts +15 -1
  696. package/dist/types/acl/PredicatesInjector.d.ts.map +1 -1
  697. package/dist/types/acl/VariableUtils.d.ts.map +1 -1
  698. package/dist/types/extensions/hasManyToHasOneReducer/HasManyToHasOneReducerExecutionHandler.d.ts.map +1 -1
  699. package/dist/types/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.d.ts.map +1 -1
  700. package/dist/types/extensions/paginatedHasMany/PaginatedHasManyCountVisitor.d.ts.map +1 -1
  701. package/dist/types/extensions/paginatedHasMany/PaginatedHasManyFieldProviderVisitor.d.ts.map +1 -1
  702. package/dist/types/extensions/paginatedHasMany/PaginatedHasManyNodesVisitor.d.ts.map +1 -1
  703. package/dist/types/index.d.ts +1 -1
  704. package/dist/types/index.d.ts.map +1 -1
  705. package/dist/types/input-validation/preValidation/InputPreValidator.d.ts.map +1 -1
  706. package/dist/types/inputProcessing/CreateInputProcessor.d.ts +1 -1
  707. package/dist/types/inputProcessing/CreateInputProcessor.d.ts.map +1 -1
  708. package/dist/types/inputProcessing/CreateInputVisitor.d.ts.map +1 -1
  709. package/dist/types/inputProcessing/UpdateInputProcessor.d.ts +1 -1
  710. package/dist/types/inputProcessing/UpdateInputProcessor.d.ts.map +1 -1
  711. package/dist/types/inputProcessing/UpdateInputVisitor.d.ts.map +1 -1
  712. package/dist/types/introspection/IntrospectionSchemaFactory.d.ts.map +1 -1
  713. package/dist/types/introspection/introspection.schema.d.ts.map +1 -1
  714. package/dist/types/mapper/ColumnValue.d.ts.map +1 -1
  715. package/dist/types/mapper/ErrorUtils.d.ts.map +1 -1
  716. package/dist/types/mapper/EventManager.d.ts.map +1 -1
  717. package/dist/types/mapper/JunctionTableManager.d.ts.map +1 -1
  718. package/dist/types/mapper/Mapper.d.ts.map +1 -1
  719. package/dist/types/mapper/MapperFactory.d.ts.map +1 -1
  720. package/dist/types/mapper/Result.d.ts +2 -2
  721. package/dist/types/mapper/Result.d.ts.map +1 -1
  722. package/dist/types/mapper/delete/DeleteExecutor.d.ts.map +1 -1
  723. package/dist/types/mapper/delete/DeleteState.d.ts.map +1 -1
  724. package/dist/types/mapper/delete/helpers.d.ts.map +1 -1
  725. package/dist/types/mapper/insert/InsertBuilder.d.ts.map +1 -1
  726. package/dist/types/mapper/insert/SqlCreateInputProcessor.d.ts.map +1 -1
  727. package/dist/types/mapper/insert/relations/ManyHasManyCreateInputProcessor.d.ts +2 -2
  728. package/dist/types/mapper/insert/relations/ManyHasManyCreateInputProcessor.d.ts.map +1 -1
  729. package/dist/types/mapper/insert/relations/ManyHasOneCreateInputProcessor.d.ts +2 -2
  730. package/dist/types/mapper/insert/relations/ManyHasOneCreateInputProcessor.d.ts.map +1 -1
  731. package/dist/types/mapper/insert/relations/OneHasManyCreateInputProcessor.d.ts.map +1 -1
  732. package/dist/types/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.d.ts +1 -1
  733. package/dist/types/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.d.ts.map +1 -1
  734. package/dist/types/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.d.ts.map +1 -1
  735. package/dist/types/mapper/select/ConditionBuilder.d.ts.map +1 -1
  736. package/dist/types/mapper/select/JoinBuilder.d.ts.map +1 -1
  737. package/dist/types/mapper/select/Path.d.ts +0 -1
  738. package/dist/types/mapper/select/Path.d.ts.map +1 -1
  739. package/dist/types/mapper/select/RelationFetcher.d.ts.map +1 -1
  740. package/dist/types/mapper/select/SelectBuilder.d.ts.map +1 -1
  741. package/dist/types/mapper/select/SelectExecutionHandler.d.ts.map +1 -1
  742. package/dist/types/mapper/select/WhereBuilder.d.ts.map +1 -1
  743. package/dist/types/mapper/select/handlers/FieldsVisitor.d.ts.map +1 -1
  744. package/dist/types/mapper/select/optimizer/ConditionOptimizer.d.ts.map +1 -1
  745. package/dist/types/mapper/select/optimizer/WhereOptimizer.d.ts +6 -1
  746. package/dist/types/mapper/select/optimizer/WhereOptimizer.d.ts.map +1 -1
  747. package/dist/types/mapper/select/optimizer/WhereReplacer.d.ts.map +1 -1
  748. package/dist/types/mapper/types.d.ts +1 -1
  749. package/dist/types/mapper/types.d.ts.map +1 -1
  750. package/dist/types/mapper/update/SqlUpdateInputProcessor.d.ts.map +1 -1
  751. package/dist/types/mapper/update/UpdateBuilder.d.ts.map +1 -1
  752. package/dist/types/mapper/update/Updater.d.ts +1 -5
  753. package/dist/types/mapper/update/Updater.d.ts.map +1 -1
  754. package/dist/types/mapper/update/relations/ManyHasManyUpdateInputProcessor.d.ts +7 -7
  755. package/dist/types/mapper/update/relations/ManyHasOneUpdateInputProcessor.d.ts +5 -5
  756. package/dist/types/mapper/update/relations/ManyHasOneUpdateInputProcessor.d.ts.map +1 -1
  757. package/dist/types/mapper/update/relations/OneHasManyUpdateInputProcessor.d.ts +7 -7
  758. package/dist/types/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.d.ts.map +1 -1
  759. package/dist/types/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.d.ts +3 -3
  760. package/dist/types/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.d.ts.map +1 -1
  761. package/dist/types/resolvers/GraphQlQueryAstFactory.d.ts.map +1 -1
  762. package/dist/types/resolvers/MutationResolver.d.ts.map +1 -1
  763. package/dist/types/schema/ConditionTypeProvider.d.ts.map +1 -1
  764. package/dist/types/schema/CustomTypesProvider.d.ts.map +1 -1
  765. package/dist/types/schema/EntityTypeProvider.d.ts.map +1 -1
  766. package/dist/types/schema/GraphQlSchemaBuilder.d.ts.map +1 -1
  767. package/dist/types/schema/GraphQlSchemaBuilderFactory.d.ts +0 -1
  768. package/dist/types/schema/GraphQlSchemaBuilderFactory.d.ts.map +1 -1
  769. package/dist/types/schema/MutationProvider.d.ts.map +1 -1
  770. package/dist/types/schema/OperationExtension.d.ts +1 -1
  771. package/dist/types/schema/OperationExtension.d.ts.map +1 -1
  772. package/dist/types/schema/ValidationQueriesProvider.d.ts.map +1 -1
  773. package/dist/types/schema/WhereTypeProvider.d.ts.map +1 -1
  774. package/dist/types/schema/entities/FieldArgsVisitor.d.ts.map +1 -1
  775. package/dist/types/schema/mutations/ConnectOrCreateRelationInputProvider.d.ts.map +1 -1
  776. package/dist/types/schema/mutations/CreateEntityInputFieldVisitor.d.ts.map +1 -1
  777. package/dist/types/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.d.ts.map +1 -1
  778. package/dist/types/schema/mutations/CreateEntityRelationInputFieldVisitor.d.ts.map +1 -1
  779. package/dist/types/schema/mutations/EntityInputProvider.d.ts.map +1 -1
  780. package/dist/types/schema/mutations/UpdateEntityInputFieldVisitor.d.ts +1 -1
  781. package/dist/types/schema/mutations/UpdateEntityInputFieldVisitor.d.ts.map +1 -1
  782. package/dist/types/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.d.ts.map +1 -1
  783. package/dist/types/schema/mutations/UpdateEntityRelationInputFieldVisitor.d.ts.map +1 -1
  784. package/dist/types/tsconfig.tsbuildinfo +1 -1
  785. package/dist/types/utils/object.d.ts.map +1 -1
  786. package/graphql.codegen.yml +1 -1
  787. package/package.json +20 -16
  788. package/src/ExecutionContainer.ts +191 -123
  789. package/src/acl/Authorizator.ts +5 -3
  790. package/src/acl/EvaluatedPredicateReplacer.ts +0 -5
  791. package/src/acl/PermissionFactory.ts +56 -24
  792. package/src/acl/PredicateFactory.ts +38 -10
  793. package/src/acl/PredicatesInjector.ts +169 -13
  794. package/src/acl/VariableUtils.ts +0 -2
  795. package/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducerExecutionHandler.ts +0 -2
  796. package/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.ts +9 -13
  797. package/src/extensions/paginatedHasMany/PaginatedHasManyCountVisitor.ts +3 -4
  798. package/src/extensions/paginatedHasMany/PaginatedHasManyExecutionHandler.ts +2 -2
  799. package/src/extensions/paginatedHasMany/PaginatedHasManyFieldProviderVisitor.ts +2 -5
  800. package/src/extensions/paginatedHasMany/PaginatedHasManyNodesVisitor.ts +3 -4
  801. package/src/index.ts +8 -7
  802. package/src/input-validation/ValidationEvaluation.ts +3 -6
  803. package/src/input-validation/dependencies/DependencyCollector.ts +3 -3
  804. package/src/input-validation/preValidation/InputPreValidator.ts +6 -8
  805. package/src/inputProcessing/CreateInputProcessor.ts +1 -2
  806. package/src/inputProcessing/CreateInputVisitor.ts +7 -8
  807. package/src/inputProcessing/UpdateInputProcessor.ts +1 -2
  808. package/src/inputProcessing/UpdateInputVisitor.ts +9 -10
  809. package/src/introspection/IntrospectionSchemaFactory.ts +3 -4
  810. package/src/introspection/content-schema.types.ts +3 -3
  811. package/src/introspection/introspection.schema.ts +0 -2
  812. package/src/mapper/ColumnValue.ts +0 -1
  813. package/src/mapper/ErrorUtils.ts +19 -7
  814. package/src/mapper/EventManager.ts +0 -2
  815. package/src/mapper/JunctionTableManager.ts +19 -17
  816. package/src/mapper/Mapper.ts +13 -6
  817. package/src/mapper/MapperFactory.ts +0 -1
  818. package/src/mapper/Result.ts +2 -2
  819. package/src/mapper/delete/DeleteExecutor.ts +6 -7
  820. package/src/mapper/delete/DeleteState.ts +0 -1
  821. package/src/mapper/delete/helpers.ts +2 -3
  822. package/src/mapper/insert/InsertBuilder.ts +32 -35
  823. package/src/mapper/insert/Inserter.ts +0 -1
  824. package/src/mapper/insert/SqlCreateInputProcessor.ts +3 -6
  825. package/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.ts +0 -1
  826. package/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.ts +1 -2
  827. package/src/mapper/insert/relations/OneHasManyCreateInputProcessor.ts +0 -1
  828. package/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.ts +1 -4
  829. package/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.ts +2 -9
  830. package/src/mapper/select/ConditionBuilder.ts +19 -13
  831. package/src/mapper/select/JoinBuilder.ts +4 -2
  832. package/src/mapper/select/OrderByHelper.ts +2 -2
  833. package/src/mapper/select/Path.ts +0 -2
  834. package/src/mapper/select/RelationFetcher.ts +31 -26
  835. package/src/mapper/select/SelectBuilder.ts +16 -14
  836. package/src/mapper/select/SelectExecutionHandler.ts +30 -28
  837. package/src/mapper/select/SelectHydrator.ts +1 -1
  838. package/src/mapper/select/WhereBuilder.ts +49 -43
  839. package/src/mapper/select/handlers/FieldsVisitor.ts +3 -3
  840. package/src/mapper/select/optimizer/ConditionOptimizer.ts +0 -7
  841. package/src/mapper/select/optimizer/WhereOptimizer.ts +37 -15
  842. package/src/mapper/select/optimizer/WhereReplacer.ts +6 -3
  843. package/src/mapper/select/optimizer/helpers.ts +1 -1
  844. package/src/mapper/types.ts +19 -18
  845. package/src/mapper/update/SqlUpdateInputProcessor.ts +1 -1
  846. package/src/mapper/update/UpdateBuilder.ts +77 -81
  847. package/src/mapper/update/Updater.ts +23 -5
  848. package/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.ts +2 -4
  849. package/src/mapper/update/relations/OneHasManyUpdateInputProcessor.ts +2 -2
  850. package/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.ts +7 -4
  851. package/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.ts +23 -9
  852. package/src/resolvers/GraphQlQueryAstFactory.ts +0 -1
  853. package/src/resolvers/MutationResolver.ts +13 -15
  854. package/src/schema/ColumnTypeResolver.ts +1 -1
  855. package/src/schema/ConditionTypeProvider.ts +3 -1
  856. package/src/schema/CustomTypesProvider.ts +1 -2
  857. package/src/schema/EntityTypeProvider.ts +1 -3
  858. package/src/schema/GraphQlSchemaBuilder.ts +8 -7
  859. package/src/schema/GraphQlSchemaBuilderFactory.ts +150 -68
  860. package/src/schema/MutationProvider.ts +5 -10
  861. package/src/schema/OperationExtension.ts +1 -2
  862. package/src/schema/ValidationQueriesProvider.ts +2 -6
  863. package/src/schema/WhereTypeProvider.ts +1 -3
  864. package/src/schema/entities/FieldArgsVisitor.ts +5 -4
  865. package/src/schema/mutations/ConnectOrCreateRelationInputProvider.ts +0 -2
  866. package/src/schema/mutations/CreateEntityInputFieldVisitor.ts +3 -4
  867. package/src/schema/mutations/CreateEntityRelationAllowedOperationsVisitor.ts +3 -4
  868. package/src/schema/mutations/CreateEntityRelationInputFieldVisitor.ts +10 -10
  869. package/src/schema/mutations/EntityInputProvider.ts +1 -7
  870. package/src/schema/mutations/UpdateEntityInputFieldVisitor.ts +3 -4
  871. package/src/schema/mutations/UpdateEntityRelationAllowedOperationsVisitor.ts +3 -4
  872. package/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.ts +6 -13
  873. package/src/utils/object.ts +3 -2
  874. package/tests/cases/bugs/bug-filter-or.test.ts +1 -5
  875. package/tests/cases/bugs/bug-update-by-nested-unique.test.ts +3 -6
  876. package/tests/cases/bugs/bug102.test.ts +2 -9
  877. package/tests/cases/integration/graphQlRequests/delete/aclDelete.test.ts +2 -3
  878. package/tests/cases/integration/graphQlRequests/delete/additionalDeleteFilter.test.ts +1 -2
  879. package/tests/cases/integration/graphQlRequests/delete/cascadeDelete.test.ts +12 -19
  880. package/tests/cases/integration/graphQlRequests/delete/deleteById.test.ts +0 -2
  881. package/tests/cases/integration/graphQlRequests/delete/orphanRemoval.test.ts +4 -5
  882. package/tests/cases/integration/graphQlRequests/delete/restrictOnDelete.test.ts +6 -13
  883. package/tests/cases/integration/graphQlRequests/delete/setNullOnDelete.test.ts +9 -13
  884. package/tests/cases/integration/graphQlRequests/insert/acl/setField.test.ts +0 -2
  885. package/tests/cases/integration/graphQlRequests/insert/aclInsert.test.ts +0 -1
  886. package/tests/cases/integration/graphQlRequests/insert/basicInsert.test.ts +0 -1
  887. package/tests/cases/integration/graphQlRequests/insert/insertCustomId.test.ts +0 -1
  888. package/tests/cases/integration/graphQlRequests/insert/jsonInsert.test.ts +2 -2
  889. package/tests/cases/integration/graphQlRequests/insert/manyHasManyInverse/create.test.ts +1 -3
  890. package/tests/cases/integration/graphQlRequests/insert/manyHasManyOwning/create.test.ts +1 -4
  891. package/tests/cases/integration/graphQlRequests/insert/manyHasOne/connectOrCreate.test.ts +2 -10
  892. package/tests/cases/integration/graphQlRequests/insert/manyHasOne/create.test.ts +1 -5
  893. package/tests/cases/integration/graphQlRequests/insert/oneHasMany/connect.test.ts +3 -4
  894. package/tests/cases/integration/graphQlRequests/insert/oneHasMany/create.test.ts +2 -5
  895. package/tests/cases/integration/graphQlRequests/insert/oneHasOneInverse/create.test.ts +1 -3
  896. package/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/create.test.ts +1 -3
  897. package/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/empty.test.ts +1 -3
  898. package/tests/cases/integration/graphQlRequests/insert/subOperationFail.test.ts +107 -0
  899. package/tests/cases/integration/graphQlRequests/insert/validation/toBeFixed.test.ts +1 -9
  900. package/tests/cases/integration/graphQlRequests/query/acl/differentRowAndFieldPredicate.test.ts +0 -4
  901. package/tests/cases/integration/graphQlRequests/query/acl/fieldRestrictedByLocale.test.ts +1 -4
  902. package/tests/cases/integration/graphQlRequests/query/acl/isNullAcl.test.ts +0 -4
  903. package/tests/cases/integration/graphQlRequests/query/acl/nestedPredicate.test.ts +1 -6
  904. package/tests/cases/integration/graphQlRequests/query/acl/orPredicate.test.ts +0 -2
  905. package/tests/cases/integration/graphQlRequests/query/acl/predicateElimination.test.ts +676 -2
  906. package/tests/cases/integration/graphQlRequests/query/acl/relationAcl.test.ts +8 -11
  907. package/tests/cases/integration/graphQlRequests/query/acl/rowPredicateSubset.test.ts +2 -6
  908. package/tests/cases/integration/graphQlRequests/query/acl/sameRowAndFieldPredicate.test.ts +0 -2
  909. package/tests/cases/integration/graphQlRequests/query/filter/backReferencedFilter.test.ts +1 -4
  910. package/tests/cases/integration/graphQlRequests/query/filter/complexCondition.test.ts +0 -1
  911. package/tests/cases/integration/graphQlRequests/query/filter/composedFilter.test.ts +0 -1
  912. package/tests/cases/integration/graphQlRequests/query/filter/containsQuery.test.ts +0 -1
  913. package/tests/cases/integration/graphQlRequests/query/filter/manyHasManyOwnerRelation.test.ts +16 -18
  914. package/tests/cases/integration/graphQlRequests/query/filter/manyHasOneRelation.test.ts +0 -1
  915. package/tests/cases/integration/graphQlRequests/query/filter/oneHasManyRelation.test.ts +1 -3
  916. package/tests/cases/integration/graphQlRequests/query/formatting/dateFormat.test.ts +0 -1
  917. package/tests/cases/integration/graphQlRequests/query/graphqlFeatures/alias.test.ts +0 -1
  918. package/tests/cases/integration/graphQlRequests/query/graphqlFeatures/fragments.test.ts +6 -8
  919. package/tests/cases/integration/graphQlRequests/query/misc/aliasedType.test.ts +0 -1
  920. package/tests/cases/integration/graphQlRequests/query/misc/longAliasHash.test.ts +1 -3
  921. package/tests/cases/integration/graphQlRequests/query/misc/reducedHasMany.test.ts +2 -10
  922. package/tests/cases/integration/graphQlRequests/query/misc/transaction.test.ts +0 -2
  923. package/tests/cases/integration/graphQlRequests/query/pagination/hasManyLimit.test.ts +3 -10
  924. package/tests/cases/integration/graphQlRequests/query/pagination/paginate.test.ts +1 -3
  925. package/tests/cases/integration/graphQlRequests/query/pagination/paginateAliased.test.ts +1 -3
  926. package/tests/cases/integration/graphQlRequests/query/pagination/simpleLimit.test.ts +0 -1
  927. package/tests/cases/integration/graphQlRequests/query/relations/advanced.test.ts +3 -7
  928. package/tests/cases/integration/graphQlRequests/query/relations/manyHasManyInverse.test.ts +4 -9
  929. package/tests/cases/integration/graphQlRequests/query/relations/manyHasManyOwning.test.ts +5 -8
  930. package/tests/cases/integration/graphQlRequests/query/relations/manyHasOne.test.ts +0 -2
  931. package/tests/cases/integration/graphQlRequests/query/relations/oneHasMany.test.ts +2 -5
  932. package/tests/cases/integration/graphQlRequests/query/relations/oneHasOneInverse.test.ts +1 -3
  933. package/tests/cases/integration/graphQlRequests/query/relations/oneHasOneOwner.test.ts +1 -3
  934. package/tests/cases/integration/graphQlRequests/query/sorting/byRelations.test.ts +6 -8
  935. package/tests/cases/integration/graphQlRequests/query/sorting/defaultOrdering.test.ts +8 -8
  936. package/tests/cases/integration/graphQlRequests/query/sorting/orderBy.test.ts +0 -1
  937. package/tests/cases/integration/graphQlRequests/query/sorting/randomSort.test.ts +1 -5
  938. package/tests/cases/integration/graphQlRequests/query/sorting/sortNulls.test.ts +0 -1
  939. package/tests/cases/integration/graphQlRequests/query/sorting/sortedHasMany.test.ts +0 -1
  940. package/tests/cases/integration/graphQlRequests/query/unique/basicQueryById.test.ts +0 -1
  941. package/tests/cases/integration/graphQlRequests/query/unique/composedUnique.test.ts +2 -5
  942. package/tests/cases/integration/graphQlRequests/query/unique/oneHasManyUnique.test.ts +2 -5
  943. package/tests/cases/integration/graphQlRequests/query/unique/uniqueWithFilter.test.ts +0 -1
  944. package/tests/cases/integration/graphQlRequests/query/view/view.test.ts +0 -1
  945. package/tests/cases/integration/graphQlRequests/update/acl/aclUpdate.test.ts +8 -11
  946. package/tests/cases/integration/graphQlRequests/update/additionalFilter.test.ts +53 -3
  947. package/tests/cases/integration/graphQlRequests/update/basic/columnUpdate.test.ts +2 -3
  948. package/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/connect.test.ts +0 -1
  949. package/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/create.test.ts +0 -1
  950. package/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/delete.test.ts +0 -1
  951. package/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/disconnect.test.ts +0 -1
  952. package/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/schema.ts +1 -2
  953. package/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/update.test.ts +2 -2
  954. package/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/upsert.test.ts +2 -2
  955. package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/connect.test.ts +0 -1
  956. package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/connectOrCreate.test.ts +0 -2
  957. package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/create.test.ts +0 -1
  958. package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/delete.test.ts +0 -1
  959. package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/disconnect.test.ts +0 -1
  960. package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/schema.ts +1 -2
  961. package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/update.test.ts +2 -2
  962. package/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/upsert.test.ts +7 -6
  963. package/tests/cases/integration/graphQlRequests/update/manyHasOne/connect.test.ts +2 -2
  964. package/tests/cases/integration/graphQlRequests/update/manyHasOne/create.test.ts +2 -2
  965. package/tests/cases/integration/graphQlRequests/update/manyHasOne/delete.test.ts +8 -6
  966. package/tests/cases/integration/graphQlRequests/update/manyHasOne/disconnect.test.ts +2 -3
  967. package/tests/cases/integration/graphQlRequests/update/manyHasOne/schema.ts +2 -5
  968. package/tests/cases/integration/graphQlRequests/update/manyHasOne/update.test.ts +2 -2
  969. package/tests/cases/integration/graphQlRequests/update/manyHasOne/upsert.test.ts +4 -3
  970. package/tests/cases/integration/graphQlRequests/update/oneHasMany/combination.test.ts +0 -1
  971. package/tests/cases/integration/graphQlRequests/update/oneHasMany/connect.test.ts +2 -2
  972. package/tests/cases/integration/graphQlRequests/update/oneHasMany/connectOrCreate.test.ts +2 -2
  973. package/tests/cases/integration/graphQlRequests/update/oneHasMany/create.test.ts +0 -1
  974. package/tests/cases/integration/graphQlRequests/update/oneHasMany/delete.test.ts +0 -1
  975. package/tests/cases/integration/graphQlRequests/update/oneHasMany/disconnect.test.ts +2 -2
  976. package/tests/cases/integration/graphQlRequests/update/oneHasMany/schema.ts +2 -8
  977. package/tests/cases/integration/graphQlRequests/update/oneHasMany/update.test.ts +7 -8
  978. package/tests/cases/integration/graphQlRequests/update/oneHasMany/upsert.test.ts +2 -2
  979. package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/connect.test.ts +10 -6
  980. package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/create.test.ts +2 -2
  981. package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/delete.test.ts +1 -4
  982. package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/disconnect.test.ts +2 -2
  983. package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/schema.ts +2 -6
  984. package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/update.test.ts +2 -2
  985. package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/upsert.test.ts +2 -2
  986. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/connect.test.ts +8 -5
  987. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/connectOrCreate.test.ts +2 -1
  988. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/create.test.ts +4 -2
  989. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/delete.test.ts +5 -5
  990. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/disconnect.test.ts +2 -2
  991. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/schema.ts +2 -6
  992. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/update.test.ts +2 -2
  993. package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/upsert.test.ts +4 -3
  994. package/tests/cases/integration/graphQlRequests/update/queryPortal.test.ts +4 -4
  995. package/tests/cases/integration/graphQlRequests/update/transaction.test.ts +6 -5
  996. package/tests/cases/integration/graphQlRequests/update/validation/toBeFixed.test.ts +9 -10
  997. package/tests/cases/integration/graphQlRequests/upsert/basicUpsert.test.ts +5 -9
  998. package/tests/cases/integration/graphQlRequests/validation/conditions.test.ts +1 -1
  999. package/tests/cases/integration/graphQlRequests/validation/nestedValidation.test.ts +0 -2
  1000. package/tests/cases/integration/graphQlRequests/validation/optionalAssert.test.ts +0 -2
  1001. package/tests/cases/integration/graphQlRequests/validation/required.test.ts +0 -2
  1002. package/tests/cases/integration/graphQlRequests/validation/requiredWhen.test.ts +1 -2
  1003. package/tests/cases/integration/graphQlRequests/validation/rules/andRule.test.ts +0 -1
  1004. package/tests/cases/integration/graphQlRequests/validation/rules/lengthRangeRule.test.ts +0 -1
  1005. package/tests/cases/integration/graphQlRequests/validation/rules/maxLengthRule.test.ts +0 -1
  1006. package/tests/cases/integration/graphQlRequests/validation/rules/minLength.test.ts +0 -3
  1007. package/tests/cases/integration/graphQlRequests/validation/rules/notEmptyRule.test.ts +0 -4
  1008. package/tests/cases/integration/graphQlRequests/validation/rules/notRule.test.ts +0 -2
  1009. package/tests/cases/integration/graphQlRequests/validation/rules/orRule.test.ts +0 -3
  1010. package/tests/cases/integration/graphQlRequests/validation/rules/patternRule.test.ts +0 -1
  1011. package/tests/cases/integration/graphQlRequests/validation/rules/rangeRule.test.ts +0 -1
  1012. package/tests/cases/integration/graphQlRequests/validation/utils.ts +2 -6
  1013. package/tests/cases/integration/graphQlSchema/graphQlSchemaBuilder.test.ts +31 -61
  1014. package/tests/cases/integration/graphQlSchema/schema-column-types.gql +1 -0
  1015. package/tests/cases/unit/aclVariablesFactory.test.ts +3 -7
  1016. package/tests/cases/unit/conditionOptimizer.test.ts +122 -77
  1017. package/tests/cases/unit/inputPreValidator.test.ts +5 -17
  1018. package/tests/cases/unit/inputValidation.test.ts +2 -7
  1019. package/tests/cases/unit/orderbyHelper.test.ts +8 -6
  1020. package/tests/cases/unit/permissionMerger.test.ts +163 -7
  1021. package/tests/cases/unit/predicatesFactory.test.ts +75 -1
  1022. package/tests/cases/unit/predicatesInjector.test.ts +1065 -13
  1023. package/tests/cases/unit/uuidType.test.ts +1 -2
  1024. package/tests/cases/unit/variableInjector.test.ts +1 -4
  1025. package/tests/cases/unit/whereBuilder.test.ts +8 -5
  1026. package/tests/cases/unit/whereOptimizer.test.ts +337 -244
  1027. package/tests/src/test.ts +3 -2
  1028. package/tests/src/testGraphql.ts +1 -1
  1029. package/tests/.eslintrc.cjs +0 -5
  1030. package/vitest.config.ts +0 -3
@@ -1 +1 @@
1
- {"version":3,"file":"SelectHydrator.cjs","sources":["../../../../../../packages/engine-content-api/src/mapper/select/SelectHydrator.ts"],"sourcesContent":["import { Path } from './Path'\nimport { Value } from '@contember/schema'\nimport { getFulfilledValues, getRejections } from '../../utils'\nimport { logger } from '@contember/logger'\n\ntype DataPromises = {\n\tpath: Path\n\tgetParentValue: ColumnValueGetter<Value.PrimaryValue | null>\n\tdata: Promise<SelectNestedData>\n\tdefaultValue: SelectNestedDefaultValue\n}\n\ntype ResolvedData = {\n\tpath: Path\n\tgetParentValue: ColumnValueGetter<Value.PrimaryValue | null>\n\tdata: SelectNestedData\n\tdefaultValue: SelectNestedDefaultValue\n}\n\nexport type ColumnValueGetter<T extends Value.FieldValue = Value.FieldValue> = (row: SelectRow) => T\n\ntype Column = {\n\tpath: Path\n\tgetValue: ColumnValueGetter\n}\n\nexport class SelectHydrator {\n\tprivate columns: Column[] = []\n\tprivate promises: DataPromises[] = []\n\n\tpublic addColumn(path: Path, getValue: ColumnValueGetter) {\n\t\tthis.columns.push({ path, getValue })\n\t}\n\n\tpublic addPromise(\n\t\tpath: Path,\n\t\tgetParentValue: ColumnValueGetter<Value.PrimaryValue | null>,\n\t\tdata: Promise<SelectNestedData>,\n\t\tdefaultValue: SelectNestedDefaultValue,\n\t) {\n\t\tthis.promises.push({ path, getParentValue, data, defaultValue })\n\t}\n\n\tpublic async hydrateGroups(rows: SelectRow[], groupBy: string): Promise<SelectGroupedObjects> {\n\t\tconst resolved = await this.resolveDataPromises()\n\t\tconst result: SelectGroupedObjects = {}\n\t\tfor (let row of rows) {\n\t\t\tconst key = row[groupBy] as Value.PrimaryValue\n\t\t\tif (!result[key]) {\n\t\t\t\tresult[key] = []\n\t\t\t}\n\t\t\tresult[key].push(this.hydrateRow(row, resolved))\n\t\t}\n\t\treturn result\n\t}\n\n\tpublic async hydrateAll(rows: SelectRow[]): Promise<SelectResultObject[]>\n\tpublic async hydrateAll(rows: SelectRow[], indexBy: string): Promise<SelectIndexedResultObjects>\n\n\tpublic async hydrateAll(\n\t\trows: SelectRow[],\n\t\tindexBy?: string,\n\t): Promise<SelectResultObject[] | SelectIndexedResultObjects> {\n\t\tconst resolved = await this.resolveDataPromises()\n\t\tif (indexBy) {\n\t\t\tconst result: SelectIndexedResultObjects = {}\n\t\t\tfor (let row of rows) {\n\t\t\t\tresult[row[indexBy] as Value.PrimaryValue] = this.hydrateRow(row, resolved)\n\t\t\t}\n\t\t\treturn result\n\t\t}\n\t\tconst result: SelectResultObject[] = []\n\t\tfor (const row of rows) {\n\t\t\tresult.push(this.hydrateRow(row, resolved))\n\t\t}\n\t\treturn result\n\t}\n\n\tprivate hydrateRow(row: SelectRow, resolvedData: ResolvedData[]): SelectResultObject {\n\t\tconst result: SelectResultObject = {}\n\n\t\tfor (let columnPath of this.columns) {\n\t\t\tconst path = [...columnPath.path.path]\n\t\t\tconst last: string = path.pop() as string\n\t\t\tconst currentObject = path.reduce<any>((obj, part) => (obj[part] = obj[part] || {}), result)\n\n\t\t\tcurrentObject[last] = this.formatValue(columnPath.getValue(row))\n\t\t}\n\n\t\tfor (let { path, getParentValue, data, defaultValue } of resolvedData) {\n\t\t\tconst pathTmp = [...path.path]\n\t\t\tconst last = pathTmp.pop() as string\n\t\t\tconst currentObject = pathTmp.reduce<any>((obj, part) => (obj && obj[part]) || undefined, result)\n\t\t\tconst parentValue = getParentValue(row)\n\t\t\tif (currentObject) {\n\t\t\t\tcurrentObject[last] = (parentValue ? data[parentValue] : undefined) || defaultValue\n\t\t\t}\n\t\t}\n\n\t\treturn result\n\t}\n\n\tprivate async resolveDataPromises(): Promise<ResolvedData[]> {\n\t\tconst results = await Promise.allSettled(this.promises.map(async (it): Promise<ResolvedData> => ({\n\t\t\tdefaultValue: it.defaultValue,\n\t\t\tgetParentValue: it.getParentValue,\n\t\t\tpath: it.path,\n\t\t\tdata: await it.data,\n\t\t})))\n\t\tconst failures = getRejections(results)\n\t\tif (failures.length > 0) {\n\t\t\tif (failures.length > 1) {\n\t\t\t\tfailures.slice(1).map(e => logger.error(e, { loc: 'SelectHydrator' }))\n\t\t\t}\n\t\t\tthrow failures[0]\n\t\t}\n\n\t\treturn getFulfilledValues(results)\n\t}\n\n\tprivate formatValue(value: any) {\n\t\tif (value instanceof Date) {\n\t\t\treturn value.toISOString()\n\t\t}\n\t\treturn value\n\t}\n}\n\nexport type SelectRow = { [key: string]: Value.FieldValue }\nexport type SelectResultObject = Value.Object\nexport type SelectIndexedResultObjects = { [key: string]: SelectResultObject }\nexport type SelectGroupedObjects = { [groupingKey: string]: SelectResultObject[] }\nexport type SelectNestedData = SelectGroupedObjects | SelectIndexedResultObjects\nexport type SelectNestedDefaultValue = [] | null\n"],"names":["result","getRejections","logger","getFulfilledValues"],"mappings":"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"}
1
+ {"version":3,"file":"SelectHydrator.cjs","sources":["../../../../../../packages/engine-content-api/src/mapper/select/SelectHydrator.ts"],"sourcesContent":["import { Path } from './Path'\nimport { Value } from '@contember/schema'\nimport { getFulfilledValues, getRejections } from '../../utils'\nimport { logger } from '@contember/logger'\n\ntype DataPromises = {\n\tpath: Path\n\tgetParentValue: ColumnValueGetter<Value.PrimaryValue | null>\n\tdata: Promise<SelectNestedData>\n\tdefaultValue: SelectNestedDefaultValue\n}\n\ntype ResolvedData = {\n\tpath: Path\n\tgetParentValue: ColumnValueGetter<Value.PrimaryValue | null>\n\tdata: SelectNestedData\n\tdefaultValue: SelectNestedDefaultValue\n}\n\nexport type ColumnValueGetter<T extends Value.FieldValue = Value.FieldValue> = (row: SelectRow) => T\n\ntype Column = {\n\tpath: Path\n\tgetValue: ColumnValueGetter\n}\n\nexport class SelectHydrator {\n\tprivate columns: Column[] = []\n\tprivate promises: DataPromises[] = []\n\n\tpublic addColumn(path: Path, getValue: ColumnValueGetter) {\n\t\tthis.columns.push({ path, getValue })\n\t}\n\n\tpublic addPromise(\n\t\tpath: Path,\n\t\tgetParentValue: ColumnValueGetter<Value.PrimaryValue | null>,\n\t\tdata: Promise<SelectNestedData>,\n\t\tdefaultValue: SelectNestedDefaultValue,\n\t) {\n\t\tthis.promises.push({ path, getParentValue, data, defaultValue })\n\t}\n\n\tpublic async hydrateGroups(rows: SelectRow[], groupBy: string): Promise<SelectGroupedObjects> {\n\t\tconst resolved = await this.resolveDataPromises()\n\t\tconst result: SelectGroupedObjects = {}\n\t\tfor (let row of rows) {\n\t\t\tconst key = row[groupBy] as Value.PrimaryValue\n\t\t\tif (!result[key]) {\n\t\t\t\tresult[key] = []\n\t\t\t}\n\t\t\tresult[key].push(this.hydrateRow(row, resolved))\n\t\t}\n\t\treturn result\n\t}\n\n\tpublic async hydrateAll(rows: SelectRow[]): Promise<SelectResultObject[]>\n\tpublic async hydrateAll(rows: SelectRow[], indexBy: string): Promise<SelectIndexedResultObjects>\n\n\tpublic async hydrateAll(\n\t\trows: SelectRow[],\n\t\tindexBy?: string,\n\t): Promise<SelectResultObject[] | SelectIndexedResultObjects> {\n\t\tconst resolved = await this.resolveDataPromises()\n\t\tif (indexBy) {\n\t\t\tconst result: SelectIndexedResultObjects = {}\n\t\t\tfor (let row of rows) {\n\t\t\t\tresult[row[indexBy] as Value.PrimaryValue] = this.hydrateRow(row, resolved)\n\t\t\t}\n\t\t\treturn result\n\t\t}\n\t\tconst result: SelectResultObject[] = []\n\t\tfor (const row of rows) {\n\t\t\tresult.push(this.hydrateRow(row, resolved))\n\t\t}\n\t\treturn result\n\t}\n\n\tprivate hydrateRow(row: SelectRow, resolvedData: ResolvedData[]): SelectResultObject {\n\t\tconst result: SelectResultObject = {}\n\n\t\tfor (let columnPath of this.columns) {\n\t\t\tconst path = [...columnPath.path.path]\n\t\t\tconst last: string = path.pop() as string\n\t\t\tconst currentObject = path.reduce<any>((obj, part) => (obj[part] = obj[part] || {}), result)\n\n\t\t\tcurrentObject[last] = this.formatValue(columnPath.getValue(row))\n\t\t}\n\n\t\tfor (let { path, getParentValue, data, defaultValue } of resolvedData) {\n\t\t\tconst pathTmp = [...path.path]\n\t\t\tconst last = pathTmp.pop() as string\n\t\t\tconst currentObject = pathTmp.reduce<any>((obj, part) => (obj?.[part]) || undefined, result)\n\t\t\tconst parentValue = getParentValue(row)\n\t\t\tif (currentObject) {\n\t\t\t\tcurrentObject[last] = (parentValue ? data[parentValue] : undefined) || defaultValue\n\t\t\t}\n\t\t}\n\n\t\treturn result\n\t}\n\n\tprivate async resolveDataPromises(): Promise<ResolvedData[]> {\n\t\tconst results = await Promise.allSettled(this.promises.map(async (it): Promise<ResolvedData> => ({\n\t\t\tdefaultValue: it.defaultValue,\n\t\t\tgetParentValue: it.getParentValue,\n\t\t\tpath: it.path,\n\t\t\tdata: await it.data,\n\t\t})))\n\t\tconst failures = getRejections(results)\n\t\tif (failures.length > 0) {\n\t\t\tif (failures.length > 1) {\n\t\t\t\tfailures.slice(1).map(e => logger.error(e, { loc: 'SelectHydrator' }))\n\t\t\t}\n\t\t\tthrow failures[0]\n\t\t}\n\n\t\treturn getFulfilledValues(results)\n\t}\n\n\tprivate formatValue(value: any) {\n\t\tif (value instanceof Date) {\n\t\t\treturn value.toISOString()\n\t\t}\n\t\treturn value\n\t}\n}\n\nexport type SelectRow = { [key: string]: Value.FieldValue }\nexport type SelectResultObject = Value.Object\nexport type SelectIndexedResultObjects = { [key: string]: SelectResultObject }\nexport type SelectGroupedObjects = { [groupingKey: string]: SelectResultObject[] }\nexport type SelectNestedData = SelectGroupedObjects | SelectIndexedResultObjects\nexport type SelectNestedDefaultValue = [] | null\n"],"names":["result","getRejections","logger","getFulfilledValues"],"mappings":";;;;;;;;AA0BO,MAAM,eAAe;AAAA,EAArB,cAAA;AACN,kBAAA,MAAQ,WAAoB,EAAC;AAC7B,kBAAA,MAAQ,YAA2B,EAAC;AAAA,EAAA;AAAA,EAE7B,UAAU,MAAY,UAA6B;AACzD,SAAK,QAAQ,KAAK,EAAE,MAAM,UAAU;AAAA,EACrC;AAAA,EAEO,WACN,MACA,gBACA,MACA,cACC;AACD,SAAK,SAAS,KAAK,EAAE,MAAM,gBAAgB,MAAM,cAAc;AAAA,EAChE;AAAA,EAEA,MAAa,cAAc,MAAmB,SAAgD;AAC7F,UAAM,WAAW,MAAM,KAAK,oBAAA;AAC5B,UAAM,SAA+B,CAAA;AACrC,aAAS,OAAO,MAAM;AACrB,YAAM,MAAM,IAAI,OAAO;AACvB,UAAI,CAAC,OAAO,GAAG,GAAG;AACjB,eAAO,GAAG,IAAI,CAAA;AAAA,MACf;AACA,aAAO,GAAG,EAAE,KAAK,KAAK,WAAW,KAAK,QAAQ,CAAC;AAAA,IAChD;AACA,WAAO;AAAA,EACR;AAAA,EAKA,MAAa,WACZ,MACA,SAC6D;AAC7D,UAAM,WAAW,MAAM,KAAK,oBAAA;AAC5B,QAAI,SAAS;AACZ,YAAMA,UAAqC,CAAA;AAC3C,eAAS,OAAO,MAAM;AACrBA,gBAAO,IAAI,OAAO,CAAuB,IAAI,KAAK,WAAW,KAAK,QAAQ;AAAA,MAC3E;AACA,aAAOA;AAAAA,IACR;AACA,UAAM,SAA+B,CAAA;AACrC,eAAW,OAAO,MAAM;AACvB,aAAO,KAAK,KAAK,WAAW,KAAK,QAAQ,CAAC;AAAA,IAC3C;AACA,WAAO;AAAA,EACR;AAAA,EAEQ,WAAW,KAAgB,cAAkD;AACpF,UAAM,SAA6B,CAAA;AAEnC,aAAS,cAAc,KAAK,SAAS;AACpC,YAAM,OAAO,CAAC,GAAG,WAAW,KAAK,IAAI;AACrC,YAAM,OAAe,KAAK,IAAA;AAC1B,YAAM,gBAAgB,KAAK,OAAY,CAAC,KAAK,SAAU,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAA,GAAK,MAAM;AAE3F,oBAAc,IAAI,IAAI,KAAK,YAAY,WAAW,SAAS,GAAG,CAAC;AAAA,IAChE;AAEA,aAAS,EAAE,MAAM,gBAAgB,MAAM,aAAA,KAAkB,cAAc;AACtE,YAAM,UAAU,CAAC,GAAG,KAAK,IAAI;AAC7B,YAAM,OAAO,QAAQ,IAAA;AACrB,YAAM,gBAAgB,QAAQ,OAAY,CAAC,KAAK,SAAU,MAAM,IAAI,KAAM,QAAW,MAAM;AAC3F,YAAM,cAAc,eAAe,GAAG;AACtC,UAAI,eAAe;AAClB,sBAAc,IAAI,KAAK,cAAc,KAAK,WAAW,IAAI,WAAc;AAAA,MACxE;AAAA,IACD;AAEA,WAAO;AAAA,EACR;AAAA,EAEA,MAAc,sBAA+C;AAC5D,UAAM,UAAU,MAAM,QAAQ,WAAW,KAAK,SAAS,IAAI,OAAO,QAA+B;AAAA,MAChG,cAAc,GAAG;AAAA,MACjB,gBAAgB,GAAG;AAAA,MACnB,MAAM,GAAG;AAAA,MACT,MAAM,MAAM,GAAG;AAAA,IAAA,EACd,CAAC;AACH,UAAM,WAAWC,SAAAA,cAAc,OAAO;AACtC,QAAI,SAAS,SAAS,GAAG;AACxB,UAAI,SAAS,SAAS,GAAG;AACxB,iBAAS,MAAM,CAAC,EAAE,IAAI,CAAA,MAAKC,cAAO,MAAM,GAAG,EAAE,KAAK,iBAAA,CAAkB,CAAC;AAAA,MACtE;AACA,YAAM,SAAS,CAAC;AAAA,IACjB;AAEA,WAAOC,SAAAA,mBAAmB,OAAO;AAAA,EAClC;AAAA,EAEQ,YAAY,OAAY;AAC/B,QAAI,iBAAiB,MAAM;AAC1B,aAAO,MAAM,YAAA;AAAA,IACd;AACA,WAAO;AAAA,EACR;AACD;;"}
@@ -53,7 +53,7 @@ class SelectHydrator {
53
53
  for (let { path, getParentValue, data, defaultValue } of resolvedData) {
54
54
  const pathTmp = [...path.path];
55
55
  const last = pathTmp.pop();
56
- const currentObject = pathTmp.reduce((obj, part) => obj && obj[part] || void 0, result);
56
+ const currentObject = pathTmp.reduce((obj, part) => obj?.[part] || void 0, result);
57
57
  const parentValue = getParentValue(row);
58
58
  if (currentObject) {
59
59
  currentObject[last] = (parentValue ? data[parentValue] : void 0) || defaultValue;
@@ -1 +1 @@
1
- {"version":3,"file":"SelectHydrator.js","sources":["../../../../../../packages/engine-content-api/src/mapper/select/SelectHydrator.ts"],"sourcesContent":["import { Path } from './Path'\nimport { Value } from '@contember/schema'\nimport { getFulfilledValues, getRejections } from '../../utils'\nimport { logger } from '@contember/logger'\n\ntype DataPromises = {\n\tpath: Path\n\tgetParentValue: ColumnValueGetter<Value.PrimaryValue | null>\n\tdata: Promise<SelectNestedData>\n\tdefaultValue: SelectNestedDefaultValue\n}\n\ntype ResolvedData = {\n\tpath: Path\n\tgetParentValue: ColumnValueGetter<Value.PrimaryValue | null>\n\tdata: SelectNestedData\n\tdefaultValue: SelectNestedDefaultValue\n}\n\nexport type ColumnValueGetter<T extends Value.FieldValue = Value.FieldValue> = (row: SelectRow) => T\n\ntype Column = {\n\tpath: Path\n\tgetValue: ColumnValueGetter\n}\n\nexport class SelectHydrator {\n\tprivate columns: Column[] = []\n\tprivate promises: DataPromises[] = []\n\n\tpublic addColumn(path: Path, getValue: ColumnValueGetter) {\n\t\tthis.columns.push({ path, getValue })\n\t}\n\n\tpublic addPromise(\n\t\tpath: Path,\n\t\tgetParentValue: ColumnValueGetter<Value.PrimaryValue | null>,\n\t\tdata: Promise<SelectNestedData>,\n\t\tdefaultValue: SelectNestedDefaultValue,\n\t) {\n\t\tthis.promises.push({ path, getParentValue, data, defaultValue })\n\t}\n\n\tpublic async hydrateGroups(rows: SelectRow[], groupBy: string): Promise<SelectGroupedObjects> {\n\t\tconst resolved = await this.resolveDataPromises()\n\t\tconst result: SelectGroupedObjects = {}\n\t\tfor (let row of rows) {\n\t\t\tconst key = row[groupBy] as Value.PrimaryValue\n\t\t\tif (!result[key]) {\n\t\t\t\tresult[key] = []\n\t\t\t}\n\t\t\tresult[key].push(this.hydrateRow(row, resolved))\n\t\t}\n\t\treturn result\n\t}\n\n\tpublic async hydrateAll(rows: SelectRow[]): Promise<SelectResultObject[]>\n\tpublic async hydrateAll(rows: SelectRow[], indexBy: string): Promise<SelectIndexedResultObjects>\n\n\tpublic async hydrateAll(\n\t\trows: SelectRow[],\n\t\tindexBy?: string,\n\t): Promise<SelectResultObject[] | SelectIndexedResultObjects> {\n\t\tconst resolved = await this.resolveDataPromises()\n\t\tif (indexBy) {\n\t\t\tconst result: SelectIndexedResultObjects = {}\n\t\t\tfor (let row of rows) {\n\t\t\t\tresult[row[indexBy] as Value.PrimaryValue] = this.hydrateRow(row, resolved)\n\t\t\t}\n\t\t\treturn result\n\t\t}\n\t\tconst result: SelectResultObject[] = []\n\t\tfor (const row of rows) {\n\t\t\tresult.push(this.hydrateRow(row, resolved))\n\t\t}\n\t\treturn result\n\t}\n\n\tprivate hydrateRow(row: SelectRow, resolvedData: ResolvedData[]): SelectResultObject {\n\t\tconst result: SelectResultObject = {}\n\n\t\tfor (let columnPath of this.columns) {\n\t\t\tconst path = [...columnPath.path.path]\n\t\t\tconst last: string = path.pop() as string\n\t\t\tconst currentObject = path.reduce<any>((obj, part) => (obj[part] = obj[part] || {}), result)\n\n\t\t\tcurrentObject[last] = this.formatValue(columnPath.getValue(row))\n\t\t}\n\n\t\tfor (let { path, getParentValue, data, defaultValue } of resolvedData) {\n\t\t\tconst pathTmp = [...path.path]\n\t\t\tconst last = pathTmp.pop() as string\n\t\t\tconst currentObject = pathTmp.reduce<any>((obj, part) => (obj && obj[part]) || undefined, result)\n\t\t\tconst parentValue = getParentValue(row)\n\t\t\tif (currentObject) {\n\t\t\t\tcurrentObject[last] = (parentValue ? data[parentValue] : undefined) || defaultValue\n\t\t\t}\n\t\t}\n\n\t\treturn result\n\t}\n\n\tprivate async resolveDataPromises(): Promise<ResolvedData[]> {\n\t\tconst results = await Promise.allSettled(this.promises.map(async (it): Promise<ResolvedData> => ({\n\t\t\tdefaultValue: it.defaultValue,\n\t\t\tgetParentValue: it.getParentValue,\n\t\t\tpath: it.path,\n\t\t\tdata: await it.data,\n\t\t})))\n\t\tconst failures = getRejections(results)\n\t\tif (failures.length > 0) {\n\t\t\tif (failures.length > 1) {\n\t\t\t\tfailures.slice(1).map(e => logger.error(e, { loc: 'SelectHydrator' }))\n\t\t\t}\n\t\t\tthrow failures[0]\n\t\t}\n\n\t\treturn getFulfilledValues(results)\n\t}\n\n\tprivate formatValue(value: any) {\n\t\tif (value instanceof Date) {\n\t\t\treturn value.toISOString()\n\t\t}\n\t\treturn value\n\t}\n}\n\nexport type SelectRow = { [key: string]: Value.FieldValue }\nexport type SelectResultObject = Value.Object\nexport type SelectIndexedResultObjects = { [key: string]: SelectResultObject }\nexport type SelectGroupedObjects = { [groupingKey: string]: SelectResultObject[] }\nexport type SelectNestedData = SelectGroupedObjects | SelectIndexedResultObjects\nexport type SelectNestedDefaultValue = [] | null\n"],"names":["result"],"mappings":";;;;;;AA0BO,MAAM,eAAe;AAAA,EAArB,cAAA;AACN,kBAAA,MAAQ,WAAoB,EAAC;AAC7B,kBAAA,MAAQ,YAA2B,EAAC;AAAA,EAAA;AAAA,EAE7B,UAAU,MAAY,UAA6B;AACzD,SAAK,QAAQ,KAAK,EAAE,MAAM,UAAU;AAAA,EAAA;AAAA,EAG9B,WACN,MACA,gBACA,MACA,cACC;AACD,SAAK,SAAS,KAAK,EAAE,MAAM,gBAAgB,MAAM,cAAc;AAAA,EAAA;AAAA,EAGhE,MAAa,cAAc,MAAmB,SAAgD;AACvF,UAAA,WAAW,MAAM,KAAK,oBAAoB;AAChD,UAAM,SAA+B,CAAC;AACtC,aAAS,OAAO,MAAM;AACf,YAAA,MAAM,IAAI,OAAO;AACnB,UAAA,CAAC,OAAO,GAAG,GAAG;AACV,eAAA,GAAG,IAAI,CAAC;AAAA,MAAA;AAEhB,aAAO,GAAG,EAAE,KAAK,KAAK,WAAW,KAAK,QAAQ,CAAC;AAAA,IAAA;AAEzC,WAAA;AAAA,EAAA;AAAA,EAMR,MAAa,WACZ,MACA,SAC6D;AACvD,UAAA,WAAW,MAAM,KAAK,oBAAoB;AAChD,QAAI,SAAS;AACZ,YAAMA,UAAqC,CAAC;AAC5C,eAAS,OAAO,MAAM;AACrBA,gBAAO,IAAI,OAAO,CAAuB,IAAI,KAAK,WAAW,KAAK,QAAQ;AAAA,MAAA;AAEpEA,aAAAA;AAAAA,IAAA;AAER,UAAM,SAA+B,CAAC;AACtC,eAAW,OAAO,MAAM;AACvB,aAAO,KAAK,KAAK,WAAW,KAAK,QAAQ,CAAC;AAAA,IAAA;AAEpC,WAAA;AAAA,EAAA;AAAA,EAGA,WAAW,KAAgB,cAAkD;AACpF,UAAM,SAA6B,CAAC;AAE3B,aAAA,cAAc,KAAK,SAAS;AACpC,YAAM,OAAO,CAAC,GAAG,WAAW,KAAK,IAAI;AAC/B,YAAA,OAAe,KAAK,IAAI;AAC9B,YAAM,gBAAgB,KAAK,OAAY,CAAC,KAAK,SAAU,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAA,GAAK,MAAM;AAE3F,oBAAc,IAAI,IAAI,KAAK,YAAY,WAAW,SAAS,GAAG,CAAC;AAAA,IAAA;AAGhE,aAAS,EAAE,MAAM,gBAAgB,MAAM,kBAAkB,cAAc;AACtE,YAAM,UAAU,CAAC,GAAG,KAAK,IAAI;AACvB,YAAA,OAAO,QAAQ,IAAI;AACnB,YAAA,gBAAgB,QAAQ,OAAY,CAAC,KAAK,SAAU,OAAO,IAAI,IAAI,KAAM,QAAW,MAAM;AAC1F,YAAA,cAAc,eAAe,GAAG;AACtC,UAAI,eAAe;AAClB,sBAAc,IAAI,KAAK,cAAc,KAAK,WAAW,IAAI,WAAc;AAAA,MAAA;AAAA,IACxE;AAGM,WAAA;AAAA,EAAA;AAAA,EAGR,MAAc,sBAA+C;AACtD,UAAA,UAAU,MAAM,QAAQ,WAAW,KAAK,SAAS,IAAI,OAAO,QAA+B;AAAA,MAChG,cAAc,GAAG;AAAA,MACjB,gBAAgB,GAAG;AAAA,MACnB,MAAM,GAAG;AAAA,MACT,MAAM,MAAM,GAAG;AAAA,MACd,CAAC;AACG,UAAA,WAAW,cAAc,OAAO;AAClC,QAAA,SAAS,SAAS,GAAG;AACpB,UAAA,SAAS,SAAS,GAAG;AACxB,iBAAS,MAAM,CAAC,EAAE,IAAI,CAAK,MAAA,OAAO,MAAM,GAAG,EAAE,KAAK,iBAAkB,CAAA,CAAC;AAAA,MAAA;AAEtE,YAAM,SAAS,CAAC;AAAA,IAAA;AAGjB,WAAO,mBAAmB,OAAO;AAAA,EAAA;AAAA,EAG1B,YAAY,OAAY;AAC/B,QAAI,iBAAiB,MAAM;AAC1B,aAAO,MAAM,YAAY;AAAA,IAAA;AAEnB,WAAA;AAAA,EAAA;AAET;"}
1
+ {"version":3,"file":"SelectHydrator.js","sources":["../../../../../../packages/engine-content-api/src/mapper/select/SelectHydrator.ts"],"sourcesContent":["import { Path } from './Path'\nimport { Value } from '@contember/schema'\nimport { getFulfilledValues, getRejections } from '../../utils'\nimport { logger } from '@contember/logger'\n\ntype DataPromises = {\n\tpath: Path\n\tgetParentValue: ColumnValueGetter<Value.PrimaryValue | null>\n\tdata: Promise<SelectNestedData>\n\tdefaultValue: SelectNestedDefaultValue\n}\n\ntype ResolvedData = {\n\tpath: Path\n\tgetParentValue: ColumnValueGetter<Value.PrimaryValue | null>\n\tdata: SelectNestedData\n\tdefaultValue: SelectNestedDefaultValue\n}\n\nexport type ColumnValueGetter<T extends Value.FieldValue = Value.FieldValue> = (row: SelectRow) => T\n\ntype Column = {\n\tpath: Path\n\tgetValue: ColumnValueGetter\n}\n\nexport class SelectHydrator {\n\tprivate columns: Column[] = []\n\tprivate promises: DataPromises[] = []\n\n\tpublic addColumn(path: Path, getValue: ColumnValueGetter) {\n\t\tthis.columns.push({ path, getValue })\n\t}\n\n\tpublic addPromise(\n\t\tpath: Path,\n\t\tgetParentValue: ColumnValueGetter<Value.PrimaryValue | null>,\n\t\tdata: Promise<SelectNestedData>,\n\t\tdefaultValue: SelectNestedDefaultValue,\n\t) {\n\t\tthis.promises.push({ path, getParentValue, data, defaultValue })\n\t}\n\n\tpublic async hydrateGroups(rows: SelectRow[], groupBy: string): Promise<SelectGroupedObjects> {\n\t\tconst resolved = await this.resolveDataPromises()\n\t\tconst result: SelectGroupedObjects = {}\n\t\tfor (let row of rows) {\n\t\t\tconst key = row[groupBy] as Value.PrimaryValue\n\t\t\tif (!result[key]) {\n\t\t\t\tresult[key] = []\n\t\t\t}\n\t\t\tresult[key].push(this.hydrateRow(row, resolved))\n\t\t}\n\t\treturn result\n\t}\n\n\tpublic async hydrateAll(rows: SelectRow[]): Promise<SelectResultObject[]>\n\tpublic async hydrateAll(rows: SelectRow[], indexBy: string): Promise<SelectIndexedResultObjects>\n\n\tpublic async hydrateAll(\n\t\trows: SelectRow[],\n\t\tindexBy?: string,\n\t): Promise<SelectResultObject[] | SelectIndexedResultObjects> {\n\t\tconst resolved = await this.resolveDataPromises()\n\t\tif (indexBy) {\n\t\t\tconst result: SelectIndexedResultObjects = {}\n\t\t\tfor (let row of rows) {\n\t\t\t\tresult[row[indexBy] as Value.PrimaryValue] = this.hydrateRow(row, resolved)\n\t\t\t}\n\t\t\treturn result\n\t\t}\n\t\tconst result: SelectResultObject[] = []\n\t\tfor (const row of rows) {\n\t\t\tresult.push(this.hydrateRow(row, resolved))\n\t\t}\n\t\treturn result\n\t}\n\n\tprivate hydrateRow(row: SelectRow, resolvedData: ResolvedData[]): SelectResultObject {\n\t\tconst result: SelectResultObject = {}\n\n\t\tfor (let columnPath of this.columns) {\n\t\t\tconst path = [...columnPath.path.path]\n\t\t\tconst last: string = path.pop() as string\n\t\t\tconst currentObject = path.reduce<any>((obj, part) => (obj[part] = obj[part] || {}), result)\n\n\t\t\tcurrentObject[last] = this.formatValue(columnPath.getValue(row))\n\t\t}\n\n\t\tfor (let { path, getParentValue, data, defaultValue } of resolvedData) {\n\t\t\tconst pathTmp = [...path.path]\n\t\t\tconst last = pathTmp.pop() as string\n\t\t\tconst currentObject = pathTmp.reduce<any>((obj, part) => (obj?.[part]) || undefined, result)\n\t\t\tconst parentValue = getParentValue(row)\n\t\t\tif (currentObject) {\n\t\t\t\tcurrentObject[last] = (parentValue ? data[parentValue] : undefined) || defaultValue\n\t\t\t}\n\t\t}\n\n\t\treturn result\n\t}\n\n\tprivate async resolveDataPromises(): Promise<ResolvedData[]> {\n\t\tconst results = await Promise.allSettled(this.promises.map(async (it): Promise<ResolvedData> => ({\n\t\t\tdefaultValue: it.defaultValue,\n\t\t\tgetParentValue: it.getParentValue,\n\t\t\tpath: it.path,\n\t\t\tdata: await it.data,\n\t\t})))\n\t\tconst failures = getRejections(results)\n\t\tif (failures.length > 0) {\n\t\t\tif (failures.length > 1) {\n\t\t\t\tfailures.slice(1).map(e => logger.error(e, { loc: 'SelectHydrator' }))\n\t\t\t}\n\t\t\tthrow failures[0]\n\t\t}\n\n\t\treturn getFulfilledValues(results)\n\t}\n\n\tprivate formatValue(value: any) {\n\t\tif (value instanceof Date) {\n\t\t\treturn value.toISOString()\n\t\t}\n\t\treturn value\n\t}\n}\n\nexport type SelectRow = { [key: string]: Value.FieldValue }\nexport type SelectResultObject = Value.Object\nexport type SelectIndexedResultObjects = { [key: string]: SelectResultObject }\nexport type SelectGroupedObjects = { [groupingKey: string]: SelectResultObject[] }\nexport type SelectNestedData = SelectGroupedObjects | SelectIndexedResultObjects\nexport type SelectNestedDefaultValue = [] | null\n"],"names":["result"],"mappings":"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"}
@@ -37,11 +37,13 @@ class WhereBuilder {
37
37
  ...args
38
38
  }) {
39
39
  const joinList = [];
40
- const qbWithWhere = callback((clause) => this.buildRecursive({
41
- conditionBuilder: clause,
42
- joinList,
43
- ...args
44
- }));
40
+ const qbWithWhere = callback(
41
+ (clause) => this.buildRecursive({
42
+ conditionBuilder: clause,
43
+ joinList,
44
+ ...args
45
+ })
46
+ );
45
47
  return joinList.reduce(
46
48
  (qb, { path, entity, relationName }) => this.joinBuilder.join(qb, path, entity, relationName),
47
49
  qbWithWhere
@@ -76,14 +78,16 @@ class WhereBuilder {
76
78
  const expr = where.or;
77
79
  conditionBuilder = conditionBuilder.or(
78
80
  (clause) => expr.reduce(
79
- (clause2, where2) => !where2 ? clause2 : clause2.and((clause3) => this.buildRecursive({
80
- conditionBuilder: clause3,
81
- entity,
82
- path,
83
- where: where2,
84
- joinList,
85
- allowManyJoin
86
- })),
81
+ (clause2, where2) => !where2 ? clause2 : clause2.and(
82
+ (clause3) => this.buildRecursive({
83
+ conditionBuilder: clause3,
84
+ entity,
85
+ path,
86
+ where: where2,
87
+ joinList,
88
+ allowManyJoin
89
+ })
90
+ ),
87
91
  clause
88
92
  )
89
93
  );
@@ -207,9 +211,7 @@ class WhereBuilder {
207
211
  const primaryCondition = this.transformWhereToPrimaryCondition(relationWhere, targetEntity.primary);
208
212
  if (primaryCondition !== null) {
209
213
  const columnType = targetEntity.fields[targetEntity.primary];
210
- return qb.where(
211
- (condition) => this.conditionBuilder.build(condition, junctionPath.alias, toColumn, columnType, primaryCondition)
212
- );
214
+ return qb.where((condition) => this.conditionBuilder.build(condition, junctionPath.alias, toColumn, columnType, primaryCondition));
213
215
  }
214
216
  const qbJoined = qb.join(
215
217
  targetEntity.tableName,
@@ -279,10 +281,10 @@ class WhereBuilder {
279
281
  if (cond.isNull !== void 0) {
280
282
  return true;
281
283
  }
282
- if (cond.and && cond.and.some((it) => this.conditionHasIsNull(it))) {
284
+ if (cond.and?.some((it) => this.conditionHasIsNull(it))) {
283
285
  return true;
284
286
  }
285
- if (cond.or && cond.or.some((it) => this.conditionHasIsNull(it))) {
287
+ if (cond.or?.some((it) => this.conditionHasIsNull(it))) {
286
288
  return true;
287
289
  }
288
290
  if (cond.not && this.conditionHasIsNull(cond.not)) {
@@ -1 +1 @@
1
- {"version":3,"file":"WhereBuilder.cjs","sources":["../../../../../../packages/engine-content-api/src/mapper/select/WhereBuilder.ts"],"sourcesContent":["import { isIt } from '../../utils'\nimport { acceptFieldVisitor, isColumn } from '@contember/schema-utils'\nimport { Input, Model } from '@contember/schema'\nimport { Path, PathFactory } from './Path'\nimport { JoinBuilder } from './JoinBuilder'\nimport { ConditionBuilder } from './ConditionBuilder'\nimport {\n\tConditionBuilder as SqlConditionBuilder,\n\tLiteral,\n\tOperator,\n\tQueryBuilder,\n\tSelectBuilder, wrapIdentifier,\n} from '@contember/database'\nimport { WhereOptimizationHints, WhereOptimizer } from './optimizer/WhereOptimizer'\n\nexport class WhereBuilder {\n\tconstructor(\n\t\tprivate readonly schema: Model.Schema,\n\t\tprivate readonly joinBuilder: JoinBuilder,\n\t\tprivate readonly conditionBuilder: ConditionBuilder,\n\t\tprivate readonly pathFactory: PathFactory,\n\t\tprivate readonly whereOptimizer: WhereOptimizer,\n\t\tprivate readonly useExistsInHasManyFilter: boolean,\n\t) {}\n\n\tpublic build<R extends SelectBuilder.Result>(\n\t\tqb: SelectBuilder<R>,\n\t\tentity: Model.Entity,\n\t\tpath: Path,\n\t\twhere: Input.OptionalWhere,\n\t\toptimizationHints: WhereOptimizationHints = {},\n\t): SelectBuilder<R> {\n\t\tconst optimizedWhere = this.whereOptimizer.optimize(where, entity, optimizationHints)\n\t\treturn this.buildInternal({\n\t\t\tentity,\n\t\t\tpath,\n\t\t\twhere: optimizedWhere,\n\t\t\tcallback: cb => qb.where(clause => cb(clause)),\n\t\t\tallowManyJoin: false,\n\t\t})\n\t}\n\n\n\tpublic buildAdvanced<R extends SelectBuilder.Result>(\n\t\tentity: Model.Entity,\n\t\tpath: Path,\n\t\twhere: Input.OptionalWhere,\n\t\tcallback: (clauseCb: (clause: SqlConditionBuilder) => SqlConditionBuilder) => SelectBuilder<R>,\n\t\toptimizationHints: WhereOptimizationHints = {},\n\t): SelectBuilder<R> {\n\t\tconst optimizedWhere = this.whereOptimizer.optimize(where, entity, optimizationHints)\n\t\treturn this.buildInternal({\n\t\t\tentity,\n\t\t\tpath,\n\t\t\twhere: optimizedWhere,\n\t\t\tcallback,\n\t\t\tallowManyJoin: false,\n\t\t})\n\t}\n\n\tprivate buildInternal<R extends SelectBuilder.Result>({\n\t\tcallback,\n\t\t...args\n\t}: { entity: Model.Entity; path: Path; where: Input.OptionalWhere; callback: (clauseCb: (clause: SqlConditionBuilder) => SqlConditionBuilder) => SelectBuilder<R>; allowManyJoin: boolean },\n\t): SelectBuilder<R> {\n\t\tconst joinList: WhereJoinDefinition[] = []\n\n\t\tconst qbWithWhere = callback(clause => this.buildRecursive({\n\t\t\tconditionBuilder: clause,\n\t\t\tjoinList: joinList,\n\t\t\t...args,\n\t\t}))\n\t\treturn joinList.reduce<SelectBuilder<R>>(\n\t\t\t(qb, { path, entity, relationName }) => this.joinBuilder.join<R>(qb, path, entity, relationName),\n\t\t\tqbWithWhere,\n\t\t)\n\t}\n\n\tprivate buildRecursive({\n\t\tconditionBuilder,\n\t\tentity,\n\t\tpath,\n\t\twhere,\n\t\tjoinList,\n\t\tallowManyJoin,\n\t}: { conditionBuilder: SqlConditionBuilder; entity: Model.Entity; path: Path; where: Input.OptionalWhere; joinList: WhereJoinDefinition[]; allowManyJoin: boolean },\n\t): SqlConditionBuilder {\n\t\tconst tableName = path.alias\n\n\t\tif (where.and !== undefined && where.and !== null && where.and.length > 0) {\n\t\t\tconst expr = where.and\n\t\t\tconditionBuilder = conditionBuilder.and(clause =>\n\t\t\t\texpr.reduce(\n\t\t\t\t\t(clause2, where) =>\n\t\t\t\t\t\t!where ? clause2 : this.buildRecursive({\n\t\t\t\t\t\t\tconditionBuilder: clause2,\n\t\t\t\t\t\t\tentity,\n\t\t\t\t\t\t\tpath,\n\t\t\t\t\t\t\twhere,\n\t\t\t\t\t\t\tjoinList,\n\t\t\t\t\t\t\tallowManyJoin,\n\t\t\t\t\t\t}),\n\t\t\t\t\tclause,\n\t\t\t\t),\n\t\t\t)\n\t\t}\n\t\tif (where.or !== undefined && where.or !== null && where.or.length > 0) {\n\t\t\tconst expr = where.or\n\t\t\tconditionBuilder = conditionBuilder.or(clause =>\n\t\t\t\texpr.reduce(\n\t\t\t\t\t(clause2, where) =>\n\t\t\t\t\t\t!where\n\t\t\t\t\t\t\t? clause2\n\t\t\t\t\t\t\t: clause2.and(clause3 => this.buildRecursive({\n\t\t\t\t\t\t\t\tconditionBuilder: clause3,\n\t\t\t\t\t\t\t\tentity,\n\t\t\t\t\t\t\t\tpath,\n\t\t\t\t\t\t\t\twhere,\n\t\t\t\t\t\t\t\tjoinList,\n\t\t\t\t\t\t\t\tallowManyJoin,\n\t\t\t\t\t\t\t})),\n\t\t\t\t\tclause,\n\t\t\t\t),\n\t\t\t)\n\t\t}\n\t\tif (where.not !== undefined && where.not !== null) {\n\t\t\tconst expr = where.not\n\t\t\tconditionBuilder = conditionBuilder.not(clause =>\n\t\t\t\tthis.buildRecursive({\n\t\t\t\t\tconditionBuilder: clause,\n\t\t\t\t\tentity,\n\t\t\t\t\tpath,\n\t\t\t\t\twhere: expr,\n\t\t\t\t\tjoinList,\n\t\t\t\t\tallowManyJoin,\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\n\t\tfor (const fieldName in where) {\n\t\t\tif (fieldName === 'and' || fieldName === 'or' || fieldName === 'not') {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst fieldWhere = where[fieldName]\n\t\t\tif (!fieldWhere) {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tconst targetPath = path.for(fieldName)\n\n\t\t\tconst joinedWhere = ({ targetEntity, relation, entity }: Model.AnyRelationContext): SqlConditionBuilder => {\n\t\t\t\tconst relationWhere = where[fieldName] as Input.OptionalWhere | null\n\t\t\t\tif (!relationWhere || Object.keys(relationWhere).length === 0) {\n\t\t\t\t\treturn conditionBuilder\n\t\t\t\t}\n\t\t\t\tif (isIt<Model.JoiningColumnRelation>(relation, 'joiningColumn')) {\n\t\t\t\t\tconst primaryCondition = this.transformWhereToPrimaryCondition(relationWhere, targetEntity.primary)\n\t\t\t\t\tif (primaryCondition !== null) {\n\t\t\t\t\t\treturn this.conditionBuilder.build(\n\t\t\t\t\t\t\tconditionBuilder,\n\t\t\t\t\t\t\ttableName,\n\t\t\t\t\t\t\trelation.joiningColumn.columnName,\n\t\t\t\t\t\t\t(targetEntity.fields[targetEntity.primary] as Model.AnyColumn),\n\t\t\t\t\t\t\tprimaryCondition,\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tjoinList.push({ path: targetPath, entity, relationName: relation.name })\n\n\t\t\t\treturn this.buildRecursive({\n\t\t\t\t\tconditionBuilder,\n\t\t\t\t\tentity: targetEntity,\n\t\t\t\t\tpath: targetPath,\n\t\t\t\t\twhere: relationWhere,\n\t\t\t\t\tjoinList,\n\t\t\t\t\tallowManyJoin,\n\t\t\t\t})\n\t\t\t}\n\n\n\n\t\t\tconditionBuilder = acceptFieldVisitor<SqlConditionBuilder>(this.schema, entity, fieldName, {\n\t\t\t\tvisitColumn: ({ entity, column }) => {\n\t\t\t\t\treturn this.conditionBuilder.build(conditionBuilder, tableName, column.columnName, column, fieldWhere as Input.Condition<Input.ColumnValue>)\n\t\t\t\t},\n\t\t\t\tvisitOneHasOneInverse: joinedWhere,\n\t\t\t\tvisitOneHasOneOwning: joinedWhere,\n\t\t\t\tvisitManyHasOne: joinedWhere,\n\t\t\t\tvisitManyHasManyInverse: context => {\n\t\t\t\t\tif (allowManyJoin && !this.useExistsInHasManyFilter) {\n\t\t\t\t\t\treturn joinedWhere(context)\n\t\t\t\t\t}\n\n\t\t\t\t\treturn conditionBuilder.exists(\n\t\t\t\t\t\tthis.createManyHasManySubquery(\n\t\t\t\t\t\t\t[tableName, entity.primaryColumn],\n\t\t\t\t\t\t\tfieldWhere as Input.OptionalWhere,\n\t\t\t\t\t\t\tcontext.targetEntity,\n\t\t\t\t\t\t\tcontext.targetRelation.joiningTable,\n\t\t\t\t\t\t\t'inverse',\n\t\t\t\t\t\t\ttargetPath,\n\t\t\t\t\t\t),\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t\tvisitManyHasManyOwning: context => {\n\t\t\t\t\tif (allowManyJoin && !this.useExistsInHasManyFilter) {\n\t\t\t\t\t\treturn joinedWhere(context)\n\t\t\t\t\t}\n\n\t\t\t\t\tconst relationWhere = where[fieldName] as Input.Where | null\n\n\t\t\t\t\treturn conditionBuilder.exists(\n\t\t\t\t\t\tthis.createManyHasManySubquery(\n\t\t\t\t\t\t\t[tableName, entity.primaryColumn],\n\t\t\t\t\t\t\tfieldWhere as Input.OptionalWhere,\n\t\t\t\t\t\t\tcontext.targetEntity,\n\t\t\t\t\t\t\tcontext.relation.joiningTable,\n\t\t\t\t\t\t\t'owning',\n\t\t\t\t\t\t\ttargetPath,\n\t\t\t\t\t\t),\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t\tvisitOneHasMany: context => {\n\t\t\t\t\tif (allowManyJoin && !this.useExistsInHasManyFilter) {\n\t\t\t\t\t\treturn joinedWhere(context)\n\t\t\t\t\t}\n\n\t\t\t\t\tconst relationWhere = fieldWhere as Input.OptionalWhere\n\n\t\t\t\t\tconst qb = this.hasRootIsNull(relationWhere, context.targetEntity)\n\t\t\t\t\t\t? SelectBuilder.create()\n\t\t\t\t\t\t\t.select(it => it.raw('1'))\n\t\t\t\t\t\t\t.from(new Literal(`(select ${wrapIdentifier(tableName)}.${wrapIdentifier(entity.primaryColumn)})`), targetPath.for('tmp_').alias)\n\t\t\t\t\t\t\t.leftJoin(context.targetEntity.tableName, targetPath.alias, it =>\n\t\t\t\t\t\t\t\tit.columnsEq([targetPath.for('tmp_').alias, entity.primaryColumn], [targetPath.alias, context.targetRelation.joiningColumn.columnName]),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t: SelectBuilder.create()\n\t\t\t\t\t\t\t.select(it => it.raw('1'))\n\t\t\t\t\t\t\t.from(context.targetEntity.tableName, targetPath.alias)\n\t\t\t\t\t\t\t.where(it => it.columnsEq([tableName, entity.primaryColumn], [targetPath.alias, context.targetRelation.joiningColumn.columnName]))\n\n\t\t\t\t\treturn conditionBuilder.exists(\n\t\t\t\t\t\tthis.buildInternal({\n\t\t\t\t\t\t\tentity: context.targetEntity,\n\t\t\t\t\t\t\tpath: targetPath,\n\t\t\t\t\t\t\twhere: relationWhere,\n\t\t\t\t\t\t\tcallback: cb => qb.where(clause => cb(clause)),\n\t\t\t\t\t\t\tallowManyJoin: true,\n\t\t\t\t\t\t}),\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\t\treturn conditionBuilder\n\t}\n\n\n\tprivate createManyHasManySubquery(\n\t\touterColumn: QueryBuilder.ColumnIdentifier,\n\t\trelationWhere: Input.OptionalWhere,\n\t\ttargetEntity: Model.Entity,\n\t\tjoiningTable: Model.JoiningTable,\n\t\tfromSide: 'owning' | 'inverse',\n\t\tpath: Path,\n\t) {\n\t\tconst fromColumn = fromSide === 'owning' ? joiningTable.joiningColumn.columnName : joiningTable.inverseJoiningColumn.columnName\n\t\tconst toColumn = fromSide === 'owning' ? joiningTable.inverseJoiningColumn.columnName : joiningTable.joiningColumn.columnName\n\t\tconst junctionPath = path.for('junction_')\n\t\tconst qb = SelectBuilder.create<SelectBuilder.Result>()\n\t\t\t.from(joiningTable.tableName, junctionPath.alias)\n\t\t\t.select(it => it.raw('1'))\n\t\t\t.where(it => it.columnsEq(outerColumn, [junctionPath.alias, fromColumn]))\n\n\t\tconst primaryCondition = this.transformWhereToPrimaryCondition(relationWhere, targetEntity.primary)\n\t\tif (primaryCondition !== null) {\n\n\t\t\tconst columnType = (targetEntity.fields[targetEntity.primary] as Model.AnyColumn)\n\n\t\t\treturn qb.where(condition =>\n\t\t\t\tthis.conditionBuilder.build(condition, junctionPath.alias, toColumn, columnType, primaryCondition),\n\t\t\t)\n\t\t}\n\n\t\tconst qbJoined = qb.join(targetEntity.tableName, path.alias, clause =>\n\t\t\tclause.compareColumns([junctionPath.alias, toColumn], Operator.eq, [path.alias, targetEntity.primary]),\n\t\t)\n\t\treturn this.buildInternal({\n\t\t\tentity: targetEntity,\n\t\t\tpath: this.pathFactory.create([], path.fullAlias),\n\t\t\twhere: relationWhere,\n\t\t\tcallback: cb => qbJoined.where(clause => cb(clause)),\n\t\t\tallowManyJoin: true,\n\t\t})\n\t}\n\n\tprivate transformWhereToPrimaryCondition(where: Input.OptionalWhere, primaryField: string): Input.Condition<never> | null {\n\t\tconst keys = Object.keys(where)\n\t\tif (keys.filter(it => !['and', 'or', 'not', primaryField].includes(it)).length > 0) {\n\t\t\treturn null\n\t\t}\n\t\tlet condition: {\n\t\t\tand?: Array<Input.Condition<never>>\n\t\t\tor?: Array<Input.Condition<never>>\n\t\t\tnot?: Input.Condition<never>\n\t\t} = {}\n\t\tif (where.and) {\n\t\t\tconst conditions = where.and\n\t\t\t\t.filter((it): it is Input.Where => !!it)\n\t\t\t\t.map(it => this.transformWhereToPrimaryCondition(it, primaryField))\n\t\t\tif (conditions.includes(null)) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tcondition.and = conditions as Input.Condition<never>[]\n\t\t}\n\t\tif (where.or) {\n\t\t\tconst conditions = where.or\n\t\t\t\t.filter((it): it is Input.Where => !!it)\n\t\t\t\t.map(it => this.transformWhereToPrimaryCondition(it, primaryField))\n\t\t\tif (conditions.includes(null)) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tcondition.or = conditions as Input.Condition<never>[]\n\t\t}\n\t\tif (where.not) {\n\t\t\tconst conditions = this.transformWhereToPrimaryCondition(where.not, primaryField)\n\t\t\tif (conditions === null) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tcondition.not = conditions as Input.Condition<never>\n\t\t}\n\t\tif (where[primaryField]) {\n\t\t\tif (Object.keys(condition).length > 0) {\n\t\t\t\treturn { and: [condition, where[primaryField] as Input.Condition<never>] }\n\t\t\t}\n\t\t\treturn where[primaryField] as Input.Condition<never>\n\t\t}\n\t\treturn condition\n\t}\n\n\tprivate hasRootIsNull(where: Input.OptionalWhere, entity: Model.Entity): boolean {\n\t\tfor (const key in where) {\n\t\t\tif (key === 'and' || key === 'or') {\n\t\t\t\tif (where[key]?.some(it => it && this.hasRootIsNull(it, entity))) {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t} else if (key === 'not') {\n\t\t\t\tif (where.not && this.hasRootIsNull(where.not, entity)) {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t} else if (isColumn(entity.fields[key]) && this.conditionHasIsNull(where[key] as Input.Condition)) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t\treturn false\n\t}\n\n\tprivate conditionHasIsNull(cond: Input.Condition): boolean {\n\t\tif (cond.isNull !== undefined) {\n\t\t\treturn true\n\t\t}\n\t\tif (cond.and && cond.and.some(it => this.conditionHasIsNull(it))) {\n\t\t\treturn true\n\t\t}\n\t\tif (cond.or && cond.or.some(it => this.conditionHasIsNull(it))) {\n\t\t\treturn true\n\t\t}\n\t\tif (cond.not && this.conditionHasIsNull(cond.not)) {\n\t\t\treturn true\n\t\t}\n\t\treturn false\n\t}\n}\n\nexport type WhereJoinDefinition = { path: Path; entity: Model.Entity; relationName: string }\n"],"names":["where","entity","isIt","acceptFieldVisitor","SelectBuilder","Literal","wrapIdentifier","Operator","isColumn"],"mappings":"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"}
1
+ {"version":3,"file":"WhereBuilder.cjs","sources":["../../../../../../packages/engine-content-api/src/mapper/select/WhereBuilder.ts"],"sourcesContent":["import { isIt } from '../../utils'\nimport { acceptFieldVisitor, isColumn } from '@contember/schema-utils'\nimport { Input, Model } from '@contember/schema'\nimport { Path, PathFactory } from './Path'\nimport { JoinBuilder } from './JoinBuilder'\nimport { ConditionBuilder } from './ConditionBuilder'\nimport { ConditionBuilder as SqlConditionBuilder, Literal, Operator, QueryBuilder, SelectBuilder, wrapIdentifier } from '@contember/database'\nimport { WhereOptimizationHints, WhereOptimizer } from './optimizer/WhereOptimizer'\n\nexport class WhereBuilder {\n\tconstructor(\n\t\tprivate readonly schema: Model.Schema,\n\t\tprivate readonly joinBuilder: JoinBuilder,\n\t\tprivate readonly conditionBuilder: ConditionBuilder,\n\t\tprivate readonly pathFactory: PathFactory,\n\t\tprivate readonly whereOptimizer: WhereOptimizer,\n\t\tprivate readonly useExistsInHasManyFilter: boolean,\n\t) {}\n\n\tpublic build<R extends SelectBuilder.Result>(\n\t\tqb: SelectBuilder<R>,\n\t\tentity: Model.Entity,\n\t\tpath: Path,\n\t\twhere: Input.OptionalWhere,\n\t\toptimizationHints: WhereOptimizationHints = {},\n\t): SelectBuilder<R> {\n\t\tconst optimizedWhere = this.whereOptimizer.optimize(where, entity, optimizationHints)\n\t\treturn this.buildInternal({\n\t\t\tentity,\n\t\t\tpath,\n\t\t\twhere: optimizedWhere,\n\t\t\tcallback: cb => qb.where(clause => cb(clause)),\n\t\t\tallowManyJoin: false,\n\t\t})\n\t}\n\n\tpublic buildAdvanced<R extends SelectBuilder.Result>(\n\t\tentity: Model.Entity,\n\t\tpath: Path,\n\t\twhere: Input.OptionalWhere,\n\t\tcallback: (clauseCb: (clause: SqlConditionBuilder) => SqlConditionBuilder) => SelectBuilder<R>,\n\t\toptimizationHints: WhereOptimizationHints = {},\n\t): SelectBuilder<R> {\n\t\tconst optimizedWhere = this.whereOptimizer.optimize(where, entity, optimizationHints)\n\t\treturn this.buildInternal({\n\t\t\tentity,\n\t\t\tpath,\n\t\t\twhere: optimizedWhere,\n\t\t\tcallback,\n\t\t\tallowManyJoin: false,\n\t\t})\n\t}\n\n\tprivate buildInternal<R extends SelectBuilder.Result>({\n\t\tcallback,\n\t\t...args\n\t}: {\n\t\tentity: Model.Entity\n\t\tpath: Path\n\t\twhere: Input.OptionalWhere\n\t\tcallback: (clauseCb: (clause: SqlConditionBuilder) => SqlConditionBuilder) => SelectBuilder<R>\n\t\tallowManyJoin: boolean\n\t}): SelectBuilder<R> {\n\t\tconst joinList: WhereJoinDefinition[] = []\n\n\t\tconst qbWithWhere = callback(clause =>\n\t\t\tthis.buildRecursive({\n\t\t\t\tconditionBuilder: clause,\n\t\t\t\tjoinList: joinList,\n\t\t\t\t...args,\n\t\t\t})\n\t\t)\n\t\treturn joinList.reduce<SelectBuilder<R>>(\n\t\t\t(qb, { path, entity, relationName }) => this.joinBuilder.join<R>(qb, path, entity, relationName),\n\t\t\tqbWithWhere,\n\t\t)\n\t}\n\n\tprivate buildRecursive({\n\t\tconditionBuilder,\n\t\tentity,\n\t\tpath,\n\t\twhere,\n\t\tjoinList,\n\t\tallowManyJoin,\n\t}: {\n\t\tconditionBuilder: SqlConditionBuilder\n\t\tentity: Model.Entity\n\t\tpath: Path\n\t\twhere: Input.OptionalWhere\n\t\tjoinList: WhereJoinDefinition[]\n\t\tallowManyJoin: boolean\n\t}): SqlConditionBuilder {\n\t\tconst tableName = path.alias\n\n\t\tif (where.and !== undefined && where.and !== null && where.and.length > 0) {\n\t\t\tconst expr = where.and\n\t\t\tconditionBuilder = conditionBuilder.and(clause =>\n\t\t\t\texpr.reduce(\n\t\t\t\t\t(clause2, where) =>\n\t\t\t\t\t\t!where ? clause2 : this.buildRecursive({\n\t\t\t\t\t\t\tconditionBuilder: clause2,\n\t\t\t\t\t\t\tentity,\n\t\t\t\t\t\t\tpath,\n\t\t\t\t\t\t\twhere,\n\t\t\t\t\t\t\tjoinList,\n\t\t\t\t\t\t\tallowManyJoin,\n\t\t\t\t\t\t}),\n\t\t\t\t\tclause,\n\t\t\t\t)\n\t\t\t)\n\t\t}\n\t\tif (where.or !== undefined && where.or !== null && where.or.length > 0) {\n\t\t\tconst expr = where.or\n\t\t\tconditionBuilder = conditionBuilder.or(clause =>\n\t\t\t\texpr.reduce(\n\t\t\t\t\t(clause2, where) =>\n\t\t\t\t\t\t!where\n\t\t\t\t\t\t\t? clause2\n\t\t\t\t\t\t\t: clause2.and(clause3 =>\n\t\t\t\t\t\t\t\tthis.buildRecursive({\n\t\t\t\t\t\t\t\t\tconditionBuilder: clause3,\n\t\t\t\t\t\t\t\t\tentity,\n\t\t\t\t\t\t\t\t\tpath,\n\t\t\t\t\t\t\t\t\twhere,\n\t\t\t\t\t\t\t\t\tjoinList,\n\t\t\t\t\t\t\t\t\tallowManyJoin,\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t),\n\t\t\t\t\tclause,\n\t\t\t\t)\n\t\t\t)\n\t\t}\n\t\tif (where.not !== undefined && where.not !== null) {\n\t\t\tconst expr = where.not\n\t\t\tconditionBuilder = conditionBuilder.not(clause =>\n\t\t\t\tthis.buildRecursive({\n\t\t\t\t\tconditionBuilder: clause,\n\t\t\t\t\tentity,\n\t\t\t\t\tpath,\n\t\t\t\t\twhere: expr,\n\t\t\t\t\tjoinList,\n\t\t\t\t\tallowManyJoin,\n\t\t\t\t})\n\t\t\t)\n\t\t}\n\n\t\tfor (const fieldName in where) {\n\t\t\tif (fieldName === 'and' || fieldName === 'or' || fieldName === 'not') {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst fieldWhere = where[fieldName]\n\t\t\tif (!fieldWhere) {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tconst targetPath = path.for(fieldName)\n\n\t\t\tconst joinedWhere = ({ targetEntity, relation, entity }: Model.AnyRelationContext): SqlConditionBuilder => {\n\t\t\t\tconst relationWhere = where[fieldName] as Input.OptionalWhere | null\n\t\t\t\tif (!relationWhere || Object.keys(relationWhere).length === 0) {\n\t\t\t\t\treturn conditionBuilder\n\t\t\t\t}\n\t\t\t\tif (isIt<Model.JoiningColumnRelation>(relation, 'joiningColumn')) {\n\t\t\t\t\tconst primaryCondition = this.transformWhereToPrimaryCondition(relationWhere, targetEntity.primary)\n\t\t\t\t\tif (primaryCondition !== null) {\n\t\t\t\t\t\treturn this.conditionBuilder.build(\n\t\t\t\t\t\t\tconditionBuilder,\n\t\t\t\t\t\t\ttableName,\n\t\t\t\t\t\t\trelation.joiningColumn.columnName,\n\t\t\t\t\t\t\ttargetEntity.fields[targetEntity.primary] as Model.AnyColumn,\n\t\t\t\t\t\t\tprimaryCondition,\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tjoinList.push({ path: targetPath, entity, relationName: relation.name })\n\n\t\t\t\treturn this.buildRecursive({\n\t\t\t\t\tconditionBuilder,\n\t\t\t\t\tentity: targetEntity,\n\t\t\t\t\tpath: targetPath,\n\t\t\t\t\twhere: relationWhere,\n\t\t\t\t\tjoinList,\n\t\t\t\t\tallowManyJoin,\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tconditionBuilder = acceptFieldVisitor<SqlConditionBuilder>(this.schema, entity, fieldName, {\n\t\t\t\tvisitColumn: ({ entity, column }) => {\n\t\t\t\t\treturn this.conditionBuilder.build(conditionBuilder, tableName, column.columnName, column, fieldWhere as Input.Condition<Input.ColumnValue>)\n\t\t\t\t},\n\t\t\t\tvisitOneHasOneInverse: joinedWhere,\n\t\t\t\tvisitOneHasOneOwning: joinedWhere,\n\t\t\t\tvisitManyHasOne: joinedWhere,\n\t\t\t\tvisitManyHasManyInverse: context => {\n\t\t\t\t\tif (allowManyJoin && !this.useExistsInHasManyFilter) {\n\t\t\t\t\t\treturn joinedWhere(context)\n\t\t\t\t\t}\n\n\t\t\t\t\treturn conditionBuilder.exists(\n\t\t\t\t\t\tthis.createManyHasManySubquery(\n\t\t\t\t\t\t\t[tableName, entity.primaryColumn],\n\t\t\t\t\t\t\tfieldWhere as Input.OptionalWhere,\n\t\t\t\t\t\t\tcontext.targetEntity,\n\t\t\t\t\t\t\tcontext.targetRelation.joiningTable,\n\t\t\t\t\t\t\t'inverse',\n\t\t\t\t\t\t\ttargetPath,\n\t\t\t\t\t\t),\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t\tvisitManyHasManyOwning: context => {\n\t\t\t\t\tif (allowManyJoin && !this.useExistsInHasManyFilter) {\n\t\t\t\t\t\treturn joinedWhere(context)\n\t\t\t\t\t}\n\n\t\t\t\t\tconst relationWhere = where[fieldName] as Input.Where | null\n\n\t\t\t\t\treturn conditionBuilder.exists(\n\t\t\t\t\t\tthis.createManyHasManySubquery(\n\t\t\t\t\t\t\t[tableName, entity.primaryColumn],\n\t\t\t\t\t\t\tfieldWhere as Input.OptionalWhere,\n\t\t\t\t\t\t\tcontext.targetEntity,\n\t\t\t\t\t\t\tcontext.relation.joiningTable,\n\t\t\t\t\t\t\t'owning',\n\t\t\t\t\t\t\ttargetPath,\n\t\t\t\t\t\t),\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t\tvisitOneHasMany: context => {\n\t\t\t\t\tif (allowManyJoin && !this.useExistsInHasManyFilter) {\n\t\t\t\t\t\treturn joinedWhere(context)\n\t\t\t\t\t}\n\n\t\t\t\t\tconst relationWhere = fieldWhere as Input.OptionalWhere\n\n\t\t\t\t\tconst qb = this.hasRootIsNull(relationWhere, context.targetEntity)\n\t\t\t\t\t\t? SelectBuilder.create()\n\t\t\t\t\t\t\t.select(it => it.raw('1'))\n\t\t\t\t\t\t\t.from(new Literal(`(select ${wrapIdentifier(tableName)}.${wrapIdentifier(entity.primaryColumn)})`), targetPath.for('tmp_').alias)\n\t\t\t\t\t\t\t.leftJoin(\n\t\t\t\t\t\t\t\tcontext.targetEntity.tableName,\n\t\t\t\t\t\t\t\ttargetPath.alias,\n\t\t\t\t\t\t\t\tit => it.columnsEq([targetPath.for('tmp_').alias, entity.primaryColumn], [targetPath.alias, context.targetRelation.joiningColumn.columnName]),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t: SelectBuilder.create()\n\t\t\t\t\t\t\t.select(it => it.raw('1'))\n\t\t\t\t\t\t\t.from(context.targetEntity.tableName, targetPath.alias)\n\t\t\t\t\t\t\t.where(it => it.columnsEq([tableName, entity.primaryColumn], [targetPath.alias, context.targetRelation.joiningColumn.columnName]))\n\n\t\t\t\t\treturn conditionBuilder.exists(\n\t\t\t\t\t\tthis.buildInternal({\n\t\t\t\t\t\t\tentity: context.targetEntity,\n\t\t\t\t\t\t\tpath: targetPath,\n\t\t\t\t\t\t\twhere: relationWhere,\n\t\t\t\t\t\t\tcallback: cb => qb.where(clause => cb(clause)),\n\t\t\t\t\t\t\tallowManyJoin: true,\n\t\t\t\t\t\t}),\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\t\treturn conditionBuilder\n\t}\n\n\tprivate createManyHasManySubquery(\n\t\touterColumn: QueryBuilder.ColumnIdentifier,\n\t\trelationWhere: Input.OptionalWhere,\n\t\ttargetEntity: Model.Entity,\n\t\tjoiningTable: Model.JoiningTable,\n\t\tfromSide: 'owning' | 'inverse',\n\t\tpath: Path,\n\t) {\n\t\tconst fromColumn = fromSide === 'owning' ? joiningTable.joiningColumn.columnName : joiningTable.inverseJoiningColumn.columnName\n\t\tconst toColumn = fromSide === 'owning' ? joiningTable.inverseJoiningColumn.columnName : joiningTable.joiningColumn.columnName\n\t\tconst junctionPath = path.for('junction_')\n\t\tconst qb = SelectBuilder.create<SelectBuilder.Result>()\n\t\t\t.from(joiningTable.tableName, junctionPath.alias)\n\t\t\t.select(it => it.raw('1'))\n\t\t\t.where(it => it.columnsEq(outerColumn, [junctionPath.alias, fromColumn]))\n\n\t\tconst primaryCondition = this.transformWhereToPrimaryCondition(relationWhere, targetEntity.primary)\n\t\tif (primaryCondition !== null) {\n\t\t\tconst columnType = targetEntity.fields[targetEntity.primary] as Model.AnyColumn\n\n\t\t\treturn qb.where(condition => this.conditionBuilder.build(condition, junctionPath.alias, toColumn, columnType, primaryCondition))\n\t\t}\n\n\t\tconst qbJoined = qb.join(\n\t\t\ttargetEntity.tableName,\n\t\t\tpath.alias,\n\t\t\tclause => clause.compareColumns([junctionPath.alias, toColumn], Operator.eq, [path.alias, targetEntity.primary]),\n\t\t)\n\t\treturn this.buildInternal({\n\t\t\tentity: targetEntity,\n\t\t\tpath: this.pathFactory.create([], path.fullAlias),\n\t\t\twhere: relationWhere,\n\t\t\tcallback: cb => qbJoined.where(clause => cb(clause)),\n\t\t\tallowManyJoin: true,\n\t\t})\n\t}\n\n\tprivate transformWhereToPrimaryCondition(where: Input.OptionalWhere, primaryField: string): Input.Condition<never> | null {\n\t\tconst keys = Object.keys(where)\n\t\tif (keys.filter(it => !['and', 'or', 'not', primaryField].includes(it)).length > 0) {\n\t\t\treturn null\n\t\t}\n\t\tlet condition: {\n\t\t\tand?: Array<Input.Condition<never>>\n\t\t\tor?: Array<Input.Condition<never>>\n\t\t\tnot?: Input.Condition<never>\n\t\t} = {}\n\t\tif (where.and) {\n\t\t\tconst conditions = where.and\n\t\t\t\t.filter((it): it is Input.Where => !!it)\n\t\t\t\t.map(it => this.transformWhereToPrimaryCondition(it, primaryField))\n\t\t\tif (conditions.includes(null)) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tcondition.and = conditions as Input.Condition<never>[]\n\t\t}\n\t\tif (where.or) {\n\t\t\tconst conditions = where.or\n\t\t\t\t.filter((it): it is Input.Where => !!it)\n\t\t\t\t.map(it => this.transformWhereToPrimaryCondition(it, primaryField))\n\t\t\tif (conditions.includes(null)) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tcondition.or = conditions as Input.Condition<never>[]\n\t\t}\n\t\tif (where.not) {\n\t\t\tconst conditions = this.transformWhereToPrimaryCondition(where.not, primaryField)\n\t\t\tif (conditions === null) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tcondition.not = conditions as Input.Condition<never>\n\t\t}\n\t\tif (where[primaryField]) {\n\t\t\tif (Object.keys(condition).length > 0) {\n\t\t\t\treturn { and: [condition, where[primaryField] as Input.Condition<never>] }\n\t\t\t}\n\t\t\treturn where[primaryField] as Input.Condition<never>\n\t\t}\n\t\treturn condition\n\t}\n\n\tprivate hasRootIsNull(where: Input.OptionalWhere, entity: Model.Entity): boolean {\n\t\tfor (const key in where) {\n\t\t\tif (key === 'and' || key === 'or') {\n\t\t\t\tif (where[key]?.some(it => it && this.hasRootIsNull(it, entity))) {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t} else if (key === 'not') {\n\t\t\t\tif (where.not && this.hasRootIsNull(where.not, entity)) {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t} else if (isColumn(entity.fields[key]) && this.conditionHasIsNull(where[key] as Input.Condition)) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t\treturn false\n\t}\n\n\tprivate conditionHasIsNull(cond: Input.Condition): boolean {\n\t\tif (cond.isNull !== undefined) {\n\t\t\treturn true\n\t\t}\n\t\tif (cond.and?.some(it => this.conditionHasIsNull(it))) {\n\t\t\treturn true\n\t\t}\n\t\tif (cond.or?.some(it => this.conditionHasIsNull(it))) {\n\t\t\treturn true\n\t\t}\n\t\tif (cond.not && this.conditionHasIsNull(cond.not)) {\n\t\t\treturn true\n\t\t}\n\t\treturn false\n\t}\n}\n\nexport type WhereJoinDefinition = { path: Path; entity: Model.Entity; relationName: string }\n"],"names":["where","entity","isIt","acceptFieldVisitor","SelectBuilder","Literal","wrapIdentifier","Operator","isColumn"],"mappings":"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"}
@@ -35,11 +35,13 @@ class WhereBuilder {
35
35
  ...args
36
36
  }) {
37
37
  const joinList = [];
38
- const qbWithWhere = callback((clause) => this.buildRecursive({
39
- conditionBuilder: clause,
40
- joinList,
41
- ...args
42
- }));
38
+ const qbWithWhere = callback(
39
+ (clause) => this.buildRecursive({
40
+ conditionBuilder: clause,
41
+ joinList,
42
+ ...args
43
+ })
44
+ );
43
45
  return joinList.reduce(
44
46
  (qb, { path, entity, relationName }) => this.joinBuilder.join(qb, path, entity, relationName),
45
47
  qbWithWhere
@@ -74,14 +76,16 @@ class WhereBuilder {
74
76
  const expr = where.or;
75
77
  conditionBuilder = conditionBuilder.or(
76
78
  (clause) => expr.reduce(
77
- (clause2, where2) => !where2 ? clause2 : clause2.and((clause3) => this.buildRecursive({
78
- conditionBuilder: clause3,
79
- entity,
80
- path,
81
- where: where2,
82
- joinList,
83
- allowManyJoin
84
- })),
79
+ (clause2, where2) => !where2 ? clause2 : clause2.and(
80
+ (clause3) => this.buildRecursive({
81
+ conditionBuilder: clause3,
82
+ entity,
83
+ path,
84
+ where: where2,
85
+ joinList,
86
+ allowManyJoin
87
+ })
88
+ ),
85
89
  clause
86
90
  )
87
91
  );
@@ -205,9 +209,7 @@ class WhereBuilder {
205
209
  const primaryCondition = this.transformWhereToPrimaryCondition(relationWhere, targetEntity.primary);
206
210
  if (primaryCondition !== null) {
207
211
  const columnType = targetEntity.fields[targetEntity.primary];
208
- return qb.where(
209
- (condition) => this.conditionBuilder.build(condition, junctionPath.alias, toColumn, columnType, primaryCondition)
210
- );
212
+ return qb.where((condition) => this.conditionBuilder.build(condition, junctionPath.alias, toColumn, columnType, primaryCondition));
211
213
  }
212
214
  const qbJoined = qb.join(
213
215
  targetEntity.tableName,
@@ -277,10 +279,10 @@ class WhereBuilder {
277
279
  if (cond.isNull !== void 0) {
278
280
  return true;
279
281
  }
280
- if (cond.and && cond.and.some((it) => this.conditionHasIsNull(it))) {
282
+ if (cond.and?.some((it) => this.conditionHasIsNull(it))) {
281
283
  return true;
282
284
  }
283
- if (cond.or && cond.or.some((it) => this.conditionHasIsNull(it))) {
285
+ if (cond.or?.some((it) => this.conditionHasIsNull(it))) {
284
286
  return true;
285
287
  }
286
288
  if (cond.not && this.conditionHasIsNull(cond.not)) {
@@ -1 +1 @@
1
- {"version":3,"file":"WhereBuilder.js","sources":["../../../../../../packages/engine-content-api/src/mapper/select/WhereBuilder.ts"],"sourcesContent":["import { isIt } from '../../utils'\nimport { acceptFieldVisitor, isColumn } from '@contember/schema-utils'\nimport { Input, Model } from '@contember/schema'\nimport { Path, PathFactory } from './Path'\nimport { JoinBuilder } from './JoinBuilder'\nimport { ConditionBuilder } from './ConditionBuilder'\nimport {\n\tConditionBuilder as SqlConditionBuilder,\n\tLiteral,\n\tOperator,\n\tQueryBuilder,\n\tSelectBuilder, wrapIdentifier,\n} from '@contember/database'\nimport { WhereOptimizationHints, WhereOptimizer } from './optimizer/WhereOptimizer'\n\nexport class WhereBuilder {\n\tconstructor(\n\t\tprivate readonly schema: Model.Schema,\n\t\tprivate readonly joinBuilder: JoinBuilder,\n\t\tprivate readonly conditionBuilder: ConditionBuilder,\n\t\tprivate readonly pathFactory: PathFactory,\n\t\tprivate readonly whereOptimizer: WhereOptimizer,\n\t\tprivate readonly useExistsInHasManyFilter: boolean,\n\t) {}\n\n\tpublic build<R extends SelectBuilder.Result>(\n\t\tqb: SelectBuilder<R>,\n\t\tentity: Model.Entity,\n\t\tpath: Path,\n\t\twhere: Input.OptionalWhere,\n\t\toptimizationHints: WhereOptimizationHints = {},\n\t): SelectBuilder<R> {\n\t\tconst optimizedWhere = this.whereOptimizer.optimize(where, entity, optimizationHints)\n\t\treturn this.buildInternal({\n\t\t\tentity,\n\t\t\tpath,\n\t\t\twhere: optimizedWhere,\n\t\t\tcallback: cb => qb.where(clause => cb(clause)),\n\t\t\tallowManyJoin: false,\n\t\t})\n\t}\n\n\n\tpublic buildAdvanced<R extends SelectBuilder.Result>(\n\t\tentity: Model.Entity,\n\t\tpath: Path,\n\t\twhere: Input.OptionalWhere,\n\t\tcallback: (clauseCb: (clause: SqlConditionBuilder) => SqlConditionBuilder) => SelectBuilder<R>,\n\t\toptimizationHints: WhereOptimizationHints = {},\n\t): SelectBuilder<R> {\n\t\tconst optimizedWhere = this.whereOptimizer.optimize(where, entity, optimizationHints)\n\t\treturn this.buildInternal({\n\t\t\tentity,\n\t\t\tpath,\n\t\t\twhere: optimizedWhere,\n\t\t\tcallback,\n\t\t\tallowManyJoin: false,\n\t\t})\n\t}\n\n\tprivate buildInternal<R extends SelectBuilder.Result>({\n\t\tcallback,\n\t\t...args\n\t}: { entity: Model.Entity; path: Path; where: Input.OptionalWhere; callback: (clauseCb: (clause: SqlConditionBuilder) => SqlConditionBuilder) => SelectBuilder<R>; allowManyJoin: boolean },\n\t): SelectBuilder<R> {\n\t\tconst joinList: WhereJoinDefinition[] = []\n\n\t\tconst qbWithWhere = callback(clause => this.buildRecursive({\n\t\t\tconditionBuilder: clause,\n\t\t\tjoinList: joinList,\n\t\t\t...args,\n\t\t}))\n\t\treturn joinList.reduce<SelectBuilder<R>>(\n\t\t\t(qb, { path, entity, relationName }) => this.joinBuilder.join<R>(qb, path, entity, relationName),\n\t\t\tqbWithWhere,\n\t\t)\n\t}\n\n\tprivate buildRecursive({\n\t\tconditionBuilder,\n\t\tentity,\n\t\tpath,\n\t\twhere,\n\t\tjoinList,\n\t\tallowManyJoin,\n\t}: { conditionBuilder: SqlConditionBuilder; entity: Model.Entity; path: Path; where: Input.OptionalWhere; joinList: WhereJoinDefinition[]; allowManyJoin: boolean },\n\t): SqlConditionBuilder {\n\t\tconst tableName = path.alias\n\n\t\tif (where.and !== undefined && where.and !== null && where.and.length > 0) {\n\t\t\tconst expr = where.and\n\t\t\tconditionBuilder = conditionBuilder.and(clause =>\n\t\t\t\texpr.reduce(\n\t\t\t\t\t(clause2, where) =>\n\t\t\t\t\t\t!where ? clause2 : this.buildRecursive({\n\t\t\t\t\t\t\tconditionBuilder: clause2,\n\t\t\t\t\t\t\tentity,\n\t\t\t\t\t\t\tpath,\n\t\t\t\t\t\t\twhere,\n\t\t\t\t\t\t\tjoinList,\n\t\t\t\t\t\t\tallowManyJoin,\n\t\t\t\t\t\t}),\n\t\t\t\t\tclause,\n\t\t\t\t),\n\t\t\t)\n\t\t}\n\t\tif (where.or !== undefined && where.or !== null && where.or.length > 0) {\n\t\t\tconst expr = where.or\n\t\t\tconditionBuilder = conditionBuilder.or(clause =>\n\t\t\t\texpr.reduce(\n\t\t\t\t\t(clause2, where) =>\n\t\t\t\t\t\t!where\n\t\t\t\t\t\t\t? clause2\n\t\t\t\t\t\t\t: clause2.and(clause3 => this.buildRecursive({\n\t\t\t\t\t\t\t\tconditionBuilder: clause3,\n\t\t\t\t\t\t\t\tentity,\n\t\t\t\t\t\t\t\tpath,\n\t\t\t\t\t\t\t\twhere,\n\t\t\t\t\t\t\t\tjoinList,\n\t\t\t\t\t\t\t\tallowManyJoin,\n\t\t\t\t\t\t\t})),\n\t\t\t\t\tclause,\n\t\t\t\t),\n\t\t\t)\n\t\t}\n\t\tif (where.not !== undefined && where.not !== null) {\n\t\t\tconst expr = where.not\n\t\t\tconditionBuilder = conditionBuilder.not(clause =>\n\t\t\t\tthis.buildRecursive({\n\t\t\t\t\tconditionBuilder: clause,\n\t\t\t\t\tentity,\n\t\t\t\t\tpath,\n\t\t\t\t\twhere: expr,\n\t\t\t\t\tjoinList,\n\t\t\t\t\tallowManyJoin,\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\n\t\tfor (const fieldName in where) {\n\t\t\tif (fieldName === 'and' || fieldName === 'or' || fieldName === 'not') {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst fieldWhere = where[fieldName]\n\t\t\tif (!fieldWhere) {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tconst targetPath = path.for(fieldName)\n\n\t\t\tconst joinedWhere = ({ targetEntity, relation, entity }: Model.AnyRelationContext): SqlConditionBuilder => {\n\t\t\t\tconst relationWhere = where[fieldName] as Input.OptionalWhere | null\n\t\t\t\tif (!relationWhere || Object.keys(relationWhere).length === 0) {\n\t\t\t\t\treturn conditionBuilder\n\t\t\t\t}\n\t\t\t\tif (isIt<Model.JoiningColumnRelation>(relation, 'joiningColumn')) {\n\t\t\t\t\tconst primaryCondition = this.transformWhereToPrimaryCondition(relationWhere, targetEntity.primary)\n\t\t\t\t\tif (primaryCondition !== null) {\n\t\t\t\t\t\treturn this.conditionBuilder.build(\n\t\t\t\t\t\t\tconditionBuilder,\n\t\t\t\t\t\t\ttableName,\n\t\t\t\t\t\t\trelation.joiningColumn.columnName,\n\t\t\t\t\t\t\t(targetEntity.fields[targetEntity.primary] as Model.AnyColumn),\n\t\t\t\t\t\t\tprimaryCondition,\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tjoinList.push({ path: targetPath, entity, relationName: relation.name })\n\n\t\t\t\treturn this.buildRecursive({\n\t\t\t\t\tconditionBuilder,\n\t\t\t\t\tentity: targetEntity,\n\t\t\t\t\tpath: targetPath,\n\t\t\t\t\twhere: relationWhere,\n\t\t\t\t\tjoinList,\n\t\t\t\t\tallowManyJoin,\n\t\t\t\t})\n\t\t\t}\n\n\n\n\t\t\tconditionBuilder = acceptFieldVisitor<SqlConditionBuilder>(this.schema, entity, fieldName, {\n\t\t\t\tvisitColumn: ({ entity, column }) => {\n\t\t\t\t\treturn this.conditionBuilder.build(conditionBuilder, tableName, column.columnName, column, fieldWhere as Input.Condition<Input.ColumnValue>)\n\t\t\t\t},\n\t\t\t\tvisitOneHasOneInverse: joinedWhere,\n\t\t\t\tvisitOneHasOneOwning: joinedWhere,\n\t\t\t\tvisitManyHasOne: joinedWhere,\n\t\t\t\tvisitManyHasManyInverse: context => {\n\t\t\t\t\tif (allowManyJoin && !this.useExistsInHasManyFilter) {\n\t\t\t\t\t\treturn joinedWhere(context)\n\t\t\t\t\t}\n\n\t\t\t\t\treturn conditionBuilder.exists(\n\t\t\t\t\t\tthis.createManyHasManySubquery(\n\t\t\t\t\t\t\t[tableName, entity.primaryColumn],\n\t\t\t\t\t\t\tfieldWhere as Input.OptionalWhere,\n\t\t\t\t\t\t\tcontext.targetEntity,\n\t\t\t\t\t\t\tcontext.targetRelation.joiningTable,\n\t\t\t\t\t\t\t'inverse',\n\t\t\t\t\t\t\ttargetPath,\n\t\t\t\t\t\t),\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t\tvisitManyHasManyOwning: context => {\n\t\t\t\t\tif (allowManyJoin && !this.useExistsInHasManyFilter) {\n\t\t\t\t\t\treturn joinedWhere(context)\n\t\t\t\t\t}\n\n\t\t\t\t\tconst relationWhere = where[fieldName] as Input.Where | null\n\n\t\t\t\t\treturn conditionBuilder.exists(\n\t\t\t\t\t\tthis.createManyHasManySubquery(\n\t\t\t\t\t\t\t[tableName, entity.primaryColumn],\n\t\t\t\t\t\t\tfieldWhere as Input.OptionalWhere,\n\t\t\t\t\t\t\tcontext.targetEntity,\n\t\t\t\t\t\t\tcontext.relation.joiningTable,\n\t\t\t\t\t\t\t'owning',\n\t\t\t\t\t\t\ttargetPath,\n\t\t\t\t\t\t),\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t\tvisitOneHasMany: context => {\n\t\t\t\t\tif (allowManyJoin && !this.useExistsInHasManyFilter) {\n\t\t\t\t\t\treturn joinedWhere(context)\n\t\t\t\t\t}\n\n\t\t\t\t\tconst relationWhere = fieldWhere as Input.OptionalWhere\n\n\t\t\t\t\tconst qb = this.hasRootIsNull(relationWhere, context.targetEntity)\n\t\t\t\t\t\t? SelectBuilder.create()\n\t\t\t\t\t\t\t.select(it => it.raw('1'))\n\t\t\t\t\t\t\t.from(new Literal(`(select ${wrapIdentifier(tableName)}.${wrapIdentifier(entity.primaryColumn)})`), targetPath.for('tmp_').alias)\n\t\t\t\t\t\t\t.leftJoin(context.targetEntity.tableName, targetPath.alias, it =>\n\t\t\t\t\t\t\t\tit.columnsEq([targetPath.for('tmp_').alias, entity.primaryColumn], [targetPath.alias, context.targetRelation.joiningColumn.columnName]),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t: SelectBuilder.create()\n\t\t\t\t\t\t\t.select(it => it.raw('1'))\n\t\t\t\t\t\t\t.from(context.targetEntity.tableName, targetPath.alias)\n\t\t\t\t\t\t\t.where(it => it.columnsEq([tableName, entity.primaryColumn], [targetPath.alias, context.targetRelation.joiningColumn.columnName]))\n\n\t\t\t\t\treturn conditionBuilder.exists(\n\t\t\t\t\t\tthis.buildInternal({\n\t\t\t\t\t\t\tentity: context.targetEntity,\n\t\t\t\t\t\t\tpath: targetPath,\n\t\t\t\t\t\t\twhere: relationWhere,\n\t\t\t\t\t\t\tcallback: cb => qb.where(clause => cb(clause)),\n\t\t\t\t\t\t\tallowManyJoin: true,\n\t\t\t\t\t\t}),\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\t\treturn conditionBuilder\n\t}\n\n\n\tprivate createManyHasManySubquery(\n\t\touterColumn: QueryBuilder.ColumnIdentifier,\n\t\trelationWhere: Input.OptionalWhere,\n\t\ttargetEntity: Model.Entity,\n\t\tjoiningTable: Model.JoiningTable,\n\t\tfromSide: 'owning' | 'inverse',\n\t\tpath: Path,\n\t) {\n\t\tconst fromColumn = fromSide === 'owning' ? joiningTable.joiningColumn.columnName : joiningTable.inverseJoiningColumn.columnName\n\t\tconst toColumn = fromSide === 'owning' ? joiningTable.inverseJoiningColumn.columnName : joiningTable.joiningColumn.columnName\n\t\tconst junctionPath = path.for('junction_')\n\t\tconst qb = SelectBuilder.create<SelectBuilder.Result>()\n\t\t\t.from(joiningTable.tableName, junctionPath.alias)\n\t\t\t.select(it => it.raw('1'))\n\t\t\t.where(it => it.columnsEq(outerColumn, [junctionPath.alias, fromColumn]))\n\n\t\tconst primaryCondition = this.transformWhereToPrimaryCondition(relationWhere, targetEntity.primary)\n\t\tif (primaryCondition !== null) {\n\n\t\t\tconst columnType = (targetEntity.fields[targetEntity.primary] as Model.AnyColumn)\n\n\t\t\treturn qb.where(condition =>\n\t\t\t\tthis.conditionBuilder.build(condition, junctionPath.alias, toColumn, columnType, primaryCondition),\n\t\t\t)\n\t\t}\n\n\t\tconst qbJoined = qb.join(targetEntity.tableName, path.alias, clause =>\n\t\t\tclause.compareColumns([junctionPath.alias, toColumn], Operator.eq, [path.alias, targetEntity.primary]),\n\t\t)\n\t\treturn this.buildInternal({\n\t\t\tentity: targetEntity,\n\t\t\tpath: this.pathFactory.create([], path.fullAlias),\n\t\t\twhere: relationWhere,\n\t\t\tcallback: cb => qbJoined.where(clause => cb(clause)),\n\t\t\tallowManyJoin: true,\n\t\t})\n\t}\n\n\tprivate transformWhereToPrimaryCondition(where: Input.OptionalWhere, primaryField: string): Input.Condition<never> | null {\n\t\tconst keys = Object.keys(where)\n\t\tif (keys.filter(it => !['and', 'or', 'not', primaryField].includes(it)).length > 0) {\n\t\t\treturn null\n\t\t}\n\t\tlet condition: {\n\t\t\tand?: Array<Input.Condition<never>>\n\t\t\tor?: Array<Input.Condition<never>>\n\t\t\tnot?: Input.Condition<never>\n\t\t} = {}\n\t\tif (where.and) {\n\t\t\tconst conditions = where.and\n\t\t\t\t.filter((it): it is Input.Where => !!it)\n\t\t\t\t.map(it => this.transformWhereToPrimaryCondition(it, primaryField))\n\t\t\tif (conditions.includes(null)) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tcondition.and = conditions as Input.Condition<never>[]\n\t\t}\n\t\tif (where.or) {\n\t\t\tconst conditions = where.or\n\t\t\t\t.filter((it): it is Input.Where => !!it)\n\t\t\t\t.map(it => this.transformWhereToPrimaryCondition(it, primaryField))\n\t\t\tif (conditions.includes(null)) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tcondition.or = conditions as Input.Condition<never>[]\n\t\t}\n\t\tif (where.not) {\n\t\t\tconst conditions = this.transformWhereToPrimaryCondition(where.not, primaryField)\n\t\t\tif (conditions === null) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tcondition.not = conditions as Input.Condition<never>\n\t\t}\n\t\tif (where[primaryField]) {\n\t\t\tif (Object.keys(condition).length > 0) {\n\t\t\t\treturn { and: [condition, where[primaryField] as Input.Condition<never>] }\n\t\t\t}\n\t\t\treturn where[primaryField] as Input.Condition<never>\n\t\t}\n\t\treturn condition\n\t}\n\n\tprivate hasRootIsNull(where: Input.OptionalWhere, entity: Model.Entity): boolean {\n\t\tfor (const key in where) {\n\t\t\tif (key === 'and' || key === 'or') {\n\t\t\t\tif (where[key]?.some(it => it && this.hasRootIsNull(it, entity))) {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t} else if (key === 'not') {\n\t\t\t\tif (where.not && this.hasRootIsNull(where.not, entity)) {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t} else if (isColumn(entity.fields[key]) && this.conditionHasIsNull(where[key] as Input.Condition)) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t\treturn false\n\t}\n\n\tprivate conditionHasIsNull(cond: Input.Condition): boolean {\n\t\tif (cond.isNull !== undefined) {\n\t\t\treturn true\n\t\t}\n\t\tif (cond.and && cond.and.some(it => this.conditionHasIsNull(it))) {\n\t\t\treturn true\n\t\t}\n\t\tif (cond.or && cond.or.some(it => this.conditionHasIsNull(it))) {\n\t\t\treturn true\n\t\t}\n\t\tif (cond.not && this.conditionHasIsNull(cond.not)) {\n\t\t\treturn true\n\t\t}\n\t\treturn false\n\t}\n}\n\nexport type WhereJoinDefinition = { path: Path; entity: Model.Entity; relationName: string }\n"],"names":["where","entity"],"mappings":"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"}
1
+ {"version":3,"file":"WhereBuilder.js","sources":["../../../../../../packages/engine-content-api/src/mapper/select/WhereBuilder.ts"],"sourcesContent":["import { isIt } from '../../utils'\nimport { acceptFieldVisitor, isColumn } from '@contember/schema-utils'\nimport { Input, Model } from '@contember/schema'\nimport { Path, PathFactory } from './Path'\nimport { JoinBuilder } from './JoinBuilder'\nimport { ConditionBuilder } from './ConditionBuilder'\nimport { ConditionBuilder as SqlConditionBuilder, Literal, Operator, QueryBuilder, SelectBuilder, wrapIdentifier } from '@contember/database'\nimport { WhereOptimizationHints, WhereOptimizer } from './optimizer/WhereOptimizer'\n\nexport class WhereBuilder {\n\tconstructor(\n\t\tprivate readonly schema: Model.Schema,\n\t\tprivate readonly joinBuilder: JoinBuilder,\n\t\tprivate readonly conditionBuilder: ConditionBuilder,\n\t\tprivate readonly pathFactory: PathFactory,\n\t\tprivate readonly whereOptimizer: WhereOptimizer,\n\t\tprivate readonly useExistsInHasManyFilter: boolean,\n\t) {}\n\n\tpublic build<R extends SelectBuilder.Result>(\n\t\tqb: SelectBuilder<R>,\n\t\tentity: Model.Entity,\n\t\tpath: Path,\n\t\twhere: Input.OptionalWhere,\n\t\toptimizationHints: WhereOptimizationHints = {},\n\t): SelectBuilder<R> {\n\t\tconst optimizedWhere = this.whereOptimizer.optimize(where, entity, optimizationHints)\n\t\treturn this.buildInternal({\n\t\t\tentity,\n\t\t\tpath,\n\t\t\twhere: optimizedWhere,\n\t\t\tcallback: cb => qb.where(clause => cb(clause)),\n\t\t\tallowManyJoin: false,\n\t\t})\n\t}\n\n\tpublic buildAdvanced<R extends SelectBuilder.Result>(\n\t\tentity: Model.Entity,\n\t\tpath: Path,\n\t\twhere: Input.OptionalWhere,\n\t\tcallback: (clauseCb: (clause: SqlConditionBuilder) => SqlConditionBuilder) => SelectBuilder<R>,\n\t\toptimizationHints: WhereOptimizationHints = {},\n\t): SelectBuilder<R> {\n\t\tconst optimizedWhere = this.whereOptimizer.optimize(where, entity, optimizationHints)\n\t\treturn this.buildInternal({\n\t\t\tentity,\n\t\t\tpath,\n\t\t\twhere: optimizedWhere,\n\t\t\tcallback,\n\t\t\tallowManyJoin: false,\n\t\t})\n\t}\n\n\tprivate buildInternal<R extends SelectBuilder.Result>({\n\t\tcallback,\n\t\t...args\n\t}: {\n\t\tentity: Model.Entity\n\t\tpath: Path\n\t\twhere: Input.OptionalWhere\n\t\tcallback: (clauseCb: (clause: SqlConditionBuilder) => SqlConditionBuilder) => SelectBuilder<R>\n\t\tallowManyJoin: boolean\n\t}): SelectBuilder<R> {\n\t\tconst joinList: WhereJoinDefinition[] = []\n\n\t\tconst qbWithWhere = callback(clause =>\n\t\t\tthis.buildRecursive({\n\t\t\t\tconditionBuilder: clause,\n\t\t\t\tjoinList: joinList,\n\t\t\t\t...args,\n\t\t\t})\n\t\t)\n\t\treturn joinList.reduce<SelectBuilder<R>>(\n\t\t\t(qb, { path, entity, relationName }) => this.joinBuilder.join<R>(qb, path, entity, relationName),\n\t\t\tqbWithWhere,\n\t\t)\n\t}\n\n\tprivate buildRecursive({\n\t\tconditionBuilder,\n\t\tentity,\n\t\tpath,\n\t\twhere,\n\t\tjoinList,\n\t\tallowManyJoin,\n\t}: {\n\t\tconditionBuilder: SqlConditionBuilder\n\t\tentity: Model.Entity\n\t\tpath: Path\n\t\twhere: Input.OptionalWhere\n\t\tjoinList: WhereJoinDefinition[]\n\t\tallowManyJoin: boolean\n\t}): SqlConditionBuilder {\n\t\tconst tableName = path.alias\n\n\t\tif (where.and !== undefined && where.and !== null && where.and.length > 0) {\n\t\t\tconst expr = where.and\n\t\t\tconditionBuilder = conditionBuilder.and(clause =>\n\t\t\t\texpr.reduce(\n\t\t\t\t\t(clause2, where) =>\n\t\t\t\t\t\t!where ? clause2 : this.buildRecursive({\n\t\t\t\t\t\t\tconditionBuilder: clause2,\n\t\t\t\t\t\t\tentity,\n\t\t\t\t\t\t\tpath,\n\t\t\t\t\t\t\twhere,\n\t\t\t\t\t\t\tjoinList,\n\t\t\t\t\t\t\tallowManyJoin,\n\t\t\t\t\t\t}),\n\t\t\t\t\tclause,\n\t\t\t\t)\n\t\t\t)\n\t\t}\n\t\tif (where.or !== undefined && where.or !== null && where.or.length > 0) {\n\t\t\tconst expr = where.or\n\t\t\tconditionBuilder = conditionBuilder.or(clause =>\n\t\t\t\texpr.reduce(\n\t\t\t\t\t(clause2, where) =>\n\t\t\t\t\t\t!where\n\t\t\t\t\t\t\t? clause2\n\t\t\t\t\t\t\t: clause2.and(clause3 =>\n\t\t\t\t\t\t\t\tthis.buildRecursive({\n\t\t\t\t\t\t\t\t\tconditionBuilder: clause3,\n\t\t\t\t\t\t\t\t\tentity,\n\t\t\t\t\t\t\t\t\tpath,\n\t\t\t\t\t\t\t\t\twhere,\n\t\t\t\t\t\t\t\t\tjoinList,\n\t\t\t\t\t\t\t\t\tallowManyJoin,\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t),\n\t\t\t\t\tclause,\n\t\t\t\t)\n\t\t\t)\n\t\t}\n\t\tif (where.not !== undefined && where.not !== null) {\n\t\t\tconst expr = where.not\n\t\t\tconditionBuilder = conditionBuilder.not(clause =>\n\t\t\t\tthis.buildRecursive({\n\t\t\t\t\tconditionBuilder: clause,\n\t\t\t\t\tentity,\n\t\t\t\t\tpath,\n\t\t\t\t\twhere: expr,\n\t\t\t\t\tjoinList,\n\t\t\t\t\tallowManyJoin,\n\t\t\t\t})\n\t\t\t)\n\t\t}\n\n\t\tfor (const fieldName in where) {\n\t\t\tif (fieldName === 'and' || fieldName === 'or' || fieldName === 'not') {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst fieldWhere = where[fieldName]\n\t\t\tif (!fieldWhere) {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tconst targetPath = path.for(fieldName)\n\n\t\t\tconst joinedWhere = ({ targetEntity, relation, entity }: Model.AnyRelationContext): SqlConditionBuilder => {\n\t\t\t\tconst relationWhere = where[fieldName] as Input.OptionalWhere | null\n\t\t\t\tif (!relationWhere || Object.keys(relationWhere).length === 0) {\n\t\t\t\t\treturn conditionBuilder\n\t\t\t\t}\n\t\t\t\tif (isIt<Model.JoiningColumnRelation>(relation, 'joiningColumn')) {\n\t\t\t\t\tconst primaryCondition = this.transformWhereToPrimaryCondition(relationWhere, targetEntity.primary)\n\t\t\t\t\tif (primaryCondition !== null) {\n\t\t\t\t\t\treturn this.conditionBuilder.build(\n\t\t\t\t\t\t\tconditionBuilder,\n\t\t\t\t\t\t\ttableName,\n\t\t\t\t\t\t\trelation.joiningColumn.columnName,\n\t\t\t\t\t\t\ttargetEntity.fields[targetEntity.primary] as Model.AnyColumn,\n\t\t\t\t\t\t\tprimaryCondition,\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tjoinList.push({ path: targetPath, entity, relationName: relation.name })\n\n\t\t\t\treturn this.buildRecursive({\n\t\t\t\t\tconditionBuilder,\n\t\t\t\t\tentity: targetEntity,\n\t\t\t\t\tpath: targetPath,\n\t\t\t\t\twhere: relationWhere,\n\t\t\t\t\tjoinList,\n\t\t\t\t\tallowManyJoin,\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tconditionBuilder = acceptFieldVisitor<SqlConditionBuilder>(this.schema, entity, fieldName, {\n\t\t\t\tvisitColumn: ({ entity, column }) => {\n\t\t\t\t\treturn this.conditionBuilder.build(conditionBuilder, tableName, column.columnName, column, fieldWhere as Input.Condition<Input.ColumnValue>)\n\t\t\t\t},\n\t\t\t\tvisitOneHasOneInverse: joinedWhere,\n\t\t\t\tvisitOneHasOneOwning: joinedWhere,\n\t\t\t\tvisitManyHasOne: joinedWhere,\n\t\t\t\tvisitManyHasManyInverse: context => {\n\t\t\t\t\tif (allowManyJoin && !this.useExistsInHasManyFilter) {\n\t\t\t\t\t\treturn joinedWhere(context)\n\t\t\t\t\t}\n\n\t\t\t\t\treturn conditionBuilder.exists(\n\t\t\t\t\t\tthis.createManyHasManySubquery(\n\t\t\t\t\t\t\t[tableName, entity.primaryColumn],\n\t\t\t\t\t\t\tfieldWhere as Input.OptionalWhere,\n\t\t\t\t\t\t\tcontext.targetEntity,\n\t\t\t\t\t\t\tcontext.targetRelation.joiningTable,\n\t\t\t\t\t\t\t'inverse',\n\t\t\t\t\t\t\ttargetPath,\n\t\t\t\t\t\t),\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t\tvisitManyHasManyOwning: context => {\n\t\t\t\t\tif (allowManyJoin && !this.useExistsInHasManyFilter) {\n\t\t\t\t\t\treturn joinedWhere(context)\n\t\t\t\t\t}\n\n\t\t\t\t\tconst relationWhere = where[fieldName] as Input.Where | null\n\n\t\t\t\t\treturn conditionBuilder.exists(\n\t\t\t\t\t\tthis.createManyHasManySubquery(\n\t\t\t\t\t\t\t[tableName, entity.primaryColumn],\n\t\t\t\t\t\t\tfieldWhere as Input.OptionalWhere,\n\t\t\t\t\t\t\tcontext.targetEntity,\n\t\t\t\t\t\t\tcontext.relation.joiningTable,\n\t\t\t\t\t\t\t'owning',\n\t\t\t\t\t\t\ttargetPath,\n\t\t\t\t\t\t),\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t\tvisitOneHasMany: context => {\n\t\t\t\t\tif (allowManyJoin && !this.useExistsInHasManyFilter) {\n\t\t\t\t\t\treturn joinedWhere(context)\n\t\t\t\t\t}\n\n\t\t\t\t\tconst relationWhere = fieldWhere as Input.OptionalWhere\n\n\t\t\t\t\tconst qb = this.hasRootIsNull(relationWhere, context.targetEntity)\n\t\t\t\t\t\t? SelectBuilder.create()\n\t\t\t\t\t\t\t.select(it => it.raw('1'))\n\t\t\t\t\t\t\t.from(new Literal(`(select ${wrapIdentifier(tableName)}.${wrapIdentifier(entity.primaryColumn)})`), targetPath.for('tmp_').alias)\n\t\t\t\t\t\t\t.leftJoin(\n\t\t\t\t\t\t\t\tcontext.targetEntity.tableName,\n\t\t\t\t\t\t\t\ttargetPath.alias,\n\t\t\t\t\t\t\t\tit => it.columnsEq([targetPath.for('tmp_').alias, entity.primaryColumn], [targetPath.alias, context.targetRelation.joiningColumn.columnName]),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t: SelectBuilder.create()\n\t\t\t\t\t\t\t.select(it => it.raw('1'))\n\t\t\t\t\t\t\t.from(context.targetEntity.tableName, targetPath.alias)\n\t\t\t\t\t\t\t.where(it => it.columnsEq([tableName, entity.primaryColumn], [targetPath.alias, context.targetRelation.joiningColumn.columnName]))\n\n\t\t\t\t\treturn conditionBuilder.exists(\n\t\t\t\t\t\tthis.buildInternal({\n\t\t\t\t\t\t\tentity: context.targetEntity,\n\t\t\t\t\t\t\tpath: targetPath,\n\t\t\t\t\t\t\twhere: relationWhere,\n\t\t\t\t\t\t\tcallback: cb => qb.where(clause => cb(clause)),\n\t\t\t\t\t\t\tallowManyJoin: true,\n\t\t\t\t\t\t}),\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\t\treturn conditionBuilder\n\t}\n\n\tprivate createManyHasManySubquery(\n\t\touterColumn: QueryBuilder.ColumnIdentifier,\n\t\trelationWhere: Input.OptionalWhere,\n\t\ttargetEntity: Model.Entity,\n\t\tjoiningTable: Model.JoiningTable,\n\t\tfromSide: 'owning' | 'inverse',\n\t\tpath: Path,\n\t) {\n\t\tconst fromColumn = fromSide === 'owning' ? joiningTable.joiningColumn.columnName : joiningTable.inverseJoiningColumn.columnName\n\t\tconst toColumn = fromSide === 'owning' ? joiningTable.inverseJoiningColumn.columnName : joiningTable.joiningColumn.columnName\n\t\tconst junctionPath = path.for('junction_')\n\t\tconst qb = SelectBuilder.create<SelectBuilder.Result>()\n\t\t\t.from(joiningTable.tableName, junctionPath.alias)\n\t\t\t.select(it => it.raw('1'))\n\t\t\t.where(it => it.columnsEq(outerColumn, [junctionPath.alias, fromColumn]))\n\n\t\tconst primaryCondition = this.transformWhereToPrimaryCondition(relationWhere, targetEntity.primary)\n\t\tif (primaryCondition !== null) {\n\t\t\tconst columnType = targetEntity.fields[targetEntity.primary] as Model.AnyColumn\n\n\t\t\treturn qb.where(condition => this.conditionBuilder.build(condition, junctionPath.alias, toColumn, columnType, primaryCondition))\n\t\t}\n\n\t\tconst qbJoined = qb.join(\n\t\t\ttargetEntity.tableName,\n\t\t\tpath.alias,\n\t\t\tclause => clause.compareColumns([junctionPath.alias, toColumn], Operator.eq, [path.alias, targetEntity.primary]),\n\t\t)\n\t\treturn this.buildInternal({\n\t\t\tentity: targetEntity,\n\t\t\tpath: this.pathFactory.create([], path.fullAlias),\n\t\t\twhere: relationWhere,\n\t\t\tcallback: cb => qbJoined.where(clause => cb(clause)),\n\t\t\tallowManyJoin: true,\n\t\t})\n\t}\n\n\tprivate transformWhereToPrimaryCondition(where: Input.OptionalWhere, primaryField: string): Input.Condition<never> | null {\n\t\tconst keys = Object.keys(where)\n\t\tif (keys.filter(it => !['and', 'or', 'not', primaryField].includes(it)).length > 0) {\n\t\t\treturn null\n\t\t}\n\t\tlet condition: {\n\t\t\tand?: Array<Input.Condition<never>>\n\t\t\tor?: Array<Input.Condition<never>>\n\t\t\tnot?: Input.Condition<never>\n\t\t} = {}\n\t\tif (where.and) {\n\t\t\tconst conditions = where.and\n\t\t\t\t.filter((it): it is Input.Where => !!it)\n\t\t\t\t.map(it => this.transformWhereToPrimaryCondition(it, primaryField))\n\t\t\tif (conditions.includes(null)) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tcondition.and = conditions as Input.Condition<never>[]\n\t\t}\n\t\tif (where.or) {\n\t\t\tconst conditions = where.or\n\t\t\t\t.filter((it): it is Input.Where => !!it)\n\t\t\t\t.map(it => this.transformWhereToPrimaryCondition(it, primaryField))\n\t\t\tif (conditions.includes(null)) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tcondition.or = conditions as Input.Condition<never>[]\n\t\t}\n\t\tif (where.not) {\n\t\t\tconst conditions = this.transformWhereToPrimaryCondition(where.not, primaryField)\n\t\t\tif (conditions === null) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tcondition.not = conditions as Input.Condition<never>\n\t\t}\n\t\tif (where[primaryField]) {\n\t\t\tif (Object.keys(condition).length > 0) {\n\t\t\t\treturn { and: [condition, where[primaryField] as Input.Condition<never>] }\n\t\t\t}\n\t\t\treturn where[primaryField] as Input.Condition<never>\n\t\t}\n\t\treturn condition\n\t}\n\n\tprivate hasRootIsNull(where: Input.OptionalWhere, entity: Model.Entity): boolean {\n\t\tfor (const key in where) {\n\t\t\tif (key === 'and' || key === 'or') {\n\t\t\t\tif (where[key]?.some(it => it && this.hasRootIsNull(it, entity))) {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t} else if (key === 'not') {\n\t\t\t\tif (where.not && this.hasRootIsNull(where.not, entity)) {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t} else if (isColumn(entity.fields[key]) && this.conditionHasIsNull(where[key] as Input.Condition)) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t\treturn false\n\t}\n\n\tprivate conditionHasIsNull(cond: Input.Condition): boolean {\n\t\tif (cond.isNull !== undefined) {\n\t\t\treturn true\n\t\t}\n\t\tif (cond.and?.some(it => this.conditionHasIsNull(it))) {\n\t\t\treturn true\n\t\t}\n\t\tif (cond.or?.some(it => this.conditionHasIsNull(it))) {\n\t\t\treturn true\n\t\t}\n\t\tif (cond.not && this.conditionHasIsNull(cond.not)) {\n\t\t\treturn true\n\t\t}\n\t\treturn false\n\t}\n}\n\nexport type WhereJoinDefinition = { path: Path; entity: Model.Entity; relationName: string }\n"],"names":["where","entity"],"mappings":"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"}
@@ -30,7 +30,7 @@ class FieldsVisitor {
30
30
  if (column.type === schema.Model.ColumnType.Enum && column.list) {
31
31
  selectFrom += "::text[]";
32
32
  }
33
- let columnValueGetter = void 0;
33
+ let columnValueGetter;
34
34
  if (entity.view && column.name === entity.primary && column.type === schema.Model.ColumnType.Uuid) {
35
35
  if (entity.view.idSource) {
36
36
  const aliases = [];
@@ -195,7 +195,8 @@ class FieldsVisitor {
195
195
  });
196
196
  }
197
197
  getRequiredPredicate(entity, field) {
198
- const fieldPredicate = this.predicateFactory.getFieldPredicate(entity, schema.Acl.Operation.read, field.name);
198
+ const isRoot = this.relationPath.length === 0;
199
+ const fieldPredicate = this.predicateFactory.getFieldPredicate(entity, schema.Acl.Operation.read, field.name, isRoot);
199
200
  return fieldPredicate.isSameAsPrimary ? void 0 : fieldPredicate.predicate;
200
201
  }
201
202
  }
@@ -1 +1 @@
1
- {"version":3,"file":"FieldsVisitor.cjs","sources":["../../../../../../../packages/engine-content-api/src/mapper/select/handlers/FieldsVisitor.ts"],"sourcesContent":["import { Acl, Input, Model, Settings } from '@contember/schema'\nimport { Mapper } from '../../Mapper'\nimport { RelationFetcher } from '../RelationFetcher'\nimport { SelectExecutionHandlerContext } from '../SelectExecutionHandler'\nimport { PredicateFactory } from '../../../acl'\nimport { Literal, wrapIdentifier } from '@contember/database'\nimport { ColumnValueGetter } from '../SelectHydrator'\nimport { Providers } from '@contember/schema-utils'\nimport { getColumnName } from '@contember/schema-utils'\nimport { viewComputedId } from '../../../utils/viewComputedId'\n\nexport class FieldsVisitor implements Model.RelationByTypeVisitor<void>, Model.ColumnVisitor<void> {\n\tconstructor(\n\t\tprivate readonly schema: Model.Schema,\n\t\tprivate readonly relationFetcher: RelationFetcher,\n\t\tprivate readonly predicateFactory: PredicateFactory,\n\t\tprivate readonly mapper: Mapper,\n\t\tprivate readonly executionContext: SelectExecutionHandlerContext,\n\t\tprivate readonly relationPath: Model.AnyRelationContext[],\n\t\tprivate readonly settings: Settings.ContentSettings,\n\t\tprivate readonly providers: Providers,\n\t) {}\n\n\tvisitColumn({ entity, column }: Model.ColumnContext): void {\n\t\tconst columnPath = this.executionContext.path\n\t\tconst tablePath = columnPath.back()\n\t\tconst tableAlias = tablePath.alias\n\t\tconst columnAlias = columnPath.alias\n\n\t\tlet selectFrom = wrapIdentifier(tableAlias) + '.' + wrapIdentifier(column.columnName)\n\t\tif (column.type === Model.ColumnType.Date && this.settings.shortDateResponse) {\n\t\t\tselectFrom += '::text'\n\t\t}\n\t\tif (column.type === Model.ColumnType.DateTime && this.settings.fullDateTimeResponse) {\n\t\t\tselectFrom += '::text'\n\t\t}\n\t\tif (column.type === Model.ColumnType.Enum && column.list) {\n\t\t\tselectFrom += '::text[]'\n\t\t}\n\n\t\tlet columnValueGetter: ColumnValueGetter | undefined = undefined\n\t\tif (entity.view && column.name === entity.primary && column.type === Model.ColumnType.Uuid) {\n\t\t\tif (entity.view.idSource) {\n\t\t\t\tconst aliases: string[] = []\n\t\t\t\tfor (const source of entity.view.idSource) {\n\t\t\t\t\tconst columnName = getColumnName(this.schema, entity, source)\n\t\t\t\t\tconst idSrcPath = columnPath.for(source + '__id_src')\n\t\t\t\t\taliases.push(idSrcPath.alias)\n\t\t\t\t\tthis.executionContext.addColumn({\n\t\t\t\t\t\tquery: qb => qb.select([tableAlias, columnName], idSrcPath.alias),\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tcolumnValueGetter = row => {\n\t\t\t\t\treturn viewComputedId(aliases.map(it => row[it]?.toString() || ''))\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcolumnValueGetter = row => {\n\t\t\t\t\treturn row[columnAlias] ?? (this.providers.uuid({ version: this.settings.uuidVersion }))\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\n\t\tthis.executionContext.addColumn({\n\t\t\tquery: qb => qb.select(new Literal(selectFrom), columnAlias),\n\t\t\tpredicate: this.getRequiredPredicate(entity, column),\n\t\t\tvalueGetter: columnValueGetter,\n\t\t})\n\t}\n\n\tpublic visitManyHasManyInverse(relationContext: Model.ManyHasManyInverseContext): void {\n\t\tconst field = this.executionContext.objectNode\n\t\tif (!field) {\n\t\t\tthrow new Error()\n\t\t}\n\t\tthis.executionContext.addData({\n\t\t\tfield: relationContext.entity.primary,\n\t\t\tdataProvider: async ids =>\n\t\t\t\tthis.relationFetcher.fetchManyHasManyGroups({\n\t\t\t\t\tmapper: this.mapper,\n\t\t\t\t\tfield: field,\n\t\t\t\t\trelationContext,\n\t\t\t\t\trelationPath: this.relationPath,\n\t\t\t\t\tids: ids,\n\t\t\t\t}),\n\t\t\tdefaultValue: [],\n\t\t\tpredicate: this.getRequiredPredicate(relationContext.entity, relationContext.relation),\n\t\t})\n\t}\n\n\tpublic visitManyHasManyOwning(relationContext: Model.ManyHasManyOwningContext): void {\n\t\tconst field = this.executionContext.objectNode\n\t\tif (!field) {\n\t\t\tthrow new Error()\n\t\t}\n\n\t\tthis.executionContext.addData({\n\t\t\tfield: relationContext.entity.primary,\n\t\t\tdataProvider: async ids =>\n\t\t\t\tthis.relationFetcher.fetchManyHasManyGroups({\n\t\t\t\t\tmapper: this.mapper,\n\t\t\t\t\tfield: field,\n\t\t\t\t\trelationContext,\n\t\t\t\t\trelationPath: this.relationPath,\n\t\t\t\t\tids: ids,\n\t\t\t\t}),\n\t\t\tdefaultValue: [],\n\t\t\tpredicate: this.getRequiredPredicate(relationContext.entity, relationContext.relation),\n\t\t})\n\t}\n\n\tpublic visitOneHasMany(relationContext: Model.OneHasManyContext): void {\n\t\tconst field = this.executionContext.objectNode\n\t\tif (!field) {\n\t\t\tthrow new Error()\n\t\t}\n\n\t\tthis.executionContext.addData({\n\t\t\tfield: relationContext.entity.primary,\n\t\t\tdataProvider: async ids =>\n\t\t\t\tthis.relationFetcher.fetchOneHasManyGroups({\n\t\t\t\t\tmapper: this.mapper,\n\t\t\t\t\tobjectNode: field,\n\t\t\t\t\trelationContext,\n\t\t\t\t\trelationPath: this.relationPath,\n\t\t\t\t\tids: ids,\n\t\t\t\t}),\n\t\t\tdefaultValue: [],\n\t\t\tpredicate: this.getRequiredPredicate(relationContext.entity, relationContext.relation),\n\t\t})\n\t}\n\n\tpublic visitOneHasOneInverse(relationContext: Model.OneHasOneInverseContext): void {\n\t\tconst { entity, targetRelation, targetEntity } = relationContext\n\t\tthis.executionContext.addData({\n\t\t\tfield: entity.primary,\n\t\t\tdataProvider: async ids => {\n\t\t\t\tconst idsWhere: Input.Where = {\n\t\t\t\t\t[targetRelation.name]: {\n\t\t\t\t\t\t[entity.primary]: {\n\t\t\t\t\t\t\tin: ids,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tconst field = this.executionContext.objectNode\n\t\t\t\tif (!field) {\n\t\t\t\t\tthrow new Error()\n\t\t\t\t}\n\t\t\t\tconst where: Input.Where = {\n\t\t\t\t\tand: [idsWhere, field.args.filter].filter((it): it is Input.Where => it !== undefined),\n\t\t\t\t}\n\t\t\t\tconst objectWithWhere = field.withArg('filter', where)\n\n\t\t\t\treturn this.mapper.selectAssoc(targetEntity, objectWithWhere, [\n\t\t\t\t\t...this.relationPath,\n\t\t\t\t\trelationContext,\n\t\t\t\t], targetRelation.name)\n\t\t\t},\n\t\t\tdefaultValue: null,\n\t\t\tpredicate: this.getRequiredPredicate(relationContext.entity, relationContext.relation),\n\t\t})\n\t}\n\n\tpublic visitOneHasOneOwning(relationContext: Model.OneHasOneOwningContext): void {\n\t\tconst { relation, targetEntity } = relationContext\n\t\tthis.executionContext.addData({\n\t\t\tfield: relation.name,\n\t\t\tdataProvider: async ids => {\n\t\t\t\tconst idsWhere: Input.Where = {\n\t\t\t\t\t[targetEntity.primary]: {\n\t\t\t\t\t\tin: ids,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tconst objectNode = this.executionContext.objectNode\n\t\t\t\tif (!objectNode) {\n\t\t\t\t\tthrow new Error()\n\t\t\t\t}\n\t\t\t\tconst where: Input.Where = {\n\t\t\t\t\tand: [idsWhere, objectNode.args.filter].filter((it): it is Input.Where => it !== undefined),\n\t\t\t\t}\n\t\t\t\tconst objectWithWhere = objectNode.withArg('filter', where)\n\n\t\t\t\treturn this.mapper.selectAssoc(targetEntity, objectWithWhere, [\n\t\t\t\t\t...this.relationPath,\n\t\t\t\t\trelationContext,\n\t\t\t\t], targetEntity.primary)\n\t\t\t},\n\t\t\tdefaultValue: null,\n\t\t\tpredicate: this.getRequiredPredicate(relationContext.entity, relationContext.relation),\n\t\t})\n\t}\n\n\tpublic visitManyHasOne(relationContext: Model.ManyHasOneContext): void {\n\t\tconst { relation, targetEntity } = relationContext\n\t\tthis.executionContext.addData({\n\t\t\tfield: relation.name,\n\t\t\tdataProvider: async ids => {\n\t\t\t\tconst idsWhere: Input.Where = {\n\t\t\t\t\t[targetEntity.primary]: {\n\t\t\t\t\t\tin: ids,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tconst objectNode = this.executionContext.objectNode\n\t\t\t\tif (!objectNode) {\n\t\t\t\t\tthrow new Error()\n\t\t\t\t}\n\t\t\t\tconst where: Input.Where = {\n\t\t\t\t\tand: [idsWhere, objectNode.args.filter].filter((it): it is Input.Where => it !== undefined),\n\t\t\t\t}\n\t\t\t\tconst objectWithWhere = objectNode.withArg('filter', where)\n\n\t\t\t\treturn this.mapper.selectAssoc(targetEntity, objectWithWhere, [\n\t\t\t\t\t...this.relationPath,\n\t\t\t\t\trelationContext,\n\t\t\t\t], targetEntity.primary)\n\t\t\t},\n\t\t\tdefaultValue: null,\n\t\t\tpredicate: this.getRequiredPredicate(relationContext.entity, relationContext.relation),\n\t\t})\n\t}\n\n\tprivate getRequiredPredicate(entity: Model.Entity, field: Model.AnyField): Acl.Predicate | undefined {\n\t\tconst fieldPredicate = this.predicateFactory.getFieldPredicate(entity, Acl.Operation.read, field.name)\n\t\treturn fieldPredicate.isSameAsPrimary ? undefined : fieldPredicate.predicate\n\t}\n}\n"],"names":["schema","wrapIdentifier","Model","getColumnName","viewComputedId","Literal","Acl"],"mappings":"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"}
1
+ {"version":3,"file":"FieldsVisitor.cjs","sources":["../../../../../../../packages/engine-content-api/src/mapper/select/handlers/FieldsVisitor.ts"],"sourcesContent":["import { Acl, Input, Model, Settings } from '@contember/schema'\nimport { Mapper } from '../../Mapper'\nimport { RelationFetcher } from '../RelationFetcher'\nimport { SelectExecutionHandlerContext } from '../SelectExecutionHandler'\nimport { PredicateFactory } from '../../../acl'\nimport { Literal, wrapIdentifier } from '@contember/database'\nimport { ColumnValueGetter } from '../SelectHydrator'\nimport { Providers } from '@contember/schema-utils'\nimport { getColumnName } from '@contember/schema-utils'\nimport { viewComputedId } from '../../../utils/viewComputedId'\n\nexport class FieldsVisitor implements Model.RelationByTypeVisitor<void>, Model.ColumnVisitor<void> {\n\tconstructor(\n\t\tprivate readonly schema: Model.Schema,\n\t\tprivate readonly relationFetcher: RelationFetcher,\n\t\tprivate readonly predicateFactory: PredicateFactory,\n\t\tprivate readonly mapper: Mapper,\n\t\tprivate readonly executionContext: SelectExecutionHandlerContext,\n\t\tprivate readonly relationPath: Model.AnyRelationContext[],\n\t\tprivate readonly settings: Settings.ContentSettings,\n\t\tprivate readonly providers: Providers,\n\t) {}\n\n\tvisitColumn({ entity, column }: Model.ColumnContext): void {\n\t\tconst columnPath = this.executionContext.path\n\t\tconst tablePath = columnPath.back()\n\t\tconst tableAlias = tablePath.alias\n\t\tconst columnAlias = columnPath.alias\n\n\t\tlet selectFrom = wrapIdentifier(tableAlias) + '.' + wrapIdentifier(column.columnName)\n\t\tif (column.type === Model.ColumnType.Date && this.settings.shortDateResponse) {\n\t\t\tselectFrom += '::text'\n\t\t}\n\t\tif (column.type === Model.ColumnType.DateTime && this.settings.fullDateTimeResponse) {\n\t\t\tselectFrom += '::text'\n\t\t}\n\t\tif (column.type === Model.ColumnType.Enum && column.list) {\n\t\t\tselectFrom += '::text[]'\n\t\t}\n\n\t\tlet columnValueGetter: ColumnValueGetter | undefined\n\t\tif (entity.view && column.name === entity.primary && column.type === Model.ColumnType.Uuid) {\n\t\t\tif (entity.view.idSource) {\n\t\t\t\tconst aliases: string[] = []\n\t\t\t\tfor (const source of entity.view.idSource) {\n\t\t\t\t\tconst columnName = getColumnName(this.schema, entity, source)\n\t\t\t\t\tconst idSrcPath = columnPath.for(source + '__id_src')\n\t\t\t\t\taliases.push(idSrcPath.alias)\n\t\t\t\t\tthis.executionContext.addColumn({\n\t\t\t\t\t\tquery: qb => qb.select([tableAlias, columnName], idSrcPath.alias),\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tcolumnValueGetter = row => {\n\t\t\t\t\treturn viewComputedId(aliases.map(it => row[it]?.toString() || ''))\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcolumnValueGetter = row => {\n\t\t\t\t\treturn row[columnAlias] ?? (this.providers.uuid({ version: this.settings.uuidVersion }))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.executionContext.addColumn({\n\t\t\tquery: qb => qb.select(new Literal(selectFrom), columnAlias),\n\t\t\tpredicate: this.getRequiredPredicate(entity, column),\n\t\t\tvalueGetter: columnValueGetter,\n\t\t})\n\t}\n\n\tpublic visitManyHasManyInverse(relationContext: Model.ManyHasManyInverseContext): void {\n\t\tconst field = this.executionContext.objectNode\n\t\tif (!field) {\n\t\t\tthrow new Error()\n\t\t}\n\t\tthis.executionContext.addData({\n\t\t\tfield: relationContext.entity.primary,\n\t\t\tdataProvider: async ids =>\n\t\t\t\tthis.relationFetcher.fetchManyHasManyGroups({\n\t\t\t\t\tmapper: this.mapper,\n\t\t\t\t\tfield: field,\n\t\t\t\t\trelationContext,\n\t\t\t\t\trelationPath: this.relationPath,\n\t\t\t\t\tids: ids,\n\t\t\t\t}),\n\t\t\tdefaultValue: [],\n\t\t\tpredicate: this.getRequiredPredicate(relationContext.entity, relationContext.relation),\n\t\t})\n\t}\n\n\tpublic visitManyHasManyOwning(relationContext: Model.ManyHasManyOwningContext): void {\n\t\tconst field = this.executionContext.objectNode\n\t\tif (!field) {\n\t\t\tthrow new Error()\n\t\t}\n\n\t\tthis.executionContext.addData({\n\t\t\tfield: relationContext.entity.primary,\n\t\t\tdataProvider: async ids =>\n\t\t\t\tthis.relationFetcher.fetchManyHasManyGroups({\n\t\t\t\t\tmapper: this.mapper,\n\t\t\t\t\tfield: field,\n\t\t\t\t\trelationContext,\n\t\t\t\t\trelationPath: this.relationPath,\n\t\t\t\t\tids: ids,\n\t\t\t\t}),\n\t\t\tdefaultValue: [],\n\t\t\tpredicate: this.getRequiredPredicate(relationContext.entity, relationContext.relation),\n\t\t})\n\t}\n\n\tpublic visitOneHasMany(relationContext: Model.OneHasManyContext): void {\n\t\tconst field = this.executionContext.objectNode\n\t\tif (!field) {\n\t\t\tthrow new Error()\n\t\t}\n\n\t\tthis.executionContext.addData({\n\t\t\tfield: relationContext.entity.primary,\n\t\t\tdataProvider: async ids =>\n\t\t\t\tthis.relationFetcher.fetchOneHasManyGroups({\n\t\t\t\t\tmapper: this.mapper,\n\t\t\t\t\tobjectNode: field,\n\t\t\t\t\trelationContext,\n\t\t\t\t\trelationPath: this.relationPath,\n\t\t\t\t\tids: ids,\n\t\t\t\t}),\n\t\t\tdefaultValue: [],\n\t\t\tpredicate: this.getRequiredPredicate(relationContext.entity, relationContext.relation),\n\t\t})\n\t}\n\n\tpublic visitOneHasOneInverse(relationContext: Model.OneHasOneInverseContext): void {\n\t\tconst { entity, targetRelation, targetEntity } = relationContext\n\t\tthis.executionContext.addData({\n\t\t\tfield: entity.primary,\n\t\t\tdataProvider: async ids => {\n\t\t\t\tconst idsWhere: Input.Where = {\n\t\t\t\t\t[targetRelation.name]: {\n\t\t\t\t\t\t[entity.primary]: {\n\t\t\t\t\t\t\tin: ids,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tconst field = this.executionContext.objectNode\n\t\t\t\tif (!field) {\n\t\t\t\t\tthrow new Error()\n\t\t\t\t}\n\t\t\t\tconst where: Input.Where = {\n\t\t\t\t\tand: [idsWhere, field.args.filter].filter((it): it is Input.Where => it !== undefined),\n\t\t\t\t}\n\t\t\t\tconst objectWithWhere = field.withArg('filter', where)\n\n\t\t\t\treturn this.mapper.selectAssoc(targetEntity, objectWithWhere, [\n\t\t\t\t\t...this.relationPath,\n\t\t\t\t\trelationContext,\n\t\t\t\t], targetRelation.name)\n\t\t\t},\n\t\t\tdefaultValue: null,\n\t\t\tpredicate: this.getRequiredPredicate(relationContext.entity, relationContext.relation),\n\t\t})\n\t}\n\n\tpublic visitOneHasOneOwning(relationContext: Model.OneHasOneOwningContext): void {\n\t\tconst { relation, targetEntity } = relationContext\n\t\tthis.executionContext.addData({\n\t\t\tfield: relation.name,\n\t\t\tdataProvider: async ids => {\n\t\t\t\tconst idsWhere: Input.Where = {\n\t\t\t\t\t[targetEntity.primary]: {\n\t\t\t\t\t\tin: ids,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tconst objectNode = this.executionContext.objectNode\n\t\t\t\tif (!objectNode) {\n\t\t\t\t\tthrow new Error()\n\t\t\t\t}\n\t\t\t\tconst where: Input.Where = {\n\t\t\t\t\tand: [idsWhere, objectNode.args.filter].filter((it): it is Input.Where => it !== undefined),\n\t\t\t\t}\n\t\t\t\tconst objectWithWhere = objectNode.withArg('filter', where)\n\n\t\t\t\treturn this.mapper.selectAssoc(targetEntity, objectWithWhere, [\n\t\t\t\t\t...this.relationPath,\n\t\t\t\t\trelationContext,\n\t\t\t\t], targetEntity.primary)\n\t\t\t},\n\t\t\tdefaultValue: null,\n\t\t\tpredicate: this.getRequiredPredicate(relationContext.entity, relationContext.relation),\n\t\t})\n\t}\n\n\tpublic visitManyHasOne(relationContext: Model.ManyHasOneContext): void {\n\t\tconst { relation, targetEntity } = relationContext\n\t\tthis.executionContext.addData({\n\t\t\tfield: relation.name,\n\t\t\tdataProvider: async ids => {\n\t\t\t\tconst idsWhere: Input.Where = {\n\t\t\t\t\t[targetEntity.primary]: {\n\t\t\t\t\t\tin: ids,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tconst objectNode = this.executionContext.objectNode\n\t\t\t\tif (!objectNode) {\n\t\t\t\t\tthrow new Error()\n\t\t\t\t}\n\t\t\t\tconst where: Input.Where = {\n\t\t\t\t\tand: [idsWhere, objectNode.args.filter].filter((it): it is Input.Where => it !== undefined),\n\t\t\t\t}\n\t\t\t\tconst objectWithWhere = objectNode.withArg('filter', where)\n\n\t\t\t\treturn this.mapper.selectAssoc(targetEntity, objectWithWhere, [\n\t\t\t\t\t...this.relationPath,\n\t\t\t\t\trelationContext,\n\t\t\t\t], targetEntity.primary)\n\t\t\t},\n\t\t\tdefaultValue: null,\n\t\t\tpredicate: this.getRequiredPredicate(relationContext.entity, relationContext.relation),\n\t\t})\n\t}\n\n\tprivate getRequiredPredicate(entity: Model.Entity, field: Model.AnyField): Acl.Predicate | undefined {\n\t\tconst isRoot = this.relationPath.length === 0\n\t\tconst fieldPredicate = this.predicateFactory.getFieldPredicate(entity, Acl.Operation.read, field.name, isRoot)\n\t\treturn fieldPredicate.isSameAsPrimary ? undefined : fieldPredicate.predicate\n\t}\n}\n"],"names":["schema","wrapIdentifier","Model","getColumnName","viewComputedId","Literal","Acl"],"mappings":"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"}
@@ -28,7 +28,7 @@ class FieldsVisitor {
28
28
  if (column.type === Model.ColumnType.Enum && column.list) {
29
29
  selectFrom += "::text[]";
30
30
  }
31
- let columnValueGetter = void 0;
31
+ let columnValueGetter;
32
32
  if (entity.view && column.name === entity.primary && column.type === Model.ColumnType.Uuid) {
33
33
  if (entity.view.idSource) {
34
34
  const aliases = [];
@@ -193,7 +193,8 @@ class FieldsVisitor {
193
193
  });
194
194
  }
195
195
  getRequiredPredicate(entity, field) {
196
- const fieldPredicate = this.predicateFactory.getFieldPredicate(entity, Acl.Operation.read, field.name);
196
+ const isRoot = this.relationPath.length === 0;
197
+ const fieldPredicate = this.predicateFactory.getFieldPredicate(entity, Acl.Operation.read, field.name, isRoot);
197
198
  return fieldPredicate.isSameAsPrimary ? void 0 : fieldPredicate.predicate;
198
199
  }
199
200
  }
@@ -1 +1 @@
1
- {"version":3,"file":"FieldsVisitor.js","sources":["../../../../../../../packages/engine-content-api/src/mapper/select/handlers/FieldsVisitor.ts"],"sourcesContent":["import { Acl, Input, Model, Settings } from '@contember/schema'\nimport { Mapper } from '../../Mapper'\nimport { RelationFetcher } from '../RelationFetcher'\nimport { SelectExecutionHandlerContext } from '../SelectExecutionHandler'\nimport { PredicateFactory } from '../../../acl'\nimport { Literal, wrapIdentifier } from '@contember/database'\nimport { ColumnValueGetter } from '../SelectHydrator'\nimport { Providers } from '@contember/schema-utils'\nimport { getColumnName } from '@contember/schema-utils'\nimport { viewComputedId } from '../../../utils/viewComputedId'\n\nexport class FieldsVisitor implements Model.RelationByTypeVisitor<void>, Model.ColumnVisitor<void> {\n\tconstructor(\n\t\tprivate readonly schema: Model.Schema,\n\t\tprivate readonly relationFetcher: RelationFetcher,\n\t\tprivate readonly predicateFactory: PredicateFactory,\n\t\tprivate readonly mapper: Mapper,\n\t\tprivate readonly executionContext: SelectExecutionHandlerContext,\n\t\tprivate readonly relationPath: Model.AnyRelationContext[],\n\t\tprivate readonly settings: Settings.ContentSettings,\n\t\tprivate readonly providers: Providers,\n\t) {}\n\n\tvisitColumn({ entity, column }: Model.ColumnContext): void {\n\t\tconst columnPath = this.executionContext.path\n\t\tconst tablePath = columnPath.back()\n\t\tconst tableAlias = tablePath.alias\n\t\tconst columnAlias = columnPath.alias\n\n\t\tlet selectFrom = wrapIdentifier(tableAlias) + '.' + wrapIdentifier(column.columnName)\n\t\tif (column.type === Model.ColumnType.Date && this.settings.shortDateResponse) {\n\t\t\tselectFrom += '::text'\n\t\t}\n\t\tif (column.type === Model.ColumnType.DateTime && this.settings.fullDateTimeResponse) {\n\t\t\tselectFrom += '::text'\n\t\t}\n\t\tif (column.type === Model.ColumnType.Enum && column.list) {\n\t\t\tselectFrom += '::text[]'\n\t\t}\n\n\t\tlet columnValueGetter: ColumnValueGetter | undefined = undefined\n\t\tif (entity.view && column.name === entity.primary && column.type === Model.ColumnType.Uuid) {\n\t\t\tif (entity.view.idSource) {\n\t\t\t\tconst aliases: string[] = []\n\t\t\t\tfor (const source of entity.view.idSource) {\n\t\t\t\t\tconst columnName = getColumnName(this.schema, entity, source)\n\t\t\t\t\tconst idSrcPath = columnPath.for(source + '__id_src')\n\t\t\t\t\taliases.push(idSrcPath.alias)\n\t\t\t\t\tthis.executionContext.addColumn({\n\t\t\t\t\t\tquery: qb => qb.select([tableAlias, columnName], idSrcPath.alias),\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tcolumnValueGetter = row => {\n\t\t\t\t\treturn viewComputedId(aliases.map(it => row[it]?.toString() || ''))\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcolumnValueGetter = row => {\n\t\t\t\t\treturn row[columnAlias] ?? (this.providers.uuid({ version: this.settings.uuidVersion }))\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\n\t\tthis.executionContext.addColumn({\n\t\t\tquery: qb => qb.select(new Literal(selectFrom), columnAlias),\n\t\t\tpredicate: this.getRequiredPredicate(entity, column),\n\t\t\tvalueGetter: columnValueGetter,\n\t\t})\n\t}\n\n\tpublic visitManyHasManyInverse(relationContext: Model.ManyHasManyInverseContext): void {\n\t\tconst field = this.executionContext.objectNode\n\t\tif (!field) {\n\t\t\tthrow new Error()\n\t\t}\n\t\tthis.executionContext.addData({\n\t\t\tfield: relationContext.entity.primary,\n\t\t\tdataProvider: async ids =>\n\t\t\t\tthis.relationFetcher.fetchManyHasManyGroups({\n\t\t\t\t\tmapper: this.mapper,\n\t\t\t\t\tfield: field,\n\t\t\t\t\trelationContext,\n\t\t\t\t\trelationPath: this.relationPath,\n\t\t\t\t\tids: ids,\n\t\t\t\t}),\n\t\t\tdefaultValue: [],\n\t\t\tpredicate: this.getRequiredPredicate(relationContext.entity, relationContext.relation),\n\t\t})\n\t}\n\n\tpublic visitManyHasManyOwning(relationContext: Model.ManyHasManyOwningContext): void {\n\t\tconst field = this.executionContext.objectNode\n\t\tif (!field) {\n\t\t\tthrow new Error()\n\t\t}\n\n\t\tthis.executionContext.addData({\n\t\t\tfield: relationContext.entity.primary,\n\t\t\tdataProvider: async ids =>\n\t\t\t\tthis.relationFetcher.fetchManyHasManyGroups({\n\t\t\t\t\tmapper: this.mapper,\n\t\t\t\t\tfield: field,\n\t\t\t\t\trelationContext,\n\t\t\t\t\trelationPath: this.relationPath,\n\t\t\t\t\tids: ids,\n\t\t\t\t}),\n\t\t\tdefaultValue: [],\n\t\t\tpredicate: this.getRequiredPredicate(relationContext.entity, relationContext.relation),\n\t\t})\n\t}\n\n\tpublic visitOneHasMany(relationContext: Model.OneHasManyContext): void {\n\t\tconst field = this.executionContext.objectNode\n\t\tif (!field) {\n\t\t\tthrow new Error()\n\t\t}\n\n\t\tthis.executionContext.addData({\n\t\t\tfield: relationContext.entity.primary,\n\t\t\tdataProvider: async ids =>\n\t\t\t\tthis.relationFetcher.fetchOneHasManyGroups({\n\t\t\t\t\tmapper: this.mapper,\n\t\t\t\t\tobjectNode: field,\n\t\t\t\t\trelationContext,\n\t\t\t\t\trelationPath: this.relationPath,\n\t\t\t\t\tids: ids,\n\t\t\t\t}),\n\t\t\tdefaultValue: [],\n\t\t\tpredicate: this.getRequiredPredicate(relationContext.entity, relationContext.relation),\n\t\t})\n\t}\n\n\tpublic visitOneHasOneInverse(relationContext: Model.OneHasOneInverseContext): void {\n\t\tconst { entity, targetRelation, targetEntity } = relationContext\n\t\tthis.executionContext.addData({\n\t\t\tfield: entity.primary,\n\t\t\tdataProvider: async ids => {\n\t\t\t\tconst idsWhere: Input.Where = {\n\t\t\t\t\t[targetRelation.name]: {\n\t\t\t\t\t\t[entity.primary]: {\n\t\t\t\t\t\t\tin: ids,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tconst field = this.executionContext.objectNode\n\t\t\t\tif (!field) {\n\t\t\t\t\tthrow new Error()\n\t\t\t\t}\n\t\t\t\tconst where: Input.Where = {\n\t\t\t\t\tand: [idsWhere, field.args.filter].filter((it): it is Input.Where => it !== undefined),\n\t\t\t\t}\n\t\t\t\tconst objectWithWhere = field.withArg('filter', where)\n\n\t\t\t\treturn this.mapper.selectAssoc(targetEntity, objectWithWhere, [\n\t\t\t\t\t...this.relationPath,\n\t\t\t\t\trelationContext,\n\t\t\t\t], targetRelation.name)\n\t\t\t},\n\t\t\tdefaultValue: null,\n\t\t\tpredicate: this.getRequiredPredicate(relationContext.entity, relationContext.relation),\n\t\t})\n\t}\n\n\tpublic visitOneHasOneOwning(relationContext: Model.OneHasOneOwningContext): void {\n\t\tconst { relation, targetEntity } = relationContext\n\t\tthis.executionContext.addData({\n\t\t\tfield: relation.name,\n\t\t\tdataProvider: async ids => {\n\t\t\t\tconst idsWhere: Input.Where = {\n\t\t\t\t\t[targetEntity.primary]: {\n\t\t\t\t\t\tin: ids,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tconst objectNode = this.executionContext.objectNode\n\t\t\t\tif (!objectNode) {\n\t\t\t\t\tthrow new Error()\n\t\t\t\t}\n\t\t\t\tconst where: Input.Where = {\n\t\t\t\t\tand: [idsWhere, objectNode.args.filter].filter((it): it is Input.Where => it !== undefined),\n\t\t\t\t}\n\t\t\t\tconst objectWithWhere = objectNode.withArg('filter', where)\n\n\t\t\t\treturn this.mapper.selectAssoc(targetEntity, objectWithWhere, [\n\t\t\t\t\t...this.relationPath,\n\t\t\t\t\trelationContext,\n\t\t\t\t], targetEntity.primary)\n\t\t\t},\n\t\t\tdefaultValue: null,\n\t\t\tpredicate: this.getRequiredPredicate(relationContext.entity, relationContext.relation),\n\t\t})\n\t}\n\n\tpublic visitManyHasOne(relationContext: Model.ManyHasOneContext): void {\n\t\tconst { relation, targetEntity } = relationContext\n\t\tthis.executionContext.addData({\n\t\t\tfield: relation.name,\n\t\t\tdataProvider: async ids => {\n\t\t\t\tconst idsWhere: Input.Where = {\n\t\t\t\t\t[targetEntity.primary]: {\n\t\t\t\t\t\tin: ids,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tconst objectNode = this.executionContext.objectNode\n\t\t\t\tif (!objectNode) {\n\t\t\t\t\tthrow new Error()\n\t\t\t\t}\n\t\t\t\tconst where: Input.Where = {\n\t\t\t\t\tand: [idsWhere, objectNode.args.filter].filter((it): it is Input.Where => it !== undefined),\n\t\t\t\t}\n\t\t\t\tconst objectWithWhere = objectNode.withArg('filter', where)\n\n\t\t\t\treturn this.mapper.selectAssoc(targetEntity, objectWithWhere, [\n\t\t\t\t\t...this.relationPath,\n\t\t\t\t\trelationContext,\n\t\t\t\t], targetEntity.primary)\n\t\t\t},\n\t\t\tdefaultValue: null,\n\t\t\tpredicate: this.getRequiredPredicate(relationContext.entity, relationContext.relation),\n\t\t})\n\t}\n\n\tprivate getRequiredPredicate(entity: Model.Entity, field: Model.AnyField): Acl.Predicate | undefined {\n\t\tconst fieldPredicate = this.predicateFactory.getFieldPredicate(entity, Acl.Operation.read, field.name)\n\t\treturn fieldPredicate.isSameAsPrimary ? undefined : fieldPredicate.predicate\n\t}\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FieldsVisitor.js","sources":["../../../../../../../packages/engine-content-api/src/mapper/select/handlers/FieldsVisitor.ts"],"sourcesContent":["import { Acl, Input, Model, Settings } from '@contember/schema'\nimport { Mapper } from '../../Mapper'\nimport { RelationFetcher } from '../RelationFetcher'\nimport { SelectExecutionHandlerContext } from '../SelectExecutionHandler'\nimport { PredicateFactory } from '../../../acl'\nimport { Literal, wrapIdentifier } from '@contember/database'\nimport { ColumnValueGetter } from '../SelectHydrator'\nimport { Providers } from '@contember/schema-utils'\nimport { getColumnName } from '@contember/schema-utils'\nimport { viewComputedId } from '../../../utils/viewComputedId'\n\nexport class FieldsVisitor implements Model.RelationByTypeVisitor<void>, Model.ColumnVisitor<void> {\n\tconstructor(\n\t\tprivate readonly schema: Model.Schema,\n\t\tprivate readonly relationFetcher: RelationFetcher,\n\t\tprivate readonly predicateFactory: PredicateFactory,\n\t\tprivate readonly mapper: Mapper,\n\t\tprivate readonly executionContext: SelectExecutionHandlerContext,\n\t\tprivate readonly relationPath: Model.AnyRelationContext[],\n\t\tprivate readonly settings: Settings.ContentSettings,\n\t\tprivate readonly providers: Providers,\n\t) {}\n\n\tvisitColumn({ entity, column }: Model.ColumnContext): void {\n\t\tconst columnPath = this.executionContext.path\n\t\tconst tablePath = columnPath.back()\n\t\tconst tableAlias = tablePath.alias\n\t\tconst columnAlias = columnPath.alias\n\n\t\tlet selectFrom = wrapIdentifier(tableAlias) + '.' + wrapIdentifier(column.columnName)\n\t\tif (column.type === Model.ColumnType.Date && this.settings.shortDateResponse) {\n\t\t\tselectFrom += '::text'\n\t\t}\n\t\tif (column.type === Model.ColumnType.DateTime && this.settings.fullDateTimeResponse) {\n\t\t\tselectFrom += '::text'\n\t\t}\n\t\tif (column.type === Model.ColumnType.Enum && column.list) {\n\t\t\tselectFrom += '::text[]'\n\t\t}\n\n\t\tlet columnValueGetter: ColumnValueGetter | undefined\n\t\tif (entity.view && column.name === entity.primary && column.type === Model.ColumnType.Uuid) {\n\t\t\tif (entity.view.idSource) {\n\t\t\t\tconst aliases: string[] = []\n\t\t\t\tfor (const source of entity.view.idSource) {\n\t\t\t\t\tconst columnName = getColumnName(this.schema, entity, source)\n\t\t\t\t\tconst idSrcPath = columnPath.for(source + '__id_src')\n\t\t\t\t\taliases.push(idSrcPath.alias)\n\t\t\t\t\tthis.executionContext.addColumn({\n\t\t\t\t\t\tquery: qb => qb.select([tableAlias, columnName], idSrcPath.alias),\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tcolumnValueGetter = row => {\n\t\t\t\t\treturn viewComputedId(aliases.map(it => row[it]?.toString() || ''))\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcolumnValueGetter = row => {\n\t\t\t\t\treturn row[columnAlias] ?? (this.providers.uuid({ version: this.settings.uuidVersion }))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.executionContext.addColumn({\n\t\t\tquery: qb => qb.select(new Literal(selectFrom), columnAlias),\n\t\t\tpredicate: this.getRequiredPredicate(entity, column),\n\t\t\tvalueGetter: columnValueGetter,\n\t\t})\n\t}\n\n\tpublic visitManyHasManyInverse(relationContext: Model.ManyHasManyInverseContext): void {\n\t\tconst field = this.executionContext.objectNode\n\t\tif (!field) {\n\t\t\tthrow new Error()\n\t\t}\n\t\tthis.executionContext.addData({\n\t\t\tfield: relationContext.entity.primary,\n\t\t\tdataProvider: async ids =>\n\t\t\t\tthis.relationFetcher.fetchManyHasManyGroups({\n\t\t\t\t\tmapper: this.mapper,\n\t\t\t\t\tfield: field,\n\t\t\t\t\trelationContext,\n\t\t\t\t\trelationPath: this.relationPath,\n\t\t\t\t\tids: ids,\n\t\t\t\t}),\n\t\t\tdefaultValue: [],\n\t\t\tpredicate: this.getRequiredPredicate(relationContext.entity, relationContext.relation),\n\t\t})\n\t}\n\n\tpublic visitManyHasManyOwning(relationContext: Model.ManyHasManyOwningContext): void {\n\t\tconst field = this.executionContext.objectNode\n\t\tif (!field) {\n\t\t\tthrow new Error()\n\t\t}\n\n\t\tthis.executionContext.addData({\n\t\t\tfield: relationContext.entity.primary,\n\t\t\tdataProvider: async ids =>\n\t\t\t\tthis.relationFetcher.fetchManyHasManyGroups({\n\t\t\t\t\tmapper: this.mapper,\n\t\t\t\t\tfield: field,\n\t\t\t\t\trelationContext,\n\t\t\t\t\trelationPath: this.relationPath,\n\t\t\t\t\tids: ids,\n\t\t\t\t}),\n\t\t\tdefaultValue: [],\n\t\t\tpredicate: this.getRequiredPredicate(relationContext.entity, relationContext.relation),\n\t\t})\n\t}\n\n\tpublic visitOneHasMany(relationContext: Model.OneHasManyContext): void {\n\t\tconst field = this.executionContext.objectNode\n\t\tif (!field) {\n\t\t\tthrow new Error()\n\t\t}\n\n\t\tthis.executionContext.addData({\n\t\t\tfield: relationContext.entity.primary,\n\t\t\tdataProvider: async ids =>\n\t\t\t\tthis.relationFetcher.fetchOneHasManyGroups({\n\t\t\t\t\tmapper: this.mapper,\n\t\t\t\t\tobjectNode: field,\n\t\t\t\t\trelationContext,\n\t\t\t\t\trelationPath: this.relationPath,\n\t\t\t\t\tids: ids,\n\t\t\t\t}),\n\t\t\tdefaultValue: [],\n\t\t\tpredicate: this.getRequiredPredicate(relationContext.entity, relationContext.relation),\n\t\t})\n\t}\n\n\tpublic visitOneHasOneInverse(relationContext: Model.OneHasOneInverseContext): void {\n\t\tconst { entity, targetRelation, targetEntity } = relationContext\n\t\tthis.executionContext.addData({\n\t\t\tfield: entity.primary,\n\t\t\tdataProvider: async ids => {\n\t\t\t\tconst idsWhere: Input.Where = {\n\t\t\t\t\t[targetRelation.name]: {\n\t\t\t\t\t\t[entity.primary]: {\n\t\t\t\t\t\t\tin: ids,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tconst field = this.executionContext.objectNode\n\t\t\t\tif (!field) {\n\t\t\t\t\tthrow new Error()\n\t\t\t\t}\n\t\t\t\tconst where: Input.Where = {\n\t\t\t\t\tand: [idsWhere, field.args.filter].filter((it): it is Input.Where => it !== undefined),\n\t\t\t\t}\n\t\t\t\tconst objectWithWhere = field.withArg('filter', where)\n\n\t\t\t\treturn this.mapper.selectAssoc(targetEntity, objectWithWhere, [\n\t\t\t\t\t...this.relationPath,\n\t\t\t\t\trelationContext,\n\t\t\t\t], targetRelation.name)\n\t\t\t},\n\t\t\tdefaultValue: null,\n\t\t\tpredicate: this.getRequiredPredicate(relationContext.entity, relationContext.relation),\n\t\t})\n\t}\n\n\tpublic visitOneHasOneOwning(relationContext: Model.OneHasOneOwningContext): void {\n\t\tconst { relation, targetEntity } = relationContext\n\t\tthis.executionContext.addData({\n\t\t\tfield: relation.name,\n\t\t\tdataProvider: async ids => {\n\t\t\t\tconst idsWhere: Input.Where = {\n\t\t\t\t\t[targetEntity.primary]: {\n\t\t\t\t\t\tin: ids,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tconst objectNode = this.executionContext.objectNode\n\t\t\t\tif (!objectNode) {\n\t\t\t\t\tthrow new Error()\n\t\t\t\t}\n\t\t\t\tconst where: Input.Where = {\n\t\t\t\t\tand: [idsWhere, objectNode.args.filter].filter((it): it is Input.Where => it !== undefined),\n\t\t\t\t}\n\t\t\t\tconst objectWithWhere = objectNode.withArg('filter', where)\n\n\t\t\t\treturn this.mapper.selectAssoc(targetEntity, objectWithWhere, [\n\t\t\t\t\t...this.relationPath,\n\t\t\t\t\trelationContext,\n\t\t\t\t], targetEntity.primary)\n\t\t\t},\n\t\t\tdefaultValue: null,\n\t\t\tpredicate: this.getRequiredPredicate(relationContext.entity, relationContext.relation),\n\t\t})\n\t}\n\n\tpublic visitManyHasOne(relationContext: Model.ManyHasOneContext): void {\n\t\tconst { relation, targetEntity } = relationContext\n\t\tthis.executionContext.addData({\n\t\t\tfield: relation.name,\n\t\t\tdataProvider: async ids => {\n\t\t\t\tconst idsWhere: Input.Where = {\n\t\t\t\t\t[targetEntity.primary]: {\n\t\t\t\t\t\tin: ids,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tconst objectNode = this.executionContext.objectNode\n\t\t\t\tif (!objectNode) {\n\t\t\t\t\tthrow new Error()\n\t\t\t\t}\n\t\t\t\tconst where: Input.Where = {\n\t\t\t\t\tand: [idsWhere, objectNode.args.filter].filter((it): it is Input.Where => it !== undefined),\n\t\t\t\t}\n\t\t\t\tconst objectWithWhere = objectNode.withArg('filter', where)\n\n\t\t\t\treturn this.mapper.selectAssoc(targetEntity, objectWithWhere, [\n\t\t\t\t\t...this.relationPath,\n\t\t\t\t\trelationContext,\n\t\t\t\t], targetEntity.primary)\n\t\t\t},\n\t\t\tdefaultValue: null,\n\t\t\tpredicate: this.getRequiredPredicate(relationContext.entity, relationContext.relation),\n\t\t})\n\t}\n\n\tprivate getRequiredPredicate(entity: Model.Entity, field: Model.AnyField): Acl.Predicate | undefined {\n\t\tconst isRoot = this.relationPath.length === 0\n\t\tconst fieldPredicate = this.predicateFactory.getFieldPredicate(entity, Acl.Operation.read, field.name, isRoot)\n\t\treturn fieldPredicate.isSameAsPrimary ? undefined : fieldPredicate.predicate\n\t}\n}\n"],"names":[],"mappings":"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"}