@contember/schema-migrations 0.12.0-beta.1 → 1.0.0-alpha.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 (257) hide show
  1. package/dist/src/MigrationCreator.d.ts +0 -1
  2. package/dist/src/MigrationCreator.d.ts.map +1 -1
  3. package/dist/src/MigrationCreator.js +0 -6
  4. package/dist/src/MigrationCreator.js.map +1 -1
  5. package/dist/src/MigrationDescriber.js +1 -1
  6. package/dist/src/MigrationDescriber.js.map +1 -1
  7. package/dist/src/MigrationFilesManager.js +12 -12
  8. package/dist/src/MigrationFilesManager.js.map +1 -1
  9. package/dist/src/SchemaDiffer.d.ts.map +1 -1
  10. package/dist/src/SchemaDiffer.js +11 -6
  11. package/dist/src/SchemaDiffer.js.map +1 -1
  12. package/dist/src/modifications/ModificationHandler.d.ts +0 -2
  13. package/dist/src/modifications/ModificationHandler.d.ts.map +1 -1
  14. package/dist/src/modifications/ModificationHandler.js.map +1 -1
  15. package/dist/src/modifications/ModificationHandlerFactory.d.ts.map +1 -1
  16. package/dist/src/modifications/ModificationHandlerFactory.js +4 -1
  17. package/dist/src/modifications/ModificationHandlerFactory.js.map +1 -1
  18. package/dist/src/modifications/NoopModification.d.ts +0 -2
  19. package/dist/src/modifications/NoopModification.d.ts.map +1 -1
  20. package/dist/src/modifications/NoopModification.js +0 -3
  21. package/dist/src/modifications/NoopModification.js.map +1 -1
  22. package/dist/src/modifications/acl/PatchAclSchemaModification.d.ts.map +1 -1
  23. package/dist/src/modifications/acl/PatchAclSchemaModification.js +2 -5
  24. package/dist/src/modifications/acl/PatchAclSchemaModification.js.map +1 -1
  25. package/dist/src/modifications/acl/UpdateAclSchemaModification.d.ts.map +1 -1
  26. package/dist/src/modifications/acl/UpdateAclSchemaModification.js +2 -5
  27. package/dist/src/modifications/acl/UpdateAclSchemaModification.js.map +1 -1
  28. package/dist/src/modifications/columns/CreateColumnModification.d.ts.map +1 -1
  29. package/dist/src/modifications/columns/CreateColumnModification.js +9 -44
  30. package/dist/src/modifications/columns/CreateColumnModification.js.map +1 -1
  31. package/dist/src/modifications/columns/UpdateColumnDefinitionModification.d.ts.map +1 -1
  32. package/dist/src/modifications/columns/UpdateColumnDefinitionModification.js +3 -6
  33. package/dist/src/modifications/columns/UpdateColumnDefinitionModification.js.map +1 -1
  34. package/dist/src/modifications/columns/UpdateColumnNameModification.d.ts.map +1 -1
  35. package/dist/src/modifications/columns/UpdateColumnNameModification.js +2 -18
  36. package/dist/src/modifications/columns/UpdateColumnNameModification.js.map +1 -1
  37. package/dist/src/modifications/constraints/CreateUniqueConstraintModification.d.ts.map +1 -1
  38. package/dist/src/modifications/constraints/CreateUniqueConstraintModification.js +2 -5
  39. package/dist/src/modifications/constraints/CreateUniqueConstraintModification.js.map +1 -1
  40. package/dist/src/modifications/constraints/RemoveUniqueConstraintModification.d.ts.map +1 -1
  41. package/dist/src/modifications/constraints/RemoveUniqueConstraintModification.js +2 -5
  42. package/dist/src/modifications/constraints/RemoveUniqueConstraintModification.js.map +1 -1
  43. package/dist/src/modifications/differs/RemoveChangedFieldDiffer.d.ts +3 -1
  44. package/dist/src/modifications/differs/RemoveChangedFieldDiffer.d.ts.map +1 -1
  45. package/dist/src/modifications/differs/RemoveChangedFieldDiffer.js +8 -2
  46. package/dist/src/modifications/differs/RemoveChangedFieldDiffer.js.map +1 -1
  47. package/dist/src/modifications/differs/RemoveChangedViewDiffer.d.ts +10 -0
  48. package/dist/src/modifications/differs/RemoveChangedViewDiffer.d.ts.map +1 -0
  49. package/dist/src/modifications/differs/RemoveChangedViewDiffer.js +46 -0
  50. package/dist/src/modifications/differs/RemoveChangedViewDiffer.js.map +1 -0
  51. package/dist/src/modifications/differs/index.d.ts +1 -0
  52. package/dist/src/modifications/differs/index.d.ts.map +1 -1
  53. package/dist/src/modifications/differs/index.js +1 -0
  54. package/dist/src/modifications/differs/index.js.map +1 -1
  55. package/dist/src/modifications/entities/CreateEntityModification.d.ts.map +1 -1
  56. package/dist/src/modifications/entities/CreateEntityModification.js +5 -6
  57. package/dist/src/modifications/entities/CreateEntityModification.js.map +1 -1
  58. package/dist/src/modifications/entities/CreateViewModification.d.ts +7 -0
  59. package/dist/src/modifications/entities/CreateViewModification.d.ts.map +1 -0
  60. package/dist/src/modifications/entities/CreateViewModification.js +60 -0
  61. package/dist/src/modifications/entities/CreateViewModification.js.map +1 -0
  62. package/dist/src/modifications/entities/RemoveEntityModification.d.ts.map +1 -1
  63. package/dist/src/modifications/entities/RemoveEntityModification.js +20 -16
  64. package/dist/src/modifications/entities/RemoveEntityModification.js.map +1 -1
  65. package/dist/src/modifications/entities/UpdateEntityNameModification.d.ts.map +1 -1
  66. package/dist/src/modifications/entities/UpdateEntityNameModification.js +19 -17
  67. package/dist/src/modifications/entities/UpdateEntityNameModification.js.map +1 -1
  68. package/dist/src/modifications/entities/UpdateEntityTableNameModification.d.ts.map +1 -1
  69. package/dist/src/modifications/entities/UpdateEntityTableNameModification.js +1 -10
  70. package/dist/src/modifications/entities/UpdateEntityTableNameModification.js.map +1 -1
  71. package/dist/src/modifications/entities/UpdateViewModification.d.ts.map +1 -1
  72. package/dist/src/modifications/entities/UpdateViewModification.js +1 -16
  73. package/dist/src/modifications/entities/UpdateViewModification.js.map +1 -1
  74. package/dist/src/modifications/entities/index.d.ts +1 -1
  75. package/dist/src/modifications/entities/index.d.ts.map +1 -1
  76. package/dist/src/modifications/entities/index.js +1 -1
  77. package/dist/src/modifications/entities/index.js.map +1 -1
  78. package/dist/src/modifications/enums/CreateEnumModification.d.ts.map +1 -1
  79. package/dist/src/modifications/enums/CreateEnumModification.js +4 -8
  80. package/dist/src/modifications/enums/CreateEnumModification.js.map +1 -1
  81. package/dist/src/modifications/enums/RemoveEnumModification.d.ts.map +1 -1
  82. package/dist/src/modifications/enums/RemoveEnumModification.js +1 -4
  83. package/dist/src/modifications/enums/RemoveEnumModification.js.map +1 -1
  84. package/dist/src/modifications/enums/UpdateEnumModification.d.ts.map +1 -1
  85. package/dist/src/modifications/enums/UpdateEnumModification.js +9 -9
  86. package/dist/src/modifications/enums/UpdateEnumModification.js.map +1 -1
  87. package/dist/src/modifications/enums/enumUtils.d.ts +3 -0
  88. package/dist/src/modifications/enums/enumUtils.d.ts.map +1 -0
  89. package/dist/src/modifications/enums/enumUtils.js +12 -0
  90. package/dist/src/modifications/enums/enumUtils.js.map +1 -0
  91. package/dist/src/modifications/fields/RemoveFieldModification.d.ts.map +1 -1
  92. package/dist/src/modifications/fields/RemoveFieldModification.js +3 -21
  93. package/dist/src/modifications/fields/RemoveFieldModification.js.map +1 -1
  94. package/dist/src/modifications/fields/UpdateFieldNameModification.d.ts.map +1 -1
  95. package/dist/src/modifications/fields/UpdateFieldNameModification.js +11 -14
  96. package/dist/src/modifications/fields/UpdateFieldNameModification.js.map +1 -1
  97. package/dist/src/modifications/relations/ConvertOneToManyRelationModification.d.ts +8 -0
  98. package/dist/src/modifications/relations/ConvertOneToManyRelationModification.d.ts.map +1 -0
  99. package/dist/src/modifications/relations/ConvertOneToManyRelationModification.js +81 -0
  100. package/dist/src/modifications/relations/ConvertOneToManyRelationModification.js.map +1 -0
  101. package/dist/src/modifications/relations/CreateRelationInverseSideModification.d.ts.map +1 -1
  102. package/dist/src/modifications/relations/CreateRelationInverseSideModification.js +3 -6
  103. package/dist/src/modifications/relations/CreateRelationInverseSideModification.js.map +1 -1
  104. package/dist/src/modifications/relations/CreateRelationModification.d.ts.map +1 -1
  105. package/dist/src/modifications/relations/CreateRelationModification.js +29 -44
  106. package/dist/src/modifications/relations/CreateRelationModification.js.map +1 -1
  107. package/dist/src/modifications/relations/DisableOrphanRemovalModification.d.ts.map +1 -1
  108. package/dist/src/modifications/relations/DisableOrphanRemovalModification.js +4 -7
  109. package/dist/src/modifications/relations/DisableOrphanRemovalModification.js.map +1 -1
  110. package/dist/src/modifications/relations/EnableOrphanRemovalModification.d.ts.map +1 -1
  111. package/dist/src/modifications/relations/EnableOrphanRemovalModification.js +4 -7
  112. package/dist/src/modifications/relations/EnableOrphanRemovalModification.js.map +1 -1
  113. package/dist/src/modifications/relations/MakeRelationNotNullModification.d.ts.map +1 -1
  114. package/dist/src/modifications/relations/MakeRelationNotNullModification.js +6 -9
  115. package/dist/src/modifications/relations/MakeRelationNotNullModification.js.map +1 -1
  116. package/dist/src/modifications/relations/MakeRelationNullableModification.d.ts.map +1 -1
  117. package/dist/src/modifications/relations/MakeRelationNullableModification.js +6 -9
  118. package/dist/src/modifications/relations/MakeRelationNullableModification.js.map +1 -1
  119. package/dist/src/modifications/relations/UpdateRelationOnDeleteModification.d.ts.map +1 -1
  120. package/dist/src/modifications/relations/UpdateRelationOnDeleteModification.js +4 -7
  121. package/dist/src/modifications/relations/UpdateRelationOnDeleteModification.js.map +1 -1
  122. package/dist/src/modifications/relations/UpdateRelationOrderByModification.d.ts.map +1 -1
  123. package/dist/src/modifications/relations/UpdateRelationOrderByModification.js +3 -6
  124. package/dist/src/modifications/relations/UpdateRelationOrderByModification.js.map +1 -1
  125. package/dist/src/modifications/relations/index.d.ts +1 -0
  126. package/dist/src/modifications/relations/index.d.ts.map +1 -1
  127. package/dist/src/modifications/relations/index.js +1 -0
  128. package/dist/src/modifications/relations/index.js.map +1 -1
  129. package/dist/src/modifications/utils/diffUtils.js +5 -5
  130. package/dist/src/modifications/utils/diffUtils.js.map +1 -1
  131. package/dist/src/modifications/utils/schemaUpdateUtils.d.ts +5 -5
  132. package/dist/src/modifications/utils/schemaUpdateUtils.d.ts.map +1 -1
  133. package/dist/src/modifications/utils/schemaUpdateUtils.js +9 -9
  134. package/dist/src/modifications/utils/schemaUpdateUtils.js.map +1 -1
  135. package/dist/src/modifications/utils/viewDependencies.d.ts +5 -0
  136. package/dist/src/modifications/utils/viewDependencies.d.ts.map +1 -0
  137. package/dist/src/modifications/utils/viewDependencies.js +23 -0
  138. package/dist/src/modifications/utils/viewDependencies.js.map +1 -0
  139. package/dist/src/modifications/validation/PatchValidationSchemaModification.d.ts.map +1 -1
  140. package/dist/src/modifications/validation/PatchValidationSchemaModification.js +2 -5
  141. package/dist/src/modifications/validation/PatchValidationSchemaModification.js.map +1 -1
  142. package/dist/src/modifications/validation/UpdateValidationSchemaModification.d.ts.map +1 -1
  143. package/dist/src/modifications/validation/UpdateValidationSchemaModification.js +2 -5
  144. package/dist/src/modifications/validation/UpdateValidationSchemaModification.js.map +1 -1
  145. package/dist/src/tsconfig.tsbuildinfo +1 -1
  146. package/dist/tests/cases/integration/convertOneToManyRelation.test.d.ts +2 -0
  147. package/dist/tests/cases/integration/convertOneToManyRelation.test.d.ts.map +1 -0
  148. package/dist/tests/cases/integration/convertOneToManyRelation.test.js +50 -0
  149. package/dist/tests/cases/integration/convertOneToManyRelation.test.js.map +1 -0
  150. package/dist/tests/cases/integration/createColumn.test.js +2 -2
  151. package/dist/tests/cases/integration/createColumn.test.js.map +1 -1
  152. package/dist/tests/cases/integration/createEntity.test.js +12 -16
  153. package/dist/tests/cases/integration/createEntity.test.js.map +1 -1
  154. package/dist/tests/cases/integration/createEnum.test.js +2 -2
  155. package/dist/tests/cases/integration/createEnum.test.js.map +1 -1
  156. package/dist/tests/cases/integration/createManyHasMany.test.js +2 -2
  157. package/dist/tests/cases/integration/createManyHasMany.test.js.map +1 -1
  158. package/dist/tests/cases/integration/createManyHasOne.test.js +2 -2
  159. package/dist/tests/cases/integration/createManyHasOne.test.js.map +1 -1
  160. package/dist/tests/cases/integration/createOneHasMany.test.js +2 -2
  161. package/dist/tests/cases/integration/createOneHasMany.test.js.map +1 -1
  162. package/dist/tests/cases/integration/createOneHasOne.test.js +5 -4
  163. package/dist/tests/cases/integration/createOneHasOne.test.js.map +1 -1
  164. package/dist/tests/cases/integration/createRelationInverseSide.test.js +4 -4
  165. package/dist/tests/cases/integration/createRelationInverseSide.test.js.map +1 -1
  166. package/dist/tests/cases/integration/disableOrphanRemoval.test.js +2 -2
  167. package/dist/tests/cases/integration/disableOrphanRemoval.test.js.map +1 -1
  168. package/dist/tests/cases/integration/enableOrphanRemoval.test.js +2 -2
  169. package/dist/tests/cases/integration/enableOrphanRemoval.test.js.map +1 -1
  170. package/dist/tests/cases/integration/makeColumnNotNull.test.js +2 -2
  171. package/dist/tests/cases/integration/makeColumnNotNull.test.js.map +1 -1
  172. package/dist/tests/cases/integration/makeRelationNotNull.test.js +2 -2
  173. package/dist/tests/cases/integration/makeRelationNotNull.test.js.map +1 -1
  174. package/dist/tests/cases/integration/makeRelationNullable.test.js +4 -4
  175. package/dist/tests/cases/integration/makeRelationNullable.test.js.map +1 -1
  176. package/dist/tests/cases/integration/patchAclSchema.test.js +2 -2
  177. package/dist/tests/cases/integration/patchAclSchema.test.js.map +1 -1
  178. package/dist/tests/cases/integration/removeEntity.test.js +6 -6
  179. package/dist/tests/cases/integration/removeEntity.test.js.map +1 -1
  180. package/dist/tests/cases/integration/removeEnum.test.js +2 -2
  181. package/dist/tests/cases/integration/removeEnum.test.js.map +1 -1
  182. package/dist/tests/cases/integration/removeField.test.js +10 -10
  183. package/dist/tests/cases/integration/removeField.test.js.map +1 -1
  184. package/dist/tests/cases/integration/updateColumnDefinition.test.js +2 -2
  185. package/dist/tests/cases/integration/updateColumnDefinition.test.js.map +1 -1
  186. package/dist/tests/cases/integration/updateEntityName.test.js +8 -8
  187. package/dist/tests/cases/integration/updateEntityName.test.js.map +1 -1
  188. package/dist/tests/cases/integration/updateEnum.test.js +3 -3
  189. package/dist/tests/cases/integration/updateEnum.test.js.map +1 -1
  190. package/dist/tests/cases/integration/updateFieldName.test.js +8 -8
  191. package/dist/tests/cases/integration/updateFieldName.test.js.map +1 -1
  192. package/dist/tests/cases/integration/updateRelationOnDelete.test.js +2 -2
  193. package/dist/tests/cases/integration/updateRelationOnDelete.test.js.map +1 -1
  194. package/dist/tests/cases/integration/updateRelationOrderBy.test.js +2 -2
  195. package/dist/tests/cases/integration/updateRelationOrderBy.test.js.map +1 -1
  196. package/dist/tests/cases/integration/updateView.test.js +480 -20
  197. package/dist/tests/cases/integration/updateView.test.js.map +1 -1
  198. package/dist/tests/scripts/checkCreateConsistentMigrations.js +1 -1
  199. package/dist/tests/scripts/checkCreateConsistentMigrations.js.map +1 -1
  200. package/dist/tests/src/tests.js +2 -2
  201. package/dist/tests/src/tests.js.map +1 -1
  202. package/dist/tests/tsconfig.tsbuildinfo +1 -1
  203. package/package.json +6 -6
  204. package/src/MigrationCreator.ts +0 -9
  205. package/src/MigrationFilesManager.ts +4 -4
  206. package/src/SchemaDiffer.ts +24 -9
  207. package/src/modifications/ModificationHandler.ts +1 -4
  208. package/src/modifications/ModificationHandlerFactory.ts +6 -1
  209. package/src/modifications/NoopModification.ts +0 -6
  210. package/src/modifications/acl/PatchAclSchemaModification.ts +0 -5
  211. package/src/modifications/acl/UpdateAclSchemaModification.ts +0 -5
  212. package/src/modifications/columns/CreateColumnModification.ts +2 -37
  213. package/src/modifications/columns/UpdateColumnDefinitionModification.ts +0 -5
  214. package/src/modifications/columns/UpdateColumnNameModification.ts +0 -20
  215. package/src/modifications/constraints/CreateUniqueConstraintModification.ts +0 -5
  216. package/src/modifications/constraints/RemoveUniqueConstraintModification.ts +0 -5
  217. package/src/modifications/differs/RemoveChangedFieldDiffer.ts +9 -1
  218. package/src/modifications/differs/RemoveChangedViewDiffer.ts +42 -0
  219. package/src/modifications/differs/index.ts +1 -0
  220. package/src/modifications/entities/CreateEntityModification.ts +2 -4
  221. package/src/modifications/entities/CreateViewModification.ts +65 -0
  222. package/src/modifications/entities/RemoveEntityModification.ts +18 -14
  223. package/src/modifications/entities/UpdateEntityNameModification.ts +13 -14
  224. package/src/modifications/entities/UpdateEntityTableNameModification.ts +0 -11
  225. package/src/modifications/entities/UpdateViewModification.ts +0 -19
  226. package/src/modifications/entities/index.ts +1 -1
  227. package/src/modifications/enums/CreateEnumModification.ts +3 -9
  228. package/src/modifications/enums/RemoveEnumModification.ts +0 -5
  229. package/src/modifications/enums/UpdateEnumModification.ts +7 -11
  230. package/src/modifications/enums/enumUtils.ts +8 -0
  231. package/src/modifications/fields/RemoveFieldModification.ts +3 -46
  232. package/src/modifications/fields/UpdateFieldNameModification.ts +0 -5
  233. package/src/modifications/relations/ConvertOneToManyRelationModification.ts +115 -0
  234. package/src/modifications/relations/CreateRelationInverseSideModification.ts +0 -5
  235. package/src/modifications/relations/CreateRelationModification.ts +25 -49
  236. package/src/modifications/relations/DisableOrphanRemovalModification.ts +0 -5
  237. package/src/modifications/relations/EnableOrphanRemovalModification.ts +0 -5
  238. package/src/modifications/relations/MakeRelationNotNullModification.ts +0 -5
  239. package/src/modifications/relations/MakeRelationNullableModification.ts +0 -5
  240. package/src/modifications/relations/UpdateRelationOnDeleteModification.ts +0 -5
  241. package/src/modifications/relations/UpdateRelationOrderByModification.ts +0 -5
  242. package/src/modifications/relations/index.ts +1 -0
  243. package/src/modifications/utils/schemaUpdateUtils.ts +6 -6
  244. package/src/modifications/utils/viewDependencies.ts +20 -0
  245. package/src/modifications/validation/PatchValidationSchemaModification.ts +0 -5
  246. package/src/modifications/validation/UpdateValidationSchemaModification.ts +0 -6
  247. package/tests/cases/integration/convertOneToManyRelation.test.ts +59 -0
  248. package/tests/cases/integration/createEntity.test.ts +8 -12
  249. package/tests/cases/integration/createOneHasOne.test.ts +3 -2
  250. package/tests/cases/integration/removeEntity.test.ts +2 -2
  251. package/tests/cases/integration/updateEnum.test.ts +2 -2
  252. package/tests/cases/integration/updateView.test.ts +430 -17
  253. package/dist/src/modifications/CreateModificationFieldVisitor.d.ts +0 -14
  254. package/dist/src/modifications/CreateModificationFieldVisitor.d.ts.map +0 -1
  255. package/dist/src/modifications/CreateModificationFieldVisitor.js +0 -61
  256. package/dist/src/modifications/CreateModificationFieldVisitor.js.map +0 -1
  257. package/src/modifications/CreateModificationFieldVisitor.ts +0 -96
