Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 15 additions & 4 deletions forward_engineering/ddlProvider.js
Original file line number Diff line number Diff line change
Expand Up @@ -208,33 +208,42 @@ const ddlProvider = (baseProvider, options, app) => {
},

convertColumnDefinition(columnDefinition) {
const { name, persisted, computed, computedExpression, dbVersion } = columnDefinition;

const type = hasType(columnDefinition.type)
? _.toUpper(columnDefinition.type)
: getTableName(columnDefinition.type, columnDefinition.schemaName);

const notNull = columnDefinition.nullable ? '' : ' NOT NULL';

const primaryKey = columnDefinition.primaryKey
? ' ' + createPKConstraint(templates, terminator, true)(columnDefinition.primaryKeyOptions).statement
: '';

const defaultValue = getDefaultValue(columnDefinition.defaultConstraint, type);

const sparse = columnDefinition.sparse ? ' SPARSE' : '';

const maskedWithFunction = columnDefinition.maskedWithFunction
? ` MASKED WITH (FUNCTION='${columnDefinition.maskedWithFunction}')`
: '';

const identityContainer = columnDefinition.identity && { identity: getIdentity(columnDefinition.identity) };

const encryptedWith = _.isEmpty(columnDefinition.encryption)
? ''
: getEncryptedWith(columnDefinition.encryption[0]);
: getEncryptedWith({ encryption: columnDefinition.encryption[0], dbVersion });

const unique = columnDefinition.unique
? ' ' + createUKConstraint(templates, terminator, true)(columnDefinition.uniqueKeyOptions).statement
: '';

const temporalTableTime = getTempTableTime(
columnDefinition.isTempTableStartTimeColumn,
columnDefinition.isTempTableEndTimeColumn,
columnDefinition.isHidden,
);

const { name, persisted, computed, computedExpression } = columnDefinition;

const statement =
computed && computedExpression
? this.createComputedColumn({
Expand Down Expand Up @@ -529,6 +538,7 @@ const ddlProvider = (baseProvider, options, app) => {
increment: Number(_.get(jsonSchema, 'identity.identityIncrement', 0)),
},
}),
dbVersion: schemaData.dbVersion,
};
},

Expand Down Expand Up @@ -557,14 +567,15 @@ const ddlProvider = (baseProvider, options, app) => {
};
},

hydrateSchema(containerData, { procedures } = {}) {
hydrateSchema(containerData, { procedures, modelData = [] } = {}) {
return {
schemaName: containerData.name,
databaseName: containerData.databaseName,
ifNotExist: containerData.ifNotExist,
comment: containerData.role?.description ?? containerData.description,
isActivated: containerData.isActivated,
procedures: hydrateProcedures(procedures),
dbVersion: modelData[0]?.dbVersion,
};
},

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ const alterContainerHelper = (app, options) => {
udfs: containerData.role?.UDFs,
procedures: containerData.role?.Procedures,
useDb: false,
modelData: [{ dbVersion: options.dbVersion }],
});

