@dbml/core
Version:
> TODO: description
77 lines (76 loc) • 2.18 kB
JavaScript
var _ = require('lodash');
var _require = require('../utils'),
getFullTableName = _require.getFullTableName;
function makeEndPoint(tableName, columnName, relation) {
return {
tableName: tableName.name,
schemaName: tableName.schemaName,
fieldNames: columnName,
relation: relation
};
}
function setOption(value, fkOptions) {
fkOptions.forEach(function (option) {
if (option.type.match(/ON[^\S\r\n]DELETE/i)) {
value.onDelete = option.setting;
}
if (option.type.match(/ON[^\S\r\n]UPDATE/i)) {
value.onUpdate = option.setting;
}
});
}
function makeColumnConstraintFK(_unused, tableName, columnName, fkOptions) {
var value = {};
var fullTableName = getFullTableName(tableName);
value.endpoint = makeEndPoint(fullTableName, columnName, '1');
setOption(value, fkOptions);
return {
type: 'inline_refs',
value: [value]
};
}
function makeTableEndpoint(columnNames) {
return {
type: 'endpoint',
value: {
fieldNames: columnNames
}
};
}
function makeTableConstraintFK(_keyword1, endpoint1, _keyword2, tableName, endpoint2, fkOptions) {
var value = {};
var fullTableName = getFullTableName(tableName);
if (!endpoint2) {
// Omits columns list, see: https://docs.microsoft.com/en-us/sql/t-sql/statements/create-table-transact-sql?view=sql-server-ver16#foreign-key-constraints
// eslint-disable-next-line no-param-reassign
endpoint2 = {
type: 'endpoint',
value: {
fieldNames: null
}
};
}
endpoint1.value.relation = '*';
endpoint2.value.relation = '1';
endpoint2.value.tableName = fullTableName.name;
endpoint2.value.schemaName = fullTableName.schemaName;
value.endpoints = [endpoint1.value, endpoint2.value];
setOption(value, fkOptions);
return {
type: 'refs',
value: value
};
}
function makeOnSetting(type, setting) {
return {
type: type,
setting: setting.toLowerCase().trim().split(/[ ]+/).join(' ')
};
}
module.exports = {
makeOnSetting: makeOnSetting,
makeColumnConstraintFK: makeColumnConstraintFK,
makeTableConstraintFK: makeTableConstraintFK,
makeTableEndpoint: makeTableEndpoint
};
;