@@ -1,30 +1,8 @@
1
- import {
2
- acceptFieldVisitor,
3
- isInverseRelation,
4
- isOwningRelation,
5
- isRelation,
6
- NamingHelper,
7
- PredicateDefinitionProcessor,
8
- tryGetColumnName,
9
- } from '@contember/schema-utils'
1
+ import { acceptFieldVisitor, isInverseRelation, isRelation, NamingHelper } from '@contember/schema-utils'
10
2
  import { MigrationBuilder } from '@contember/database-migrations'
11
- import { Model, Schema } from '@contember/schema'
12
- import { ContentEvent, EventType } from '@contember/engine-common'
13
- import {
14
- removeField,
15
- SchemaUpdater,
16
- updateAcl,
17
- updateAclEveryEntity,
18
- updateAclEveryPredicate,
19
- updateAclEveryRole,
20
- updateAclFieldPermissions,
21
- updateEntity,
22
- updateField,
23
- updateModel,
24
- updateSchema,
25
- } from '../utils/schemaUpdateUtils'
3
+ import { Schema } from '@contember/schema'
4
+ import { removeField, SchemaUpdater } from '../utils/schemaUpdateUtils'
26
5
  import { ModificationHandlerStatic } from '../ModificationHandler'
27
- import { VERSION_ACL_PATCH, VERSION_REMOVE_RELATION_INVERSE_SIDE } from '../ModificationVersions'
28
6
  import { isDefined } from '../../utils/isDefined'
