UNPKG

@dbml/core

Version:
77 lines (76 loc) 2.18 kB
"use strict"; 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 };