@dbml/core 3.11.0 → 3.12.0-alpha-0

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.
Files changed (160) hide show
  1. package/LICENSE +0 -0
  2. package/README.md +0 -0
  3. package/lib/export/DbmlExporter.js +0 -0
  4. package/lib/export/JsonExporter.js +0 -0
  5. package/lib/export/ModelExporter.js +0 -0
  6. package/lib/export/MysqlExporter.js +0 -0
  7. package/lib/export/OracleExporter.js +0 -0
  8. package/lib/export/PostgresExporter.js +0 -0
  9. package/lib/export/README.md +0 -0
  10. package/lib/export/SqlServerExporter.js +0 -0
  11. package/lib/export/index.js +0 -0
  12. package/lib/export/utils.js +0 -0
  13. package/lib/import/index.js +0 -0
  14. package/lib/index.js +0 -0
  15. package/lib/model_structure/config.js +0 -0
  16. package/lib/model_structure/database.js +39 -10
  17. package/lib/model_structure/dbState.js +1 -0
  18. package/lib/model_structure/element.js +0 -0
  19. package/lib/model_structure/endpoint.js +0 -0
  20. package/lib/model_structure/enum.js +0 -0
  21. package/lib/model_structure/enumValue.js +0 -0
  22. package/lib/model_structure/field.js +0 -0
  23. package/lib/model_structure/indexColumn.js +0 -0
  24. package/lib/model_structure/indexes.js +0 -0
  25. package/lib/model_structure/ref.js +0 -0
  26. package/lib/model_structure/schema.js +0 -0
  27. package/lib/model_structure/stickyNote.js +0 -0
  28. package/lib/model_structure/table.js +0 -0
  29. package/lib/model_structure/tableGroup.js +0 -0
  30. package/lib/model_structure/utils.js +6 -0
  31. package/lib/parse/ANTLR/ASTGeneration/AST.js +0 -0
  32. package/lib/parse/ANTLR/ASTGeneration/ParserErrorListener.js +0 -0
  33. package/lib/parse/ANTLR/ASTGeneration/SyntaxError.js +0 -0
  34. package/lib/parse/ANTLR/ASTGeneration/constants.js +4 -2
  35. package/lib/parse/ANTLR/ASTGeneration/helpers.js +0 -0
  36. package/lib/parse/ANTLR/ASTGeneration/index.js +21 -5
  37. package/lib/parse/ANTLR/ASTGeneration/mssql/MssqlASTGen.js +1334 -0
  38. package/lib/parse/ANTLR/ASTGeneration/mysql/MySQLASTGen.js +159 -4
  39. package/lib/parse/ANTLR/ASTGeneration/postgres/PostgreSQLLexerBase.js +0 -0
  40. package/lib/parse/ANTLR/ASTGeneration/postgres/PostgreSQLParserBase.js +0 -0
  41. package/lib/parse/ANTLR/ASTGeneration/postgres/PostgresASTGen.js +225 -5
  42. package/lib/parse/ANTLR/ASTGeneration/snowflake/SnowflakeASTGen.js +0 -0
  43. package/lib/parse/ANTLR/README.md +6 -1
  44. package/lib/parse/ANTLR/parsers/mssql/TSqlLexer.g4 +1300 -0
  45. package/lib/parse/ANTLR/parsers/mssql/TSqlLexer.interp +3643 -0
  46. package/lib/parse/ANTLR/parsers/mssql/TSqlLexer.js +1255 -0
  47. package/lib/parse/ANTLR/parsers/mssql/TSqlLexer.tokens +2385 -0
  48. package/lib/parse/ANTLR/parsers/mssql/TSqlParser.g4 +6313 -0
  49. package/lib/parse/ANTLR/parsers/mssql/TSqlParser.interp +3034 -0
  50. package/lib/parse/ANTLR/parsers/mssql/TSqlParser.js +3 -0
  51. package/lib/parse/ANTLR/parsers/mssql/TSqlParser.tokens +2385 -0
  52. package/lib/parse/ANTLR/parsers/mssql/TSqlParserVisitor.js +5732 -0
  53. package/lib/parse/ANTLR/parsers/mysql/MySqlLexer.g4 +0 -0
  54. package/lib/parse/ANTLR/parsers/mysql/MySqlLexer.interp +0 -0
  55. package/lib/parse/ANTLR/parsers/mysql/MySqlLexer.js +0 -0
  56. package/lib/parse/ANTLR/parsers/mysql/MySqlLexer.tokens +0 -0
  57. package/lib/parse/ANTLR/parsers/mysql/MySqlParser.g4 +0 -0
  58. package/lib/parse/ANTLR/parsers/mysql/MySqlParser.interp +0 -0
  59. package/lib/parse/ANTLR/parsers/mysql/MySqlParser.js +0 -0
  60. package/lib/parse/ANTLR/parsers/mysql/MySqlParser.tokens +0 -0
  61. package/lib/parse/ANTLR/parsers/mysql/MySqlParserVisitor.js +0 -0
  62. package/lib/parse/ANTLR/parsers/postgresql/PostgreSQLLexer.g4 +0 -0
  63. package/lib/parse/ANTLR/parsers/postgresql/PostgreSQLLexer.interp +0 -0
  64. package/lib/parse/ANTLR/parsers/postgresql/PostgreSQLLexer.js +0 -0
  65. package/lib/parse/ANTLR/parsers/postgresql/PostgreSQLLexer.tokens +0 -0
  66. package/lib/parse/ANTLR/parsers/postgresql/PostgreSQLParser.g4 +0 -0
  67. package/lib/parse/ANTLR/parsers/postgresql/PostgreSQLParser.interp +0 -0
  68. package/lib/parse/ANTLR/parsers/postgresql/PostgreSQLParser.js +0 -0
  69. package/lib/parse/ANTLR/parsers/postgresql/PostgreSQLParser.tokens +0 -0
  70. package/lib/parse/ANTLR/parsers/postgresql/PostgreSQLParserVisitor.js +0 -0
  71. package/lib/parse/ANTLR/parsers/postgresql/README.md +0 -0
  72. package/lib/parse/ANTLR/parsers/snowflake/SnowflakeLexer.g4 +0 -0
  73. package/lib/parse/ANTLR/parsers/snowflake/SnowflakeLexer.interp +0 -0
  74. package/lib/parse/ANTLR/parsers/snowflake/SnowflakeLexer.js +0 -0
  75. package/lib/parse/ANTLR/parsers/snowflake/SnowflakeLexer.tokens +0 -0
  76. package/lib/parse/ANTLR/parsers/snowflake/SnowflakeParser.g4 +0 -0
  77. package/lib/parse/ANTLR/parsers/snowflake/SnowflakeParser.interp +0 -0
  78. package/lib/parse/ANTLR/parsers/snowflake/SnowflakeParser.js +0 -0
  79. package/lib/parse/ANTLR/parsers/snowflake/SnowflakeParser.tokens +0 -0
  80. package/lib/parse/ANTLR/parsers/snowflake/SnowflakeParserVisitor.js +0 -0
  81. package/lib/parse/Parser.js +10 -0
  82. package/lib/parse/buildParser.js +0 -0
  83. package/lib/parse/databaseGenerator.js +0 -0
  84. package/lib/parse/dbml/parser.pegjs +0 -0
  85. package/lib/parse/dbmlParser.js +0 -0
  86. package/lib/parse/error.js +0 -0
  87. package/lib/parse/mssql/base_parsers.js +0 -0
  88. package/lib/parse/mssql/column_definition/actions.js +0 -0
  89. package/lib/parse/mssql/column_definition/index.js +0 -0
  90. package/lib/parse/mssql/constraint_definition/actions.js +0 -0
  91. package/lib/parse/mssql/constraint_definition/index.js +0 -0
  92. package/lib/parse/mssql/expression.js +0 -0
  93. package/lib/parse/mssql/fk_definition/actions.js +0 -0
  94. package/lib/parse/mssql/fk_definition/index.js +0 -0
  95. package/lib/parse/mssql/index.js +0 -0
  96. package/lib/parse/mssql/index_definition/actions.js +0 -0
  97. package/lib/parse/mssql/index_definition/index.js +0 -0
  98. package/lib/parse/mssql/keyword_parsers.js +0 -0
  99. package/lib/parse/mssql/keyword_utils.js +0 -0
  100. package/lib/parse/mssql/statements/actions.js +0 -0
  101. package/lib/parse/mssql/statements/index.js +0 -0
  102. package/lib/parse/mssql/statements/statement_types/alter_table/actions.js +0 -0
  103. package/lib/parse/mssql/statements/statement_types/alter_table/add/actions.js +0 -0
  104. package/lib/parse/mssql/statements/statement_types/alter_table/add/index.js +0 -0
  105. package/lib/parse/mssql/statements/statement_types/alter_table/index.js +0 -0
  106. package/lib/parse/mssql/statements/statement_types/comments/actions.js +0 -0
  107. package/lib/parse/mssql/statements/statement_types/comments/index.js +0 -0
  108. package/lib/parse/mssql/statements/statement_types/create_index/actions.js +0 -0
  109. package/lib/parse/mssql/statements/statement_types/create_index/index.js +0 -0
  110. package/lib/parse/mssql/statements/statement_types/create_table/actions.js +0 -0
  111. package/lib/parse/mssql/statements/statement_types/create_table/index.js +0 -0
  112. package/lib/parse/mssql/statements/statement_types/index.js +0 -0
  113. package/lib/parse/mssql/utils.js +0 -0
  114. package/lib/parse/mssql/whitespaces.js +0 -0
  115. package/lib/parse/mssqlParser.js +0 -0
  116. package/lib/parse/mysql/parser.pegjs +0 -0
  117. package/lib/parse/mysqlParser.js +0 -0
  118. package/lib/parse/postgresParser.js +0 -0
  119. package/lib/parse/postgresql/Base_rules.pegjs +0 -0
  120. package/lib/parse/postgresql/Commands/Alter_table/Alter_table.pegjs +0 -0
  121. package/lib/parse/postgresql/Commands/Commands.pegjs +0 -0
  122. package/lib/parse/postgresql/Commands/Comment.pegjs +0 -0
  123. package/lib/parse/postgresql/Commands/Create_index.pegjs +0 -0
  124. package/lib/parse/postgresql/Commands/Create_table/Create_table.pegjs +0 -0
  125. package/lib/parse/postgresql/Commands/Create_table/Create_table_normal.pegjs +0 -0
  126. package/lib/parse/postgresql/Commands/Create_table/Create_table_of.pegjs +0 -0
  127. package/lib/parse/postgresql/Commands/Create_table/Create_table_partition_of.pegjs +0 -0
  128. package/lib/parse/postgresql/Commands/Create_type/Create_type.pegjs +0 -0
  129. package/lib/parse/postgresql/Commands/Create_type/Create_type_enum.pegjs +0 -0
  130. package/lib/parse/postgresql/Commands/Create_type/Create_type_range.pegjs +0 -0
  131. package/lib/parse/postgresql/Commands/Ignore_syntax.pegjs +0 -0
  132. package/lib/parse/postgresql/Expression.pegjs +0 -0
  133. package/lib/parse/postgresql/InitializerUtils.pegjs +0 -0
  134. package/lib/parse/postgresql/Keywords.pegjs +0 -0
  135. package/lib/parse/postgresql/get_parser.js +0 -0
  136. package/lib/parse/postgresql/parser.pegjs +0 -0
  137. package/lib/parse/schemarb/parser.pegjs +0 -0
  138. package/lib/parse/schemarbParser.js +0 -0
  139. package/lib/utils/version.js +0 -0
  140. package/package.json +3 -3
  141. package/types/export/ModelExporter.d.ts +0 -0
  142. package/types/export/index.d.ts +0 -0
  143. package/types/import/index.d.ts +0 -0
  144. package/types/index.d.ts +0 -0
  145. package/types/model_structure/database.d.ts +34 -1
  146. package/types/model_structure/dbState.d.ts +0 -0
  147. package/types/model_structure/element.d.ts +0 -0
  148. package/types/model_structure/endpoint.d.ts +0 -0
  149. package/types/model_structure/enum.d.ts +0 -0
  150. package/types/model_structure/enumValue.d.ts +0 -0
  151. package/types/model_structure/field.d.ts +0 -0
  152. package/types/model_structure/indexColumn.d.ts +0 -0
  153. package/types/model_structure/indexes.d.ts +0 -0
  154. package/types/model_structure/ref.d.ts +0 -0
  155. package/types/model_structure/schema.d.ts +0 -0
  156. package/types/model_structure/stickyNote.d.ts +0 -0
  157. package/types/model_structure/table.d.ts +0 -0
  158. package/types/model_structure/tableGroup.d.ts +0 -0
  159. package/types/parse/Parser.d.ts +3 -2
  160. package/types/parse/error.d.ts +0 -0