29
7
 
30
8
  export const RemoveFieldModification: ModificationHandlerStatic<RemoveFieldModificationData> = class {
@@ -64,27 +42,6 @@ export const RemoveFieldModification: ModificationHandlerStatic<RemoveFieldModif
64
42
  return removeField(this.data.entityName, this.data.fieldName, this.formatVersion)
65
43
  }
66
44
 
67
- public transformEvents(events: ContentEvent[]): ContentEvent[] {
68
- const entity = this.schema.model.entities[this.data.entityName]
69
- const tableName = entity.tableName
70
- const columnName = tryGetColumnName(this.schema.model, entity, this.data.fieldName)
71
- if (!columnName) {
72
- return events
73
- }
74
- return events.map(it => {
75
- if (
76
- it.tableName !== tableName ||
77
- (it.type !== EventType.create && it.type !== EventType.update) ||
78
- !it.values.hasOwnProperty(columnName)
79
- ) {
80
- return it
81
- }
82
-
83
- const { [columnName]: value, ...values } = it.values
84
- return { ...it, values }
85
- })
86
- }
87
-
88
45
  describe() {
89
46
  return { message: `Remove field ${this.data.entityName}.${this.data.fieldName}`, isDestructive: true }
90
47
  }
@@ -1,6 +1,5 @@
1
1
  import { MigrationBuilder } from '@contember/database-migrations'
