@contember/schema-migrations 2.0.2 → 2.1.0-alpha.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/development/src/MigrationDescriber.cjs +2 -1
- package/dist/development/src/MigrationDescriber.cjs.map +1 -1
- package/dist/development/src/MigrationDescriber.js +2 -1
- package/dist/development/src/MigrationDescriber.js.map +1 -1
- package/dist/development/src/modifications/columns/CreateColumnModification.cjs +2 -1
- package/dist/development/src/modifications/columns/CreateColumnModification.cjs.map +1 -1
- package/dist/development/src/modifications/columns/CreateColumnModification.js +2 -1
- package/dist/development/src/modifications/columns/CreateColumnModification.js.map +1 -1
- package/dist/development/src/modifications/columns/UpdateColumnDefinitionModification.cjs +8 -3
- package/dist/development/src/modifications/columns/UpdateColumnDefinitionModification.cjs.map +1 -1
- package/dist/development/src/modifications/columns/UpdateColumnDefinitionModification.js +8 -3
- package/dist/development/src/modifications/columns/UpdateColumnDefinitionModification.js.map +1 -1
- package/dist/development/src/modifications/constraints/CreateUniqueConstraintModification.cjs +15 -9
- package/dist/development/src/modifications/constraints/CreateUniqueConstraintModification.cjs.map +1 -1
- package/dist/development/src/modifications/constraints/CreateUniqueConstraintModification.js +15 -9
- package/dist/development/src/modifications/constraints/CreateUniqueConstraintModification.js.map +1 -1
- package/dist/development/src/modifications/constraints/RemoveUniqueConstraintModification.cjs +34 -16
- package/dist/development/src/modifications/constraints/RemoveUniqueConstraintModification.cjs.map +1 -1
- package/dist/development/src/modifications/constraints/RemoveUniqueConstraintModification.js +34 -16
- package/dist/development/src/modifications/constraints/RemoveUniqueConstraintModification.js.map +1 -1
- package/dist/development/src/modifications/entities/CreateEntityModification.cjs +2 -1
- package/dist/development/src/modifications/entities/CreateEntityModification.cjs.map +1 -1
- package/dist/development/src/modifications/entities/CreateEntityModification.js +2 -1
- package/dist/development/src/modifications/entities/CreateEntityModification.js.map +1 -1
- package/dist/development/src/modifications/entities/CreateViewModification.cjs +12 -2
- package/dist/development/src/modifications/entities/CreateViewModification.cjs.map +1 -1
- package/dist/development/src/modifications/entities/CreateViewModification.js +12 -2
- package/dist/development/src/modifications/entities/CreateViewModification.js.map +1 -1
- package/dist/development/src/modifications/entities/RemoveEntityModification.cjs +5 -1
- package/dist/development/src/modifications/entities/RemoveEntityModification.cjs.map +1 -1
- package/dist/development/src/modifications/entities/RemoveEntityModification.js +5 -1
- package/dist/development/src/modifications/entities/RemoveEntityModification.js.map +1 -1
- package/dist/development/src/modifications/indexes/CreateIndexModification.cjs +2 -2
- package/dist/development/src/modifications/indexes/CreateIndexModification.cjs.map +1 -1
- package/dist/development/src/modifications/indexes/CreateIndexModification.js +2 -2
- package/dist/development/src/modifications/indexes/CreateIndexModification.js.map +1 -1
- package/dist/development/src/modifications/indexes/RemoveIndexModification.cjs +3 -3
- package/dist/development/src/modifications/indexes/RemoveIndexModification.cjs.map +1 -1
- package/dist/development/src/modifications/indexes/RemoveIndexModification.js +3 -3
- package/dist/development/src/modifications/indexes/RemoveIndexModification.js.map +1 -1
- package/dist/development/src/modifications/upgrade/RemoveIndexNamesModification.cjs +8 -2
- package/dist/development/src/modifications/upgrade/RemoveIndexNamesModification.cjs.map +1 -1
- package/dist/development/src/modifications/upgrade/RemoveIndexNamesModification.js +8 -2
- package/dist/development/src/modifications/upgrade/RemoveIndexNamesModification.js.map +1 -1
- package/dist/development/src/modifications/utils/columnUtils.cjs +1 -1
- package/dist/development/src/modifications/utils/columnUtils.cjs.map +1 -1
- package/dist/development/src/modifications/utils/columnUtils.js +1 -1
- package/dist/development/src/modifications/utils/columnUtils.js.map +1 -1
- package/dist/development/src/modifications/utils/schemaUpdateUtils.cjs +1 -0
- package/dist/development/src/modifications/utils/schemaUpdateUtils.cjs.map +1 -1
- package/dist/development/src/modifications/utils/schemaUpdateUtils.js +1 -0
- package/dist/development/src/modifications/utils/schemaUpdateUtils.js.map +1 -1
- package/dist/production/src/MigrationDescriber.cjs +2 -1
- package/dist/production/src/MigrationDescriber.cjs.map +1 -1
- package/dist/production/src/MigrationDescriber.js +2 -1
- package/dist/production/src/MigrationDescriber.js.map +1 -1
- package/dist/production/src/modifications/columns/CreateColumnModification.cjs +2 -1
- package/dist/production/src/modifications/columns/CreateColumnModification.cjs.map +1 -1
- package/dist/production/src/modifications/columns/CreateColumnModification.js +2 -1
- package/dist/production/src/modifications/columns/CreateColumnModification.js.map +1 -1
- package/dist/production/src/modifications/columns/UpdateColumnDefinitionModification.cjs +8 -3
- package/dist/production/src/modifications/columns/UpdateColumnDefinitionModification.cjs.map +1 -1
- package/dist/production/src/modifications/columns/UpdateColumnDefinitionModification.js +8 -3
- package/dist/production/src/modifications/columns/UpdateColumnDefinitionModification.js.map +1 -1
- package/dist/production/src/modifications/constraints/CreateUniqueConstraintModification.cjs +15 -9
- package/dist/production/src/modifications/constraints/CreateUniqueConstraintModification.cjs.map +1 -1
- package/dist/production/src/modifications/constraints/CreateUniqueConstraintModification.js +15 -9
- package/dist/production/src/modifications/constraints/CreateUniqueConstraintModification.js.map +1 -1
- package/dist/production/src/modifications/constraints/RemoveUniqueConstraintModification.cjs +34 -16
- package/dist/production/src/modifications/constraints/RemoveUniqueConstraintModification.cjs.map +1 -1
- package/dist/production/src/modifications/constraints/RemoveUniqueConstraintModification.js +34 -16
- package/dist/production/src/modifications/constraints/RemoveUniqueConstraintModification.js.map +1 -1
- package/dist/production/src/modifications/entities/CreateEntityModification.cjs +2 -1
- package/dist/production/src/modifications/entities/CreateEntityModification.cjs.map +1 -1
- package/dist/production/src/modifications/entities/CreateEntityModification.js +2 -1
- package/dist/production/src/modifications/entities/CreateEntityModification.js.map +1 -1
- package/dist/production/src/modifications/entities/CreateViewModification.cjs +12 -2
- package/dist/production/src/modifications/entities/CreateViewModification.cjs.map +1 -1
- package/dist/production/src/modifications/entities/CreateViewModification.js +12 -2
- package/dist/production/src/modifications/entities/CreateViewModification.js.map +1 -1
- package/dist/production/src/modifications/entities/RemoveEntityModification.cjs +5 -1
- package/dist/production/src/modifications/entities/RemoveEntityModification.cjs.map +1 -1
- package/dist/production/src/modifications/entities/RemoveEntityModification.js +5 -1
- package/dist/production/src/modifications/entities/RemoveEntityModification.js.map +1 -1
- package/dist/production/src/modifications/indexes/CreateIndexModification.cjs +2 -2
- package/dist/production/src/modifications/indexes/CreateIndexModification.cjs.map +1 -1
- package/dist/production/src/modifications/indexes/CreateIndexModification.js +2 -2
- package/dist/production/src/modifications/indexes/CreateIndexModification.js.map +1 -1
- package/dist/production/src/modifications/indexes/RemoveIndexModification.cjs +3 -3
- package/dist/production/src/modifications/indexes/RemoveIndexModification.cjs.map +1 -1
- package/dist/production/src/modifications/indexes/RemoveIndexModification.js +3 -3
- package/dist/production/src/modifications/indexes/RemoveIndexModification.js.map +1 -1
- package/dist/production/src/modifications/upgrade/RemoveIndexNamesModification.cjs +8 -2
- package/dist/production/src/modifications/upgrade/RemoveIndexNamesModification.cjs.map +1 -1
- package/dist/production/src/modifications/upgrade/RemoveIndexNamesModification.js +8 -2
- package/dist/production/src/modifications/upgrade/RemoveIndexNamesModification.js.map +1 -1
- package/dist/production/src/modifications/utils/columnUtils.cjs +1 -1
- package/dist/production/src/modifications/utils/columnUtils.cjs.map +1 -1
- package/dist/production/src/modifications/utils/columnUtils.js +1 -1
- package/dist/production/src/modifications/utils/columnUtils.js.map +1 -1
- package/dist/production/src/modifications/utils/schemaUpdateUtils.cjs +1 -0
- package/dist/production/src/modifications/utils/schemaUpdateUtils.cjs.map +1 -1
- package/dist/production/src/modifications/utils/schemaUpdateUtils.js +1 -0
- package/dist/production/src/modifications/utils/schemaUpdateUtils.js.map +1 -1
- package/dist/tests/src/tags.d.ts.map +1 -1
- package/dist/tests/tsconfig.tsbuildinfo +1 -1
- package/dist/types/Migration.d.ts.map +1 -1
- package/dist/types/modifications/ModificationHandler.d.ts.map +1 -1
- package/dist/types/modifications/columns/CreateColumnModification.d.ts.map +1 -1
- package/dist/types/modifications/columns/UpdateColumnDefinitionModification.d.ts.map +1 -1
- package/dist/types/modifications/columns/columnUtils.d.ts.map +1 -1
- package/dist/types/modifications/constraints/CreateUniqueConstraintModification.d.ts +2 -2
- package/dist/types/modifications/constraints/CreateUniqueConstraintModification.d.ts.map +1 -1
- package/dist/types/modifications/constraints/RemoveUniqueConstraintModification.d.ts +7 -2
- package/dist/types/modifications/constraints/RemoveUniqueConstraintModification.d.ts.map +1 -1
- package/dist/types/modifications/constraints/utils.d.ts.map +1 -1
- package/dist/types/modifications/entities/CreateEntityModification.d.ts.map +1 -1
- package/dist/types/modifications/entities/CreateViewModification.d.ts +1 -0
- package/dist/types/modifications/entities/CreateViewModification.d.ts.map +1 -1
- package/dist/types/modifications/entities/RemoveEntityModification.d.ts.map +1 -1
- package/dist/types/modifications/enums/enumUtils.d.ts.map +1 -1
- package/dist/types/modifications/indexes/utils.d.ts.map +1 -1
- package/dist/types/modifications/relations/helpers.d.ts.map +1 -1
- package/dist/types/modifications/relations/normalization.d.ts.map +1 -1
- package/dist/types/modifications/upgrade/RemoveIndexNamesModification.d.ts.map +1 -1
- package/dist/types/modifications/utils/columnUtils.d.ts +1 -1
- package/dist/types/modifications/utils/columnUtils.d.ts.map +1 -1
- package/dist/types/modifications/utils/createJunctionTable.d.ts.map +1 -1
- package/dist/types/modifications/utils/diffUtils.d.ts.map +1 -1
- package/dist/types/modifications/utils/getPrimaryColumnType.d.ts.map +1 -1
- package/dist/types/modifications/utils/schemaUpdateUtils.d.ts.map +1 -1
- package/dist/types/modifications/utils/sqlUpdateUtils.d.ts.map +1 -1
- package/dist/types/modifications/utils/stringArrayEquals.d.ts.map +1 -1
- package/dist/types/modifications/utils/valueUtils.d.ts.map +1 -1
- package/dist/types/modifications/utils/viewDependencies.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/dist/types/utils/PartialEntity.d.ts +1 -1
- package/dist/types/utils/PartialEntity.d.ts.map +1 -1
- package/dist/types/utils/dbHelpers.d.ts.map +1 -1
- package/dist/types/utils/isDefined.d.ts.map +1 -1
- package/dist/types/utils/isIt.d.ts.map +1 -1
- package/package.json +7 -7
- package/src/MigrationDescriber.ts +2 -2
- package/src/modifications/columns/CreateColumnModification.ts +1 -0
- package/src/modifications/columns/UpdateColumnDefinitionModification.ts +8 -3
- package/src/modifications/constraints/CreateUniqueConstraintModification.ts +19 -10
- package/src/modifications/constraints/RemoveUniqueConstraintModification.ts +52 -19
- package/src/modifications/entities/CreateEntityModification.ts +1 -0
- package/src/modifications/entities/CreateViewModification.ts +13 -2
- package/src/modifications/entities/RemoveEntityModification.ts +5 -1
- package/src/modifications/indexes/CreateIndexModification.ts +2 -2
- package/src/modifications/indexes/RemoveIndexModification.ts +3 -3
- package/src/modifications/upgrade/RemoveIndexNamesModification.ts +8 -2
- package/src/modifications/utils/columnUtils.ts +6 -3
- package/src/modifications/utils/schemaUpdateUtils.ts +1 -0
- package/src/utils/PartialEntity.ts +1 -1
- package/tests/cases/integration/convertManyHasOneToOneHasOneRelation.test.ts +1 -0
- package/tests/cases/integration/createAndDropIndex.test.ts +1 -0
- package/tests/cases/integration/createColumn.test.ts +27 -0
- package/tests/cases/integration/createEntity.test.ts +69 -0
- package/tests/cases/integration/createUnique.test.ts +91 -1
- package/tests/cases/integration/removeField.test.ts +6 -4
- package/tests/cases/integration/updateColumnDefinition.test.ts +27 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UpdateColumnDefinitionModification.js","sources":["../../../../../../packages/schema-migrations/src/modifications/columns/UpdateColumnDefinitionModification.ts"],"sourcesContent":["import { escapeValue, MigrationBuilder } from '@contember/database-migrations'\nimport { JSONValue, Model, Schema } from '@contember/schema'\nimport { SchemaUpdater, updateEntity, updateField, updateModel } from '../utils/schemaUpdateUtils'\nimport { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'\nimport deepEqual from 'fast-deep-equal'\nimport { updateColumns } from '../utils/diffUtils'\nimport { wrapIdentifier } from '../../utils/dbHelpers'\nimport { getColumnSqlType } from '../utils/columnUtils'\nimport { fillSeed, formatSeedExpression } from './columnUtils'\n\nexport class UpdateColumnDefinitionModificationHandler implements ModificationHandler<UpdateColumnDefinitionModificationData> {\n\tconstructor(private readonly data: UpdateColumnDefinitionModificationData, private readonly schema: Schema) {}\n\n\tpublic createSql(builder: MigrationBuilder): void {\n\t\tconst entity = this.schema.model.entities[this.data.entityName]\n\t\tif (entity.view) {\n\t\t\treturn\n\t\t}\n\t\tconst oldColumn = entity.fields[this.data.fieldName] as Model.AnyColumn\n\t\tconst newColumn = this.data.definition\n\n\t\tconst hasNewSequence = !oldColumn.sequence && newColumn.sequence\n\t\tconst
|
|
1
|
+
{"version":3,"file":"UpdateColumnDefinitionModification.js","sources":["../../../../../../packages/schema-migrations/src/modifications/columns/UpdateColumnDefinitionModification.ts"],"sourcesContent":["import { escapeValue, MigrationBuilder } from '@contember/database-migrations'\nimport { JSONValue, Model, Schema } from '@contember/schema'\nimport { SchemaUpdater, updateEntity, updateField, updateModel } from '../utils/schemaUpdateUtils'\nimport { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'\nimport deepEqual from 'fast-deep-equal'\nimport { updateColumns } from '../utils/diffUtils'\nimport { wrapIdentifier } from '../../utils/dbHelpers'\nimport { getColumnSqlType } from '../utils/columnUtils'\nimport { fillSeed, formatSeedExpression } from './columnUtils'\n\nexport class UpdateColumnDefinitionModificationHandler implements ModificationHandler<UpdateColumnDefinitionModificationData> {\n\tconstructor(private readonly data: UpdateColumnDefinitionModificationData, private readonly schema: Schema) {}\n\n\tpublic createSql(builder: MigrationBuilder): void {\n\t\tconst entity = this.schema.model.entities[this.data.entityName]\n\t\tif (entity.view) {\n\t\t\treturn\n\t\t}\n\t\tconst oldColumn = entity.fields[this.data.fieldName] as Model.AnyColumn\n\t\tconst newColumn = this.data.definition\n\n\t\tconst hasNewSequence = !oldColumn.sequence && newColumn.sequence\n\t\tconst oldColumnType = getColumnSqlType(oldColumn)\n\t\tconst columnType = getColumnSqlType(newColumn)\n\t\tconst hasNewType = columnType !== oldColumnType\n\t\tconst hasNullableChanged = oldColumn.nullable !== newColumn.nullable\n\t\tconst hasNewCollation = newColumn.collation !== oldColumn.collation\n\n\t\tconst columnNameWrapped = wrapIdentifier(oldColumn.columnName)\n\t\tconst isChangedToArray = !oldColumn.list && newColumn.list\n\t\tconst usingCast = (isChangedToArray ? `ARRAY[${columnNameWrapped}]` : columnNameWrapped) + `::${columnType}`\n\n\t\tconst seedExpression = formatSeedExpression({\n\t\t\tmodel: this.schema.model,\n\t\t\tentity,\n\t\t\tcolumnType,\n\t\t\tfillValue: this.data.fillValue,\n\t\t\tcopyValue: this.data.copyValue,\n\t\t})\n\t\tconst hasSeed = seedExpression !== null\n\t\tconst migrateWithUsing = hasSeed && this.data.valueMigrationStrategy === 'using'\n\t\tconst migrateWithUpdate = hasSeed && this.data.valueMigrationStrategy !== 'using'\n\n\t\tbuilder.alterColumn(entity.tableName, oldColumn.columnName, {\n\t\t\tcollation: hasNewCollation ? wrapIdentifier(newColumn.collation || 'default') : undefined,\n\t\t\ttype: hasNewCollation || hasNewSequence || hasNewType || migrateWithUsing ? columnType : undefined,\n\t\t\tnotNull: hasNullableChanged && (!migrateWithUpdate || newColumn.nullable) ? !newColumn.nullable : undefined,\n\t\t\tusing: (() => {\n\t\t\t\tif (hasNewSequence) {\n\t\t\t\t\treturn `COALESCE(${usingCast}, nextval(PG_GET_SERIAL_SEQUENCE(${escapeValue(entity.tableName)}, ${escapeValue(oldColumn.columnName)})))`\n\t\t\t\t}\n\t\t\t\tif (migrateWithUsing) {\n\t\t\t\t\treturn `COALESCE(${usingCast}, ${seedExpression})`\n\t\t\t\t}\n\n\t\t\t\tif (hasNewType) {\n\t\t\t\t\treturn usingCast\n\t\t\t\t}\n\t\t\t\treturn undefined\n\t\t\t})(),\n\t\t\tsequenceGenerated: oldColumn.sequence && !newColumn.sequence ? false : (!oldColumn.sequence ? newColumn.sequence : undefined),\n\t\t})\n\n\t\tif (migrateWithUpdate) {\n\t\t\tfillSeed({\n\t\t\t\tbuilder,\n\t\t\t\ttype: 'updating',\n\t\t\t\tentity,\n\t\t\t\tcolumnName: oldColumn.columnName,\n\t\t\t\tnullable: newColumn.nullable,\n\t\t\t\tseedExpression,\n\t\t\t})\n\t\t}\n\n\t\tconst seqAlter = []\n\t\tif (oldColumn.sequence && newColumn.sequence) {\n\t\t\tif (oldColumn.sequence.precedence !== newColumn.sequence.precedence) {\n\t\t\t\tseqAlter.push(`SET GENERATED ${newColumn.sequence.precedence}`)\n\t\t\t}\n\t\t\tif (oldColumn.sequence.start !== newColumn.sequence.start && typeof newColumn.sequence.start == 'number') {\n\t\t\t\tseqAlter.push(`SET START WITH ${newColumn.sequence.start}`)\n\t\t\t}\n\t\t\tif (newColumn.sequence.restart) {\n\t\t\t\tseqAlter.push('RESTART')\n\t\t\t}\n\t\t}\n\t\tif (seqAlter.length > 0) {\n\t\t\tbuilder.sql(`ALTER TABLE ${wrapIdentifier(entity.tableName)} ALTER ${wrapIdentifier(oldColumn.columnName)} ${seqAlter.join(' ')}`)\n\t\t}\n\t}\n\n\tpublic getSchemaUpdater(): SchemaUpdater {\n\t\treturn updateModel(\n\t\t\tupdateEntity(\n\t\t\t\tthis.data.entityName,\n\t\t\t\tupdateField<Model.AnyColumn>(this.data.fieldName, ({ field }) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...this.data.definition,\n\t\t\t\t\t\tname: field.name,\n\t\t\t\t\t\tcolumnName: field.columnName,\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t),\n\t\t)\n\t}\n\n\tdescribe() {\n\t\tconst current = this.schema.model.entities[this.data.entityName].fields[this.data.fieldName] as Model.AnyColumn\n\t\tconst changingToNotNull = current.nullable && !this.data.definition.nullable\n\t\tconst failureWarning = changingToNotNull ? 'Changing to not-null may fail in runtime.' : undefined\n\n\t\treturn {\n\t\t\tmessage: `Update column definition of field ${this.data.entityName}.${this.data.fieldName}`,\n\t\t\tfailureWarning,\n\t\t}\n\t}\n}\n\ntype SequenceDefinitionAlter =\n\t& Model.AnyColumn['sequence']\n\t& {\n\t\trestart?: boolean\n\t}\n\ntype ColumnDefinitionAlter =\n\t& Omit<Model.AnyColumn, 'sequence' | 'columnName' | 'name'>\n\t& {\n\t\tsequence?: SequenceDefinitionAlter\n\t}\n\nexport interface UpdateColumnDefinitionModificationData {\n\tentityName: string\n\tfieldName: string\n\tdefinition: ColumnDefinitionAlter\n\tfillValue?: JSONValue\n\tcopyValue?: string\n\tvalueMigrationStrategy?: 'using' | 'update'\n}\n\nexport const updateColumnDefinitionModification = createModificationType({\n\tid: 'updateColumnDefinition',\n\thandler: UpdateColumnDefinitionModificationHandler,\n})\n\nexport class UpdateColumnDefinitionDiffer implements Differ<UpdateColumnDefinitionModificationData> {\n\tcreateDiff(originalSchema: Schema, updatedSchema: Schema) {\n\t\treturn updateColumns(originalSchema, updatedSchema, ({ originalColumn, updatedColumn, updatedEntity }) => {\n\t\t\tconst {\n\t\t\t\tname: {},\n\t\t\t\tcolumnName: {},\n\t\t\t\t...updatedDefinition\n\t\t\t} = updatedColumn\n\t\t\tconst {\n\t\t\t\tname: {},\n\t\t\t\tcolumnName: {},\n\t\t\t\t...originalDefinition\n\t\t\t} = originalColumn\n\t\t\tif (deepEqual(updatedDefinition, originalDefinition)) {\n\t\t\t\treturn undefined\n\t\t\t}\n\n\t\t\treturn updateColumnDefinitionModification.createModification({\n\t\t\t\tentityName: updatedEntity.name,\n\t\t\t\tfieldName: updatedColumn.name,\n\t\t\t\tdefinition: updatedDefinition,\n\t\t\t})\n\t\t})\n\t}\n}\n"],"names":[],"mappings":"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"}
|
package/dist/production/src/modifications/constraints/CreateUniqueConstraintModification.cjs
CHANGED
|
@@ -10,9 +10,10 @@ class CreateUniqueConstraintModificationHandler {
|
|
|
10
10
|
this.data = data;
|
|
11
11
|
this.schema = schema;
|
|
12
12
|
}
|
|
13
|
-
createSql(builder, {
|
|
13
|
+
createSql(builder, { invalidateDatabaseMetadata }) {
|
|
14
14
|
const entity = this.schema.model.entities[this.data.entityName];
|
|
15
|
-
|
|
15
|
+
const shouldExecuteSql = !entity.view || this.data.unique.index && entity.view.materialized;
|
|
16
|
+
if (!shouldExecuteSql) {
|
|
16
17
|
return;
|
|
17
18
|
}
|
|
18
19
|
const fields = this.data.unique.fields;
|
|
@@ -23,13 +24,18 @@ class CreateUniqueConstraintModificationHandler {
|
|
|
23
24
|
});
|
|
24
25
|
const tableNameId = dbHelpers.wrapIdentifier(entity.tableName);
|
|
25
26
|
const columnNameIds = columns.map(dbHelpers.wrapIdentifier);
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
} else
|
|
30
|
-
checkModifier = "
|
|
27
|
+
if ("index" in this.data.unique && this.data.unique.index) {
|
|
28
|
+
const nulls = this.data.unique.nulls === "not distinct" ? " NULLS NOT DISTINCT" : "";
|
|
29
|
+
builder.sql(`CREATE UNIQUE INDEX ON ${tableNameId} (${columnNameIds.join(", ")})${nulls}`);
|
|
30
|
+
} else {
|
|
31
|
+
let checkModifier = "";
|
|
32
|
+
if (this.data.unique.timing === "deferred") {
|
|
33
|
+
checkModifier = " INITIALLY DEFERRED";
|
|
34
|
+
} else if (this.data.unique.timing === "deferrable") {
|
|
35
|
+
checkModifier = " DEFERRABLE";
|
|
36
|
+
}
|
|
37
|
+
builder.sql(`ALTER TABLE ${tableNameId} ADD UNIQUE (${columnNameIds.join(", ")})${checkModifier}`);
|
|
31
38
|
}
|
|
32
|
-
builder.sql(`ALTER TABLE ${tableNameId} ADD UNIQUE (${columnNameIds.join(", ")})${checkModifier}`);
|
|
33
39
|
invalidateDatabaseMetadata();
|
|
34
40
|
}
|
|
35
41
|
getSchemaUpdater() {
|
|
@@ -45,7 +51,7 @@ class CreateUniqueConstraintModificationHandler {
|
|
|
45
51
|
}
|
|
46
52
|
describe({ createdEntities }) {
|
|
47
53
|
return {
|
|
48
|
-
message: `Create unique constraint (${this.data.unique.fields.join(", ")}) on entity ${this.data.entityName}`,
|
|
54
|
+
message: `Create unique ${this.data.unique.index ? "index" : "constraint"} (${this.data.unique.fields.join(", ")}) on entity ${this.data.entityName}`,
|
|
49
55
|
failureWarning: !createdEntities.includes(this.data.entityName) ? "Make sure no conflicting rows exists, otherwise this may fail in runtime." : void 0
|
|
50
56
|
};
|
|
51
57
|
}
|
package/dist/production/src/modifications/constraints/CreateUniqueConstraintModification.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreateUniqueConstraintModification.cjs","sources":["../../../../../../packages/schema-migrations/src/modifications/constraints/CreateUniqueConstraintModification.ts"],"sourcesContent":["import { MigrationBuilder } from '@contember/database-migrations'\nimport { Model, Schema } from '@contember/schema'\nimport { SchemaUpdater, updateEntity, updateModel } from '../utils/schemaUpdateUtils'\nimport {\n\tcreateModificationType,\n\tDiffer,\n\tModificationHandler,\n\tModificationHandlerCreateSqlOptions,\n} from '../ModificationHandler'\nimport { wrapIdentifier } from '../../utils/dbHelpers'\nimport { getUniqueConstraintColumns } from './utils'\nimport deepEqual from 'fast-deep-equal'\n\nexport class CreateUniqueConstraintModificationHandler implements ModificationHandler<CreateUniqueConstraintModificationData> {\n\tconstructor(private readonly data: CreateUniqueConstraintModificationData, private readonly schema: Schema) {\n\t}\n\n\tpublic createSql(builder: MigrationBuilder, {
|
|
1
|
+
{"version":3,"file":"CreateUniqueConstraintModification.cjs","sources":["../../../../../../packages/schema-migrations/src/modifications/constraints/CreateUniqueConstraintModification.ts"],"sourcesContent":["import { MigrationBuilder } from '@contember/database-migrations'\nimport { Model, Schema } from '@contember/schema'\nimport { SchemaUpdater, updateEntity, updateModel } from '../utils/schemaUpdateUtils'\nimport {\n\tcreateModificationType,\n\tDiffer,\n\tModificationHandler,\n\tModificationHandlerCreateSqlOptions,\n} from '../ModificationHandler'\nimport { wrapIdentifier } from '../../utils/dbHelpers'\nimport { getUniqueConstraintColumns } from './utils'\nimport deepEqual from 'fast-deep-equal'\n\nexport class CreateUniqueConstraintModificationHandler implements ModificationHandler<CreateUniqueConstraintModificationData> {\n\tconstructor(private readonly data: CreateUniqueConstraintModificationData, private readonly schema: Schema) {\n\t}\n\n\tpublic createSql(builder: MigrationBuilder, { invalidateDatabaseMetadata }: ModificationHandlerCreateSqlOptions): void {\n\t\tconst entity = this.schema.model.entities[this.data.entityName]\n\t\tconst shouldExecuteSql =\n\t\t\t!entity.view\n\t\t\t|| (this.data.unique.index && entity.view.materialized)\n\t\tif (!shouldExecuteSql) {\n\t\t\treturn\n\t\t}\n\t\tconst fields = this.data.unique.fields\n\t\tconst columns = getUniqueConstraintColumns({\n\t\t\tentity,\n\t\t\tmodel: this.schema.model,\n\t\t\tfields,\n\t\t})\n\n\t\tconst tableNameId = wrapIdentifier(entity.tableName)\n\t\tconst columnNameIds = columns.map(wrapIdentifier)\n\n\t\tif ('index' in this.data.unique && this.data.unique.index) {\n\t\t\tconst nulls = this.data.unique.nulls === 'not distinct' ? ' NULLS NOT DISTINCT' : ''\n\t\t\tbuilder.sql(`CREATE UNIQUE INDEX ON ${tableNameId} (${columnNameIds.join(', ')})${nulls}`)\n\t\t} else {\n\t\t\tlet checkModifier = ''\n\t\t\tif (this.data.unique.timing === 'deferred') {\n\t\t\t\tcheckModifier = ' INITIALLY DEFERRED'\n\t\t\t} else if (this.data.unique.timing === 'deferrable') {\n\t\t\t\tcheckModifier = ' DEFERRABLE'\n\t\t\t}\n\n\t\t\tbuilder.sql(`ALTER TABLE ${tableNameId} ADD UNIQUE (${columnNameIds.join(', ')})${checkModifier}`)\n\t\t}\n\n\n\t\tinvalidateDatabaseMetadata()\n\t}\n\n\tpublic getSchemaUpdater(): SchemaUpdater {\n\t\treturn updateModel(\n\t\t\tupdateEntity(this.data.entityName, ({ entity }) => ({\n\t\t\t\t...entity,\n\t\t\t\tunique: [\n\t\t\t\t\t...entity.unique,\n\t\t\t\t\tthis.data.unique,\n\t\t\t\t],\n\t\t\t})),\n\t\t)\n\t}\n\n\tdescribe({ createdEntities }: { createdEntities: string[] }) {\n\t\treturn {\n\t\t\tmessage: `Create unique ${this.data.unique.index ? 'index' : 'constraint'} (${this.data.unique.fields.join(', ')}) on entity ${this.data.entityName}`,\n\t\t\tfailureWarning: !createdEntities.includes(this.data.entityName)\n\t\t\t\t? 'Make sure no conflicting rows exists, otherwise this may fail in runtime.'\n\t\t\t\t: undefined,\n\t\t}\n\t}\n\n}\n\nexport const createUniqueConstraintModification = createModificationType({\n\tid: 'createUniqueConstraint',\n\thandler: CreateUniqueConstraintModificationHandler,\n})\n\nexport interface CreateUniqueConstraintModificationData {\n\tentityName: string\n\tunique: Model.UniqueConstraint | Model.UniqueIndex\n}\n\nexport class CreateUniqueConstraintDiffer implements Differ {\n\tcreateDiff(originalSchema: Schema, updatedSchema: Schema) {\n\t\treturn Object.values(updatedSchema.model.entities).flatMap(entity =>\n\t\t\tentity.unique\n\t\t\t\t.filter(it => !originalSchema.model.entities[entity.name].unique.find(uniq => deepEqual(uniq.fields, it.fields)))\n\t\t\t\t.map(unique => createUniqueConstraintModification.createModification({\n\t\t\t\t\tentityName: entity.name,\n\t\t\t\t\tunique,\n\t\t\t\t})),\n\t\t)\n\t}\n}\n"],"names":["getUniqueConstraintColumns","wrapIdentifier","updateModel","updateEntity","createModificationType"],"mappings":";;;;;;;AAaO,MAAM,0CAAiH;AAAA,EAC7H,YAA6B,MAA+D,QAAgB;AAA/E,SAAA,OAAA;AAA+D,SAAA,SAAA;AAAA,EAAA;AAAA,EAGrF,UAAU,SAA2B,EAAE,8BAAyE;AACtH,UAAM,SAAS,KAAK,OAAO,MAAM,SAAS,KAAK,KAAK,UAAU;AACxD,UAAA,mBACL,CAAC,OAAO,QACJ,KAAK,KAAK,OAAO,SAAS,OAAO,KAAK;AAC3C,QAAI,CAAC,kBAAkB;AACtB;AAAA,IAAA;AAEK,UAAA,SAAS,KAAK,KAAK,OAAO;AAChC,UAAM,UAAUA,MAAAA,2BAA2B;AAAA,MAC1C;AAAA,MACA,OAAO,KAAK,OAAO;AAAA,MACnB;AAAA,IAAA,CACA;AAEK,UAAA,cAAcC,UAAAA,eAAe,OAAO,SAAS;AAC7C,UAAA,gBAAgB,QAAQ,IAAIA,wBAAc;AAEhD,QAAI,WAAW,KAAK,KAAK,UAAU,KAAK,KAAK,OAAO,OAAO;AAC1D,YAAM,QAAQ,KAAK,KAAK,OAAO,UAAU,iBAAiB,wBAAwB;AAC1E,cAAA,IAAI,0BAA0B,WAAW,KAAK,cAAc,KAAK,IAAI,CAAC,IAAI,KAAK,EAAE;AAAA,IAAA,OACnF;AACN,UAAI,gBAAgB;AACpB,UAAI,KAAK,KAAK,OAAO,WAAW,YAAY;AAC3B,wBAAA;AAAA,MACN,WAAA,KAAK,KAAK,OAAO,WAAW,cAAc;AACpC,wBAAA;AAAA,MAAA;AAGT,cAAA,IAAI,eAAe,WAAW,gBAAgB,cAAc,KAAK,IAAI,CAAC,IAAI,aAAa,EAAE;AAAA,IAAA;AAIvE,+BAAA;AAAA,EAAA;AAAA,EAGrB,mBAAkC;AACjC,WAAAC,kBAAA;AAAA,MACNC,+BAAa,KAAK,KAAK,YAAY,CAAC,EAAE,cAAc;AAAA,QACnD,GAAG;AAAA,QACH,QAAQ;AAAA,UACP,GAAG,OAAO;AAAA,UACV,KAAK,KAAK;AAAA,QAAA;AAAA,MACX,EACC;AAAA,IACH;AAAA,EAAA;AAAA,EAGD,SAAS,EAAE,mBAAkD;AACrD,WAAA;AAAA,MACN,SAAS,iBAAiB,KAAK,KAAK,OAAO,QAAQ,UAAU,YAAY,KAAK,KAAK,KAAK,OAAO,OAAO,KAAK,IAAI,CAAC,eAAe,KAAK,KAAK,UAAU;AAAA,MACnJ,gBAAgB,CAAC,gBAAgB,SAAS,KAAK,KAAK,UAAU,IAC3D,8EACA;AAAA,IACJ;AAAA,EAAA;AAGF;AAEO,MAAM,qCAAqCC,oBAAAA,uBAAuB;AAAA,EACxE,IAAI;AAAA,EACJ,SAAS;AACV,CAAC;AAOM,MAAM,6BAA+C;AAAA,EAC3D,WAAW,gBAAwB,eAAuB;AACzD,WAAO,OAAO,OAAO,cAAc,MAAM,QAAQ,EAAE;AAAA,MAAQ,CAAA,WAC1D,OAAO,OACL,OAAO,CAAA,OAAM,CAAC,eAAe,MAAM,SAAS,OAAO,IAAI,EAAE,OAAO,KAAK,CAAQ,SAAA,UAAU,KAAK,QAAQ,GAAG,MAAM,CAAC,CAAC,EAC/G,IAAI,CAAU,WAAA,mCAAmC,mBAAmB;AAAA,QACpE,YAAY,OAAO;AAAA,QACnB;AAAA,MAAA,CACA,CAAC;AAAA,IACJ;AAAA,EAAA;AAEF;;;;"}
|
|
@@ -8,9 +8,10 @@ class CreateUniqueConstraintModificationHandler {
|
|
|
8
8
|
this.data = data;
|
|
9
9
|
this.schema = schema;
|
|
10
10
|
}
|
|
11
|
-
createSql(builder, {
|
|
11
|
+
createSql(builder, { invalidateDatabaseMetadata }) {
|
|
12
12
|
const entity = this.schema.model.entities[this.data.entityName];
|
|
13
|
-
|
|
13
|
+
const shouldExecuteSql = !entity.view || this.data.unique.index && entity.view.materialized;
|
|
14
|
+
if (!shouldExecuteSql) {
|
|
14
15
|
return;
|
|
15
16
|
}
|
|
16
17
|
const fields = this.data.unique.fields;
|
|
@@ -21,13 +22,18 @@ class CreateUniqueConstraintModificationHandler {
|
|
|
21
22
|
});
|
|
22
23
|
const tableNameId = wrapIdentifier(entity.tableName);
|
|
23
24
|
const columnNameIds = columns.map(wrapIdentifier);
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
} else
|
|
28
|
-
checkModifier = "
|
|
25
|
+
if ("index" in this.data.unique && this.data.unique.index) {
|
|
26
|
+
const nulls = this.data.unique.nulls === "not distinct" ? " NULLS NOT DISTINCT" : "";
|
|
27
|
+
builder.sql(`CREATE UNIQUE INDEX ON ${tableNameId} (${columnNameIds.join(", ")})${nulls}`);
|
|
28
|
+
} else {
|
|
29
|
+
let checkModifier = "";
|
|
30
|
+
if (this.data.unique.timing === "deferred") {
|
|
31
|
+
checkModifier = " INITIALLY DEFERRED";
|
|
32
|
+
} else if (this.data.unique.timing === "deferrable") {
|
|
33
|
+
checkModifier = " DEFERRABLE";
|
|
34
|
+
}
|
|
35
|
+
builder.sql(`ALTER TABLE ${tableNameId} ADD UNIQUE (${columnNameIds.join(", ")})${checkModifier}`);
|
|
29
36
|
}
|
|
30
|
-
builder.sql(`ALTER TABLE ${tableNameId} ADD UNIQUE (${columnNameIds.join(", ")})${checkModifier}`);
|
|
31
37
|
invalidateDatabaseMetadata();
|
|
32
38
|
}
|
|
33
39
|
getSchemaUpdater() {
|
|
@@ -43,7 +49,7 @@ class CreateUniqueConstraintModificationHandler {
|
|
|
43
49
|
}
|
|
44
50
|
describe({ createdEntities }) {
|
|
45
51
|
return {
|
|
46
|
-
message: `Create unique constraint (${this.data.unique.fields.join(", ")}) on entity ${this.data.entityName}`,
|
|
52
|
+
message: `Create unique ${this.data.unique.index ? "index" : "constraint"} (${this.data.unique.fields.join(", ")}) on entity ${this.data.entityName}`,
|
|
47
53
|
failureWarning: !createdEntities.includes(this.data.entityName) ? "Make sure no conflicting rows exists, otherwise this may fail in runtime." : void 0
|
|
48
54
|
};
|
|
49
55
|
}
|
package/dist/production/src/modifications/constraints/CreateUniqueConstraintModification.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreateUniqueConstraintModification.js","sources":["../../../../../../packages/schema-migrations/src/modifications/constraints/CreateUniqueConstraintModification.ts"],"sourcesContent":["import { MigrationBuilder } from '@contember/database-migrations'\nimport { Model, Schema } from '@contember/schema'\nimport { SchemaUpdater, updateEntity, updateModel } from '../utils/schemaUpdateUtils'\nimport {\n\tcreateModificationType,\n\tDiffer,\n\tModificationHandler,\n\tModificationHandlerCreateSqlOptions,\n} from '../ModificationHandler'\nimport { wrapIdentifier } from '../../utils/dbHelpers'\nimport { getUniqueConstraintColumns } from './utils'\nimport deepEqual from 'fast-deep-equal'\n\nexport class CreateUniqueConstraintModificationHandler implements ModificationHandler<CreateUniqueConstraintModificationData> {\n\tconstructor(private readonly data: CreateUniqueConstraintModificationData, private readonly schema: Schema) {\n\t}\n\n\tpublic createSql(builder: MigrationBuilder, {
|
|
1
|
+
{"version":3,"file":"CreateUniqueConstraintModification.js","sources":["../../../../../../packages/schema-migrations/src/modifications/constraints/CreateUniqueConstraintModification.ts"],"sourcesContent":["import { MigrationBuilder } from '@contember/database-migrations'\nimport { Model, Schema } from '@contember/schema'\nimport { SchemaUpdater, updateEntity, updateModel } from '../utils/schemaUpdateUtils'\nimport {\n\tcreateModificationType,\n\tDiffer,\n\tModificationHandler,\n\tModificationHandlerCreateSqlOptions,\n} from '../ModificationHandler'\nimport { wrapIdentifier } from '../../utils/dbHelpers'\nimport { getUniqueConstraintColumns } from './utils'\nimport deepEqual from 'fast-deep-equal'\n\nexport class CreateUniqueConstraintModificationHandler implements ModificationHandler<CreateUniqueConstraintModificationData> {\n\tconstructor(private readonly data: CreateUniqueConstraintModificationData, private readonly schema: Schema) {\n\t}\n\n\tpublic createSql(builder: MigrationBuilder, { invalidateDatabaseMetadata }: ModificationHandlerCreateSqlOptions): void {\n\t\tconst entity = this.schema.model.entities[this.data.entityName]\n\t\tconst shouldExecuteSql =\n\t\t\t!entity.view\n\t\t\t|| (this.data.unique.index && entity.view.materialized)\n\t\tif (!shouldExecuteSql) {\n\t\t\treturn\n\t\t}\n\t\tconst fields = this.data.unique.fields\n\t\tconst columns = getUniqueConstraintColumns({\n\t\t\tentity,\n\t\t\tmodel: this.schema.model,\n\t\t\tfields,\n\t\t})\n\n\t\tconst tableNameId = wrapIdentifier(entity.tableName)\n\t\tconst columnNameIds = columns.map(wrapIdentifier)\n\n\t\tif ('index' in this.data.unique && this.data.unique.index) {\n\t\t\tconst nulls = this.data.unique.nulls === 'not distinct' ? ' NULLS NOT DISTINCT' : ''\n\t\t\tbuilder.sql(`CREATE UNIQUE INDEX ON ${tableNameId} (${columnNameIds.join(', ')})${nulls}`)\n\t\t} else {\n\t\t\tlet checkModifier = ''\n\t\t\tif (this.data.unique.timing === 'deferred') {\n\t\t\t\tcheckModifier = ' INITIALLY DEFERRED'\n\t\t\t} else if (this.data.unique.timing === 'deferrable') {\n\t\t\t\tcheckModifier = ' DEFERRABLE'\n\t\t\t}\n\n\t\t\tbuilder.sql(`ALTER TABLE ${tableNameId} ADD UNIQUE (${columnNameIds.join(', ')})${checkModifier}`)\n\t\t}\n\n\n\t\tinvalidateDatabaseMetadata()\n\t}\n\n\tpublic getSchemaUpdater(): SchemaUpdater {\n\t\treturn updateModel(\n\t\t\tupdateEntity(this.data.entityName, ({ entity }) => ({\n\t\t\t\t...entity,\n\t\t\t\tunique: [\n\t\t\t\t\t...entity.unique,\n\t\t\t\t\tthis.data.unique,\n\t\t\t\t],\n\t\t\t})),\n\t\t)\n\t}\n\n\tdescribe({ createdEntities }: { createdEntities: string[] }) {\n\t\treturn {\n\t\t\tmessage: `Create unique ${this.data.unique.index ? 'index' : 'constraint'} (${this.data.unique.fields.join(', ')}) on entity ${this.data.entityName}`,\n\t\t\tfailureWarning: !createdEntities.includes(this.data.entityName)\n\t\t\t\t? 'Make sure no conflicting rows exists, otherwise this may fail in runtime.'\n\t\t\t\t: undefined,\n\t\t}\n\t}\n\n}\n\nexport const createUniqueConstraintModification = createModificationType({\n\tid: 'createUniqueConstraint',\n\thandler: CreateUniqueConstraintModificationHandler,\n})\n\nexport interface CreateUniqueConstraintModificationData {\n\tentityName: string\n\tunique: Model.UniqueConstraint | Model.UniqueIndex\n}\n\nexport class CreateUniqueConstraintDiffer implements Differ {\n\tcreateDiff(originalSchema: Schema, updatedSchema: Schema) {\n\t\treturn Object.values(updatedSchema.model.entities).flatMap(entity =>\n\t\t\tentity.unique\n\t\t\t\t.filter(it => !originalSchema.model.entities[entity.name].unique.find(uniq => deepEqual(uniq.fields, it.fields)))\n\t\t\t\t.map(unique => createUniqueConstraintModification.createModification({\n\t\t\t\t\tentityName: entity.name,\n\t\t\t\t\tunique,\n\t\t\t\t})),\n\t\t)\n\t}\n}\n"],"names":[],"mappings":";;;;;AAaO,MAAM,0CAAiH;AAAA,EAC7H,YAA6B,MAA+D,QAAgB;AAA/E,SAAA,OAAA;AAA+D,SAAA,SAAA;AAAA,EAAA;AAAA,EAGrF,UAAU,SAA2B,EAAE,8BAAyE;AACtH,UAAM,SAAS,KAAK,OAAO,MAAM,SAAS,KAAK,KAAK,UAAU;AACxD,UAAA,mBACL,CAAC,OAAO,QACJ,KAAK,KAAK,OAAO,SAAS,OAAO,KAAK;AAC3C,QAAI,CAAC,kBAAkB;AACtB;AAAA,IAAA;AAEK,UAAA,SAAS,KAAK,KAAK,OAAO;AAChC,UAAM,UAAU,2BAA2B;AAAA,MAC1C;AAAA,MACA,OAAO,KAAK,OAAO;AAAA,MACnB;AAAA,IAAA,CACA;AAEK,UAAA,cAAc,eAAe,OAAO,SAAS;AAC7C,UAAA,gBAAgB,QAAQ,IAAI,cAAc;AAEhD,QAAI,WAAW,KAAK,KAAK,UAAU,KAAK,KAAK,OAAO,OAAO;AAC1D,YAAM,QAAQ,KAAK,KAAK,OAAO,UAAU,iBAAiB,wBAAwB;AAC1E,cAAA,IAAI,0BAA0B,WAAW,KAAK,cAAc,KAAK,IAAI,CAAC,IAAI,KAAK,EAAE;AAAA,IAAA,OACnF;AACN,UAAI,gBAAgB;AACpB,UAAI,KAAK,KAAK,OAAO,WAAW,YAAY;AAC3B,wBAAA;AAAA,MACN,WAAA,KAAK,KAAK,OAAO,WAAW,cAAc;AACpC,wBAAA;AAAA,MAAA;AAGT,cAAA,IAAI,eAAe,WAAW,gBAAgB,cAAc,KAAK,IAAI,CAAC,IAAI,aAAa,EAAE;AAAA,IAAA;AAIvE,+BAAA;AAAA,EAAA;AAAA,EAGrB,mBAAkC;AACjC,WAAA;AAAA,MACN,aAAa,KAAK,KAAK,YAAY,CAAC,EAAE,cAAc;AAAA,QACnD,GAAG;AAAA,QACH,QAAQ;AAAA,UACP,GAAG,OAAO;AAAA,UACV,KAAK,KAAK;AAAA,QAAA;AAAA,MACX,EACC;AAAA,IACH;AAAA,EAAA;AAAA,EAGD,SAAS,EAAE,mBAAkD;AACrD,WAAA;AAAA,MACN,SAAS,iBAAiB,KAAK,KAAK,OAAO,QAAQ,UAAU,YAAY,KAAK,KAAK,KAAK,OAAO,OAAO,KAAK,IAAI,CAAC,eAAe,KAAK,KAAK,UAAU;AAAA,MACnJ,gBAAgB,CAAC,gBAAgB,SAAS,KAAK,KAAK,UAAU,IAC3D,8EACA;AAAA,IACJ;AAAA,EAAA;AAGF;AAEO,MAAM,qCAAqC,uBAAuB;AAAA,EACxE,IAAI;AAAA,EACJ,SAAS;AACV,CAAC;AAOM,MAAM,6BAA+C;AAAA,EAC3D,WAAW,gBAAwB,eAAuB;AACzD,WAAO,OAAO,OAAO,cAAc,MAAM,QAAQ,EAAE;AAAA,MAAQ,CAAA,WAC1D,OAAO,OACL,OAAO,CAAA,OAAM,CAAC,eAAe,MAAM,SAAS,OAAO,IAAI,EAAE,OAAO,KAAK,CAAQ,SAAA,UAAU,KAAK,QAAQ,GAAG,MAAM,CAAC,CAAC,EAC/G,IAAI,CAAU,WAAA,mCAAmC,mBAAmB;AAAA,QACpE,YAAY,OAAO;AAAA,QACnB;AAAA,MAAA,CACA,CAAC;AAAA,IACJ;AAAA,EAAA;AAEF;"}
|
package/dist/production/src/modifications/constraints/RemoveUniqueConstraintModification.cjs
CHANGED
|
@@ -12,26 +12,41 @@ class RemoveUniqueConstraintModificationHandler {
|
|
|
12
12
|
}
|
|
13
13
|
createSql(builder, { databaseMetadata, invalidateDatabaseMetadata }) {
|
|
14
14
|
const entity = this.schema.model.entities[this.data.entityName];
|
|
15
|
-
|
|
15
|
+
const unique = this.getUnique();
|
|
16
|
+
const shouldExecuteSql = !entity.view || unique.index && entity.view.materialized;
|
|
17
|
+
if (!shouldExecuteSql) {
|
|
16
18
|
return;
|
|
17
19
|
}
|
|
18
|
-
const fields = this.getFields();
|
|
19
20
|
const columns = utils.getUniqueConstraintColumns({
|
|
20
21
|
entity,
|
|
21
|
-
fields,
|
|
22
|
+
fields: unique.fields,
|
|
22
23
|
model: this.schema.model
|
|
23
24
|
});
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
if (unique.index) {
|
|
26
|
+
const indexNames = databaseMetadata.indexes.filter({
|
|
27
|
+
tableName: entity.tableName,
|
|
28
|
+
columnNames: columns,
|
|
29
|
+
unique: true
|
|
30
|
+
}).getNames();
|
|
31
|
+
for (const name of indexNames) {
|
|
32
|
+
builder.sql(`DROP INDEX ${dbHelpers.wrapIdentifier(name)}`);
|
|
33
|
+
}
|
|
34
|
+
} else {
|
|
35
|
+
const constraintNames = databaseMetadata.uniqueConstraints.filter({
|
|
36
|
+
tableName: entity.tableName,
|
|
37
|
+
columnNames: columns
|
|
38
|
+
}).getNames();
|
|
39
|
+
for (const name of constraintNames) {
|
|
40
|
+
builder.sql(`ALTER TABLE ${dbHelpers.wrapIdentifier(entity.tableName)} DROP CONSTRAINT ${dbHelpers.wrapIdentifier(name)}`);
|
|
41
|
+
}
|
|
27
42
|
}
|
|
28
43
|
invalidateDatabaseMetadata();
|
|
29
44
|
}
|
|
30
45
|
getSchemaUpdater() {
|
|
31
|
-
const
|
|
46
|
+
const thisUnique = this.getUnique();
|
|
32
47
|
return schemaUpdateUtils.updateModel(
|
|
33
48
|
schemaUpdateUtils.updateEntity(this.data.entityName, ({ entity }) => {
|
|
34
|
-
const unique = entity.unique.filter((it) => !deepEqual(it
|
|
49
|
+
const unique = entity.unique.filter((it) => !deepEqual(it, thisUnique));
|
|
35
50
|
return {
|
|
36
51
|
...entity,
|
|
37
52
|
unique
|
|
@@ -40,16 +55,19 @@ class RemoveUniqueConstraintModificationHandler {
|
|
|
40
55
|
);
|
|
41
56
|
}
|
|
42
57
|
describe() {
|
|
43
|
-
const
|
|
44
|
-
return { message: `Remove unique constraint (${fields.join(", ")}) on entity ${this.data.entityName}` };
|
|
58
|
+
const unique = this.getUnique();
|
|
59
|
+
return { message: `Remove unique ${unique.index ? "index" : "constraint"} (${unique.fields.join(", ")}) on entity ${this.data.entityName}` };
|
|
45
60
|
}
|
|
46
|
-
|
|
61
|
+
getUnique() {
|
|
62
|
+
if ("unique" in this.data) {
|
|
63
|
+
return this.data.unique;
|
|
64
|
+
}
|
|
47
65
|
const entity = this.schema.model.entities[this.data.entityName];
|
|
48
|
-
const
|
|
49
|
-
if (!
|
|
66
|
+
const unique = "constraintName" in this.data ? entity.unique.find((it) => "name" in it && it.name === this.data.constraintName) : entity.unique.find((it) => deepEqual(it.fields, this.data.fields));
|
|
67
|
+
if (!unique) {
|
|
50
68
|
throw new Error();
|
|
51
69
|
}
|
|
52
|
-
return
|
|
70
|
+
return unique;
|
|
53
71
|
}
|
|
54
72
|
}
|
|
55
73
|
const removeUniqueConstraintModification = ModificationHandler.createModificationType({
|
|
@@ -64,11 +82,11 @@ class RemoveUniqueConstraintDiffer {
|
|
|
64
82
|
if (!updatedEntity) {
|
|
65
83
|
return false;
|
|
66
84
|
}
|
|
67
|
-
return !updatedEntity.unique.find((uniq) => deepEqual(uniq
|
|
85
|
+
return !updatedEntity.unique.find((uniq) => deepEqual(uniq, it));
|
|
68
86
|
}).map(
|
|
69
87
|
(unique) => removeUniqueConstraintModification.createModification({
|
|
70
88
|
entityName: entity.name,
|
|
71
|
-
|
|
89
|
+
unique
|
|
72
90
|
})
|
|
73
91
|
)
|
|
74
92
|
);
|
package/dist/production/src/modifications/constraints/RemoveUniqueConstraintModification.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RemoveUniqueConstraintModification.cjs","sources":["../../../../../../packages/schema-migrations/src/modifications/constraints/RemoveUniqueConstraintModification.ts"],"sourcesContent":["import { MigrationBuilder } from '@contember/database-migrations'\nimport { Schema } from '@contember/schema'\nimport { SchemaUpdater, updateEntity, updateModel } from '../utils/schemaUpdateUtils'\nimport {\n\tcreateModificationType,\n\tDiffer,\n\tModificationHandler,\n\tModificationHandlerCreateSqlOptions,\n} from '../ModificationHandler'\nimport deepEqual from 'fast-deep-equal'\nimport { getUniqueConstraintColumns } from './utils'\nimport { wrapIdentifier } from '../../utils/dbHelpers'\n\nexport class RemoveUniqueConstraintModificationHandler implements ModificationHandler<RemoveUniqueConstraintModificationData> {\n\tconstructor(private readonly data: RemoveUniqueConstraintModificationData, private readonly schema: Schema) {\n\t}\n\n\tpublic createSql(builder: MigrationBuilder, { databaseMetadata, invalidateDatabaseMetadata }: ModificationHandlerCreateSqlOptions): void {\n\t\tconst entity = this.schema.model.entities[this.data.entityName]\n\t\
|
|
1
|
+
{"version":3,"file":"RemoveUniqueConstraintModification.cjs","sources":["../../../../../../packages/schema-migrations/src/modifications/constraints/RemoveUniqueConstraintModification.ts"],"sourcesContent":["import { MigrationBuilder } from '@contember/database-migrations'\nimport { Model, Schema } from '@contember/schema'\nimport { SchemaUpdater, updateEntity, updateModel } from '../utils/schemaUpdateUtils'\nimport {\n\tcreateModificationType,\n\tDiffer,\n\tModificationHandler,\n\tModificationHandlerCreateSqlOptions,\n} from '../ModificationHandler'\nimport deepEqual from 'fast-deep-equal'\nimport { getUniqueConstraintColumns } from './utils'\nimport { wrapIdentifier } from '../../utils/dbHelpers'\n\nexport class RemoveUniqueConstraintModificationHandler implements ModificationHandler<RemoveUniqueConstraintModificationData> {\n\tconstructor(private readonly data: RemoveUniqueConstraintModificationData, private readonly schema: Schema) {\n\t}\n\n\tpublic createSql(builder: MigrationBuilder, { databaseMetadata, invalidateDatabaseMetadata }: ModificationHandlerCreateSqlOptions): void {\n\t\tconst entity = this.schema.model.entities[this.data.entityName]\n\t\tconst unique = this.getUnique()\n\n\t\tconst shouldExecuteSql =\n\t\t\t!entity.view\n\t\t\t|| (unique.index && entity.view.materialized)\n\n\t\tif (!shouldExecuteSql) {\n\t\t\treturn\n\t\t}\n\n\n\t\tconst columns = getUniqueConstraintColumns({\n\t\t\tentity,\n\t\t\tfields: unique.fields,\n\t\t\tmodel: this.schema.model,\n\t\t})\n\n\t\tif (unique.index) {\n\t\t\tconst indexNames = databaseMetadata.indexes.filter({\n\t\t\t\ttableName: entity.tableName,\n\t\t\t\tcolumnNames: columns,\n\t\t\t\tunique: true,\n\t\t\t}).getNames()\n\n\t\t\tfor (const name of indexNames) {\n\t\t\t\tbuilder.sql(`DROP INDEX ${wrapIdentifier(name)}`)\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst constraintNames = databaseMetadata.uniqueConstraints.filter({\n\t\t\t\ttableName: entity.tableName,\n\t\t\t\tcolumnNames: columns,\n\t\t\t}).getNames()\n\n\t\t\tfor (const name of constraintNames) {\n\t\t\t\tbuilder.sql(`ALTER TABLE ${wrapIdentifier(entity.tableName)} DROP CONSTRAINT ${wrapIdentifier(name)}`)\n\t\t\t}\n\t\t}\n\n\n\t\tinvalidateDatabaseMetadata()\n\t}\n\n\tpublic getSchemaUpdater(): SchemaUpdater {\n\t\tconst thisUnique = this.getUnique()\n\t\treturn updateModel(\n\t\t\tupdateEntity(this.data.entityName, ({ entity }) => {\n\t\t\t\tconst unique = entity.unique.filter(it => !deepEqual(it, thisUnique))\n\t\t\t\treturn {\n\t\t\t\t\t...entity,\n\t\t\t\t\tunique,\n\t\t\t\t}\n\t\t\t}),\n\t\t)\n\t}\n\n\tdescribe() {\n\t\tconst unique = this.getUnique()\n\t\treturn { message: `Remove unique ${unique.index ? 'index' : 'constraint'} (${unique.fields.join(', ')}) on entity ${this.data.entityName}` }\n\t}\n\n\tgetUnique(): Model.Unique {\n\t\tif ('unique' in this.data) {\n\t\t\treturn this.data.unique\n\t\t}\n\t\tconst entity = this.schema.model.entities[this.data.entityName]\n\t\tconst unique = 'constraintName' in this.data\n\t\t\t? entity.unique.find(it => 'name' in it && it.name === this.data.constraintName)\n\t\t\t: entity.unique.find(it => deepEqual(it.fields, this.data.fields))\n\n\t\tif (!unique) {\n\t\t\tthrow new Error()\n\t\t}\n\t\treturn unique\n\t}\n}\n\nexport const removeUniqueConstraintModification = createModificationType({\n\tid: 'removeUniqueConstraint',\n\thandler: RemoveUniqueConstraintModificationHandler,\n})\n\nexport type RemoveUniqueConstraintModificationData =\n\t| {\n\t\tentityName: string\n\t\tfields?: never\n\t\tconstraintName?: never\n\t\tunique: Model.Unique\n\t}\n\t// deprecated\n\t| {\n\t\tentityName: string\n\t\tconstraintName: string\n\t\tfields?: never\n\t}\n\t| {\n\t\tentityName: string\n\t\tfields: readonly string[]\n\t\tconstraintName?: never\n\t}\n\n\nexport class RemoveUniqueConstraintDiffer implements Differ {\n\tcreateDiff(originalSchema: Schema, updatedSchema: Schema) {\n\t\treturn Object.values(originalSchema.model.entities).flatMap(entity =>\n\t\t\tentity.unique\n\t\t\t\t.filter(it => {\n\t\t\t\t\tconst updatedEntity = updatedSchema.model.entities[entity.name]\n\t\t\t\t\tif (!updatedEntity) {\n\t\t\t\t\t\treturn false\n\t\t\t\t\t}\n\t\t\t\t\treturn !updatedEntity.unique.find(uniq => deepEqual(uniq, it))\n\t\t\t\t})\n\t\t\t\t.map(unique =>\n\t\t\t\t\tremoveUniqueConstraintModification.createModification({\n\t\t\t\t\t\tentityName: entity.name,\n\t\t\t\t\t\tunique: unique,\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t)\n\t}\n}\n"],"names":["getUniqueConstraintColumns","wrapIdentifier","updateModel","updateEntity","createModificationType"],"mappings":"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"}
|
|
@@ -10,26 +10,41 @@ class RemoveUniqueConstraintModificationHandler {
|
|
|
10
10
|
}
|
|
11
11
|
createSql(builder, { databaseMetadata, invalidateDatabaseMetadata }) {
|
|
12
12
|
const entity = this.schema.model.entities[this.data.entityName];
|
|
13
|
-
|
|
13
|
+
const unique = this.getUnique();
|
|
14
|
+
const shouldExecuteSql = !entity.view || unique.index && entity.view.materialized;
|
|
15
|
+
if (!shouldExecuteSql) {
|
|
14
16
|
return;
|
|
15
17
|
}
|
|
16
|
-
const fields = this.getFields();
|
|
17
18
|
const columns = getUniqueConstraintColumns({
|
|
18
19
|
entity,
|
|
19
|
-
fields,
|
|
20
|
+
fields: unique.fields,
|
|
20
21
|
model: this.schema.model
|
|
21
22
|
});
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
if (unique.index) {
|
|
24
|
+
const indexNames = databaseMetadata.indexes.filter({
|
|
25
|
+
tableName: entity.tableName,
|
|
26
|
+
columnNames: columns,
|
|
27
|
+
unique: true
|
|
28
|
+
}).getNames();
|
|
29
|
+
for (const name of indexNames) {
|
|
30
|
+
builder.sql(`DROP INDEX ${wrapIdentifier(name)}`);
|
|
31
|
+
}
|
|
32
|
+
} else {
|
|
33
|
+
const constraintNames = databaseMetadata.uniqueConstraints.filter({
|
|
34
|
+
tableName: entity.tableName,
|
|
35
|
+
columnNames: columns
|
|
36
|
+
}).getNames();
|
|
37
|
+
for (const name of constraintNames) {
|
|
38
|
+
builder.sql(`ALTER TABLE ${wrapIdentifier(entity.tableName)} DROP CONSTRAINT ${wrapIdentifier(name)}`);
|
|
39
|
+
}
|
|
25
40
|
}
|
|
26
41
|
invalidateDatabaseMetadata();
|
|
27
42
|
}
|
|
28
43
|
getSchemaUpdater() {
|
|
29
|
-
const
|
|
44
|
+
const thisUnique = this.getUnique();
|
|
30
45
|
return updateModel(
|
|
31
46
|
updateEntity(this.data.entityName, ({ entity }) => {
|
|
32
|
-
const unique = entity.unique.filter((it) => !deepEqual(it
|
|
47
|
+
const unique = entity.unique.filter((it) => !deepEqual(it, thisUnique));
|
|
33
48
|
return {
|
|
34
49
|
...entity,
|
|
35
50
|
unique
|
|
@@ -38,16 +53,19 @@ class RemoveUniqueConstraintModificationHandler {
|
|
|
38
53
|
);
|
|
39
54
|
}
|
|
40
55
|
describe() {
|
|
41
|
-
const
|
|
42
|
-
return { message: `Remove unique constraint (${fields.join(", ")}) on entity ${this.data.entityName}` };
|
|
56
|
+
const unique = this.getUnique();
|
|
57
|
+
return { message: `Remove unique ${unique.index ? "index" : "constraint"} (${unique.fields.join(", ")}) on entity ${this.data.entityName}` };
|
|
43
58
|
}
|
|
44
|
-
|
|
59
|
+
getUnique() {
|
|
60
|
+
if ("unique" in this.data) {
|
|
61
|
+
return this.data.unique;
|
|
62
|
+
}
|
|
45
63
|
const entity = this.schema.model.entities[this.data.entityName];
|
|
46
|
-
const
|
|
47
|
-
if (!
|
|
64
|
+
const unique = "constraintName" in this.data ? entity.unique.find((it) => "name" in it && it.name === this.data.constraintName) : entity.unique.find((it) => deepEqual(it.fields, this.data.fields));
|
|
65
|
+
if (!unique) {
|
|
48
66
|
throw new Error();
|
|
49
67
|
}
|
|
50
|
-
return
|
|
68
|
+
return unique;
|
|
51
69
|
}
|
|
52
70
|
}
|
|
53
71
|
const removeUniqueConstraintModification = createModificationType({
|
|
@@ -62,11 +80,11 @@ class RemoveUniqueConstraintDiffer {
|
|
|
62
80
|
if (!updatedEntity) {
|
|
63
81
|
return false;
|
|
64
82
|
}
|
|
65
|
-
return !updatedEntity.unique.find((uniq) => deepEqual(uniq
|
|
83
|
+
return !updatedEntity.unique.find((uniq) => deepEqual(uniq, it));
|
|
66
84
|
}).map(
|
|
67
85
|
(unique) => removeUniqueConstraintModification.createModification({
|
|
68
86
|
entityName: entity.name,
|
|
69
|
-
|
|
87
|
+
unique
|
|
70
88
|
})
|
|
71
89
|
)
|
|
72
90
|
);
|
package/dist/production/src/modifications/constraints/RemoveUniqueConstraintModification.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RemoveUniqueConstraintModification.js","sources":["../../../../../../packages/schema-migrations/src/modifications/constraints/RemoveUniqueConstraintModification.ts"],"sourcesContent":["import { MigrationBuilder } from '@contember/database-migrations'\nimport { Schema } from '@contember/schema'\nimport { SchemaUpdater, updateEntity, updateModel } from '../utils/schemaUpdateUtils'\nimport {\n\tcreateModificationType,\n\tDiffer,\n\tModificationHandler,\n\tModificationHandlerCreateSqlOptions,\n} from '../ModificationHandler'\nimport deepEqual from 'fast-deep-equal'\nimport { getUniqueConstraintColumns } from './utils'\nimport { wrapIdentifier } from '../../utils/dbHelpers'\n\nexport class RemoveUniqueConstraintModificationHandler implements ModificationHandler<RemoveUniqueConstraintModificationData> {\n\tconstructor(private readonly data: RemoveUniqueConstraintModificationData, private readonly schema: Schema) {\n\t}\n\n\tpublic createSql(builder: MigrationBuilder, { databaseMetadata, invalidateDatabaseMetadata }: ModificationHandlerCreateSqlOptions): void {\n\t\tconst entity = this.schema.model.entities[this.data.entityName]\n\t\
|
|
1
|
+
{"version":3,"file":"RemoveUniqueConstraintModification.js","sources":["../../../../../../packages/schema-migrations/src/modifications/constraints/RemoveUniqueConstraintModification.ts"],"sourcesContent":["import { MigrationBuilder } from '@contember/database-migrations'\nimport { Model, Schema } from '@contember/schema'\nimport { SchemaUpdater, updateEntity, updateModel } from '../utils/schemaUpdateUtils'\nimport {\n\tcreateModificationType,\n\tDiffer,\n\tModificationHandler,\n\tModificationHandlerCreateSqlOptions,\n} from '../ModificationHandler'\nimport deepEqual from 'fast-deep-equal'\nimport { getUniqueConstraintColumns } from './utils'\nimport { wrapIdentifier } from '../../utils/dbHelpers'\n\nexport class RemoveUniqueConstraintModificationHandler implements ModificationHandler<RemoveUniqueConstraintModificationData> {\n\tconstructor(private readonly data: RemoveUniqueConstraintModificationData, private readonly schema: Schema) {\n\t}\n\n\tpublic createSql(builder: MigrationBuilder, { databaseMetadata, invalidateDatabaseMetadata }: ModificationHandlerCreateSqlOptions): void {\n\t\tconst entity = this.schema.model.entities[this.data.entityName]\n\t\tconst unique = this.getUnique()\n\n\t\tconst shouldExecuteSql =\n\t\t\t!entity.view\n\t\t\t|| (unique.index && entity.view.materialized)\n\n\t\tif (!shouldExecuteSql) {\n\t\t\treturn\n\t\t}\n\n\n\t\tconst columns = getUniqueConstraintColumns({\n\t\t\tentity,\n\t\t\tfields: unique.fields,\n\t\t\tmodel: this.schema.model,\n\t\t})\n\n\t\tif (unique.index) {\n\t\t\tconst indexNames = databaseMetadata.indexes.filter({\n\t\t\t\ttableName: entity.tableName,\n\t\t\t\tcolumnNames: columns,\n\t\t\t\tunique: true,\n\t\t\t}).getNames()\n\n\t\t\tfor (const name of indexNames) {\n\t\t\t\tbuilder.sql(`DROP INDEX ${wrapIdentifier(name)}`)\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst constraintNames = databaseMetadata.uniqueConstraints.filter({\n\t\t\t\ttableName: entity.tableName,\n\t\t\t\tcolumnNames: columns,\n\t\t\t}).getNames()\n\n\t\t\tfor (const name of constraintNames) {\n\t\t\t\tbuilder.sql(`ALTER TABLE ${wrapIdentifier(entity.tableName)} DROP CONSTRAINT ${wrapIdentifier(name)}`)\n\t\t\t}\n\t\t}\n\n\n\t\tinvalidateDatabaseMetadata()\n\t}\n\n\tpublic getSchemaUpdater(): SchemaUpdater {\n\t\tconst thisUnique = this.getUnique()\n\t\treturn updateModel(\n\t\t\tupdateEntity(this.data.entityName, ({ entity }) => {\n\t\t\t\tconst unique = entity.unique.filter(it => !deepEqual(it, thisUnique))\n\t\t\t\treturn {\n\t\t\t\t\t...entity,\n\t\t\t\t\tunique,\n\t\t\t\t}\n\t\t\t}),\n\t\t)\n\t}\n\n\tdescribe() {\n\t\tconst unique = this.getUnique()\n\t\treturn { message: `Remove unique ${unique.index ? 'index' : 'constraint'} (${unique.fields.join(', ')}) on entity ${this.data.entityName}` }\n\t}\n\n\tgetUnique(): Model.Unique {\n\t\tif ('unique' in this.data) {\n\t\t\treturn this.data.unique\n\t\t}\n\t\tconst entity = this.schema.model.entities[this.data.entityName]\n\t\tconst unique = 'constraintName' in this.data\n\t\t\t? entity.unique.find(it => 'name' in it && it.name === this.data.constraintName)\n\t\t\t: entity.unique.find(it => deepEqual(it.fields, this.data.fields))\n\n\t\tif (!unique) {\n\t\t\tthrow new Error()\n\t\t}\n\t\treturn unique\n\t}\n}\n\nexport const removeUniqueConstraintModification = createModificationType({\n\tid: 'removeUniqueConstraint',\n\thandler: RemoveUniqueConstraintModificationHandler,\n})\n\nexport type RemoveUniqueConstraintModificationData =\n\t| {\n\t\tentityName: string\n\t\tfields?: never\n\t\tconstraintName?: never\n\t\tunique: Model.Unique\n\t}\n\t// deprecated\n\t| {\n\t\tentityName: string\n\t\tconstraintName: string\n\t\tfields?: never\n\t}\n\t| {\n\t\tentityName: string\n\t\tfields: readonly string[]\n\t\tconstraintName?: never\n\t}\n\n\nexport class RemoveUniqueConstraintDiffer implements Differ {\n\tcreateDiff(originalSchema: Schema, updatedSchema: Schema) {\n\t\treturn Object.values(originalSchema.model.entities).flatMap(entity =>\n\t\t\tentity.unique\n\t\t\t\t.filter(it => {\n\t\t\t\t\tconst updatedEntity = updatedSchema.model.entities[entity.name]\n\t\t\t\t\tif (!updatedEntity) {\n\t\t\t\t\t\treturn false\n\t\t\t\t\t}\n\t\t\t\t\treturn !updatedEntity.unique.find(uniq => deepEqual(uniq, it))\n\t\t\t\t})\n\t\t\t\t.map(unique =>\n\t\t\t\t\tremoveUniqueConstraintModification.createModification({\n\t\t\t\t\t\tentityName: entity.name,\n\t\t\t\t\t\tunique: unique,\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t)\n\t}\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreateEntityModification.cjs","sources":["../../../../../../packages/schema-migrations/src/modifications/entities/CreateEntityModification.ts"],"sourcesContent":["import { MigrationBuilder } from '@contember/database-migrations'\nimport { Model, Schema } from '@contember/schema'\nimport { SchemaUpdater, updateModel } from '../utils/schemaUpdateUtils'\nimport {\n\tcreateModificationType,\n\tDiffer,\n\tModificationHandler, ModificationHandlerCreateSqlOptions,\n\tModificationHandlerOptions,\n} from '../ModificationHandler'\nimport { createEventTrigger, createEventTrxTrigger } from '../utils/sqlUpdateUtils'\nimport { PossibleEntityShapeInMigrations } from '../../utils/PartialEntity.js'\nimport { getColumnSqlType } from '../utils/columnUtils'\nimport { VERSION_CORRECT_PRIMARY_COLUMN_NAME } from '../ModificationVersions'\n\nexport class CreateEntityModificationHandler implements ModificationHandler<CreateEntityModificationData> {\n\tconstructor(\n\t\tprivate readonly data: CreateEntityModificationData,\n\t\tprivate readonly schema: Schema,\n\t\tprivate readonly options: ModificationHandlerOptions,\n\t) {}\n\n\tpublic createSql(builder: MigrationBuilder, { systemSchema }: ModificationHandlerCreateSqlOptions): void {\n\t\tconst entity = this.data.entity\n\t\tif (entity.view) {\n\t\t\t// BC\n\t\t\tbuilder.createView(entity.tableName, {}, entity.view.sql)\n\t\t\treturn\n\t\t}\n\t\tconst primaryColumn = entity.fields[entity.primary] as Model.AnyColumn\n\n\t\tconst primaryColumnName = this.options.formatVersion >= VERSION_CORRECT_PRIMARY_COLUMN_NAME\n\t\t\t? primaryColumn.columnName\n\t\t\t: primaryColumn.name\n\t\tbuilder.createTable(entity.tableName, {\n\t\t\t[primaryColumnName]: {\n\t\t\t\tprimaryKey: true,\n\t\t\t\ttype: getColumnSqlType(primaryColumn),\n\t\t\t\tnotNull: true,\n\t\t\t\tsequenceGenerated: primaryColumn.sequence,\n\t\t\t},\n\t\t})\n\n\t\tif (entity.eventLog?.enabled !== false) {\n\t\t\tcreateEventTrigger(builder, systemSchema, entity.tableName, [entity.primaryColumn])\n\t\t\tcreateEventTrxTrigger(builder, systemSchema, entity.tableName)\n\t\t}\n\t}\n\n\tpublic getSchemaUpdater(): SchemaUpdater {\n\t\treturn updateModel(({ model }) => ({\n\t\t\t...model,\n\t\t\tentities: {\n\t\t\t\t...model.entities,\n\t\t\t\t[this.data.entity.name]: {\n\t\t\t\t\teventLog: { enabled: true },\n\t\t\t\t\t...this.data.entity,\n\t\t\t\t\tunique: Object.values(this.data.entity.unique),\n\t\t\t\t\tindexes: Object.values(this.data.entity.indexes ?? []),\n\t\t\t\t},\n\t\t\t},\n\t\t}))\n\t}\n\n\n\tdescribe() {\n\t\treturn { message: `Add entity ${this.data.entity.name}` }\n\t}\n\n}\n\nexport const createEntityModification = createModificationType({\n\tid: 'createEntity',\n\thandler: CreateEntityModificationHandler,\n})\n\nexport class CreateEntityDiffer implements Differ {\n\tcreateDiff(originalSchema: Schema, updatedSchema: Schema) {\n\t\treturn Object.values(updatedSchema.model.entities)\n\t\t\t.filter(it => !originalSchema.model.entities[it.name])\n\t\t\t.filter(it => !it.view)\n\t\t\t.map(entity =>\n\t\t\t\tcreateEntityModification.createModification({\n\t\t\t\t\tentity: {\n\t\t\t\t\t\t...entity,\n\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t[entity.primary]: entity.fields[entity.primary],\n\t\t\t\t\t\t},\n\t\t\t\t\t\tunique: [],\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t)\n\t}\n}\n\nexport interface CreateEntityModificationData {\n\tentity: PossibleEntityShapeInMigrations\n}\n"],"names":["VERSION_CORRECT_PRIMARY_COLUMN_NAME","getColumnSqlType","createEventTrigger","createEventTrxTrigger","updateModel","createModificationType"],"mappings":";;;;;;;AAcO,MAAM,gCAA6F;AAAA,EACzG,YACkB,MACA,QACA,SAChB;AAHgB,SAAA,OAAA;AACA,SAAA,SAAA;AACA,SAAA,UAAA;AAAA,EAAA;AAAA,EAGX,UAAU,SAA2B,EAAE,gBAA2D;AAClG,UAAA,SAAS,KAAK,KAAK;AACzB,QAAI,OAAO,MAAM;AAEhB,cAAQ,WAAW,OAAO,WAAW,CAAA,GAAI,OAAO,KAAK,GAAG;AACxD;AAAA,IAAA;AAED,UAAM,gBAAgB,OAAO,OAAO,OAAO,OAAO;AAElD,UAAM,oBAAoB,KAAK,QAAQ,iBAAiBA,qBAAAA,sCACrD,cAAc,aACd,cAAc;AACT,YAAA,YAAY,OAAO,WAAW;AAAA,MACrC,CAAC,iBAAiB,GAAG;AAAA,QACpB,YAAY;AAAA,QACZ,MAAMC,6BAAiB,aAAa;AAAA,QACpC,SAAS;AAAA,QACT,mBAAmB,cAAc;AAAA,MAAA;AAAA,IAClC,CACA;AAEI,QAAA,OAAO,UAAU,YAAY,OAAO;AACxCC,qBAAA,mBAAmB,SAAS,cAAc,OAAO,WAAW,CAAC,OAAO,aAAa,CAAC;AAC5DC,qBAAAA,sBAAA,SAAS,cAAc,OAAO,SAAS;AAAA,IAAA;AAAA,EAC9D;AAAA,EAGM,mBAAkC;AACxC,WAAOC,kBAAY,YAAA,CAAC,EAAE,aAAa;AAAA,MAClC,GAAG;AAAA,MACH,UAAU;AAAA,QACT,GAAG,MAAM;AAAA,QACT,CAAC,KAAK,KAAK,OAAO,IAAI,GAAG;AAAA,UACxB,UAAU,EAAE,SAAS,KAAK;AAAA,UAC1B,GAAG,KAAK,KAAK;AAAA,UACb,QAAQ,OAAO,OAAO,KAAK,KAAK,OAAO,MAAM;AAAA,UAC7C,SAAS,OAAO,OAAO,KAAK,KAAK,OAAO,WAAW,CAAE,CAAA;AAAA,QAAA;AAAA,MACtD;AAAA,IACD,EACC;AAAA,EAAA;AAAA,EAIH,WAAW;AACV,WAAO,EAAE,SAAS,cAAc,KAAK,KAAK,OAAO,IAAI,GAAG;AAAA,EAAA;AAG1D;AAEO,MAAM,2BAA2BC,oBAAAA,uBAAuB;AAAA,EAC9D,IAAI;AAAA,EACJ,SAAS;AACV,CAAC;AAEM,MAAM,mBAAqC;AAAA,EACjD,WAAW,gBAAwB,eAAuB;AAClD,WAAA,OAAO,OAAO,cAAc,MAAM,QAAQ,EAC/C,OAAO,QAAM,CAAC,eAAe,MAAM,SAAS,GAAG,IAAI,CAAC,EACpD,OAAO,CAAM,OAAA,CAAC,GAAG,IAAI,EACrB;AAAA,MAAI,CAAA,WACJ,yBAAyB,mBAAmB;AAAA,QAC3C,QAAQ;AAAA,UACP,GAAG;AAAA,UACH,QAAQ;AAAA,YACP,CAAC,OAAO,OAAO,GAAG,OAAO,OAAO,OAAO,OAAO;AAAA,UAC/C;AAAA,UACA,QAAQ,CAAA;AAAA,QAAC;AAAA,
|
|
1
|
+
{"version":3,"file":"CreateEntityModification.cjs","sources":["../../../../../../packages/schema-migrations/src/modifications/entities/CreateEntityModification.ts"],"sourcesContent":["import { MigrationBuilder } from '@contember/database-migrations'\nimport { Model, Schema } from '@contember/schema'\nimport { SchemaUpdater, updateModel } from '../utils/schemaUpdateUtils'\nimport {\n\tcreateModificationType,\n\tDiffer,\n\tModificationHandler, ModificationHandlerCreateSqlOptions,\n\tModificationHandlerOptions,\n} from '../ModificationHandler'\nimport { createEventTrigger, createEventTrxTrigger } from '../utils/sqlUpdateUtils'\nimport { PossibleEntityShapeInMigrations } from '../../utils/PartialEntity.js'\nimport { getColumnSqlType } from '../utils/columnUtils'\nimport { VERSION_CORRECT_PRIMARY_COLUMN_NAME } from '../ModificationVersions'\n\nexport class CreateEntityModificationHandler implements ModificationHandler<CreateEntityModificationData> {\n\tconstructor(\n\t\tprivate readonly data: CreateEntityModificationData,\n\t\tprivate readonly schema: Schema,\n\t\tprivate readonly options: ModificationHandlerOptions,\n\t) {}\n\n\tpublic createSql(builder: MigrationBuilder, { systemSchema }: ModificationHandlerCreateSqlOptions): void {\n\t\tconst entity = this.data.entity\n\t\tif (entity.view) {\n\t\t\t// BC\n\t\t\tbuilder.createView(entity.tableName, {}, entity.view.sql)\n\t\t\treturn\n\t\t}\n\t\tconst primaryColumn = entity.fields[entity.primary] as Model.AnyColumn\n\n\t\tconst primaryColumnName = this.options.formatVersion >= VERSION_CORRECT_PRIMARY_COLUMN_NAME\n\t\t\t? primaryColumn.columnName\n\t\t\t: primaryColumn.name\n\t\tbuilder.createTable(entity.tableName, {\n\t\t\t[primaryColumnName]: {\n\t\t\t\tprimaryKey: true,\n\t\t\t\ttype: getColumnSqlType(primaryColumn),\n\t\t\t\tnotNull: true,\n\t\t\t\tsequenceGenerated: primaryColumn.sequence,\n\t\t\t},\n\t\t})\n\n\t\tif (entity.eventLog?.enabled !== false) {\n\t\t\tcreateEventTrigger(builder, systemSchema, entity.tableName, [entity.primaryColumn])\n\t\t\tcreateEventTrxTrigger(builder, systemSchema, entity.tableName)\n\t\t}\n\t}\n\n\tpublic getSchemaUpdater(): SchemaUpdater {\n\t\treturn updateModel(({ model }) => ({\n\t\t\t...model,\n\t\t\tentities: {\n\t\t\t\t...model.entities,\n\t\t\t\t[this.data.entity.name]: {\n\t\t\t\t\teventLog: { enabled: true },\n\t\t\t\t\t...this.data.entity,\n\t\t\t\t\tunique: Object.values(this.data.entity.unique),\n\t\t\t\t\tindexes: Object.values(this.data.entity.indexes ?? []),\n\t\t\t\t},\n\t\t\t},\n\t\t}))\n\t}\n\n\n\tdescribe() {\n\t\treturn { message: `Add entity ${this.data.entity.name}` }\n\t}\n\n}\n\nexport const createEntityModification = createModificationType({\n\tid: 'createEntity',\n\thandler: CreateEntityModificationHandler,\n})\n\nexport class CreateEntityDiffer implements Differ {\n\tcreateDiff(originalSchema: Schema, updatedSchema: Schema) {\n\t\treturn Object.values(updatedSchema.model.entities)\n\t\t\t.filter(it => !originalSchema.model.entities[it.name])\n\t\t\t.filter(it => !it.view)\n\t\t\t.map(entity =>\n\t\t\t\tcreateEntityModification.createModification({\n\t\t\t\t\tentity: {\n\t\t\t\t\t\t...entity,\n\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t[entity.primary]: entity.fields[entity.primary],\n\t\t\t\t\t\t},\n\t\t\t\t\t\tunique: [],\n\t\t\t\t\t\tindexes: [],\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t)\n\t}\n}\n\nexport interface CreateEntityModificationData {\n\tentity: PossibleEntityShapeInMigrations\n}\n"],"names":["VERSION_CORRECT_PRIMARY_COLUMN_NAME","getColumnSqlType","createEventTrigger","createEventTrxTrigger","updateModel","createModificationType"],"mappings":";;;;;;;AAcO,MAAM,gCAA6F;AAAA,EACzG,YACkB,MACA,QACA,SAChB;AAHgB,SAAA,OAAA;AACA,SAAA,SAAA;AACA,SAAA,UAAA;AAAA,EAAA;AAAA,EAGX,UAAU,SAA2B,EAAE,gBAA2D;AAClG,UAAA,SAAS,KAAK,KAAK;AACzB,QAAI,OAAO,MAAM;AAEhB,cAAQ,WAAW,OAAO,WAAW,CAAA,GAAI,OAAO,KAAK,GAAG;AACxD;AAAA,IAAA;AAED,UAAM,gBAAgB,OAAO,OAAO,OAAO,OAAO;AAElD,UAAM,oBAAoB,KAAK,QAAQ,iBAAiBA,qBAAAA,sCACrD,cAAc,aACd,cAAc;AACT,YAAA,YAAY,OAAO,WAAW;AAAA,MACrC,CAAC,iBAAiB,GAAG;AAAA,QACpB,YAAY;AAAA,QACZ,MAAMC,6BAAiB,aAAa;AAAA,QACpC,SAAS;AAAA,QACT,mBAAmB,cAAc;AAAA,MAAA;AAAA,IAClC,CACA;AAEI,QAAA,OAAO,UAAU,YAAY,OAAO;AACxCC,qBAAA,mBAAmB,SAAS,cAAc,OAAO,WAAW,CAAC,OAAO,aAAa,CAAC;AAC5DC,qBAAAA,sBAAA,SAAS,cAAc,OAAO,SAAS;AAAA,IAAA;AAAA,EAC9D;AAAA,EAGM,mBAAkC;AACxC,WAAOC,kBAAY,YAAA,CAAC,EAAE,aAAa;AAAA,MAClC,GAAG;AAAA,MACH,UAAU;AAAA,QACT,GAAG,MAAM;AAAA,QACT,CAAC,KAAK,KAAK,OAAO,IAAI,GAAG;AAAA,UACxB,UAAU,EAAE,SAAS,KAAK;AAAA,UAC1B,GAAG,KAAK,KAAK;AAAA,UACb,QAAQ,OAAO,OAAO,KAAK,KAAK,OAAO,MAAM;AAAA,UAC7C,SAAS,OAAO,OAAO,KAAK,KAAK,OAAO,WAAW,CAAE,CAAA;AAAA,QAAA;AAAA,MACtD;AAAA,IACD,EACC;AAAA,EAAA;AAAA,EAIH,WAAW;AACV,WAAO,EAAE,SAAS,cAAc,KAAK,KAAK,OAAO,IAAI,GAAG;AAAA,EAAA;AAG1D;AAEO,MAAM,2BAA2BC,oBAAAA,uBAAuB;AAAA,EAC9D,IAAI;AAAA,EACJ,SAAS;AACV,CAAC;AAEM,MAAM,mBAAqC;AAAA,EACjD,WAAW,gBAAwB,eAAuB;AAClD,WAAA,OAAO,OAAO,cAAc,MAAM,QAAQ,EAC/C,OAAO,QAAM,CAAC,eAAe,MAAM,SAAS,GAAG,IAAI,CAAC,EACpD,OAAO,CAAM,OAAA,CAAC,GAAG,IAAI,EACrB;AAAA,MAAI,CAAA,WACJ,yBAAyB,mBAAmB;AAAA,QAC3C,QAAQ;AAAA,UACP,GAAG;AAAA,UACH,QAAQ;AAAA,YACP,CAAC,OAAO,OAAO,GAAG,OAAO,OAAO,OAAO,OAAO;AAAA,UAC/C;AAAA,UACA,QAAQ,CAAC;AAAA,UACT,SAAS,CAAA;AAAA,QAAC;AAAA,MAEX,CAAA;AAAA,IACF;AAAA,EAAA;AAEH;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreateEntityModification.js","sources":["../../../../../../packages/schema-migrations/src/modifications/entities/CreateEntityModification.ts"],"sourcesContent":["import { MigrationBuilder } from '@contember/database-migrations'\nimport { Model, Schema } from '@contember/schema'\nimport { SchemaUpdater, updateModel } from '../utils/schemaUpdateUtils'\nimport {\n\tcreateModificationType,\n\tDiffer,\n\tModificationHandler, ModificationHandlerCreateSqlOptions,\n\tModificationHandlerOptions,\n} from '../ModificationHandler'\nimport { createEventTrigger, createEventTrxTrigger } from '../utils/sqlUpdateUtils'\nimport { PossibleEntityShapeInMigrations } from '../../utils/PartialEntity.js'\nimport { getColumnSqlType } from '../utils/columnUtils'\nimport { VERSION_CORRECT_PRIMARY_COLUMN_NAME } from '../ModificationVersions'\n\nexport class CreateEntityModificationHandler implements ModificationHandler<CreateEntityModificationData> {\n\tconstructor(\n\t\tprivate readonly data: CreateEntityModificationData,\n\t\tprivate readonly schema: Schema,\n\t\tprivate readonly options: ModificationHandlerOptions,\n\t) {}\n\n\tpublic createSql(builder: MigrationBuilder, { systemSchema }: ModificationHandlerCreateSqlOptions): void {\n\t\tconst entity = this.data.entity\n\t\tif (entity.view) {\n\t\t\t// BC\n\t\t\tbuilder.createView(entity.tableName, {}, entity.view.sql)\n\t\t\treturn\n\t\t}\n\t\tconst primaryColumn = entity.fields[entity.primary] as Model.AnyColumn\n\n\t\tconst primaryColumnName = this.options.formatVersion >= VERSION_CORRECT_PRIMARY_COLUMN_NAME\n\t\t\t? primaryColumn.columnName\n\t\t\t: primaryColumn.name\n\t\tbuilder.createTable(entity.tableName, {\n\t\t\t[primaryColumnName]: {\n\t\t\t\tprimaryKey: true,\n\t\t\t\ttype: getColumnSqlType(primaryColumn),\n\t\t\t\tnotNull: true,\n\t\t\t\tsequenceGenerated: primaryColumn.sequence,\n\t\t\t},\n\t\t})\n\n\t\tif (entity.eventLog?.enabled !== false) {\n\t\t\tcreateEventTrigger(builder, systemSchema, entity.tableName, [entity.primaryColumn])\n\t\t\tcreateEventTrxTrigger(builder, systemSchema, entity.tableName)\n\t\t}\n\t}\n\n\tpublic getSchemaUpdater(): SchemaUpdater {\n\t\treturn updateModel(({ model }) => ({\n\t\t\t...model,\n\t\t\tentities: {\n\t\t\t\t...model.entities,\n\t\t\t\t[this.data.entity.name]: {\n\t\t\t\t\teventLog: { enabled: true },\n\t\t\t\t\t...this.data.entity,\n\t\t\t\t\tunique: Object.values(this.data.entity.unique),\n\t\t\t\t\tindexes: Object.values(this.data.entity.indexes ?? []),\n\t\t\t\t},\n\t\t\t},\n\t\t}))\n\t}\n\n\n\tdescribe() {\n\t\treturn { message: `Add entity ${this.data.entity.name}` }\n\t}\n\n}\n\nexport const createEntityModification = createModificationType({\n\tid: 'createEntity',\n\thandler: CreateEntityModificationHandler,\n})\n\nexport class CreateEntityDiffer implements Differ {\n\tcreateDiff(originalSchema: Schema, updatedSchema: Schema) {\n\t\treturn Object.values(updatedSchema.model.entities)\n\t\t\t.filter(it => !originalSchema.model.entities[it.name])\n\t\t\t.filter(it => !it.view)\n\t\t\t.map(entity =>\n\t\t\t\tcreateEntityModification.createModification({\n\t\t\t\t\tentity: {\n\t\t\t\t\t\t...entity,\n\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t[entity.primary]: entity.fields[entity.primary],\n\t\t\t\t\t\t},\n\t\t\t\t\t\tunique: [],\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t)\n\t}\n}\n\nexport interface CreateEntityModificationData {\n\tentity: PossibleEntityShapeInMigrations\n}\n"],"names":[],"mappings":";;;;;AAcO,MAAM,gCAA6F;AAAA,EACzG,YACkB,MACA,QACA,SAChB;AAHgB,SAAA,OAAA;AACA,SAAA,SAAA;AACA,SAAA,UAAA;AAAA,EAAA;AAAA,EAGX,UAAU,SAA2B,EAAE,gBAA2D;AAClG,UAAA,SAAS,KAAK,KAAK;AACzB,QAAI,OAAO,MAAM;AAEhB,cAAQ,WAAW,OAAO,WAAW,CAAA,GAAI,OAAO,KAAK,GAAG;AACxD;AAAA,IAAA;AAED,UAAM,gBAAgB,OAAO,OAAO,OAAO,OAAO;AAElD,UAAM,oBAAoB,KAAK,QAAQ,iBAAiB,sCACrD,cAAc,aACd,cAAc;AACT,YAAA,YAAY,OAAO,WAAW;AAAA,MACrC,CAAC,iBAAiB,GAAG;AAAA,QACpB,YAAY;AAAA,QACZ,MAAM,iBAAiB,aAAa;AAAA,QACpC,SAAS;AAAA,QACT,mBAAmB,cAAc;AAAA,MAAA;AAAA,IAClC,CACA;AAEI,QAAA,OAAO,UAAU,YAAY,OAAO;AACxC,yBAAmB,SAAS,cAAc,OAAO,WAAW,CAAC,OAAO,aAAa,CAAC;AAC5D,4BAAA,SAAS,cAAc,OAAO,SAAS;AAAA,IAAA;AAAA,EAC9D;AAAA,EAGM,mBAAkC;AACxC,WAAO,YAAY,CAAC,EAAE,aAAa;AAAA,MAClC,GAAG;AAAA,MACH,UAAU;AAAA,QACT,GAAG,MAAM;AAAA,QACT,CAAC,KAAK,KAAK,OAAO,IAAI,GAAG;AAAA,UACxB,UAAU,EAAE,SAAS,KAAK;AAAA,UAC1B,GAAG,KAAK,KAAK;AAAA,UACb,QAAQ,OAAO,OAAO,KAAK,KAAK,OAAO,MAAM;AAAA,UAC7C,SAAS,OAAO,OAAO,KAAK,KAAK,OAAO,WAAW,CAAE,CAAA;AAAA,QAAA;AAAA,MACtD;AAAA,IACD,EACC;AAAA,EAAA;AAAA,EAIH,WAAW;AACV,WAAO,EAAE,SAAS,cAAc,KAAK,KAAK,OAAO,IAAI,GAAG;AAAA,EAAA;AAG1D;AAEO,MAAM,2BAA2B,uBAAuB;AAAA,EAC9D,IAAI;AAAA,EACJ,SAAS;AACV,CAAC;AAEM,MAAM,mBAAqC;AAAA,EACjD,WAAW,gBAAwB,eAAuB;AAClD,WAAA,OAAO,OAAO,cAAc,MAAM,QAAQ,EAC/C,OAAO,QAAM,CAAC,eAAe,MAAM,SAAS,GAAG,IAAI,CAAC,EACpD,OAAO,CAAM,OAAA,CAAC,GAAG,IAAI,EACrB;AAAA,MAAI,CAAA,WACJ,yBAAyB,mBAAmB;AAAA,QAC3C,QAAQ;AAAA,UACP,GAAG;AAAA,UACH,QAAQ;AAAA,YACP,CAAC,OAAO,OAAO,GAAG,OAAO,OAAO,OAAO,OAAO;AAAA,UAC/C;AAAA,UACA,QAAQ,CAAA;AAAA,QAAC;AAAA,
|
|
1
|
+
{"version":3,"file":"CreateEntityModification.js","sources":["../../../../../../packages/schema-migrations/src/modifications/entities/CreateEntityModification.ts"],"sourcesContent":["import { MigrationBuilder } from '@contember/database-migrations'\nimport { Model, Schema } from '@contember/schema'\nimport { SchemaUpdater, updateModel } from '../utils/schemaUpdateUtils'\nimport {\n\tcreateModificationType,\n\tDiffer,\n\tModificationHandler, ModificationHandlerCreateSqlOptions,\n\tModificationHandlerOptions,\n} from '../ModificationHandler'\nimport { createEventTrigger, createEventTrxTrigger } from '../utils/sqlUpdateUtils'\nimport { PossibleEntityShapeInMigrations } from '../../utils/PartialEntity.js'\nimport { getColumnSqlType } from '../utils/columnUtils'\nimport { VERSION_CORRECT_PRIMARY_COLUMN_NAME } from '../ModificationVersions'\n\nexport class CreateEntityModificationHandler implements ModificationHandler<CreateEntityModificationData> {\n\tconstructor(\n\t\tprivate readonly data: CreateEntityModificationData,\n\t\tprivate readonly schema: Schema,\n\t\tprivate readonly options: ModificationHandlerOptions,\n\t) {}\n\n\tpublic createSql(builder: MigrationBuilder, { systemSchema }: ModificationHandlerCreateSqlOptions): void {\n\t\tconst entity = this.data.entity\n\t\tif (entity.view) {\n\t\t\t// BC\n\t\t\tbuilder.createView(entity.tableName, {}, entity.view.sql)\n\t\t\treturn\n\t\t}\n\t\tconst primaryColumn = entity.fields[entity.primary] as Model.AnyColumn\n\n\t\tconst primaryColumnName = this.options.formatVersion >= VERSION_CORRECT_PRIMARY_COLUMN_NAME\n\t\t\t? primaryColumn.columnName\n\t\t\t: primaryColumn.name\n\t\tbuilder.createTable(entity.tableName, {\n\t\t\t[primaryColumnName]: {\n\t\t\t\tprimaryKey: true,\n\t\t\t\ttype: getColumnSqlType(primaryColumn),\n\t\t\t\tnotNull: true,\n\t\t\t\tsequenceGenerated: primaryColumn.sequence,\n\t\t\t},\n\t\t})\n\n\t\tif (entity.eventLog?.enabled !== false) {\n\t\t\tcreateEventTrigger(builder, systemSchema, entity.tableName, [entity.primaryColumn])\n\t\t\tcreateEventTrxTrigger(builder, systemSchema, entity.tableName)\n\t\t}\n\t}\n\n\tpublic getSchemaUpdater(): SchemaUpdater {\n\t\treturn updateModel(({ model }) => ({\n\t\t\t...model,\n\t\t\tentities: {\n\t\t\t\t...model.entities,\n\t\t\t\t[this.data.entity.name]: {\n\t\t\t\t\teventLog: { enabled: true },\n\t\t\t\t\t...this.data.entity,\n\t\t\t\t\tunique: Object.values(this.data.entity.unique),\n\t\t\t\t\tindexes: Object.values(this.data.entity.indexes ?? []),\n\t\t\t\t},\n\t\t\t},\n\t\t}))\n\t}\n\n\n\tdescribe() {\n\t\treturn { message: `Add entity ${this.data.entity.name}` }\n\t}\n\n}\n\nexport const createEntityModification = createModificationType({\n\tid: 'createEntity',\n\thandler: CreateEntityModificationHandler,\n})\n\nexport class CreateEntityDiffer implements Differ {\n\tcreateDiff(originalSchema: Schema, updatedSchema: Schema) {\n\t\treturn Object.values(updatedSchema.model.entities)\n\t\t\t.filter(it => !originalSchema.model.entities[it.name])\n\t\t\t.filter(it => !it.view)\n\t\t\t.map(entity =>\n\t\t\t\tcreateEntityModification.createModification({\n\t\t\t\t\tentity: {\n\t\t\t\t\t\t...entity,\n\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t[entity.primary]: entity.fields[entity.primary],\n\t\t\t\t\t\t},\n\t\t\t\t\t\tunique: [],\n\t\t\t\t\t\tindexes: [],\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t)\n\t}\n}\n\nexport interface CreateEntityModificationData {\n\tentity: PossibleEntityShapeInMigrations\n}\n"],"names":[],"mappings":";;;;;AAcO,MAAM,gCAA6F;AAAA,EACzG,YACkB,MACA,QACA,SAChB;AAHgB,SAAA,OAAA;AACA,SAAA,SAAA;AACA,SAAA,UAAA;AAAA,EAAA;AAAA,EAGX,UAAU,SAA2B,EAAE,gBAA2D;AAClG,UAAA,SAAS,KAAK,KAAK;AACzB,QAAI,OAAO,MAAM;AAEhB,cAAQ,WAAW,OAAO,WAAW,CAAA,GAAI,OAAO,KAAK,GAAG;AACxD;AAAA,IAAA;AAED,UAAM,gBAAgB,OAAO,OAAO,OAAO,OAAO;AAElD,UAAM,oBAAoB,KAAK,QAAQ,iBAAiB,sCACrD,cAAc,aACd,cAAc;AACT,YAAA,YAAY,OAAO,WAAW;AAAA,MACrC,CAAC,iBAAiB,GAAG;AAAA,QACpB,YAAY;AAAA,QACZ,MAAM,iBAAiB,aAAa;AAAA,QACpC,SAAS;AAAA,QACT,mBAAmB,cAAc;AAAA,MAAA;AAAA,IAClC,CACA;AAEI,QAAA,OAAO,UAAU,YAAY,OAAO;AACxC,yBAAmB,SAAS,cAAc,OAAO,WAAW,CAAC,OAAO,aAAa,CAAC;AAC5D,4BAAA,SAAS,cAAc,OAAO,SAAS;AAAA,IAAA;AAAA,EAC9D;AAAA,EAGM,mBAAkC;AACxC,WAAO,YAAY,CAAC,EAAE,aAAa;AAAA,MAClC,GAAG;AAAA,MACH,UAAU;AAAA,QACT,GAAG,MAAM;AAAA,QACT,CAAC,KAAK,KAAK,OAAO,IAAI,GAAG;AAAA,UACxB,UAAU,EAAE,SAAS,KAAK;AAAA,UAC1B,GAAG,KAAK,KAAK;AAAA,UACb,QAAQ,OAAO,OAAO,KAAK,KAAK,OAAO,MAAM;AAAA,UAC7C,SAAS,OAAO,OAAO,KAAK,KAAK,OAAO,WAAW,CAAE,CAAA;AAAA,QAAA;AAAA,MACtD;AAAA,IACD,EACC;AAAA,EAAA;AAAA,EAIH,WAAW;AACV,WAAO,EAAE,SAAS,cAAc,KAAK,KAAK,OAAO,IAAI,GAAG;AAAA,EAAA;AAG1D;AAEO,MAAM,2BAA2B,uBAAuB;AAAA,EAC9D,IAAI;AAAA,EACJ,SAAS;AACV,CAAC;AAEM,MAAM,mBAAqC;AAAA,EACjD,WAAW,gBAAwB,eAAuB;AAClD,WAAA,OAAO,OAAO,cAAc,MAAM,QAAQ,EAC/C,OAAO,QAAM,CAAC,eAAe,MAAM,SAAS,GAAG,IAAI,CAAC,EACpD,OAAO,CAAM,OAAA,CAAC,GAAG,IAAI,EACrB;AAAA,MAAI,CAAA,WACJ,yBAAyB,mBAAmB;AAAA,QAC3C,QAAQ;AAAA,UACP,GAAG;AAAA,UACH,QAAQ;AAAA,YACP,CAAC,OAAO,OAAO,GAAG,OAAO,OAAO,OAAO,OAAO;AAAA,UAC/C;AAAA,UACA,QAAQ,CAAC;AAAA,UACT,SAAS,CAAA;AAAA,QAAC;AAAA,MAEX,CAAA;AAAA,IACF;AAAA,EAAA;AAEH;"}
|
|
@@ -12,7 +12,13 @@ class CreateViewModificationHandler {
|
|
|
12
12
|
if (!entity.view) {
|
|
13
13
|
throw new Error();
|
|
14
14
|
}
|
|
15
|
-
|
|
15
|
+
if (entity.view.materialized) {
|
|
16
|
+
builder.createMaterializedView(entity.tableName, {
|
|
17
|
+
data: this.data.noData !== true
|
|
18
|
+
}, entity.view.sql);
|
|
19
|
+
} else {
|
|
20
|
+
builder.createView(entity.tableName, {}, entity.view.sql);
|
|
21
|
+
}
|
|
16
22
|
}
|
|
17
23
|
getSchemaUpdater() {
|
|
18
24
|
return schemaUpdateUtils.updateModel(({ model }) => ({
|
|
@@ -51,7 +57,11 @@ class CreateViewDiffer {
|
|
|
51
57
|
cascadeCreate(updatedSchema.model.entities[dependency]);
|
|
52
58
|
}
|
|
53
59
|
modifications.push(createViewModification.createModification({
|
|
54
|
-
entity
|
|
60
|
+
entity: {
|
|
61
|
+
...entity,
|
|
62
|
+
indexes: [],
|
|
63
|
+
unique: []
|
|
64
|
+
}
|
|
55
65
|
}));
|
|
56
66
|
};
|
|
57
67
|
for (const view of newViews) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreateViewModification.cjs","sources":["../../../../../../packages/schema-migrations/src/modifications/entities/CreateViewModification.ts"],"sourcesContent":["import { MigrationBuilder } from '@contember/database-migrations'\nimport { Model, Schema } from '@contember/schema'\nimport { SchemaUpdater, updateModel } from '../utils/schemaUpdateUtils'\nimport { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'\nimport { Migration } from '../../Migration'\nimport { PossibleEntityShapeInMigrations } from '../../utils/PartialEntity.js'\n\nexport class CreateViewModificationHandler implements ModificationHandler<CreateViewModificationData> {\n\tconstructor(private readonly data: CreateViewModificationData, private readonly schema: Schema) {}\n\n\tpublic createSql(builder: MigrationBuilder): void {\n\t\tconst entity = this.data.entity\n\t\tif (!entity.view) {\n\t\t\tthrow new Error()\n\t\t}\n\t\tbuilder.createView(entity.tableName, {}, entity.view.sql)\n\t}\n\n\tpublic getSchemaUpdater(): SchemaUpdater {\n\t\treturn updateModel(({ model }) => ({\n\t\t\t...model,\n\t\t\tentities: {\n\t\t\t\t...model.entities,\n\t\t\t\t[this.data.entity.name]: {\n\t\t\t\t\teventLog: { enabled: true }, // not relevant here...\n\t\t\t\t\t...this.data.entity,\n\t\t\t\t\tunique: Object.values(this.data.entity.unique),\n\t\t\t\t\tindexes: Object.values(this.data.entity.indexes ?? []),\n\t\t\t\t},\n\t\t\t},\n\t\t}))\n\t}\n\n\n\tdescribe() {\n\t\treturn { message: `Add view ${this.data.entity.name}` }\n\t}\n}\n\nexport const createViewModification = createModificationType({\n\tid: 'createView',\n\thandler: CreateViewModificationHandler,\n})\n\nexport class CreateViewDiffer implements Differ {\n\tcreateDiff(originalSchema: Schema, updatedSchema: Schema) {\n\t\tconst newViews = Object.values(updatedSchema.model.entities)\n\t\t\t.filter(it => !originalSchema.model.entities[it.name])\n\t\t\t.filter(it => !!it.view)\n\t\tconst created = new Set<string>()\n\t\tconst modifications: Migration.Modification[] = []\n\t\tconst cascadeCreate = (entity: Model.Entity) => {\n\t\t\tif (originalSchema.model.entities[entity.name] || created.has(entity.name)) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tcreated.add(entity.name)\n\t\t\tfor (const dependency of entity.view?.dependencies ?? []) {\n\t\t\t\tcascadeCreate(updatedSchema.model.entities[dependency])\n\t\t\t}\n\t\t\tmodifications.push(createViewModification.createModification({\n\t\t\t\tentity: entity,\n\t\t\t}))\n\t\t}\n\t\tfor (const view of newViews) {\n\t\t\tcascadeCreate(view)\n\t\t}\n\t\treturn modifications\n\t}\n}\n\nexport interface CreateViewModificationData {\n\tentity: PossibleEntityShapeInMigrations\n}\n"],"names":["updateModel","createModificationType"],"mappings":";;;;AAOO,MAAM,8BAAyF;AAAA,EACrG,YAA6B,MAAmD,QAAgB;AAAnE,SAAA,OAAA;AAAmD,SAAA,SAAA;AAAA,EAAA;AAAA,EAEzE,UAAU,SAAiC;AAC3C,UAAA,SAAS,KAAK,KAAK;AACrB,QAAA,CAAC,OAAO,MAAM;AACjB,YAAM,IAAI,MAAM;AAAA,IAAA;
|
|
1
|
+
{"version":3,"file":"CreateViewModification.cjs","sources":["../../../../../../packages/schema-migrations/src/modifications/entities/CreateViewModification.ts"],"sourcesContent":["import { MigrationBuilder } from '@contember/database-migrations'\nimport { Model, Schema } from '@contember/schema'\nimport { SchemaUpdater, updateModel } from '../utils/schemaUpdateUtils'\nimport { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'\nimport { Migration } from '../../Migration'\nimport { PossibleEntityShapeInMigrations } from '../../utils/PartialEntity.js'\n\nexport class CreateViewModificationHandler implements ModificationHandler<CreateViewModificationData> {\n\tconstructor(private readonly data: CreateViewModificationData, private readonly schema: Schema) {}\n\n\tpublic createSql(builder: MigrationBuilder): void {\n\t\tconst entity = this.data.entity\n\t\tif (!entity.view) {\n\t\t\tthrow new Error()\n\t\t}\n\t\tif (entity.view.materialized) {\n\t\t\tbuilder.createMaterializedView(entity.tableName, {\n\t\t\t\tdata: this.data.noData !== true,\n\t\t\t}, entity.view.sql)\n\t\t} else {\n\t\t\tbuilder.createView(entity.tableName, {}, entity.view.sql)\n\t\t}\n\t}\n\n\tpublic getSchemaUpdater(): SchemaUpdater {\n\t\treturn updateModel(({ model }) => ({\n\t\t\t...model,\n\t\t\tentities: {\n\t\t\t\t...model.entities,\n\t\t\t\t[this.data.entity.name]: {\n\t\t\t\t\teventLog: { enabled: true }, // not relevant here...\n\t\t\t\t\t...this.data.entity,\n\t\t\t\t\tunique: Object.values(this.data.entity.unique),\n\t\t\t\t\tindexes: Object.values(this.data.entity.indexes ?? []),\n\t\t\t\t},\n\t\t\t},\n\t\t}))\n\t}\n\n\n\tdescribe() {\n\t\treturn { message: `Add view ${this.data.entity.name}` }\n\t}\n}\n\nexport const createViewModification = createModificationType({\n\tid: 'createView',\n\thandler: CreateViewModificationHandler,\n})\n\nexport class CreateViewDiffer implements Differ {\n\tcreateDiff(originalSchema: Schema, updatedSchema: Schema) {\n\t\tconst newViews = Object.values(updatedSchema.model.entities)\n\t\t\t.filter(it => !originalSchema.model.entities[it.name])\n\t\t\t.filter(it => !!it.view)\n\t\tconst created = new Set<string>()\n\t\tconst modifications: Migration.Modification[] = []\n\t\tconst cascadeCreate = (entity: Model.Entity) => {\n\t\t\tif (originalSchema.model.entities[entity.name] || created.has(entity.name)) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tcreated.add(entity.name)\n\t\t\tfor (const dependency of entity.view?.dependencies ?? []) {\n\t\t\t\tcascadeCreate(updatedSchema.model.entities[dependency])\n\t\t\t}\n\t\t\tmodifications.push(createViewModification.createModification({\n\t\t\t\tentity: {\n\t\t\t\t\t...entity,\n\t\t\t\t\tindexes: [],\n\t\t\t\t\tunique: [],\n\t\t\t\t},\n\t\t\t}))\n\t\t}\n\t\tfor (const view of newViews) {\n\t\t\tcascadeCreate(view)\n\t\t}\n\t\treturn modifications\n\t}\n}\n\nexport interface CreateViewModificationData {\n\tentity: PossibleEntityShapeInMigrations\n\tnoData?: boolean\n}\n"],"names":["updateModel","createModificationType"],"mappings":";;;;AAOO,MAAM,8BAAyF;AAAA,EACrG,YAA6B,MAAmD,QAAgB;AAAnE,SAAA,OAAA;AAAmD,SAAA,SAAA;AAAA,EAAA;AAAA,EAEzE,UAAU,SAAiC;AAC3C,UAAA,SAAS,KAAK,KAAK;AACrB,QAAA,CAAC,OAAO,MAAM;AACjB,YAAM,IAAI,MAAM;AAAA,IAAA;AAEb,QAAA,OAAO,KAAK,cAAc;AACrB,cAAA,uBAAuB,OAAO,WAAW;AAAA,QAChD,MAAM,KAAK,KAAK,WAAW;AAAA,MAAA,GACzB,OAAO,KAAK,GAAG;AAAA,IAAA,OACZ;AACN,cAAQ,WAAW,OAAO,WAAW,CAAA,GAAI,OAAO,KAAK,GAAG;AAAA,IAAA;AAAA,EACzD;AAAA,EAGM,mBAAkC;AACxC,WAAOA,kBAAY,YAAA,CAAC,EAAE,aAAa;AAAA,MAClC,GAAG;AAAA,MACH,UAAU;AAAA,QACT,GAAG,MAAM;AAAA,QACT,CAAC,KAAK,KAAK,OAAO,IAAI,GAAG;AAAA,UACxB,UAAU,EAAE,SAAS,KAAK;AAAA;AAAA,UAC1B,GAAG,KAAK,KAAK;AAAA,UACb,QAAQ,OAAO,OAAO,KAAK,KAAK,OAAO,MAAM;AAAA,UAC7C,SAAS,OAAO,OAAO,KAAK,KAAK,OAAO,WAAW,CAAE,CAAA;AAAA,QAAA;AAAA,MACtD;AAAA,IACD,EACC;AAAA,EAAA;AAAA,EAIH,WAAW;AACV,WAAO,EAAE,SAAS,YAAY,KAAK,KAAK,OAAO,IAAI,GAAG;AAAA,EAAA;AAExD;AAEO,MAAM,yBAAyBC,oBAAAA,uBAAuB;AAAA,EAC5D,IAAI;AAAA,EACJ,SAAS;AACV,CAAC;AAEM,MAAM,iBAAmC;AAAA,EAC/C,WAAW,gBAAwB,eAAuB;AACnD,UAAA,WAAW,OAAO,OAAO,cAAc,MAAM,QAAQ,EACzD,OAAO,CAAA,OAAM,CAAC,eAAe,MAAM,SAAS,GAAG,IAAI,CAAC,EACpD,OAAO,CAAM,OAAA,CAAC,CAAC,GAAG,IAAI;AAClB,UAAA,8BAAc,IAAY;AAChC,UAAM,gBAA0C,CAAC;AAC3C,UAAA,gBAAgB,CAAC,WAAyB;AAC3C,UAAA,eAAe,MAAM,SAAS,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,GAAG;AAC3E;AAAA,MAAA;AAEO,cAAA,IAAI,OAAO,IAAI;AACvB,iBAAW,cAAc,OAAO,MAAM,gBAAgB,CAAA,GAAI;AACzD,sBAAc,cAAc,MAAM,SAAS,UAAU,CAAC;AAAA,MAAA;AAEzC,oBAAA,KAAK,uBAAuB,mBAAmB;AAAA,QAC5D,QAAQ;AAAA,UACP,GAAG;AAAA,UACH,SAAS,CAAC;AAAA,UACV,QAAQ,CAAA;AAAA,QAAC;AAAA,MACV,CACA,CAAC;AAAA,IACH;AACA,eAAW,QAAQ,UAAU;AAC5B,oBAAc,IAAI;AAAA,IAAA;AAEZ,WAAA;AAAA,EAAA;AAET;;;;"}
|
|
@@ -10,7 +10,13 @@ class CreateViewModificationHandler {
|
|
|
10
10
|
if (!entity.view) {
|
|
11
11
|
throw new Error();
|
|
12
12
|
}
|
|
13
|
-
|
|
13
|
+
if (entity.view.materialized) {
|
|
14
|
+
builder.createMaterializedView(entity.tableName, {
|
|
15
|
+
data: this.data.noData !== true
|
|
16
|
+
}, entity.view.sql);
|
|
17
|
+
} else {
|
|
18
|
+
builder.createView(entity.tableName, {}, entity.view.sql);
|
|
19
|
+
}
|
|
14
20
|
}
|
|
15
21
|
getSchemaUpdater() {
|
|
16
22
|
return updateModel(({ model }) => ({
|
|
@@ -49,7 +55,11 @@ class CreateViewDiffer {
|
|
|
49
55
|
cascadeCreate(updatedSchema.model.entities[dependency]);
|
|
50
56
|
}
|
|
51
57
|
modifications.push(createViewModification.createModification({
|
|
52
|
-
entity
|
|
58
|
+
entity: {
|
|
59
|
+
...entity,
|
|
60
|
+
indexes: [],
|
|
61
|
+
unique: []
|
|
62
|
+
}
|
|
53
63
|
}));
|
|
54
64
|
};
|
|
55
65
|
for (const view of newViews) {
|