return AlterScriptDto.getInstance([_.trim(ddlProvider.createSchema(schemaData))], true, false);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ const alterEntityHelper = (app, options) => {
const { getRenameColumnScriptsDto } = require('./columnHelpers/renameColumnHelpers')(ddlProvider);
const { getDefaultValueChangeDto } = require('./columnHelpers/defaultValueColumnHelper')(ddlProvider);
const { getChangedComputedColumnsScriptsDto } = require('./columnHelpers/alterComputedColumnHelper')(ddlProvider);
const { getChangeTypeScriptsDto } = require('./columnHelpers/alterTypeHelper')(ddlProvider);
const { getChangeTypeScriptsDto } = require('./columnHelpers/alterTypeHelper')(ddlProvider, options);
const { getModifyCheckConstraintScriptDtos } = require('./entityHelpers/checkConstraintHelper');
const { getModifyPkConstraintsScriptDtos } = require('./entityHelpers/primaryKeyHelper');
const { getModifyNonNullColumnsScriptDtos } = require('./columnHelpers/notNullConstraintsHelper');
Expand All @@ -28,7 +28,7 @@ const alterEntityHelper = (app, options) => {
const getAddCollectionScriptDto = (collection, inlineDeltaRelationships) => {
//done but need clean up
const schemaName = collection.compMod.keyspaceName;
const schemaData = { schemaName };
const schemaData = { schemaName, dbVersion: options.dbVersion };
const jsonSchema = { ...collection, ...collection?.role };
const tableName = getEntityName(jsonSchema);
const idToNameHashTable = generateIdToNameHashTable(jsonSchema);
Expand Down Expand Up @@ -116,7 +116,7 @@ const alterEntityHelper = (app, options) => {
const getModifyCollectionScriptDto = collection => {
const jsonSchema = { ...collection, ...collection?.role };
const schemaName = collection.compMod?.keyspaceName;
const schemaData = { schemaName };
const schemaData = { schemaName, dbVersion: options.dbVersion };
const idToNameHashTable = generateIdToNameHashTable(jsonSchema);
const idToActivatedHashTable = generateIdToActivatedHashTable(jsonSchema);
const modifyCheckConstraintScriptDtos = getModifyCheckConstraintScriptDtos(ddlProvider)(collection);
Expand Down Expand Up @@ -160,7 +160,7 @@ const alterEntityHelper = (app, options) => {
const tableName = collectionSchema?.code || collectionSchema?.collectionName || collectionSchema?.name;
const schemaName = collectionSchema.compMod?.keyspaceName;
const fullName = getTableName(tableName, schemaName);
const schemaData = { schemaName };
const schemaData = { schemaName, dbVersion: options.dbVersion };

return _.toPairs(collection.properties)
.filter(([name, jsonSchema]) => !jsonSchema.compMod)
Expand Down Expand Up @@ -221,13 +221,15 @@ const alterEntityHelper = (app, options) => {
collection,
collectionSchema,
schemaName,
options.dbVersion,
);
const modifiedDefaultValues = getDefaultValueChangeDto(collection, fullName);
const changedComputedScriptsDtos = getChangedComputedColumnsScriptsDto({
collection,
fullName,
collectionSchema,
schemaName,
dbVersion: options.dbVersion,
});

return [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ const parseDataForEntityLevelScript = data => {
const getEntityLevelAlterScriptDtos =
(data, app) =>
({ jsonSchema }) => {
return getAlterScriptDtos(jsonSchema, app, data.options);
return getAlterScriptDtos(jsonSchema, app, { ...data.options, dbVersion: data.modelData[0]?.dbVersion });
};

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ const alterUdtHelper = (app, options) => {
const schemaNames = getSchemaNames(jsonSchema);

return Object.keys(schemaNames).map(schemaName => {
const schemaData = { schemaName };
const schemaData = { schemaName, dbVersion: options.dbVersion };

const udt = createColumnDefinitionBySchema({
name: jsonSchema.code || jsonSchema.name,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ const alterViewHelper = (app, options) => {
const viewSchema = { ...view, ...view.role };
const idToNameHashTable = generateRefToNameHashTable(viewSchema);
const idToActivatedHashTable = generateRefToActivatedHashTable(viewSchema);
const schemaData = { schemaName: viewSchema.compMod.keyspaceName };
const schemaData = { schemaName: viewSchema.compMod.keyspaceName, dbVersion: options.dbVersion };

const viewData = {
name: viewSchema.code || viewSchema.name,
Expand Down Expand Up @@ -45,7 +45,7 @@ const alterViewHelper = (app, options) => {
const viewSchema = { ...view, ...view.role };
const idToNameHashTable = generateIdToNameHashTable(viewSchema);
const idToActivatedHashTable = generateIdToActivatedHashTable(viewSchema);
const schemaData = { schemaName: viewSchema.compMod.keyspaceName };
const schemaData = { schemaName: viewSchema.compMod.keyspaceName, dbVersion: options.dbVersion };
const viewData = {
name: viewSchema.code || viewSchema.name,
keys: getKeys(viewSchema, viewSchema.compMod?.collectionData?.collectionRefsDefinitionsMap ?? {}),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,9 @@ const alterComputedColumnHelper = ddlProvider => {
schemaName,
toAddNotNull,
toRemoveNotNull,
dbVersion,
}) => {
const schemaData = { schemaName };
const schemaData = { schemaName, dbVersion };
const columnDefinition = createColumnDefinitionBySchema({
name: columnName,
jsonSchema,
Expand Down Expand Up @@ -65,7 +66,7 @@ const alterComputedColumnHelper = ddlProvider => {
return sqlScripts;
};

const getChangedComputedColumnsScriptsDto = ({ collection, fullName, collectionSchema, schemaName }) => {
const getChangedComputedColumnsScriptsDto = ({ collection, fullName, collectionSchema, schemaName, dbVersion }) => {
return _.toPairs(collection.properties)
.reduce((result, [columnName, jsonSchema]) => {
const oldJsonSchema = _.omit(collection.role?.properties?.[columnName], ['compMod']);
Expand All @@ -90,6 +91,7 @@ const alterComputedColumnHelper = ddlProvider => {
schemaName,
toAddNotNull,
toRemoveNotNull,
dbVersion,
}),
);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ const { AlterScriptDto } = require('../types/AlterScriptDto');
const { checkFieldPropertiesChanged } = require('../common');
const { createColumnDefinitionBySchema } = require('./createColumnDefinition');

const alterTypeHelper = ddlProvider => {
const alterTypeHelper = (ddlProvider, options) => {
const getChangeTypeScriptsDto = (collectionProperties, fullName, collectionSchema, schemaName) => {
const schemaData = { schemaName };
const schemaData = { schemaName, dbVersion: options.dbVersion };

return _.toPairs(collectionProperties)
.filter(([name, jsonSchema]) => checkFieldPropertiesChanged(jsonSchema.compMod, ['type', 'mode']))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ const { createColumnDefinitionBySchema } = require('./createColumnDefinition');
/**
* @return {(collection: Collection) => AlterScriptDto[]}
* */
const getModifyNonNullColumnsScriptDtos = ddlProvider => (collection, collectionSchema, schemaName) => {
const getModifyNonNullColumnsScriptDtos = ddlProvider => (collection, collectionSchema, schemaName, dbVersion) => {
const fullTableName = getFullTableName(collection);
const schemaData = { schemaName };
const schemaData = { schemaName, dbVersion };

const currentRequiredColumnNames = collection.required || [];
const previousRequiredColumnNames = collection.role.required || [];
Expand Down
41 changes: 27 additions & 14 deletions forward_engineering/helpers/columnDefinitionHelper.js
Original file line number Diff line number Diff line change
Expand Up @@ -96,20 +96,33 @@ const addClustered = (statement, columnDefinition) => {
return statement + ' CLUSTERED';
};

const getEncryptedWith = encryption => {
return (
' ENCRYPTED WITH (\n' +
'\t\tCOLUMN_ENCRYPTION_KEY=' +
encryption.key +
',\n' +
'\t\tENCRYPTION_TYPE=' +
encryption.type +
',\n' +
"\t\tALGORITHM='" +
encryption.algorithm +
"'\n" +
'\t)'
);
const getEncryptedWith = ({ encryption, dbVersion }) => {
const { key, type, algorithm } = encryption;

if (!key || !type) {
return '';
}

// must be in sync with ENCRYPTION_ALGORITHM dependency of fieldLevelConfig
const noAlgorithmDbVersions = ['2008', '2012', '2014'];
const hasAlgorithm = !noAlgorithmDbVersions.includes(dbVersion);

if (hasAlgorithm && !algorithm) {
return '';
}

const blockIndentation = '\n\t\t';

let script = ` ENCRYPTED WITH (`;

script += `${blockIndentation}COLUMN_ENCRYPTION_KEY=${key}`;
script += `,${blockIndentation}ENCRYPTION_TYPE=${type}`;

if (hasAlgorithm) {
script += `,${blockIndentation}ALGORITHM='${algorithm}'`;
}

return `${script}\n\t)`;
};

const getColumnsComments = (tableName, terminator, columnDefinitions) => {
Expand Down
34 changes: 31 additions & 3 deletions properties_pane/field_level/fieldLevelConfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -417,20 +417,48 @@ making sure that you maintain a proper JSON format.
{
"propertyName": "Key name",
"propertyKeyword": "COLUMN_ENCRYPTION_KEY",
"propertyType": "text"
"propertyType": "text",
"requiredProperty": "true"
},
{
"propertyName": "Type",
"propertyKeyword": "ENCRYPTION_TYPE",
"propertyType": "select",
"options": ["DETERMINISTIC", "RANDOMIZED"],
"data": "options",
"valueType": "string"
"valueType": "string",
"requiredProperty": "true"
},
{
"propertyName": "Algorithm",
"propertyKeyword": "ENCRYPTION_ALGORITHM",
"propertyType": "text"
"propertyType": "text",
"requiredProperty": "true",
"defaultValue": "AEAD_AES_256_CBC_HMAC_SHA_256",
"cleanDependency": true,
"dependency": {
"type": "not",
"values": {
"type": "or",
"values": [
{
"level": "model",
"key": "dbVersion",
"value": "2008"
},
{
"level": "model",
"key": "dbVersion",
"value": "2012"
},
{
"level": "model",
"key": "dbVersion",
"value": "2014"
}
]
}
}
}
]
},
Expand Down