2
2
  import { Input, Model, Schema, Value } from '@contember/schema'
3
- import { ContentEvent } from '@contember/engine-common'
4
3
  import {
5
4
  SchemaUpdater,
6
5
  updateAcl,
@@ -158,10 +157,6 @@ export const UpdateFieldNameModification: ModificationHandlerStatic<UpdateFieldN
158
157
  )
159
158
  }
160
159
 
161
- public transformEvents(events: ContentEvent[]): ContentEvent[] {
162
- return events
163
- }
164
-
165
160
  private getNewConstraintName(constraint: Model.UniqueConstraint): string | null {
166
161
  const generatedName = NamingHelper.createUniqueConstraintName(this.data.entityName, constraint.fields)
167
162
  const isGenerated = constraint.name === generatedName
@@ -0,0 +1,115 @@
1
+ import { MigrationBuilder } from '@contember/database-migrations'
2
+ import { Model, Schema } from '@contember/schema'
3
+ import { SchemaUpdater, updateEntity, updateField, updateModel, updateSchema } from '../utils/schemaUpdateUtils'
4
+ import { ModificationHandler, ModificationHandlerStatic } from '../ModificationHandler'
5
+ import { isOwningRelation, NamingHelper } from '@contember/schema-utils'
6
+ import { updateRelations } from '../utils/diffUtils'
7
+ import { UpdateFieldNameModification } from '../fields'
8
+ import { NoopModification } from '../NoopModification'
9
+
10
+ export const ConvertOneToManyRelationModification: ModificationHandlerStatic<ConvertOneToManyRelationModificationData> = class {
11
+ static id = 'convertOneToManyRelation'
12
+ private subModification: ModificationHandler<any>
13
+
14
+ constructor(private readonly data: ConvertOneToManyRelationModificationData, private readonly schema: Schema, private readonly formatVersion: number) {
15
+ const { relation } = this.getRelation()
16
+ this.subModification = data.newInverseSideFieldName && relation.inversedBy ?
17
+ new UpdateFieldNameModification(
18
+ {
19
+ entityName: relation.target,
20
+ fieldName: relation.inversedBy,
21
+ newFieldName: data.newInverseSideFieldName,
22
+ },
23
+ schema,
24
+ formatVersion,
25
+ )
26
+ : new NoopModification()
27
+ }
28
+
29
+ public createSql(builder: MigrationBuilder): void {
30
+ const { entity, relation } = this.getRelation()
31
+ builder.addIndex(entity.tableName, relation.joiningColumn.columnName)
32
+ const uniqueConstraintName = NamingHelper.createUniqueConstraintName(entity.name, [relation.name])
33
+ builder.dropConstraint(entity.tableName, uniqueConstraintName)
34
+ this.subModification.createSql(builder)
35
+ }
36
+
37
+ public getSchemaUpdater(): SchemaUpdater {
38
+ const { relation } = this.getRelation()
39
+ const { entityName, fieldName } = this.data
40
+ return updateSchema(
41
+ updateModel(
42
+ updateEntity(
43
+ entityName,
44
+ updateField<Model.OneHasOneOwningRelation, Model.ManyHasOneRelation>(
45
+ fieldName,
46
+ ({ field: { type, orphanRemoval, ...field } }) => ({
47
+ type: Model.RelationType.ManyHasOne,
48
+ ...field,
49
+ }),
50
+ ),
51
+ ),
52
+ ),
53
+ this.subModification.getSchemaUpdater(),
54
+ this.data.newInverseSideFieldName ?
55
+ updateModel(
56
+ updateEntity(
57
+ relation.target,
58
+ updateField<Model.OneHasOneInverseRelation, Model.OneHasManyRelation>(
59
+ this.data.newInverseSideFieldName,
60
+ ({ field: { type, nullable, ...field } }) => ({
61
+ type: Model.RelationType.OneHasMany,
62
+ ...field,
63
+ }),
64
+ ),
65
+ ),
66
+ ) : undefined,
67
+ )
68
+ }
69
+
70
+ describe() {
71
+ return {
72
+ message: `Converts OneHasOne relation to ManyHasOne on ${this.data.entityName}.${this.data.fieldName}`,
73
+ }
74
+ }
75
+
76
+ static createModification(data: ConvertOneToManyRelationModificationData) {
77
+ return { modification: this.id, ...data }
78
+ }
79
+
80
+ static createDiff(originalSchema: Schema, updatedSchema: Schema) {
81
+ return updateRelations(originalSchema, updatedSchema, ({ originalRelation, updatedRelation, updatedEntity }) => {
82
+ if (
83
+ isOwningRelation(originalRelation) &&
84
+ isOwningRelation(updatedRelation) &&
85
+ originalRelation.type === Model.RelationType.OneHasOne &&
86
+ updatedRelation.type === Model.RelationType.ManyHasOne
87
+ ) {
88
+ const isInverseSideRenamed = originalRelation.inversedBy && updatedRelation.inversedBy && originalRelation.inversedBy !== updatedRelation.inversedBy
89
+ return ConvertOneToManyRelationModification.createModification({
90
+ entityName: updatedEntity.name,
91
+ fieldName: updatedRelation.name,
92
+ ...(isInverseSideRenamed ? {
93
+ newInverseSideFieldName: updatedRelation.inversedBy,
94
+ } : {}),
95
+ })
96
+ }
97
+ return undefined
98
+ })
99
+ }
100
+
101
+ private getRelation() {
102
+ const entity = this.schema.model.entities[this.data.entityName]
103
+ const relation = entity.fields[this.data.fieldName]
104
+ if (relation.type !== Model.RelationType.OneHasOne || !isOwningRelation(relation)) {
105
+ throw new Error()
106
+ }
107
+ return { entity, relation }
108
+ }
109
+ }
110
+
111
+ export interface ConvertOneToManyRelationModificationData {
112
+ entityName: string
113
+ fieldName: string
114
+ newInverseSideFieldName?: string
115
+ }
@@ -1,6 +1,5 @@
1
1
  import { MigrationBuilder } from '@contember/database-migrations'
2
2
  import { Model, Schema } from '@contember/schema'
3
- import { ContentEvent } from '@contember/engine-common'
4
3
  import { addField, SchemaUpdater, updateEntity, updateField, updateModel } from '../utils/schemaUpdateUtils'
5
4
  import { ModificationHandlerStatic } from '../ModificationHandler'
6
5
  import { createFields } from '../utils/diffUtils'
@@ -25,10 +24,6 @@ export const CreateRelationInverseSideModification: ModificationHandlerStatic<Cr
25
24
  )