@@ -0,0 +1,1334 @@
1
+ "use strict";
2
+
3
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports["default"] = void 0;
8
+ var _lodash = require("lodash");
9
+ var _utils = require("../../../../model_structure/utils");
10
+ var _TSqlParserVisitor2 = _interopRequireDefault(require("../../parsers/mssql/TSqlParserVisitor"));
11
+ var _constants = require("../constants");
12
+ var _helpers = require("../helpers");
13
+ var _AST = require("../AST");
14
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
15
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
16
+ 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."); }
17
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
18
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
19
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
20
+ function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
21
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
22
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
23
+ function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
24
+ function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
25
+ function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
26
+ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
27
+ function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
28
+ function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
29
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
30
+ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
31
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
32
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
33
+ 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); }
34
+ 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; }
35
+ function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
36
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } /* eslint-disable class-methods-use-this */
37
+ var ADD_DESCRIPTION_FUNCTION_NAME = 'sp_addextendedproperty';
38
+ var getSchemaAndTableName = function getSchemaAndTableName(names) {
39
+ var tableName = (0, _lodash.last)(names);
40
+ var schemaName = names.length > 1 ? (0, _lodash.nth)(names, -2) : undefined;
41
+ return {
42
+ schemaName: schemaName,
43
+ tableName: tableName
44
+ };
45
+ };
46
+ var getStringFromRawString = function getStringFromRawString(rawString) {
47
+ if (rawString.startsWith("N'")) {
48
+ return rawString;
49
+ }
50
+ return rawString.slice(1, rawString.length - 1);
51
+ };
52
+
53
+ /**
54
+ * @param {any[]} columnDefTableConstraints
55
+ * @returns {{
56
+ * fieldsData: any[],
57
+ * indexes: any[],
58
+ * tableRefs: any[],
59
+ * }}
60
+ */
61
+ var splitColumnDefTableConstraints = function splitColumnDefTableConstraints(columnDefTableConstraints) {
62
+ var _columnDefTableConstr = columnDefTableConstraints.reduce(function (acc, columnDefTableConstraint) {
63
+ switch (columnDefTableConstraint.kind) {
64
+ case _constants.TABLE_CONSTRAINT_KIND.FIELD:
65
+ acc[0].push(columnDefTableConstraint.value);
66
+ break;
67
+ case _constants.TABLE_CONSTRAINT_KIND.INDEX:
68
+ case _constants.TABLE_CONSTRAINT_KIND.PK:
69
+ case _constants.TABLE_CONSTRAINT_KIND.UNIQUE:
70
+ acc[1].push(columnDefTableConstraint.value);
71
+ break;
72
+ case _constants.TABLE_CONSTRAINT_KIND.FK:
73
+ acc[2].push(columnDefTableConstraint.value);
74
+ break;
75
+ case _constants.TABLE_CONSTRAINT_KIND.DEFAULT:
76
+ acc[3].push(columnDefTableConstraint.value);
77
+ break;
78
+ default:
79
+ break;
80
+ }
81
+ return acc;
82
+ }, [[], [], [], []]),
83
+ _columnDefTableConstr2 = _slicedToArray(_columnDefTableConstr, 4),
84
+ fieldsData = _columnDefTableConstr2[0],
85
+ indexes = _columnDefTableConstr2[1],
86
+ tableRefs = _columnDefTableConstr2[2],
87
+ columnDefaults = _columnDefTableConstr2[3];
88
+ return {
89
+ fieldsData: fieldsData,
90
+ indexes: indexes,
91
+ tableRefs: tableRefs,
92
+ columnDefaults: columnDefaults
93
+ };
94
+ };
95
+ var parseFieldsAndInlineRefsFromFieldsData = function parseFieldsAndInlineRefsFromFieldsData(fieldsData, tableName, schemaName) {
96
+ var _fieldsData$reduce = fieldsData.reduce(function (acc, fieldData) {
97
+ var inlineRefs = fieldData.inline_refs.map(function (inlineRef) {
98
+ inlineRef.endpoints[0].tableName = tableName;
99
+ inlineRef.endpoints[0].schemaName = schemaName;
100
+ inlineRef.endpoints[0].fieldNames = [fieldData.field.name];
101
+ return inlineRef;
102
+ });
103
+ acc[0].push(inlineRefs);
104
+ acc[1].push(fieldData.field);
105
+ return acc;
106
+ }, [[], []]),
107
+ _fieldsData$reduce2 = _slicedToArray(_fieldsData$reduce, 2),
108
+ resInlineRefs = _fieldsData$reduce2[0],
109
+ fields = _fieldsData$reduce2[1];
110
+ return {
111
+ inlineRefs: resInlineRefs,
112
+ fields: fields
113
+ };
114
+ };
115
+ var MssqlASTGen = /*#__PURE__*/function (_TSqlParserVisitor) {
116
+ _inherits(MssqlASTGen, _TSqlParserVisitor);
117
+ var _super = _createSuper(MssqlASTGen);
118
+ function MssqlASTGen() {
119
+ var _this;
120
+ _classCallCheck(this, MssqlASTGen);
121
+ _this = _super.call(this);
122
+ _this.data = {
123
+ schemas: [],
124
+ tables: [],
125
+ refs: [],
126
+ enums: [],
127
+ tableGroups: [],
128
+ aliases: [],
129
+ project: {},
130
+ records: []
131
+ };
132
+ return _this;
133
+ }
134
+
135
+ // tsql_file
136
+ // : batch* EOF
137
+ // | execute_body_batch go_statement* EOF
138
+ // ;
139
+ _createClass(MssqlASTGen, [{
140
+ key: "visitTsql_file",
141
+ value: function visitTsql_file(ctx) {
142
+ var _this2 = this;
143
+ ctx.batch().forEach(function (batch) {
144
+ return batch.accept(_this2);
145
+ });
146
+ return this.data;
147
+ }
148
+
149
+ // batch
150
+ // : go_statement
151
+ // | execute_body_batch? (go_statement | sql_clauses+) go_statement*
152
+ // | batch_level_statement go_statement*
153
+ // ;
154
+ }, {
155
+ key: "visitBatch",
156
+ value: function visitBatch(ctx) {
157
+ var _this3 = this;
158
+ if (ctx.sql_clauses()) {
159
+ ctx.sql_clauses().forEach(function (sqlClause) {
160
+ return sqlClause.accept(_this3);
161
+ });
162
+ }
163
+ }
164
+
165
+ // sql_clauses
166
+ // : dml_clause SEMI?
167
+ // | cfl_statement SEMI?
168
+ // | another_statement SEMI?
169
+ // | ddl_clause SEMI?
170
+ // | dbcc_clause SEMI?
171
+ // | backup_statement SEMI?
172
+ // | SEMI
173
+ // ;
174
+ }, {
175
+ key: "visitSql_clauses",
176
+ value: function visitSql_clauses(ctx) {
177
+ if (ctx.ddl_clause()) {
178
+ ctx.ddl_clause().accept(this);
179
+ return;
180
+ }
181
+ if (ctx.dml_clause()) {
182
+ ctx.dml_clause().accept(this);
183
+ return;
184
+ }
185
+ if (ctx.another_statement()) {
186
+ ctx.another_statement().accept(this);
187
+ }
188
+ }
189
+
190
+ // dml_clause
191
+ // : merge_statement
192
+ // | delete_statement
193
+ // | insert_statement
194
+ // | select_statement_standalone
195
+ // | update_statement
196
+ // ;
197
+ }, {
198
+ key: "visitDml_clause",
199
+ value: function visitDml_clause(ctx) {
200
+ if (ctx.insert_statement()) {
201
+ ctx.insert_statement().accept(this);
202
+ }
203
+ }
204
+
205
+ // insert_statement
206
+ // : with_expression? INSERT (TOP '(' expression ')' PERCENT?)? INTO? (
207
+ // ddl_object
208
+ // | rowset_function_limited
209
+ // ) with_table_hints? ('(' insert_column_name_list ')')? output_clause? insert_statement_value for_clause? option_clause? ';'?
210
+ // ;
211
+ }, {
212
+ key: "visitInsert_statement",
213
+ value: function visitInsert_statement(ctx) {
214
+ // [ 'users' ]
215
+ // [ 'test', 'users' ]
216
+ // [ 'db', 'test', 'users' ]
217
+ // [ 'server', 'db', 'test', 'users' ]
218
+ // The last: table name
219
+ // The second-last: schema name
220
+ var names = ctx.ddl_object().accept(this);
221
+ var tableName = (0, _lodash.last)(names);
222
+ var schemaName = names.length > 1 ? (0, _lodash.nth)(names, -2) : undefined;
223
+ var columns = ctx.insert_column_name_list() ? ctx.insert_column_name_list().accept(this) : [];
224
+ var values = ctx.insert_statement_value().accept(this);
225
+ var record = {
226
+ schemaName: schemaName,
227
+ tableName: tableName,
228
+ columns: columns,
229
+ values: values
230
+ };
231
+ this.data.records.push(record);
232
+ }
233
+
234
+ // ddl_object
235
+ // : full_table_name
236
+ // | LOCAL_ID
237
+ // ;
238
+ }, {
239
+ key: "visitDdl_object",
240
+ value: function visitDdl_object(ctx) {
241
+ return ctx.full_table_name().accept(this);
242
+ }
243
+
244
+ // full_table_name
245
+ // : (
246
+ // linkedServer = id_ '.' '.' schema = id_ '.'
247
+ // | server = id_ '.' database = id_ '.' schema = id_ '.'
248
+ // | database = id_ '.' schema = id_? '.'
249
+ // | schema = id_ '.'
250
+ // )? table = id_
251
+ // ;
252
+ }, {
253
+ key: "visitFull_table_name",
254
+ value: function visitFull_table_name(ctx) {
255
+ var _this4 = this;
256
+ return ctx.id_().map(function (id) {
257
+ return id.accept(_this4);
258
+ });
259
+ }
260
+
261
+ // id_
262
+ // : ID
263
+ // | TEMP_ID
264
+ // | DOUBLE_QUOTE_ID
265
+ // | DOUBLE_QUOTE_BLANK
266
+ // | SQUARE_BRACKET_ID
267
+ // | keyword
268
+ // | RAW
269
+ // ;
270
+ }, {
271
+ key: "visitId_",
272
+ value: function visitId_(ctx) {
273
+ if (ctx.DOUBLE_QUOTE_ID() || ctx.SQUARE_BRACKET_ID()) return (0, _helpers.getOriginalText)(ctx).slice(1, -1);
274
+ return (0, _helpers.getOriginalText)(ctx);
275
+ }
276
+
277
+ // insert_column_name_list
278
+ // : col += insert_column_id (',' col += insert_column_id)*
279
+ // ;
280
+ }, {
281
+ key: "visitInsert_column_name_list",
282
+ value: function visitInsert_column_name_list(ctx) {
283
+ var _this5 = this;
284
+ var columns = ctx.insert_column_id().map(function (column) {
285
+ return column.accept(_this5);
286
+ });
287
+ return (0, _lodash.flattenDepth)(columns, 1);
288
+ }
289
+
290
+ // insert_column_id
291
+ // : (ignore += id_? '.')* id_
292
+ // ;
293
+
294
+ // insert_statement_value
295
+ // : table_value_constructor
296
+ // | derived_table
297
+ // | execute_statement
298
+ // | DEFAULT VALUES
299
+ // ;
300
+ }, {
301
+ key: "visitInsert_statement_value",
302
+ value: function visitInsert_statement_value(ctx) {
303
+ if (!ctx.table_value_constructor()) return [];
304
+ var rawValues = ctx.table_value_constructor().accept(this);
305
+ return rawValues;
306
+ }
307
+
308
+ // table_value_constructor
309
+ // : VALUES '(' exps += expression_list_ ')' (',' '(' exps += expression_list_ ')')*
310
+ // ;
311
+ }, {
312
+ key: "visitTable_value_constructor",
313
+ value: function visitTable_value_constructor(ctx) {
314
+ var _this6 = this;
315
+ return ctx.expression_list_().map(function (expression) {
316
+ return expression.accept(_this6);
317
+ });
318
+ }
319
+
320
+ // expression_list_
321
+ // : exp += expression (',' exp += expression)*
322
+ // ;
323
+ }, {
324
+ key: "visitExpression_list_",
325
+ value: function visitExpression_list_(ctx) {
326
+ var _this7 = this;
327
+ return ctx.expression().map(function (expression) {
328
+ return expression.accept(_this7);
329
+ });
330
+ }
331
+
332
+ // expression
333
+ // : primitive_expression
334
+ // | function_call
335
+ // | expression '.' (value_call | query_call | exist_call | modify_call)
336
+ // | expression '.' hierarchyid_call
337
+ // | expression COLLATE id_
338
+ // | case_expression
339
+ // | full_column_name
340
+ // | bracket_expression
341
+ // | unary_operator_expression
342
+ // | expression op = ('*' | '/' | '%') expression
343
+ // | expression op = ('+' | '-' | '&' | '^' | '|' | '||') expression
344
+ // | expression time_zone
345
+ // | over_clause
346
+ // | DOLLAR_ACTION
347
+ // ;
348
+ }, {
349
+ key: "visitExpression",
350
+ value: function visitExpression(ctx) {
351
+ if (ctx.primitive_expression()) {
352
+ return ctx.primitive_expression().accept(this);
353
+ }
354
+ if (ctx.function_call()) {
355
+ return ctx.function_call().accept(this);
356
+ }
357
+ if (ctx.unary_operator_expression()) {
358
+ return ctx.unary_operator_expression().accept(this);
359
+ }
360
+ if (ctx.bracket_expression()) {
361
+ return ctx.bracket_expression().accept(this);
362
+ }
363
+
364
+ // Default case for any other expression type
365
+ return {
366
+ value: (0, _helpers.getOriginalText)(ctx),
367
+ type: _constants.DATA_TYPE.EXPRESSION
368
+ };
369
+ }
370
+
371
+ // bracket_expression
372
+ // : '(' expression ')'
373
+ // | '(' subquery ')'
374
+ // ;
375
+ }, {
376
+ key: "visitBracket_expression",
377
+ value: function visitBracket_expression(ctx) {
378
+ return ctx.expression() ? ctx.expression().accept(this) : null;
379
+ }
380
+
381
+ // primitive_constant
382
+ // : STRING // string, datetime or uniqueidentifier
383
+ // | BINARY
384
+ // | (DECIMAL | REAL | FLOAT) // float or decimal
385
+ // | dollar = '$' ('-' | '+')? (DECIMAL | FLOAT) // money
386
+ // | parameter
387
+ // ;
388
+ }, {
389
+ key: "visitPrimitive_constant",
390
+ value: function visitPrimitive_constant(ctx) {
391
+ if (ctx.STRING() || ctx.BINARY()) {
392
+ var value = getStringFromRawString(ctx.getText());
393
+ return {
394
+ value: value,
395
+ type: value.startsWith("N'") ? _constants.DATA_TYPE.EXPRESSION : _constants.DATA_TYPE.STRING
396
+ };
397
+ }
398
+ if (ctx.DOLLAR()) {
399
+ var dollar = (0, _lodash.first)(ctx.children).getText();
400
+ var sign = ctx.children.length > 2 ? (0, _lodash.nth)(ctx.children, -2) : '';
401
+ var _value = (0, _lodash.last)(ctx.children).getText();
402
+ return {
403
+ value: "".concat(dollar).concat(sign).concat(_value),
404
+ type: _constants.DATA_TYPE.STRING
405
+ };
406
+ }
407
+ if (ctx.REAL() || ctx.DECIMAL() || ctx.FLOAT()) {
408
+ return {
409
+ value: ctx.getText(),
410
+ type: _constants.DATA_TYPE.NUMBER
411
+ };
412
+ }
413
+ return {
414
+ value: (0, _helpers.getOriginalText)(ctx),
415
+ type: _constants.DATA_TYPE.EXPRESSION
416
+ };
417
+ }
418
+
419
+ // function_call
420
+ // : ranking_windowed_function # RANKING_WINDOWED_FUNC
421
+ // | aggregate_windowed_function # AGGREGATE_WINDOWED_FUNC
422
+ // | analytic_windowed_function # ANALYTIC_WINDOWED_FUNC
423
+ // | built_in_functions # BUILT_IN_FUNC
424
+ // | scalar_function_name '(' expression_list_? ')' # SCALAR_FUNCTION
425
+ // | freetext_function # FREE_TEXT
426
+ // | partition_function # PARTITION_FUNC
427
+ // | hierarchyid_static_method # HIERARCHYID_METHOD
428
+ // ;
429
+
430
+ // See packages/dbml-core/src/parse/ANTLR/parsers/mssql/TSqlParser.g4 at line 4338
431
+ }, {
432
+ key: "visitBUILT_IN_FUNC",
433
+ value: function visitBUILT_IN_FUNC(ctx) {
434
+ return {
435
+ value: (0, _helpers.getOriginalText)(ctx),
436
+ type: _constants.DATA_TYPE.EXPRESSION
437
+ };
438
+ }
439
+ }, {
440
+ key: "visitSCALAR_FUNCTION",
441
+ value: function visitSCALAR_FUNCTION(ctx) {
442
+ return {
443
+ value: (0, _helpers.getOriginalText)(ctx),
444
+ type: _constants.DATA_TYPE.EXPRESSION
445
+ };
446
+ }
447
+
448
+ // unary_operator_expression
449
+ // : '~' expression
450
+ // | op = ('+' | '-') expression
451
+ // ;
452
+ }, {
453
+ key: "visitUnary_operator_expression",
454
+ value: function visitUnary_operator_expression(ctx) {
455
+ var operator = ctx.children[0].getText();
456
+ var expression = ctx.expression().accept(this);
457
+ return {
458
+ value: "".concat(operator).concat(expression.value),
459
+ type: expression.type
460
+ };
461
+ }
462
+
463
+ // data_type
464
+ // : scaled = (VARCHAR | NVARCHAR | BINARY_KEYWORD | VARBINARY_KEYWORD | SQUARE_BRACKET_ID) '(' MAX ')'
465
+ // | ext_type = id_ '(' scale = DECIMAL ',' prec = DECIMAL ')'
466
+ // | ext_type = id_ '(' scale = DECIMAL ')'
467
+ // | ext_type = id_ IDENTITY ('(' seed = DECIMAL ',' inc = DECIMAL ')')?
468
+ // | double_prec = DOUBLE PRECISION?
469
+ // | unscaled_type = id_
470
+ // ;
471
+ }, {
472
+ key: "visitData_type",
473
+ value: function visitData_type(ctx) {
474
+ var id = ctx.id_().accept(this);
475
+ if (ctx.MAX()) {
476
+ return "".concat(id, "(MAX)");
477
+ }
478
+ if (ctx.IDENTITY()) {
479
+ if (ctx.DECIMAL().length) {
480
+ var seedAndInc = ctx.DECIMAL().map(function (decimal) {
481
+ return decimal.getText();
482
+ });
483
+ return "".concat(id, " IDENTITY(").concat(seedAndInc, ")");
484
+ }
485
+ return "".concat(id, " IDENTITY");
486
+ }
487
+ if (ctx.DOUBLE()) {
488
+ if (ctx.PRECISION()) {
489
+ return "".concat(id, "(").concat(ctx.PRECISION().getText(), ")");
490
+ }
491
+ return id;
492
+ }
493
+ if (ctx.DECIMAL().length) {
494
+ var scaleAndPrec = ctx.DECIMAL().map(function (decimal) {
495
+ return decimal.getText();
496
+ });
497
+ return "".concat(id, "(").concat(scaleAndPrec.join(','), ")");
498
+ }
499
+ return id;
500
+ }
501
+ }, {
502
+ key: "visitPrimitive_expression",
503
+ value: function visitPrimitive_expression(ctx) {
504
+ if (ctx.NULL_()) {
505
+ return {
506
+ value: ctx.getText(),
507
+ type: _constants.DATA_TYPE.BOOLEAN
508
+ };
509
+ }
510
+ if (ctx.primitive_constant()) {
511
+ return ctx.primitive_constant().accept(this);
512
+ }
513
+ return {
514
+ value: ctx.getText(),
515
+ type: _constants.DATA_TYPE.EXPRESSION
516
+ };
517
+ }
518
+
519
+ // ddl_clause
520
+ // | alter_table
521
+ // | create_index
522
+ // | create_table
523
+ // ;
524
+ // more details at: packages/dbml-core/src/parse/ANTLR/parsers/mssql/TSqlParser.g4 line 73
525
+ }, {
526
+ key: "visitDdl_clause",
527
+ value: function visitDdl_clause(ctx) {
528
+ if (ctx.create_table()) {
529
+ ctx.create_table().accept(this);
530
+ return;
531
+ }
532
+ if (ctx.alter_table()) {
533
+ ctx.alter_table().accept(this);
534
+ return;
535
+ }
536
+ if (ctx.create_index()) {
537
+ ctx.create_index().accept(this);
538
+ }
539
+ }
540
+
541
+ // create_table
542
+ // : CREATE TABLE table_name '(' column_def_table_constraints (','? table_indices)* ','? ')' (
543
+ // LOCK simple_id
544
+ // )? table_options* (ON id_ | DEFAULT | on_partition_or_filegroup)? (TEXTIMAGE_ON id_ | DEFAULT)? ';'?
545
+ // ;
546
+ }, {
547
+ key: "visitCreate_table",
548
+ value: function visitCreate_table(ctx) {
549
+ var _this8 = this,
550
+ _this$data$refs,
551
+ _this$data$refs2;
552
+ var _getSchemaAndTableNam = getSchemaAndTableName(ctx.table_name().accept(this)),
553
+ schemaName = _getSchemaAndTableNam.schemaName,
554
+ tableName = _getSchemaAndTableNam.tableName;
555
+ var columnDefTableConstraints = ctx.column_def_table_constraints().accept(this);
556
+ var tableIndices = ctx.table_indices().map(function (tableIndex) {
557
+ return tableIndex.accept(_this8);
558
+ });
559
+ var _splitColumnDefTableC = splitColumnDefTableConstraints(columnDefTableConstraints),
560
+ fieldsData = _splitColumnDefTableC.fieldsData,
561
+ indexes = _splitColumnDefTableC.indexes,
562
+ tableRefs = _splitColumnDefTableC.tableRefs;
563
+ var _parseFieldsAndInline = parseFieldsAndInlineRefsFromFieldsData(fieldsData, tableName, schemaName),
564
+ inlineRefs = _parseFieldsAndInline.inlineRefs,
565
+ fields = _parseFieldsAndInline.fields;
566
+ (_this$data$refs = this.data.refs).push.apply(_this$data$refs, _toConsumableArray((0, _lodash.flatten)(inlineRefs)));
567
+ (_this$data$refs2 = this.data.refs).push.apply(_this$data$refs2, _toConsumableArray(tableRefs.map(function (tableRef) {
568
+ tableRef.endpoints[0].tableName = tableName;
569
+ tableRef.endpoints[0].schemaName = schemaName;
570
+ return tableRef;
571
+ })));
572
+ var table = new _AST.Table({
573
+ name: tableName,
574
+ schemaName: schemaName,
575
+ fields: fields,
576
+ indexes: tableIndices.concat(indexes)
577
+ });
578
+ this.data.tables.push(table);
579
+ }
580
+
581
+ // table_name
582
+ // : (database = id_ '.' schema = id_? '.' | schema = id_ '.')? (
583
+ // table = id_
584
+ // | blocking_hierarchy = BLOCKING_HIERARCHY
585
+ // )
586
+ // ;
587
+ }, {
588
+ key: "visitTable_name",
589
+ value: function visitTable_name(ctx) {
590
+ var _this9 = this;
591
+ return ctx.id_().map(function (id) {
592
+ return id.accept(_this9);
593
+ });
594
+ }
595
+
596
+ // column_def_table_constraints
597
+ // : column_def_table_constraint (','? column_def_table_constraint)*
598
+ // ;
599
+ }, {
600
+ key: "visitColumn_def_table_constraints",
601
+ value: function visitColumn_def_table_constraints(ctx) {
602
+ var _this10 = this;
603
+ return ctx.column_def_table_constraint().map(function (columnDef) {
604
+ return columnDef.accept(_this10);
605
+ }).filter(function (columnDef) {
606
+ return columnDef;
607
+ });
608
+ }
609
+
610
+ // column_def_table_constraint
611
+ // : column_definition
612
+ // | materialized_column_definition
613
+ // | table_constraint
614
+ // ;
615
+ }, {
616
+ key: "visitColumn_def_table_constraint",
617
+ value: function visitColumn_def_table_constraint(ctx) {
618
+ if (ctx.column_definition()) {
619
+ return ctx.column_definition().accept(this);
620
+ }
621
+ if (ctx.table_constraint()) {
622
+ return ctx.table_constraint().accept(this);
623
+ }
624
+ return null;
625
+ }
626
+
627
+ // column_definition
628
+ // : id_ (data_type | AS expression PERSISTED?) column_definition_element* column_index?
629
+ // ;
630
+ }, {
631
+ key: "visitColumn_definition",
632
+ value: function visitColumn_definition(ctx) {
633
+ var _this11 = this;
634
+ var columnName = ctx.id_().accept(this);
635
+ var type = '';
636
+ if (ctx.data_type()) {
637
+ type = ctx.data_type().accept(this);
638
+ } else if (ctx.expression()) {
639
+ // { value: "(first_name + ' ' + last_name)", type: 'expression' }
640
+ var expression = ctx.expression().accept(this);
641
+ var as = ctx.AS().getText();
642
+ var persisted = ctx.PERSISTED() ? " ".concat(ctx.PERSISTED().getText()) : '';
643
+ type = "".concat(as, " ").concat(expression.value).concat(persisted);
644
+ }
645
+ var field = new _AST.Field({
646
+ name: columnName,
647
+ type: {
648
+ type_name: type,
649
+ schemaName: null
650
+ }
651
+ });
652
+ var definition = {
653
+ kind: _constants.TABLE_CONSTRAINT_KIND.FIELD,
654
+ value: {
655
+ field: field,
656
+ inline_refs: []
657
+ }
658
+ };
659
+ var columnDefinitions = ctx.column_definition_element().map(function (columnDef) {
660
+ return columnDef.accept(_this11);
661
+ });
662
+
663
+ // e.g.
664
+ // [
665
+ // { kind: 'not_null', value: true },
666
+ // { kind: 'dbdefault', value: { value: 'GETDATE()', type: 'expression' } }
667
+ // ]
668
+ columnDefinitions.filter(function (columnDef) {
669
+ return columnDef;
670
+ }).forEach(function (columnDef) {
671
+ switch (columnDef.kind) {
672
+ case _constants.COLUMN_CONSTRAINT_KIND.DEFAULT:
673
+ field.dbdefault = columnDef.value;
674
+ break;
675
+ case _constants.COLUMN_CONSTRAINT_KIND.INCREMENT:
676
+ field.increment = columnDef.value;
677
+ break;
678
+ case _constants.COLUMN_CONSTRAINT_KIND.NOT_NULL:
679
+ field.not_null = columnDef.value;
680
+ break;
681
+ case _constants.COLUMN_CONSTRAINT_KIND.PK:
682
+ field.pk = columnDef.value;
683
+ break;
684
+ case _constants.COLUMN_CONSTRAINT_KIND.UNIQUE:
685
+ field.unique = columnDef.value;
686
+ break;
687
+ case _constants.COLUMN_CONSTRAINT_KIND.INLINE_REF:
688
+ definition.value.inline_refs.push(columnDef.value);
689
+ break;
690
+ case _constants.COLUMN_CONSTRAINT_KIND.CHECK:
691
+ field.type.type_name = "".concat(field.type.type_name, " ").concat(columnDef.value);
692
+ break;
693
+ default:
694
+ break;
695
+ }
696
+ });
697
+
698
+ // skip column index since it is just the name of the index that a column belongs to
699
+
700
+ return definition;
701
+ }
702
+
703
+ // column_definition_element
704
+ // : FILESTREAM
705
+ // | COLLATE collation_name = id_
706
+ // | SPARSE
707
+ // | MASKED WITH '(' FUNCTION '=' mask_function = STRING ')'
708
+ // | (CONSTRAINT constraint = id_)? DEFAULT constant_expr = expression
709
+ // | IDENTITY ('(' seed = DECIMAL ',' increment = DECIMAL ')')?
710
+ // | NOT FOR REPLICATION
711
+ // | GENERATED ALWAYS AS (ROW | TRANSACTION_ID | SEQUENCE_NUMBER) (START | END) HIDDEN_KEYWORD?
712
+ // // NULL / NOT NULL is a constraint
713
+ // | ROWGUIDCOL
714
+ // | ENCRYPTED WITH '(' COLUMN_ENCRYPTION_KEY '=' key_name = STRING ',' ENCRYPTION_TYPE '=' (
715
+ // DETERMINISTIC
716
+ // | RANDOMIZED
717
+ // ) ',' ALGORITHM '=' algo = STRING ')'
718
+ // | column_constraint
719
+ // ;
720
+ }, {
721
+ key: "visitColumn_definition_element",
722
+ value: function visitColumn_definition_element(ctx) {
723
+ if (ctx.DEFAULT()) {
724
+ return {
725
+ kind: _constants.COLUMN_CONSTRAINT_KIND.DEFAULT,
726
+ value: ctx.expression().accept(this)
727
+ };
728
+ }
729
+ if (ctx.IDENTITY()) {
730
+ return {
731
+ kind: _constants.COLUMN_CONSTRAINT_KIND.INCREMENT,
732
+ value: true
733
+ };
734
+ }
735
+ if (ctx.column_constraint()) {
736
+ return ctx.column_constraint().accept(this);
737
+ }
738
+ return null;
739
+ }
740
+
741
+ // column_constraint
742
+ // : (CONSTRAINT constraint = id_)? (
743
+ // null_notnull
744
+ // | ( (PRIMARY KEY | UNIQUE) clustered? primary_key_options)
745
+ // | ( (FOREIGN KEY)? foreign_key_options)
746
+ // | check_constraint
747
+ // )
748
+ // ;
749
+ }, {
750
+ key: "visitColumn_constraint",
751
+ value: function visitColumn_constraint(ctx) {
752
+ if (ctx.null_notnull()) {
753
+ var notNull = false;
754
+ var nullNotnull = ctx.null_notnull().accept(this);
755
+ if (nullNotnull.includes('NOT')) notNull = true;
756
+ return {
757
+ kind: _constants.COLUMN_CONSTRAINT_KIND.NOT_NULL,
758
+ value: notNull
759
+ };
760
+ }
761
+ if (ctx.UNIQUE()) {
762
+ return {
763
+ kind: _constants.COLUMN_CONSTRAINT_KIND.UNIQUE,
764
+ value: true
765
+ };
766
+ }
767
+ if (ctx.PRIMARY()) {
768
+ return {
769
+ kind: _constants.COLUMN_CONSTRAINT_KIND.PK,
770
+ value: true
771
+ };
772
+ }
773
+ if (ctx.foreign_key_options()) {
774
+ var _ctx$foreign_key_opti = ctx.foreign_key_options().accept(this),
775
+ refTableName = _ctx$foreign_key_opti.refTableName,
776
+ refSchemaName = _ctx$foreign_key_opti.refSchemaName,
777
+ fieldNames = _ctx$foreign_key_opti.fieldNames,
778
+ onDelete = _ctx$foreign_key_opti.onDelete,
779
+ onUpdate = _ctx$foreign_key_opti.onUpdate;
780
+ return {
781
+ kind: _constants.COLUMN_CONSTRAINT_KIND.INLINE_REF,
782
+ value: {
783
+ endpoints: [{
784
+ tableName: null,
785
+ schemaName: null,
786
+ fieldNames: null,
787
+ relation: '*'
788
+ }, {
789
+ tableName: refTableName,
790
+ schemaName: refSchemaName,
791
+ fieldNames: fieldNames,
792
+ relation: '1'
793
+ }],
794
+ onDelete: onDelete,
795
+ onUpdate: onUpdate
796
+ }
797
+ };
798
+ }
799
+
800
+ // we do not handle check constraint since it is complicated and hard to extract enum from it
801
+ if (ctx.check_constraint()) {
802
+ return {
803
+ kind: _constants.COLUMN_CONSTRAINT_KIND.CHECK,
804
+ value: ctx.check_constraint().accept(this)
805
+ };
806
+ }
807
+ return null;
808
+ }
809
+
810
+ // check_constraint
811
+ // : CHECK (NOT FOR REPLICATION)? '(' search_condition ')'
812
+ // ;
813
+ }, {
814
+ key: "visitCheck_constraint",
815
+ value: function visitCheck_constraint(ctx) {
816
+ return (0, _helpers.getOriginalText)(ctx);
817
+ }
818
+ }, {
819
+ key: "visitNull_notnull",
820
+ value: function visitNull_notnull(ctx) {
821
+ return (0, _helpers.getOriginalText)(ctx);
822
+ }
823
+
824
+ // foreign_key_options
825
+ // : REFERENCES table_name '(' pk = column_name_list ')' (on_delete | on_update)* (
826
+ // NOT FOR REPLICATION
827
+ // )?
828
+ // ;
829
+ }, {
830
+ key: "visitForeign_key_options",
831
+ value: function visitForeign_key_options(ctx) {
832
+ var _this12 = this;
833
+ var names = ctx.table_name().accept(this);
834
+ var _getSchemaAndTableNam2 = getSchemaAndTableName(names),
835
+ refSchemaName = _getSchemaAndTableNam2.schemaName,
836
+ refTableName = _getSchemaAndTableNam2.tableName;
837
+ var fieldNames = ctx.column_name_list().accept(this);
838
+ var onDelete = ctx.on_delete() ? ctx.on_delete().map(function (action) {
839
+ return action.accept(_this12);
840
+ })[0] : null;
841
+ var onUpdate = ctx.on_update() ? ctx.on_update().map(function (action) {
842
+ return action.accept(_this12);
843
+ })[0] : null;
844
+ return {
845
+ refTableName: refTableName,
846
+ refSchemaName: refSchemaName,
847
+ onDelete: onDelete,
848
+ onUpdate: onUpdate,
849
+ fieldNames: fieldNames
850
+ };
851
+ }
852
+
853
+ // column_name_list
854
+ // : col += id_ (',' col += id_)*
855
+ // ;
856
+ }, {
857
+ key: "visitColumn_name_list",
858
+ value: function visitColumn_name_list(ctx) {
859
+ var _this13 = this;
860
+ return ctx.id_().map(function (id) {
861
+ return id.accept(_this13);
862
+ });
863
+ }
864
+
865
+ // on_delete
866
+ // : ON DELETE (NO ACTION | CASCADE | SET NULL_ | SET DEFAULT)
867
+ // ;
868
+ }, {
869
+ key: "visitOn_delete",
870
+ value: function visitOn_delete(ctx) {
871
+ if (ctx.NO()) {
872
+ return 'NO ACTION';
873
+ }
874
+ if (ctx.CASCADE()) {
875
+ return 'CASCADE';
876
+ }
877
+ if (ctx.NULL_()) {
878
+ return 'SET NULL';
879
+ }
880
+ return 'SET DEFAULT';
881
+ }
882
+
883
+ // on_update
884
+ // : ON UPDATE (NO ACTION | CASCADE | SET NULL_ | SET DEFAULT)
885
+ // ;
886
+ }, {
887
+ key: "visitOn_update",
888
+ value: function visitOn_update(ctx) {
889
+ if (ctx.NO()) {
890
+ return 'NO ACTION';
891
+ }
892
+ if (ctx.CASCADE()) {
893
+ return 'CASCADE';
894
+ }
895
+ if (ctx.NULL_()) {
896
+ return 'SET NULL';
897
+ }
898
+ return 'SET DEFAULT';
899
+ }
900
+
901
+ // table_constraint
902
+ // : (CONSTRAINT constraint = id_)? (
903
+ // ((PRIMARY KEY | UNIQUE) clustered? '(' column_name_list_with_order ')' primary_key_options)
904
+ // | ( FOREIGN KEY '(' fk = column_name_list ')' foreign_key_options)
905
+ // | ( CONNECTION '(' connection_node ( ',' connection_node)* ')')
906
+ // | ( DEFAULT constant_expr = expression FOR column = id_ (WITH VALUES)?)
907
+ // | check_constraint
908
+ // )
909
+ // ;
910
+ }, {
911
+ key: "visitTable_constraint",
912
+ value: function visitTable_constraint(ctx) {
913
+ var _this14 = this;
914
+ var name = ctx.id_() ? ctx.id_().map(function (id) {
915
+ return id.accept(_this14);
916
+ })[0] : '';
917
+ if (ctx.PRIMARY() || ctx.UNIQUE()) {
918
+ var columns = ctx.column_name_list_with_order().accept(this);
919
+ var index = new _AST.Index({
920
+ name: name,
921
+ columns: columns
922
+ });
923
+ if (ctx.PRIMARY()) {
924
+ index.pk = true;
925
+ }
926
+ if (ctx.UNIQUE()) {
927
+ index.unique = true;
928
+ }
929
+ return {
930
+ kind: ctx.PRIMARY() ? _constants.TABLE_CONSTRAINT_KIND.PK : _constants.TABLE_CONSTRAINT_KIND.UNIQUE,
931
+ value: index
932
+ };
933
+ }
934
+ if (ctx.FOREIGN()) {
935
+ var _columns = ctx.column_name_list().accept(this);
936
+ var _ctx$foreign_key_opti2 = ctx.foreign_key_options().accept(this),
937
+ refTableName = _ctx$foreign_key_opti2.refTableName,
938
+ refSchemaName = _ctx$foreign_key_opti2.refSchemaName,
939
+ fieldNames = _ctx$foreign_key_opti2.fieldNames,
940
+ onDelete = _ctx$foreign_key_opti2.onDelete,
941
+ onUpdate = _ctx$foreign_key_opti2.onUpdate;
942
+ return {
943
+ kind: _constants.TABLE_CONSTRAINT_KIND.FK,
944
+ value: {
945
+ name: name,
946
+ endpoints: [{
947
+ tableName: null,
948
+ schemaName: null,
949
+ fieldNames: _columns,
950
+ relation: '*'
951
+ }, {
952
+ tableName: refTableName,
953
+ schemaName: refSchemaName,
954
+ fieldNames: fieldNames,
955
+ relation: '1'
956
+ }],
957
+ onDelete: onDelete,
958
+ onUpdate: onUpdate
959
+ }
960
+ };
961
+ }
962
+ if (ctx.DEFAULT()) {
963
+ var column = ctx.column.accept(this);
964
+ var expression = ctx.expression().accept(this);
965
+ return {
966
+ kind: _constants.TABLE_CONSTRAINT_KIND.DEFAULT,
967
+ value: {
968
+ column: column,
969
+ defaultValue: expression
970
+ }
971
+ };
972
+ }
973
+ return null;
974
+ }
975
+
976
+ // column_name_list_with_order
977
+ // : id_ (ASC | DESC)? (',' id_ (ASC | DESC)?)*
978
+ // ;
979
+ }, {
980
+ key: "visitColumn_name_list_with_order",
981
+ value: function visitColumn_name_list_with_order(ctx) {
982
+ var _this15 = this;
983
+ return ctx.id_().map(function (id) {
984
+ return {
985
+ value: id.accept(_this15),
986
+ type: 'column'
987
+ };
988
+ });
989
+ }
990
+
991
+ // table_indices
992
+ // : INDEX id_ UNIQUE? clustered? '(' column_name_list_with_order ')'
993
+ // | INDEX id_ CLUSTERED COLUMNSTORE
994
+ // | INDEX id_ NONCLUSTERED? COLUMNSTORE '(' column_name_list ')' create_table_index_options? (
995
+ // ON id_
996
+ // )?
997
+ // ;
998
+ }, {
999
+ key: "visitTable_indices",
1000
+ value: function visitTable_indices(ctx) {
1001
+ var _this16 = this;
1002
+ var index = new _AST.Index({
1003
+ name: ctx.id_().map(function (id) {
1004
+ return id.accept(_this16);
1005
+ })[0],
1006
+ unique: !!ctx.UNIQUE(),
1007
+ columns: ctx.column_name_list_with_order().accept(this)
1008
+ });
1009
+ return index;
1010
+ }
1011
+
1012
+ // alter_table
1013
+ // : ALTER TABLE table_name (
1014
+ // SET '(' LOCK_ESCALATION '=' (AUTO | TABLE | DISABLE) ')'
1015
+ // | ADD column_def_table_constraints
1016
+ // | ALTER COLUMN (column_definition | column_modifier)
1017
+ // | DROP COLUMN id_ (',' id_)*
1018
+ // | DROP CONSTRAINT constraint = id_
1019
+ // | WITH (CHECK | NOCHECK) ADD (CONSTRAINT constraint = id_)? (
1020
+ // FOREIGN KEY '(' fk = column_name_list ')' REFERENCES table_name (
1021
+ // '(' pk = column_name_list ')'
1022
+ // )? (on_delete | on_update)*
1023
+ // | CHECK '(' search_condition ')'
1024
+ // )
1025
+ // | (NOCHECK | CHECK) CONSTRAINT constraint = id_
1026
+ // | (ENABLE | DISABLE) TRIGGER id_?
1027
+ // | REBUILD table_options
1028
+ // | SWITCH switch_partition
1029
+ // ) ';'?
1030
+ // ;
1031
+ }, {
1032
+ key: "visitAlter_table",
1033
+ value: function visitAlter_table(ctx) {
1034
+ var _this$data$refs3, _this$data$refs4, _table$fields, _table$indexes;
1035
+ // table_name() returns an array because there are multiple table_name in the clause (REFERENCES table_name ...)
1036
+ var names = ctx.table_name()[0].accept(this);
1037
+ var _getSchemaAndTableNam3 = getSchemaAndTableName(names),
1038
+ schemaName = _getSchemaAndTableNam3.schemaName,
1039
+ tableName = _getSchemaAndTableNam3.tableName;
1040
+ var table = this.data.tables.find(function (t) {
1041
+ return t.name === tableName && t.schemaName === schemaName;
1042
+ });
1043
+ if (!table) return; // ALTER TABLE should appear after CREATE TABLE, so skip if table is not created yet
1044
+
1045
+ var columnDefTableConstraints = ctx.column_def_table_constraints() ? ctx.column_def_table_constraints().accept(this) : [];
1046
+ var _splitColumnDefTableC2 = splitColumnDefTableConstraints(columnDefTableConstraints),
1047
+ fieldsData = _splitColumnDefTableC2.fieldsData,
1048
+ indexes = _splitColumnDefTableC2.indexes,
1049
+ tableRefs = _splitColumnDefTableC2.tableRefs,
1050
+ columnDefaults = _splitColumnDefTableC2.columnDefaults;
1051
+ var _parseFieldsAndInline2 = parseFieldsAndInlineRefsFromFieldsData(fieldsData, tableName, schemaName),
1052
+ inlineRefs = _parseFieldsAndInline2.inlineRefs,
1053
+ fields = _parseFieldsAndInline2.fields;
1054
+ (_this$data$refs3 = this.data.refs).push.apply(_this$data$refs3, _toConsumableArray((0, _lodash.flatten)(inlineRefs)));
1055
+ (_this$data$refs4 = this.data.refs).push.apply(_this$data$refs4, _toConsumableArray(tableRefs.map(function (tableRef) {
1056
+ tableRef.endpoints[0].tableName = tableName;
1057
+ tableRef.endpoints[0].schemaName = schemaName;
1058
+ return tableRef;
1059
+ })));
1060
+ (_table$fields = table.fields).push.apply(_table$fields, _toConsumableArray(fields));
1061
+ (_table$indexes = table.indexes).push.apply(_table$indexes, _toConsumableArray(indexes));
1062
+ columnDefaults.forEach(function (columnDefault) {
1063
+ var field = table.fields.find(function (f) {
1064
+ return f.name === columnDefault.column;
1065
+ });
1066
+ if (!field) return;
1067
+ field.dbdefault = columnDefault.defaultValue;
1068
+ });
1069
+ }
1070
+
1071
+ // create_index
1072
+ // : CREATE UNIQUE? clustered? INDEX id_ ON table_name '(' column_name_list_with_order ')' (
1073
+ // INCLUDE '(' column_name_list ')'
1074
+ // )? (WHERE where = search_condition)? (create_index_options)? (ON id_)? ';'?
1075
+ // ;
1076
+ }, {
1077
+ key: "visitCreate_index",
1078
+ value: function visitCreate_index(ctx) {
1079
+ var _getSchemaAndTableNam4 = getSchemaAndTableName(ctx.table_name().accept(this)),
1080
+ schemaName = _getSchemaAndTableNam4.schemaName,
1081
+ tableName = _getSchemaAndTableNam4.tableName;
1082
+ var table = this.data.tables.find(function (t) {
1083
+ return t.name === tableName && t.schemaName === schemaName;
1084
+ });
1085
+ if (!table) return; // ALTER TABLE should appear after CREATE TABLE, so skip if table is not created yet
1086
+
1087
+ var index = new _AST.Index({
1088
+ name: ctx.id_()[0].accept(this),
1089
+ unique: !!ctx.UNIQUE(),
1090
+ columns: ctx.column_name_list_with_order().accept(this)
1091
+ });
1092
+ table.indexes.push(index);
1093
+ }
1094
+
1095
+ // another_statement
1096
+ // : alter_queue
1097
+ // | checkpoint_statement
1098
+ // | conversation_statement
1099
+ // | create_contract
1100
+ // | create_queue
1101
+ // | cursor_statement
1102
+ // | declare_statement
1103
+ // | execute_statement
1104
+ // | kill_statement
1105
+ // | message_statement
1106
+ // | reconfigure_statement
1107
+ // | security_statement
1108
+ // | set_statement
1109
+ // | setuser_statement
1110
+ // | shutdown_statement
1111
+ // | transaction_statement
1112
+ // | use_statement
1113
+ // ;
1114
+ }, {
1115
+ key: "visitAnother_statement",
1116
+ value: function visitAnother_statement(ctx) {
1117
+ if (ctx.execute_statement()) {
1118
+ ctx.execute_statement().accept(this);
1119
+ }
1120
+ }
1121
+
1122
+ // execute_statement
1123
+ // : EXECUTE execute_body ';'?
1124
+ // ;
1125
+ }, {
1126
+ key: "visitExecute_statement",
1127
+ value: function visitExecute_statement(ctx) {
1128
+ ctx.execute_body().accept(this);
1129
+ }
1130
+
1131
+ // execute_body
1132
+ // : (return_status = LOCAL_ID '=')? (func_proc_name_server_database_schema | execute_var_string) execute_statement_arg?
1133
+ // | '(' execute_var_string (',' execute_var_string)* ')' (AS (LOGIN | USER) '=' STRING)? (
1134
+ // AT_KEYWORD linkedServer = id_
1135
+ // )?
1136
+ // | AS ( (LOGIN | USER) '=' STRING | CALLER)
1137
+ // ;
1138
+ }, {
1139
+ key: "visitExecute_body",
1140
+ value: function visitExecute_body(ctx) {
1141
+ var funcNames = ctx.func_proc_name_server_database_schema() ? ctx.func_proc_name_server_database_schema().accept(this) : [];
1142
+ var funcName = (0, _lodash.last)(funcNames);
1143
+ if (funcName !== ADD_DESCRIPTION_FUNCTION_NAME) {
1144
+ return;
1145
+ }
1146
+ if (ctx.execute_statement_arg()) {
1147
+ // [
1148
+ // { name: '@name', value: "N'Column_Description'", type: 'expression' },
1149
+ // { name: '@value', value: '$-1', type: 'string' },
1150
+ // { name: '@level0type', value: "N'Schema'", type: 'expression' },
1151
+ // { name: '@level0name', value: 'dbo', type: 'string' },
1152
+ // { name: '@level1type', value: "N'Table'", type: 'expression' },
1153
+ // { name: '@level1name', value: 'orders', type: 'string' },
1154
+ // { name: '@level2type', value: "N'Column'", type: 'expression' },
1155
+ // { name: '@level2name', value: 'status', type: 'string' }
1156
+ // ]
1157
+ var args = ctx.execute_statement_arg().accept(this);
1158
+
1159
+ // {
1160
+ // name: "N'Table_Description'",
1161
+ // value: 'This is a note in table "orders"',
1162
+ // level0type: "N'Schema'",
1163
+ // level0name: 'dbo',
1164
+ // level1type: "N'Table'",
1165
+ // level1name: 'orders'
1166
+ // }
1167
+ var argsObj = args.reduce(function (acc, arg) {
1168
+ var name = arg.name.slice(1);
1169
+ acc[name] = arg.value;
1170
+ return acc;
1171
+ }, {});
1172
+ if (!argsObj['name'].includes('Description')) {
1173
+ return;
1174
+ }
1175
+
1176
+ // https://learn.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-addextendedproperty-transact-sql?view=sql-server-ver16#----level0type
1177
+ var level0Type = argsObj['level0type'].toLowerCase();
1178
+ if (!level0Type.includes('schema')) return;
1179
+ var schemaName = argsObj['level0name'] !== 'dbo' ? argsObj['level0name'] : undefined;
1180
+ var level1Type = argsObj['level1type'].toLowerCase();
1181
+ var tableName = level1Type.includes('table') ? argsObj['level1name'] : null;
1182
+ var table = this.data.tables.find(function (t) {
1183
+ return t.name === tableName && t.schemaName === schemaName;
1184
+ });
1185
+ if (!table) return;
1186
+ if (!argsObj['level2type']) {
1187
+ table.note = {
1188
+ value: argsObj.value
1189
+ };
1190
+ return;
1191
+ }
1192
+ var level2Type = argsObj['level2type'].toLowerCase();
1193
+ var columnName = level2Type.includes('column') ? argsObj['level2name'] : null;
1194
+ var field = table.fields.find(function (f) {
1195
+ return f.name === columnName;
1196
+ });
1197
+ if (!field) return;
1198
+ field.note = {
1199
+ value: argsObj.value
1200
+ };
1201
+ }
1202
+ }
1203
+
1204
+ // func_proc_name_server_database_schema
1205
+ // : server = id_? '.' database = id_? '.' schema = id_? '.' procedure = id_
1206
+ // | func_proc_name_database_schema
1207
+ // ;
1208
+ }, {
1209
+ key: "visitFunc_proc_name_server_database_schema",
1210
+ value: function visitFunc_proc_name_server_database_schema(ctx) {
1211
+ var _this17 = this;
1212
+ if (ctx.func_proc_name_database_schema()) {
1213
+ return ctx.func_proc_name_database_schema().accept(this);
1214
+ } else {
1215
+ return ctx.id_().map(function (id) {
1216
+ return id.accept(_this17);
1217
+ });
1218
+ }
1219
+ }
1220
+
1221
+ // func_proc_name_database_schema
1222
+ // : database = id_? '.' schema = id_? '.' procedure = id_
1223
+ // | func_proc_name_schema
1224
+ // ;
1225
+ }, {
1226
+ key: "visitFunc_proc_name_database_schema",
1227
+ value: function visitFunc_proc_name_database_schema(ctx) {
1228
+ var _this18 = this;
1229
+ if (ctx.func_proc_name_schema()) {
1230
+ return ctx.func_proc_name_schema().accept(this);
1231
+ } else {
1232
+ return ctx.id_().map(function (id) {
1233
+ return id.accept(_this18);
1234
+ });
1235
+ }
1236
+ }
1237
+
1238
+ // func_proc_name_schema
1239
+ // : ((schema = id_) '.')? procedure = id_
1240
+ // ;
1241
+ }, {
1242
+ key: "visitFunc_proc_name_schema",
1243
+ value: function visitFunc_proc_name_schema(ctx) {
1244
+ var _this19 = this;
1245
+ return ctx.id_().map(function (id) {
1246
+ return id.accept(_this19);
1247
+ });
1248
+ }
1249
+
1250
+ // execute_statement_arg
1251
+ // : execute_statement_arg_unnamed (',' execute_statement_arg)* //Unnamed params can continue unnamed
1252
+ // | execute_statement_arg_named (',' execute_statement_arg_named)* //Named can only be continued by unnamed
1253
+ // ;
1254
+ }, {
1255
+ key: "visitExecute_statement_arg",
1256
+ value: function visitExecute_statement_arg(ctx) {
1257
+ var _this20 = this;
1258
+ if (ctx.execute_statement_arg_unnamed()) {
1259
+ return ctx.execute_statement_arg_unnamed().map(function (item) {
1260
+ return item.accept(_this20);
1261
+ });
1262
+ }
1263
+ return ctx.execute_statement_arg_named().map(function (item) {
1264
+ return item.accept(_this20);
1265
+ });
1266
+ }
1267
+
1268
+ // execute_statement_arg_named
1269
+ // : name = LOCAL_ID '=' value = execute_parameter
1270
+ // ;
1271
+ }, {
1272
+ key: "visitExecute_statement_arg_named",
1273
+ value: function visitExecute_statement_arg_named(ctx) {
1274
+ var _ctx$execute_paramete = ctx.execute_parameter().accept(this),
1275
+ value = _ctx$execute_paramete.value,
1276
+ type = _ctx$execute_paramete.type;
1277
+ return {
1278
+ name: ctx.LOCAL_ID().getText(),
1279
+ value: value,
1280
+ type: type
1281
+ };
1282
+ }
1283
+
1284
+ // execute_parameter
1285
+ // : (constant | LOCAL_ID (OUTPUT | OUT)? | id_ | DEFAULT | NULL_)
1286
+ // ;
1287
+ }, {
1288
+ key: "visitExecute_parameter",
1289
+ value: function visitExecute_parameter(ctx) {
1290
+ if (ctx.constant()) {
1291
+ return ctx.constant().accept(this);
1292
+ }
1293
+ return ctx.getText();
1294
+ }
1295
+
1296
+ // constant
1297
+ // : STRING // string, datetime or uniqueidentifier
1298
+ // | BINARY
1299
+ // | '-'? (DECIMAL | REAL | FLOAT) // float or decimal
1300
+ // | '-'? dollar = '$' ('-' | '+')? (DECIMAL | FLOAT) // money
1301
+ // | parameter
1302
+ // ;
1303
+ }, {
1304
+ key: "visitConstant",
1305
+ value: function visitConstant(ctx) {
1306
+ if (ctx.STRING() || ctx.BINARY()) {
1307
+ var value = getStringFromRawString(ctx.getText());
1308
+ return {
1309
+ value: value,
1310
+ type: value.startsWith("N'") ? _constants.DATA_TYPE.EXPRESSION : _constants.DATA_TYPE.STRING
1311
+ };
1312
+ }
1313
+ if (ctx.DOLLAR()) {
1314
+ var _value2 = ctx.getText();
1315
+ return {
1316
+ value: _value2,
1317
+ type: _constants.DATA_TYPE.STRING
1318
+ };
1319
+ }
1320
+ if (ctx.REAL() || ctx.DECIMAL() || ctx.FLOAT()) {
1321
+ return {
1322
+ value: ctx.getText(),
1323
+ type: _constants.DATA_TYPE.NUMBER
1324
+ };
1325
+ }
1326
+ return {
1327
+ value: (0, _helpers.getOriginalText)(ctx),
1328
+ type: _constants.DATA_TYPE.EXPRESSION
1329
+ };
1330
+ }
1331
+ }]);
1332
+ return MssqlASTGen;
1333
+ }(_TSqlParserVisitor2["default"]);
1334
+ exports["default"] = MssqlASTGen;