@dbml/core 2.3.0 → 2.4.1
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/lib/export/DbmlExporter.js +17 -9
- package/lib/export/JsonExporter.js +1 -3
- package/lib/export/ModelExporter.js +1 -3
- package/lib/export/MysqlExporter.js +50 -42
- package/lib/export/PostgresExporter.js +64 -49
- package/lib/export/SqlServerExporter.js +52 -46
- package/lib/model_structure/database.js +73 -28
- package/lib/model_structure/dbState.js +1 -3
- package/lib/model_structure/element.js +13 -13
- package/lib/model_structure/endpoint.js +18 -14
- package/lib/model_structure/enum.js +18 -14
- package/lib/model_structure/enumValue.js +16 -12
- package/lib/model_structure/field.js +47 -13
- package/lib/model_structure/indexColumn.js +16 -12
- package/lib/model_structure/indexes.js +18 -14
- package/lib/model_structure/ref.js +19 -16
- package/lib/model_structure/schema.js +24 -36
- package/lib/model_structure/table.js +19 -15
- package/lib/model_structure/tableGroup.js +18 -14
- package/lib/model_structure/utils.js +5 -0
- package/lib/parse/Parser.js +2 -4
- package/lib/parse/buildParser.js +1 -3
- package/lib/parse/dbml/parser.pegjs +64 -20
- package/lib/parse/dbmlParser.js +1401 -899
- package/lib/parse/mssql/constraint_definition/actions.js +2 -2
- package/lib/parse/mssql/fk_definition/actions.js +10 -3
- package/lib/parse/mssql/keyword_parsers.js +12 -2
- package/lib/parse/mssql/statements/actions.js +37 -6
- package/lib/parse/mssql/statements/index.js +1 -1
- package/lib/parse/mssql/statements/statement_types/alter_table/actions.js +11 -5
- package/lib/parse/mssql/statements/statement_types/comments/actions.js +57 -0
- package/lib/parse/mssql/statements/statement_types/comments/index.js +97 -0
- package/lib/parse/mssql/statements/statement_types/create_index/actions.js +6 -1
- package/lib/parse/mssql/statements/statement_types/create_table/actions.js +12 -10
- package/lib/parse/mssql/statements/statement_types/index.js +4 -1
- package/lib/parse/mssql/utils.js +16 -1
- package/lib/parse/mysql/parser.pegjs +66 -40
- package/lib/parse/mysqlParser.js +534 -359
- package/lib/parse/postgresParser.js +15 -13
- package/lib/parse/postgresql/Base_rules.pegjs +45 -10
- package/lib/parse/postgresql/Commands/Alter_table/Alter_table.pegjs +49 -4
- package/lib/parse/postgresql/Commands/Comment.pegjs +18 -6
- package/lib/parse/postgresql/Commands/Create_table/Create_table_normal.pegjs +5 -3
- package/lib/parse/postgresql/Commands/Create_table/Create_table_of.pegjs +1 -1
- package/lib/parse/postgresql/Commands/Create_table/Create_table_partition_of.pegjs +1 -1
- package/lib/parse/postgresql/Commands/Create_type/Create_type_enum.pegjs +2 -2
- package/lib/parse/postgresql/Commands/Ignore_syntax.pegjs +10 -1
- package/lib/parse/postgresql/InitializerUtils.pegjs +14 -2
- package/lib/parse/postgresql/Keywords.pegjs +5 -1
- package/lib/parse/postgresql/parser.pegjs +22 -8
- package/lib/parse/schemarbParser.js +3 -3
- package/package.json +2 -2
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
|
4
4
|
|
|
5
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
5
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
6
6
|
|
|
7
7
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
8
8
|
|
|
@@ -55,7 +55,7 @@ function makeTableConstraint(constraintName, option) {
|
|
|
55
55
|
if (!option) return null;
|
|
56
56
|
return {
|
|
57
57
|
type: option.type,
|
|
58
|
-
value: _objectSpread({}, option.value, {
|
|
58
|
+
value: _objectSpread(_objectSpread({}, option.value), {}, {
|
|
59
59
|
name: option.type === 'indexes' && option.value.pk ? null : constraintName
|
|
60
60
|
})
|
|
61
61
|
};
|
|
@@ -2,9 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
var _ = require('lodash');
|
|
4
4
|
|
|
5
|
+
var _require = require('../utils'),
|
|
6
|
+
getFullTableName = _require.getFullTableName;
|
|
7
|
+
|
|
5
8
|
function makeEndPoint(tableName, columnName, relation) {
|
|
6
9
|
return {
|
|
7
|
-
tableName: tableName
|
|
10
|
+
tableName: tableName.name,
|
|
11
|
+
schemaName: tableName.schemaName,
|
|
8
12
|
fieldNames: columnName,
|
|
9
13
|
relation: relation
|
|
10
14
|
};
|
|
@@ -24,7 +28,8 @@ function setOption(value, fkOptions) {
|
|
|
24
28
|
|
|
25
29
|
function makeColumnConstraintFK(_unused, tableName, columnName, fkOptions) {
|
|
26
30
|
var value = {};
|
|
27
|
-
|
|
31
|
+
var fullTableName = getFullTableName(tableName);
|
|
32
|
+
value.endpoint = makeEndPoint(fullTableName, columnName, '1');
|
|
28
33
|
setOption(value, fkOptions);
|
|
29
34
|
return {
|
|
30
35
|
type: 'inline_refs',
|
|
@@ -43,6 +48,7 @@ function makeTableEndpoint(columnNames) {
|
|
|
43
48
|
|
|
44
49
|
function makeTableConstraintFK(_keyword1, endpoint1, _keyword2, tableName, endpoint2, fkOptions) {
|
|
45
50
|
var value = {};
|
|
51
|
+
var fullTableName = getFullTableName(tableName);
|
|
46
52
|
|
|
47
53
|
if (!endpoint2) {
|
|
48
54
|
// eslint-disable-next-line no-param-reassign
|
|
@@ -55,7 +61,8 @@ function makeTableConstraintFK(_keyword1, endpoint1, _keyword2, tableName, endpo
|
|
|
55
61
|
|
|
56
62
|
endpoint1.value.relation = '*';
|
|
57
63
|
endpoint2.value.relation = '1';
|
|
58
|
-
endpoint2.value.tableName =
|
|
64
|
+
endpoint2.value.tableName = fullTableName.name;
|
|
65
|
+
endpoint2.value.schemaName = fullTableName.schemaName;
|
|
59
66
|
value.endpoints = [endpoint1.value, endpoint2.value];
|
|
60
67
|
setOption(value, fkOptions);
|
|
61
68
|
return {
|
|
@@ -72,7 +72,6 @@ exports.KeywordNoCheck = keyword(/NOCHECK/i);
|
|
|
72
72
|
exports.KeywordDrop = keyword(/DROP/i);
|
|
73
73
|
exports.KeywordAlterColumn = keyword(/ALTER COLUMN/i);
|
|
74
74
|
exports.KeywordGo = keyword(/GO/i);
|
|
75
|
-
exports.KeywordDrop = keyword(/DROP/i);
|
|
76
75
|
exports.KeywordBulkInsert = keyword(/BULK INSERT/i);
|
|
77
76
|
exports.KeywordInsert = keyword(/INSERT/i);
|
|
78
77
|
exports.KeywordUpdate = keyword(/UPDATE/i);
|
|
@@ -84,6 +83,7 @@ exports.KeywordCollate = keyword(/COLLATE/i);
|
|
|
84
83
|
exports.KeywordClose = keyword(/CLOSE/i);
|
|
85
84
|
exports.KeywordDeny = keyword(/DENY/i);
|
|
86
85
|
exports.KeywordExecute = keyword(/EXECUTE/i);
|
|
86
|
+
exports.KeywordExec = keyword(/EXEC/i);
|
|
87
87
|
exports.KeywordGrant = keyword(/GRANT/i);
|
|
88
88
|
exports.KeywordOpen = keyword(/OPEN/i);
|
|
89
89
|
exports.KeywordRevoke = keyword(/REVOKE/i);
|
|
@@ -97,6 +97,7 @@ exports.KeywordSend = keyword(/SEND/i);
|
|
|
97
97
|
exports.KeywordRename = keyword(/RENAME/i);
|
|
98
98
|
exports.KeywordDelete = keyword(/DELETE/i);
|
|
99
99
|
exports.KeywordIf = keyword(/IF/i);
|
|
100
|
+
exports.KeywordSP_ADDEXTENDEDPROPERTY = keyword(/sp_addextendedproperty/i);
|
|
100
101
|
exports.LogicalOpIn = keyword(/IN/i);
|
|
101
102
|
exports.LogicalOpAnd = keyword(/AND/i);
|
|
102
103
|
exports.LessThan = word('<');
|
|
@@ -105,7 +106,16 @@ exports.LParen = word('(');
|
|
|
105
106
|
exports.Comma = word(',');
|
|
106
107
|
exports.RParen = word(')');
|
|
107
108
|
exports.DoubleQuote = word('"');
|
|
109
|
+
exports.SingleQuote = word('\'');
|
|
108
110
|
exports.LBracket = word('[');
|
|
109
111
|
exports.RBracket = word(']');
|
|
110
112
|
exports.Equal = word('=');
|
|
111
|
-
exports.Semicolon = word(';');
|
|
113
|
+
exports.Semicolon = word(';');
|
|
114
|
+
exports.KeywordAtName = keyword(/@name/i);
|
|
115
|
+
exports.KeywordAtValue = keyword(/@value/i);
|
|
116
|
+
exports.KeywordAtLevel0Type = keyword(/@level0type/i);
|
|
117
|
+
exports.KeywordAtLevel0Name = keyword(/@level0name/i);
|
|
118
|
+
exports.KeywordAtLevel1Type = keyword(/@level1type/i);
|
|
119
|
+
exports.KeywordAtLevel1Name = keyword(/@level1name/i);
|
|
120
|
+
exports.KeywordAtLevel2Type = keyword(/@level2type/i);
|
|
121
|
+
exports.KeywordAtLevel2Name = keyword(/@level2name/i);
|
|
@@ -2,10 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
var _ = require('lodash');
|
|
4
4
|
|
|
5
|
-
function findTable(ast, tableName) {
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
function findTable(ast, tableName, schemaName) {
|
|
6
|
+
var realSchemaName = schemaName || 'public';
|
|
7
|
+
var table = ast.tables.find(function (t) {
|
|
8
|
+
var targetSchemaName = t.schemaName || 'public';
|
|
9
|
+
return targetSchemaName === realSchemaName && t.name === tableName;
|
|
8
10
|
});
|
|
11
|
+
return table;
|
|
9
12
|
}
|
|
10
13
|
|
|
11
14
|
function findField(table, fieldName) {
|
|
@@ -15,7 +18,7 @@ function findField(table, fieldName) {
|
|
|
15
18
|
}
|
|
16
19
|
|
|
17
20
|
function handleIndexes(index, ast) {
|
|
18
|
-
var table = findTable(ast, index.tableName);
|
|
21
|
+
var table = findTable(ast, index.tableName, index.schemaName);
|
|
19
22
|
table.indexes.push(index);
|
|
20
23
|
index.tableName = null;
|
|
21
24
|
}
|
|
@@ -37,7 +40,7 @@ function handleTable(table, ast) {
|
|
|
37
40
|
}
|
|
38
41
|
|
|
39
42
|
function handleDefaults(dbdefault, ast) {
|
|
40
|
-
var table = findTable(ast, dbdefault.tableName);
|
|
43
|
+
var table = findTable(ast, dbdefault.tableName, dbdefault.schemaName);
|
|
41
44
|
var field = findField(table, dbdefault.fieldName);
|
|
42
45
|
dbdefault.fieldName = null;
|
|
43
46
|
dbdefault.tableName = null;
|
|
@@ -45,7 +48,7 @@ function handleDefaults(dbdefault, ast) {
|
|
|
45
48
|
}
|
|
46
49
|
|
|
47
50
|
function handleEnums(_enum, ast) {
|
|
48
|
-
var table = findTable(ast, _enum.tableName);
|
|
51
|
+
var table = findTable(ast, _enum.tableName, _enum.schemaName);
|
|
49
52
|
var field = findField(table, _enum.fieldName);
|
|
50
53
|
_enum.name = "".concat(_enum.tableName, "_").concat(_enum.fieldName, "_enum");
|
|
51
54
|
_enum.fieldName = null;
|
|
@@ -56,6 +59,30 @@ function handleEnums(_enum, ast) {
|
|
|
56
59
|
}).join(', ');
|
|
57
60
|
}
|
|
58
61
|
|
|
62
|
+
function handleComment(comment, ast) {
|
|
63
|
+
if (comment.type === 'table') handleTableNote(comment, ast);else if (comment.type === 'column') handleFieldNote(comment, ast);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function handleTableNote(comment, ast) {
|
|
67
|
+
var schemaName = comment.schemaName;
|
|
68
|
+
if (schemaName === 'dbo') schemaName = null; // treat `dbo` as public schema
|
|
69
|
+
|
|
70
|
+
var foundTable = findTable(ast, comment.tableName, schemaName);
|
|
71
|
+
if (foundTable) foundTable.note = comment.note;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
function handleFieldNote(comment, ast) {
|
|
75
|
+
var schemaName = comment.schemaName;
|
|
76
|
+
if (schemaName === 'dbo') schemaName = null; // treat `dbo` as public schema
|
|
77
|
+
|
|
78
|
+
var foundTable = findTable(ast, comment.tableName, schemaName);
|
|
79
|
+
|
|
80
|
+
if (foundTable) {
|
|
81
|
+
var foundField = findField(foundTable, comment.columnName);
|
|
82
|
+
if (foundField) foundField.note = comment.note;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
59
86
|
function handleStatement(_statements) {
|
|
60
87
|
var ast = {
|
|
61
88
|
tables: [],
|
|
@@ -87,6 +114,10 @@ function handleStatement(_statements) {
|
|
|
87
114
|
handleEnums(statement.value, ast);
|
|
88
115
|
break;
|
|
89
116
|
|
|
117
|
+
case 'comment':
|
|
118
|
+
handleComment(statement.value, ast);
|
|
119
|
+
break;
|
|
120
|
+
|
|
90
121
|
default:
|
|
91
122
|
break;
|
|
92
123
|
}
|
|
@@ -18,7 +18,7 @@ var Lang = P.createLanguage({
|
|
|
18
18
|
return wss.then(r.Seperator).then(P.sepBy(r.StatementTypes, r.Seperator)).skip(r.Seperator).map(A.handleStatement);
|
|
19
19
|
},
|
|
20
20
|
StatementTypes: function StatementTypes(r) {
|
|
21
|
-
return P.alt(S.pCreateIndex, S.pCreateTable, S.pAlterTable, r.IgnoredStatementTypes);
|
|
21
|
+
return P.alt(S.pCreateIndex, S.pCreateTable, S.pAlterTable, S.pCommentSyntax, r.IgnoredStatementTypes);
|
|
22
22
|
},
|
|
23
23
|
IgnoredStatementTypes: function IgnoredStatementTypes(r) {
|
|
24
24
|
return P.seq(r.IgnoredStatementSyntax, pIgnore);
|
|
@@ -2,31 +2,37 @@
|
|
|
2
2
|
|
|
3
3
|
var _ = require('lodash');
|
|
4
4
|
|
|
5
|
+
var _require = require('../../../utils'),
|
|
6
|
+
getFullTableName = _require.getFullTableName;
|
|
7
|
+
|
|
5
8
|
function handleRef(tableName, result) {
|
|
6
9
|
var endpointWithNoTableName = result.value.endpoints.find(function (ele) {
|
|
7
10
|
return !ele.tableName;
|
|
8
11
|
});
|
|
9
|
-
endpointWithNoTableName.tableName =
|
|
12
|
+
endpointWithNoTableName.tableName = tableName.name;
|
|
13
|
+
endpointWithNoTableName.schemaName = tableName.schemaName;
|
|
10
14
|
}
|
|
11
15
|
|
|
12
16
|
function addTableName(tableName, result) {
|
|
13
|
-
result.value.tableName =
|
|
17
|
+
result.value.tableName = tableName.name;
|
|
18
|
+
result.value.schemaName = tableName.schemaName;
|
|
14
19
|
}
|
|
15
20
|
|
|
16
21
|
function handleAlterTableResult(_keyword, tableName, results) {
|
|
17
|
-
if (!results) return null;
|
|
22
|
+
if (!results) return null;
|
|
23
|
+
var fullName = getFullTableName(tableName); // eslint-disable-next-line consistent-return
|
|
18
24
|
|
|
19
25
|
results.forEach(function (result) {
|
|
20
26
|
if (result) {
|
|
21
27
|
switch (result.type) {
|
|
22
28
|
case 'refs':
|
|
23
|
-
handleRef(
|
|
29
|
+
handleRef(fullName, result);
|
|
24
30
|
break;
|
|
25
31
|
|
|
26
32
|
case 'indexes':
|
|
27
33
|
case 'dbdefault':
|
|
28
34
|
case 'enums':
|
|
29
|
-
addTableName(
|
|
35
|
+
addTableName(fullName, result);
|
|
30
36
|
break;
|
|
31
37
|
|
|
32
38
|
default:
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
function handleComment(_ref) {
|
|
4
|
+
var note = _ref.note,
|
|
5
|
+
level = _ref.level;
|
|
6
|
+
var type = 'unsupported';
|
|
7
|
+
var schemaName = null,
|
|
8
|
+
tableName = null,
|
|
9
|
+
columnName = null;
|
|
10
|
+
|
|
11
|
+
if (isValidTableNote(level)) {
|
|
12
|
+
schemaName = level[0].name;
|
|
13
|
+
tableName = level[1].name; // Table Comment
|
|
14
|
+
|
|
15
|
+
type = 'table';
|
|
16
|
+
} else if (isValidColumnNote(level)) {
|
|
17
|
+
schemaName = level[0].name;
|
|
18
|
+
tableName = level[1].name;
|
|
19
|
+
columnName = level[2].name;
|
|
20
|
+
type = 'column';
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
return {
|
|
24
|
+
type: 'comment',
|
|
25
|
+
value: {
|
|
26
|
+
type: type,
|
|
27
|
+
note: note,
|
|
28
|
+
schemaName: schemaName,
|
|
29
|
+
tableName: tableName,
|
|
30
|
+
columnName: columnName
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
var isSchema = function isSchema(type) {
|
|
36
|
+
return type.toLowerCase() === 'schema';
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
var isTable = function isTable(type) {
|
|
40
|
+
return type.toLowerCase() === 'table';
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
var isColumn = function isColumn(type) {
|
|
44
|
+
return type.toLowerCase() === 'column';
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
var isValidTableNote = function isValidTableNote(level) {
|
|
48
|
+
return level.length === 2 && isSchema(level[0].type) && isTable(level[1].type);
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
var isValidColumnNote = function isValidColumnNote(level) {
|
|
52
|
+
return level.length === 3 && isSchema(level[0].type) && isTable(level[1].type) && isColumn(level[2].type);
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
module.exports = {
|
|
56
|
+
handleComment: handleComment
|
|
57
|
+
};
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
4
|
+
|
|
5
|
+
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
6
|
+
|
|
7
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
8
|
+
|
|
9
|
+
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }
|
|
10
|
+
|
|
11
|
+
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
12
|
+
|
|
13
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
14
|
+
|
|
15
|
+
var P = require('parsimmon');
|
|
16
|
+
|
|
17
|
+
var KP = require('../../../keyword_parsers');
|
|
18
|
+
|
|
19
|
+
var A = require('./actions');
|
|
20
|
+
|
|
21
|
+
var _require = require('../../../utils'),
|
|
22
|
+
makeNode = _require.makeNode;
|
|
23
|
+
|
|
24
|
+
var Lang = P.createLanguage({
|
|
25
|
+
StartComment: function StartComment() {
|
|
26
|
+
return P.seq(KP.KeywordExec, KP.KeywordSP_ADDEXTENDEDPROPERTY);
|
|
27
|
+
},
|
|
28
|
+
EndComment: function EndComment() {
|
|
29
|
+
return P.seq(KP.Semicolon.atMost(1), KP.KeywordGo);
|
|
30
|
+
},
|
|
31
|
+
StartString: function StartString() {
|
|
32
|
+
return P.alt(KP.SingleQuote, P.string("N'"));
|
|
33
|
+
},
|
|
34
|
+
ManyDoubleSingleQuote: function ManyDoubleSingleQuote() {
|
|
35
|
+
return P.string("''");
|
|
36
|
+
},
|
|
37
|
+
NoSingleQuote: function NoSingleQuote() {
|
|
38
|
+
return P.regex(/[^']/);
|
|
39
|
+
},
|
|
40
|
+
StringType: function StringType(r) {
|
|
41
|
+
return P.alt(r.NoSingleQuote, r.ManyDoubleSingleQuote).atLeast(1).map(function (res) {
|
|
42
|
+
return res.join('');
|
|
43
|
+
});
|
|
44
|
+
},
|
|
45
|
+
NVarchar: function NVarchar(r) {
|
|
46
|
+
return r.StartString.then(r.StringType).skip(KP.SingleQuote);
|
|
47
|
+
},
|
|
48
|
+
NameOption: function NameOption(r) {
|
|
49
|
+
return KP.KeywordAtName.skip(KP.Equal).then(r.NVarchar);
|
|
50
|
+
},
|
|
51
|
+
ValueOption: function ValueOption(r) {
|
|
52
|
+
return KP.KeywordAtValue.skip(KP.Equal).then(r.NVarchar);
|
|
53
|
+
},
|
|
54
|
+
Level0Type: function Level0Type(r) {
|
|
55
|
+
return KP.KeywordAtLevel0Type.skip(KP.Equal).then(r.NVarchar);
|
|
56
|
+
},
|
|
57
|
+
Level0Name: function Level0Name(r) {
|
|
58
|
+
return KP.KeywordAtLevel0Name.skip(KP.Equal).then(r.NVarchar);
|
|
59
|
+
},
|
|
60
|
+
Level1Type: function Level1Type(r) {
|
|
61
|
+
return KP.KeywordAtLevel1Type.skip(KP.Equal).then(r.NVarchar);
|
|
62
|
+
},
|
|
63
|
+
Level1Name: function Level1Name(r) {
|
|
64
|
+
return KP.KeywordAtLevel1Name.skip(KP.Equal).then(r.NVarchar);
|
|
65
|
+
},
|
|
66
|
+
Level2Type: function Level2Type(r) {
|
|
67
|
+
return KP.KeywordAtLevel2Type.skip(KP.Equal).then(r.NVarchar);
|
|
68
|
+
},
|
|
69
|
+
Level2Name: function Level2Name(r) {
|
|
70
|
+
return KP.KeywordAtLevel2Name.skip(KP.Equal).then(r.NVarchar);
|
|
71
|
+
},
|
|
72
|
+
Level0Stmt: function Level0Stmt(r) {
|
|
73
|
+
return P.seqObj(['type', r.Level0Type], KP.Comma, ['name', r.Level0Name]);
|
|
74
|
+
},
|
|
75
|
+
Level1Stmt: function Level1Stmt(r) {
|
|
76
|
+
return P.seqObj(['type', r.Level1Type], KP.Comma, ['name', r.Level1Name]);
|
|
77
|
+
},
|
|
78
|
+
Level2Stmt: function Level2Stmt(r) {
|
|
79
|
+
return P.seqObj(['type', r.Level2Type], KP.Comma, ['name', r.Level2Name]);
|
|
80
|
+
},
|
|
81
|
+
Level0Wrapper: function Level0Wrapper(r) {
|
|
82
|
+
return P.alt(P.seq(r.Level0Stmt.skip(KP.Comma), r.Level1Wrapper), r.Level0Stmt).map(function (res) {
|
|
83
|
+
return Array.isArray(res) ? [res[0]].concat(_toConsumableArray(res[1])) : [res];
|
|
84
|
+
}).atMost(1).map(function (res) {
|
|
85
|
+
return res.length === 1 ? res[0] : res;
|
|
86
|
+
});
|
|
87
|
+
},
|
|
88
|
+
Level1Wrapper: function Level1Wrapper(r) {
|
|
89
|
+
return P.alt(P.seq(r.Level1Stmt.skip(KP.Comma), r.Level2Stmt), r.Level1Stmt).map(function (res) {
|
|
90
|
+
return Array.isArray(res) ? res : [res];
|
|
91
|
+
});
|
|
92
|
+
},
|
|
93
|
+
CommentSyntax: function CommentSyntax(r) {
|
|
94
|
+
return P.seqObj(r.StartComment, ['name', r.NameOption], KP.Comma, ['note', r.ValueOption], KP.Comma, ['level', r.Level0Wrapper], r.EndComment).map(A.handleComment).thru(makeNode());
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
module.exports = Lang.CommentSyntax;
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _require = require('../../../utils'),
|
|
4
|
+
getFullTableName = _require.getFullTableName;
|
|
5
|
+
|
|
3
6
|
function makeIndex(_create, isUnique, _clustered, _index, indexName, _on, tableName, columnNames) {
|
|
7
|
+
var fullTableName = getFullTableName(tableName);
|
|
4
8
|
var columns = [];
|
|
5
9
|
columnNames.forEach(function (columnName) {
|
|
6
10
|
columns.push({
|
|
@@ -13,7 +17,8 @@ function makeIndex(_create, isUnique, _clustered, _index, indexName, _on, tableN
|
|
|
13
17
|
value: {
|
|
14
18
|
name: indexName,
|
|
15
19
|
unique: isUnique ? true : null,
|
|
16
|
-
tableName:
|
|
20
|
+
tableName: fullTableName.name,
|
|
21
|
+
schemaName: fullTableName.schemaName,
|
|
17
22
|
columns: columns
|
|
18
23
|
}
|
|
19
24
|
};
|
|
@@ -2,12 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
|
4
4
|
|
|
5
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
5
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
6
6
|
|
|
7
7
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
8
8
|
|
|
9
9
|
var _ = require('lodash');
|
|
10
10
|
|
|
11
|
+
var _require = require('../../../utils'),
|
|
12
|
+
getFullTableName = _require.getFullTableName;
|
|
13
|
+
|
|
11
14
|
function createRefFromInlineRef(linesRefs, inlineRefs, fieldName, tableName) {
|
|
12
15
|
if (!inlineRefs || inlineRefs.length === 0) return;
|
|
13
16
|
var newRef = {};
|
|
@@ -16,7 +19,8 @@ function createRefFromInlineRef(linesRefs, inlineRefs, fieldName, tableName) {
|
|
|
16
19
|
newRef.onDelete = inlineRef.onDelete;
|
|
17
20
|
newRef.endpoints = [];
|
|
18
21
|
newRef.endpoints.push({
|
|
19
|
-
tableName: tableName,
|
|
22
|
+
tableName: tableName.name,
|
|
23
|
+
schemaName: tableName.schemaName,
|
|
20
24
|
fieldNames: [fieldName],
|
|
21
25
|
relation: '*'
|
|
22
26
|
});
|
|
@@ -33,7 +37,7 @@ function pushOutEnum(linesEnums, fieldValue, tableName) {
|
|
|
33
37
|
if (fieldValue.enums) {
|
|
34
38
|
var _enum = fieldValue.enums;
|
|
35
39
|
var fieldType = fieldValue.type;
|
|
36
|
-
_enum.name = "".concat(tableName, "_").concat(fieldValue.enums.name);
|
|
40
|
+
_enum.name = "".concat(tableName.schemaName ? "".concat(tableName.schemaName, "_") : '').concat(tableName.name, "_").concat(fieldValue.enums.name);
|
|
37
41
|
fieldType.type_name = _enum.name;
|
|
38
42
|
fieldType.args = _enum.values.map(function (value) {
|
|
39
43
|
return "'".concat(value.name, "'");
|
|
@@ -71,7 +75,8 @@ function getLinesValue(lines, tableName) {
|
|
|
71
75
|
|
|
72
76
|
if (line.type === 'refs') {
|
|
73
77
|
var ref = line.value;
|
|
74
|
-
ref.endpoints[0].tableName = tableName;
|
|
78
|
+
ref.endpoints[0].tableName = tableName.name;
|
|
79
|
+
ref.endpoints[0].schemaName = tableName.schemaName;
|
|
75
80
|
}
|
|
76
81
|
|
|
77
82
|
value[line.type].push(line.value);
|
|
@@ -84,14 +89,11 @@ function getLinesValue(lines, tableName) {
|
|
|
84
89
|
}
|
|
85
90
|
|
|
86
91
|
function makeTable(_keyword, tableName, _keyword2, lines) {
|
|
87
|
-
var
|
|
92
|
+
var fullName = getFullTableName(tableName);
|
|
93
|
+
var linesValue = getLinesValue(lines, fullName);
|
|
88
94
|
return {
|
|
89
95
|
type: 'tables',
|
|
90
|
-
value: _objectSpread({
|
|
91
|
-
name: _.last(tableName)
|
|
92
|
-
}, linesValue.value, {
|
|
93
|
-
schemaName: tableName.length > 1 ? tableName[tableName.length - 2] : null
|
|
94
|
-
})
|
|
96
|
+
value: _objectSpread(_objectSpread({}, fullName), linesValue.value)
|
|
95
97
|
};
|
|
96
98
|
}
|
|
97
99
|
|
|
@@ -6,8 +6,11 @@ var pCreateIndex = require('./create_index/index');
|
|
|
6
6
|
|
|
7
7
|
var pCreateTable = require('./create_table');
|
|
8
8
|
|
|
9
|
+
var pCommentSyntax = require('./comments');
|
|
10
|
+
|
|
9
11
|
module.exports = {
|
|
10
12
|
pAlterTable: pAlterTable,
|
|
11
13
|
pCreateIndex: pCreateIndex,
|
|
12
|
-
pCreateTable: pCreateTable
|
|
14
|
+
pCreateTable: pCreateTable,
|
|
15
|
+
pCommentSyntax: pCommentSyntax
|
|
13
16
|
};
|
package/lib/parse/mssql/utils.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
|
3
|
+
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
|
4
4
|
|
|
5
5
|
var P = require('parsimmon');
|
|
6
6
|
|
|
7
|
+
var _ = require('lodash');
|
|
8
|
+
|
|
7
9
|
var _require = require('./keyword_parsers'),
|
|
8
10
|
LParen = _require.LParen,
|
|
9
11
|
RParen = _require.RParen,
|
|
@@ -47,4 +49,17 @@ exports.streamline = function (type) {
|
|
|
47
49
|
};
|
|
48
50
|
});
|
|
49
51
|
};
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
exports.getFullTableName = function (nameList) {
|
|
55
|
+
var schemaName = null;
|
|
56
|
+
|
|
57
|
+
if (nameList.length > 1) {
|
|
58
|
+
schemaName = nameList[nameList.length - 2];
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return {
|
|
62
|
+
name: _.last(nameList),
|
|
63
|
+
schemaName: schemaName
|
|
64
|
+
};
|
|
50
65
|
};
|