26
25
  }
27
26
 
28
- public transformEvents(events: ContentEvent[]): ContentEvent[] {
29
- return events
30
- }
31
-
32
27
  describe() {
33
28
  return { message: `Add relation ${this.data.entityName}.${this.data.relation.name}` }
34
29
  }
@@ -7,7 +7,6 @@ import {
7
7
  NamingHelper,
8
8
  } from '@contember/schema-utils'
9
9
  import { MigrationBuilder } from '@contember/database-migrations'
10
- import { ContentEvent } from '@contember/engine-common'
11
10
  import { addField, SchemaUpdater, updateEntity, updateModel } from '../utils/schemaUpdateUtils'
12
11
  import { ModificationHandlerStatic } from '../ModificationHandler'
13
12
  import { createEventTrigger, createEventTrxTrigger } from '../utils/sqlUpdateUtils'
@@ -30,58 +29,39 @@ export const CreateRelationModification: ModificationHandlerStatic<CreateRelatio
30
29
  return
31
30
  }
32
31
  const targetEntity = this.schema.model.entities[this.data.owningSide.target]
32
+ const createOwningSide = (relation: Model.OneHasOneOwningRelation | Model.ManyHasOneRelation) => {
33
+ builder.addColumn(entity.tableName, {
34
+ [relation.joiningColumn.columnName]: {
35
+ type: getPrimaryType(targetEntity),
36
+ notNull: !relation.nullable,
37
+ },
38
+ })
39
+ const fkName = NamingHelper.createForeignKeyName(
40
+ entity.tableName,
41
+ relation.joiningColumn.columnName,
42
+ targetEntity.tableName,
43
+ targetEntity.primaryColumn,
44
+ )
45
+ builder.addConstraint(entity.tableName, fkName, {
46
+ foreignKeys: {
47
+ columns: relation.joiningColumn.columnName,
48
+ references: `"${targetEntity.tableName}"("${targetEntity.primaryColumn}")`,
49
+ onDelete: 'NO ACTION',
50
+ },
51
+ deferrable: true,
52
+ deferred: false,
53
+ })
54
+ }
33
55
  acceptRelationTypeVisitor(this.schema.model, entity, this.data.owningSide, {
34
56
  visitManyHasOne: ({}, relation, {}, _) => {
35
- builder.addColumn(entity.tableName, {
36
- [relation.joiningColumn.columnName]: {
37
- type: getPrimaryType(targetEntity),
38
- notNull: !relation.nullable,
39
- },
40
- })
41
- const fkName = NamingHelper.createForeignKeyName(
42
- entity.tableName,
43
- relation.joiningColumn.columnName,
44
- targetEntity.tableName,
45
- targetEntity.primaryColumn,
46
- )
47
- builder.addConstraint(entity.tableName, fkName, {
48
- foreignKeys: {
49
- columns: relation.joiningColumn.columnName,
50
- references: `"${targetEntity.tableName}"("${targetEntity.primaryColumn}")`,
51
- onDelete: 'NO ACTION',
52
- },
53
- deferrable: true,
54
- deferred: false,
55
- })
57
+ createOwningSide(relation)
56
58
  builder.addIndex(entity.tableName, relation.joiningColumn.columnName)
57
59
  },
58
60
  visitOneHasMany: () => {},
59
61
  visitOneHasOneOwning: ({}, relation, {}, _) => {
60
- builder.addColumn(entity.tableName, {
61
- [relation.joiningColumn.columnName]: {
62
- type: getPrimaryType(targetEntity),
63
- notNull: !relation.nullable,
64
- },
65
- })
62
+ createOwningSide(relation)
66
63
  const uniqueConstraintName = NamingHelper.createUniqueConstraintName(entity.name, [relation.name])
67
-
68
64
  builder.addConstraint(entity.tableName, uniqueConstraintName, { unique: [relation.joiningColumn.columnName] })
69
-
70
- const fkName = NamingHelper.createForeignKeyName(
71
- entity.tableName,
72
- relation.joiningColumn.columnName,
73
- targetEntity.tableName,
74
- targetEntity.primaryColumn,
75
- )
76
- builder.addConstraint(entity.tableName, fkName, {
77
- foreignKeys: {
78
- columns: relation.joiningColumn.columnName,
79
- references: `"${targetEntity.tableName}"("${targetEntity.primaryColumn}")`,
80
- onDelete: 'NO ACTION',
81
- },
82
- deferrable: true,
83
- deferred: false,
84
- })
85
65
  },
86
66
  visitOneHasOneInverse: () => {},
87
67
  visitManyHasManyOwning: ({}, relation, {}, _) => {
@@ -127,10 +107,6 @@ export const CreateRelationModification: ModificationHandlerStatic<CreateRelatio
127
107
  )
128
108
  }
129
109
 
130
- public transformEvents(events: ContentEvent[]): ContentEvent[] {
131
- return events //todo fill
132
- }
133
-
134
110
  describe({ createdEntities }: { createdEntities: string[] }) {
135
111
  const notNull = isIt<Model.NullableRelation>(this.data.owningSide, 'nullable') && !this.data.owningSide.nullable
136
112
  const failureWarning =
@@ -1,6 +1,5 @@
1
1
  import { MigrationBuilder } from '@contember/database-migrations'
2
2
  import { Model, Schema } from '@contember/schema'
3
- import { ContentEvent } from '@contember/engine-common'
4
3
  import { SchemaUpdater, updateEntity, updateField, updateModel } from '../utils/schemaUpdateUtils'
5
4
  import { ModificationHandlerStatic } from '../ModificationHandler'
6
5
  import { isOwningRelation } from '@contember/schema-utils'
@@ -23,10 +22,6 @@ export const DisableOrphanRemovalModification: ModificationHandlerStatic<Disable
23
22
  )
24
23
  }
