-
Notifications
You must be signed in to change notification settings - Fork 12
Expand file tree
/
Copy pathnonNullConstraintHelper.js
More file actions
99 lines (85 loc) · 3.3 KB
/
nonNullConstraintHelper.js
File metadata and controls
99 lines (85 loc) · 3.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
const _ = require('lodash');
const { AlterScriptDto } = require('../../types/AlterScriptDto');
const { assignTemplates } = require('../../../utils/assignTemplates');
const templates = require('../../../ddlProvider/templates');
const {
wrapInQuotes,
getSchemaOfAlterCollection,
getFullCollectionName,
prepareNameForScriptFormat,
} = require('../../../utils/general');
/**
* @param {object} params
* @property {string} [scriptFormat]
* @property {AlterCollectionDto} collection
* @return {AlterScriptDto[]}
* */
const getModifyNonNullColumnsScriptDtos = ({ scriptFormat, collection }) => {
const prepareName = prepareNameForScriptFormat(scriptFormat);
const collectionSchema = getSchemaOfAlterCollection(collection);
const fullTableName = getFullCollectionName(scriptFormat)(collectionSchema);
const currentRequiredColumnNames = collection.required || [];
const previousRequiredColumnNames = collection.role.required || [];
const addNotNullConstraintsScript = _.toPairs(collection.properties)
.map(([name, jsonSchema]) => {
const oldName = jsonSchema.compMod.oldField.name;
const newConstraintName = jsonSchema.notNullConstraintName || '';
const oldConstraintName = collection.role.properties[oldName]?.notNullConstraintName || '';
const isNameChanged = newConstraintName !== oldConstraintName;
const isOldRequired = previousRequiredColumnNames.includes(oldName);
const isNewRequired = currentRequiredColumnNames.includes(name);
const scriptParams = {
tableName: fullTableName,
columnName: prepareName(name),
};
const scripts = [];
if (isOldRequired && (!isNewRequired || isNameChanged)) {
const template = oldConstraintName ? templates.dropConstraint : templates.alterNullableConstraint;
scripts.push(
assignTemplates(template, { ...scriptParams, constraintName: prepareName(oldConstraintName) }),
);
}
if (isNewRequired && (!isOldRequired || isNameChanged)) {
const template = newConstraintName
? templates.alterNamedNotNullConstraint
: templates.alterNotNullConstraint;
scripts.push(
assignTemplates(template, { ...scriptParams, constraintName: prepareName(newConstraintName) }),
);
}
return scripts.length ? AlterScriptDto.getInstance(scripts, true, false) : null;
})
.filter(Boolean);
return addNotNullConstraintsScript;
};
const createNotNullConstraintScript = ({ scriptFormat, constraintName, columnName }) => {
const prepareName = prepareNameForScriptFormat(scriptFormat);
return assignTemplates(templates.notNullConstraint, {
constraintName: prepareName(constraintName),
columnName: prepareName(columnName),
});
};
/**
* Get named NOT NULL constraints data
* @param {object} jsonSchema
* @param {string} scriptFormat
* @returns {Array<{ statement: string, isActivated: boolean }>}
*/
const getNotNullConstraints = (jsonSchema, scriptFormat) => {
return _.toPairs(jsonSchema.properties)
.filter(
([name, columnSchema]) => jsonSchema.required?.includes(name) && columnSchema.notNullConstraintName?.trim(),
)
.map(([name, columnSchema]) => ({
statement: createNotNullConstraintScript({
scriptFormat,
constraintName: columnSchema.notNullConstraintName,
columnName: name,
}),
isActivated: columnSchema.isActivated,
}));
};
module.exports = {
getModifyNonNullColumnsScriptDtos,
getNotNullConstraints,
};