25
24
 
26
- public transformEvents(events: ContentEvent[]): ContentEvent[] {
27
- return events
28
- }
29
-
30
25
  describe() {
31
26
  return {
32
27
  message: `Disable orphan removal on ${this.data.entityName}.${this.data.fieldName}`,
@@ -1,6 +1,5 @@
1
1
  import { MigrationBuilder } from '@contember/database-migrations'
2
2
  import { Model, Schema } from '@contember/schema'
3
- import { ContentEvent } from '@contember/engine-common'
4
3
  import { SchemaUpdater, updateEntity, updateField, updateModel } from '../utils/schemaUpdateUtils'
5
4
  import { ModificationHandlerStatic } from '../ModificationHandler'
6
5
  import { isOwningRelation } from '@contember/schema-utils'
@@ -25,10 +24,6 @@ export const EnableOrphanRemovalModification: ModificationHandlerStatic<EnableOr
25
24
  )
26
25
  }
27
26
 
28
- public transformEvents(events: ContentEvent[]): ContentEvent[] {
29
- return events
30
- }
31
-
32
27
  describe() {
33
28
  return {
34
29
  message: `Enable orphan removal on ${this.data.entityName}.${this.data.fieldName}`,
@@ -1,6 +1,5 @@
1
1
  import { MigrationBuilder } from '@contember/database-migrations'
2
2
  import { Model, Schema } from '@contember/schema'
3
- import { ContentEvent } from '@contember/engine-common'
4
3
  import { SchemaUpdater, updateEntity, updateField, updateModel } from '../utils/schemaUpdateUtils'
5
4
  import { ModificationHandlerStatic } from '../ModificationHandler'
6
5
  import { getEntity, tryGetColumnName } from '@contember/schema-utils'
@@ -38,10 +37,6 @@ export const MakeRelationNotNullModification: ModificationHandlerStatic<MakeRela
38
37
  )
39
38
  }
40
39
 
41
- public transformEvents(events: ContentEvent[]): ContentEvent[] {
42
- return events
43
- }
44
-
45
40
  describe() {
46
41
  return {
47
42
  message: `Make relation ${this.data.entityName}.${this.data.fieldName} not-nullable`,
@@ -1,6 +1,5 @@
1
1
  import { MigrationBuilder } from '@contember/database-migrations'
2
2
  import { Model, Schema } from '@contember/schema'
3
- import { ContentEvent } from '@contember/engine-common'
4
3
  import { SchemaUpdater, updateEntity, updateField, updateModel } from '../utils/schemaUpdateUtils'
5
4
  import { ModificationHandlerStatic } from '../ModificationHandler'
6
5
  import { getEntity, tryGetColumnName } from '@contember/schema-utils'
@@ -38,10 +37,6 @@ export const MakeRelationNullableModification: ModificationHandlerStatic<MakeRel
38
37
  )
39
38
  }
40
39
 
41
- public transformEvents(events: ContentEvent[]): ContentEvent[] {
42
- return events
43
- }
44
-
45
40
  describe() {
46
41
  return {
47
42
  message: `Make relation ${this.data.entityName}.${this.data.fieldName} nullable`,
@@ -1,6 +1,5 @@
1
1
  import { MigrationBuilder } from '@contember/database-migrations'
2
2
  import { Model, Schema } from '@contember/schema'
3
- import { ContentEvent } from '@contember/engine-common'
4
3
  import { SchemaUpdater, updateEntity, updateField, updateModel } from '../utils/schemaUpdateUtils'
5
4
  import { ModificationHandlerStatic } from '../ModificationHandler'
6
5
  import { isIt } from '../../utils/isIt'
@@ -25,10 +24,6 @@ export const UpdateRelationOnDeleteModification: ModificationHandlerStatic<Updat
25
24
  )
26
25
  }
27
26
 
28
- public transformEvents(events: ContentEvent[]): ContentEvent[] {
29
- return events
30
- }
31
-
32
27
  describe() {
33
28
  return { message: `Change on-delete policy of relation ${this.data.entityName}.${this.data.fieldName}` }
34
29
  }
@@ -1,6 +1,5 @@
1
1
  import { MigrationBuilder } from '@contember/database-migrations'
2
2
  import { Model, Schema } from '@contember/schema'
3
- import { ContentEvent } from '@contember/engine-common'
4
3
  import { SchemaUpdater, updateEntity, updateField, updateModel } from '../utils/schemaUpdateUtils'
5
4
  import { ModificationHandlerStatic } from '../ModificationHandler'
6
5
  import deepEqual from 'fast-deep-equal'
@@ -25,10 +24,6 @@ export const UpdateRelationOrderByModification: ModificationHandlerStatic<Update
25
24
  )
26
25
  }
27
26
 
28
- public transformEvents(events: ContentEvent[]): ContentEvent[] {
29
- return events
30
- }
31
-
32
27
  describe() {
33
28
  return { message: `Update order-by of relation ${this.data.entityName}.${this.data.fieldName}` }
34
29
  }
@@ -1,3 +1,4 @@
1
+ export * from './ConvertOneToManyRelationModification'
1
2
  export * from './CreateRelationInverseSideModification'
2
3
  export * from './CreateRelationModification'
3
4
  export * from './DisableOrphanRemovalModification'
@@ -7,12 +7,12 @@ import { VERSION_ACL_PATCH, VERSION_REMOVE_RELATION_INVERSE_SIDE } from '../Modi
7
7
  export type SchemaUpdater = (args: { schema: Schema }) => Schema
8
8
  export type ModelUpdater = (args: { schema: Schema; model: Model.Schema }) => Model.Schema
9
9
  export type EntityUpdater = (args: { schema: Schema; model: Model.Schema; entity: Model.Entity }) => Model.Entity
10
- export type FieldUpdater<T extends Model.AnyField> = (args: {
10
+ export type FieldUpdater<In extends Model.AnyField, Out extends Model.AnyField> = (args: {
11
11
  schema: Schema
12
12
  model: Model.Schema
13
13
  entity: Model.Entity
14
- field: T
15
- }) => T | undefined
14
+ field: In
15
+ }) => Out | undefined
16
16
  export type AclUpdater = (args: { schema: Schema; acl: Acl.Schema }) => Acl.Schema
17
17
  export type AclRoleUpdater = (args: {
18
18
  schema: Schema
@@ -183,13 +183,13 @@ export const updateEveryEntity =
183
183
  })
184
184
 
185
185
  export const updateField =
186
- <T extends Model.AnyField = Model.AnyField>(name: string, fieldUpdater: FieldUpdater<T>): EntityUpdater =>
186
+ <In extends Model.AnyField = Model.AnyField, Out extends Model.AnyField = In>(name: string, fieldUpdater: FieldUpdater<In, Out>): EntityUpdater =>
187
187
  args => {
188
188
  const { [name]: field, ...otherFields } = args.entity.fields
189
189
  if (!args.entity.fields[name]) {
190
190
  throw new SchemaUpdateError(`Field ${args.entity.name}::${name} not found`)
191
191
  }
192
- const updatedField = fieldUpdater({ ...args, field: args.entity.fields[name] as T })
192
+ const updatedField = fieldUpdater({ ...args, field: args.entity.fields[name] as In })
193
193
 
194
194
  return {
195
195
  ...args.entity,
@@ -201,7 +201,7 @@ export const updateField =
201
201
  }
202
202
 
203
203
  export const updateEveryField =
204
- (fieldUpdater: FieldUpdater<Model.AnyField>): EntityUpdater =>
204
+ (fieldUpdater: FieldUpdater<Model.AnyField, Model.AnyField>): EntityUpdater =>
205
205
  args => ({
206
206
  ...args.entity,
207
207
  fields: Object.fromEntries(
@@ -0,0 +1,20 @@
1
+ import { Model } from '@contember/schema'
2
+
3
+ type ViewDependants = Map<string, Set<Model.Entity>>
4
+ export const getViewDirectDependants = (model: Model.Schema): ViewDependants => {
5
+ const dependants: ViewDependants = new Map(Object.values(model.entities).filter(it => it.view).map(it => [it.name, new Set()]))
6
+ for (const entity of Object.values(model.entities)) {
7
+ if (!entity.view?.dependencies?.length) {
8
+ continue
9
+ }
10
+ for (const dependency of entity.view.dependencies) {
11
+ const entityDependants = dependants.get(dependency)
12
+ if (!entityDependants) {
13
+ // not a view
14
+ continue
15
+ }
16
+ entityDependants.add(entity)
17
+ }
18
+ }
19
+ return dependants
20
+ }
@@ -1,5 +1,4 @@
1
1
  import { MigrationBuilder } from '@contember/database-migrations'
2
- import { ContentEvent } from '@contember/engine-common'
3
2
  import { SchemaUpdater } from '../utils/schemaUpdateUtils'
4
3
  import { ModificationHandlerStatic } from '../ModificationHandler'
5
4
  import { applyPatch, Operation } from 'rfc6902'
@@ -26,10 +25,6 @@ export const PatchValidationSchemaModification: ModificationHandlerStatic<PatchV
26
25
  }
27
26
  }
28
27
 
29
- public transformEvents(events: ContentEvent[]): ContentEvent[] {
30
- return events
31
- }
32
-
33
28
  describe() {
34
29
  return { message: 'Update validation schema' }
35
30
  }
@@ -1,11 +1,9 @@
1
1
  import { MigrationBuilder } from '@contember/database-migrations'
2
2
  import { Schema, Validation } from '@contember/schema'
3
- import { ContentEvent } from '@contember/engine-common'
4
3
  import { SchemaUpdater } from '../utils/schemaUpdateUtils'
5
4
  import { ModificationHandlerStatic } from '../ModificationHandler'
6
5
  import deepEqual from 'fast-deep-equal'
7
6
  import { createPatch } from 'rfc6902'
8
- import { PatchAclSchemaModification } from '../acl'
9
7
  import { PatchValidationSchemaModification } from './PatchValidationSchemaModification'
10
8
 
11
9
  export const UpdateValidationSchemaModification: ModificationHandlerStatic<UpdateValidationSchemaModificationData> = class {
@@ -21,10 +19,6 @@ export const UpdateValidationSchemaModification: ModificationHandlerStatic<Updat
21
19
  })
22
20
  }
23
21
 
24
- public transformEvents(events: ContentEvent[]): ContentEvent[] {
25
- return events
26
- }
27
-
28
22
  describe() {
29
23
  return { message: 'Update validation schema' }
30
24
  }
@@ -0,0 +1,59 @@
1
+ import { testMigrations } from '../../src/tests'
2
+ import { SchemaBuilder } from '@contember/schema-definition'
3
+ import { Model } from '@contember/schema'
4
+ import { SQL } from '../../src/tags'
5
+
6
+ testMigrations('convert one has one to many has one relation without inverse side', {
7
+ originalSchema: new SchemaBuilder()
8
+ .entity('Post', entity =>
9
+ entity.oneHasOne('image', rel => rel.target('Image')),
10
+ )
11
+ .entity('Image', e => e.column('url', c => c.type(Model.ColumnType.String)))
12
+ .buildSchema(),
13
+ updatedSchema: new SchemaBuilder()
14
+ .entity('Post', entity =>
15
+ entity.manyHasOne('image', rel => rel.target('Image')),
16
+ )
17
+ .entity('Image', e => e.column('url', c => c.type(Model.ColumnType.String)))
18
+ .buildSchema(),
19
+ diff: [
20
+ {
21
+ modification: 'convertOneToManyRelation',
22
+ entityName: 'Post',
23
+ fieldName: 'image',
24
+ },
25
+ ],
26
+ sql: SQL`
27
+ CREATE INDEX "post_image_id_index" ON "post" ("image_id");
28
+ ALTER TABLE "post" DROP CONSTRAINT "unique_Post_image_a85d6d";
29
+ `,
30
+ })
31
+
32
+
33
+ testMigrations('convert one has one to many has one relation with inverse side', {
34
+ originalSchema: new SchemaBuilder()
35
+ .entity('Post', entity =>
36
+ entity.oneHasOne('image', rel => rel.target('Image').inversedBy('post')),
37
+ )
38
+ .entity('Image', e => e.column('url', c => c.type(Model.ColumnType.String)))
39
+ .buildSchema(),
40
+ updatedSchema: new SchemaBuilder()
41
+ .entity('Post', entity =>
42
+ entity.manyHasOne('image', rel => rel.target('Image').inversedBy('posts')),
43
+ )
44
+ .entity('Image', e => e.column('url', c => c.type(Model.ColumnType.String)))
45
+ .buildSchema(),
46
+ diff: [
47
+ {
48
+ modification: 'convertOneToManyRelation',
49
+ entityName: 'Post',
50
+ fieldName: 'image',
51
+ newInverseSideFieldName: 'posts',
52
+ },
53
+ ],
54
+ sql: SQL`
55
+ CREATE INDEX "post_image_id_index" ON "post" ("image_id");
56
+ ALTER TABLE "post" DROP CONSTRAINT "unique_Post_image_a85d6d";
57
+ `,
58
+ })
59
+
@@ -111,7 +111,7 @@ testMigrations('create a view', {
111
111
  updatedSchema: def.createModel(ViewEntityUpdatedSchema),
112
112
  diff: [
113
113
  {
114
- modification: 'createEntity',
114
+ modification: 'createView',
115
115
  entity: {
116
116
  fields: {
117
117
  id: {
@@ -121,6 +121,13 @@ testMigrations('create a view', {
121
121
  type: Model.ColumnType.Uuid,
122
122
  columnType: 'uuid',
123
123
  },
124
+ name: {
125
+ columnName: 'name',
126
+ name: 'name',
127
+ nullable: true,
128
+ type: Model.ColumnType.String,
129
+ columnType: 'text',
130
+ },
124
131
  },
125
132
  name: 'Author',
126
133
  primary: 'id',
@@ -130,17 +137,6 @@ testMigrations('create a view', {
130
137
  view: { sql: "SELECT null as id, 'John' AS name" },
131
138
  },
132
139
  },
133
- {
134
- modification: 'createColumn',
135
- entityName: 'Author',
136
- field: {
137
- columnName: 'name',
138
- name: 'name',
139
- nullable: true,
140
- type: Model.ColumnType.String,
141
- columnType: 'text',
142
- },
143
- },
144
140
  ],
145
141
  sql: SQL`CREATE VIEW "author" AS SELECT null as id, 'John' AS name;`,
146
142
  })
@@ -132,7 +132,8 @@ testMigrations('create one has one relation (site with settings)', {
132
132
  ALTER TABLE "site"
133
133
  ADD "setting_id" uuid;
134
134
  ALTER TABLE "site"
135
- ADD CONSTRAINT "unique_Site_setting_8653a0" UNIQUE ("setting_id");
135
+ ADD CONSTRAINT "fk_site_setting_id_6a4aa6" FOREIGN KEY ("setting_id") REFERENCES "site_setting"("id") ON DELETE NO ACTION DEFERRABLE INITIALLY IMMEDIATE;
136
136
  ALTER TABLE "site"
137
- ADD CONSTRAINT "fk_site_setting_id_6a4aa6" FOREIGN KEY ("setting_id") REFERENCES "site_setting"("id") ON DELETE NO ACTION DEFERRABLE INITIALLY IMMEDIATE;`,
137
+ ADD CONSTRAINT "unique_Site_setting_8653a0" UNIQUE ("setting_id");
138
+ `,
138
139
  })
@@ -22,7 +22,7 @@ testMigrations('remove an entity', {
22
22
  entityName: 'Author',
23
23
  },
24
24
  ],
25
- sql: SQL`DROP TABLE "author" CASCADE;`,
25
+ sql: SQL`ALTER TABLE "post" DROP "author_id"; DROP TABLE "author";`,
26
26
  })
27
27
 
28
28
  testMigrations('remove entity with acl', {
@@ -90,7 +90,7 @@ testMigrations('remove entity with acl', {
90
90
  entityName: 'Site',
91
91
  },
92
92
  ],
93
- sql: SQL`DROP TABLE "site" CASCADE;`,
93
+ sql: SQL`ALTER TABLE "post" DROP "site_id"; DROP TABLE "site";`,
94
94
  })
95
95
 
96
96
  namespace ViewEntityOriginalSchema {