db-modeling-markdown 1.0.6 → 2.0.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.
Files changed (114) hide show
  1. package/CHANGELOG.md +19 -4
  2. package/CONTRIBUTING.md +34 -9
  3. package/README.md +92 -48
  4. package/dist/dialects/core/dbImportProvider.d.ts +5 -0
  5. package/dist/dialects/core/dbImportProvider.js +7 -0
  6. package/dist/dialects/core/dbImportProvider.js.map +1 -0
  7. package/dist/dialects/core/dbProvider.d.ts +19 -6
  8. package/dist/dialects/core/dbProvider.js +40 -6
  9. package/dist/dialects/core/dbProvider.js.map +1 -1
  10. package/dist/dialects/core/dbUtils.d.ts +35 -0
  11. package/dist/dialects/core/dbUtils.js +159 -0
  12. package/dist/dialects/core/dbUtils.js.map +1 -0
  13. package/dist/dialects/core/providerFactory.d.ts +3 -1
  14. package/dist/dialects/core/providerFactory.js +28 -3
  15. package/dist/dialects/core/providerFactory.js.map +1 -1
  16. package/dist/dialects/db2/db2Provider.d.ts +2 -1
  17. package/dist/dialects/db2/db2Provider.js +2 -3
  18. package/dist/dialects/db2/db2Provider.js.map +1 -1
  19. package/dist/dialects/mariadb/mariaDbImportProvider.d.ts +19 -0
  20. package/dist/dialects/mariadb/mariaDbImportProvider.js +254 -0
  21. package/dist/dialects/mariadb/mariaDbImportProvider.js.map +1 -0
  22. package/dist/dialects/mariadb/mariaDbProvider.d.ts +11 -11
  23. package/dist/dialects/mariadb/mariaDbProvider.js +129 -214
  24. package/dist/dialects/mariadb/mariaDbProvider.js.map +1 -1
  25. package/dist/dialects/mariadb/mariaDbUtil.d.ts +6 -0
  26. package/dist/dialects/mariadb/mariaDbUtil.js +23 -0
  27. package/dist/dialects/mariadb/mariaDbUtil.js.map +1 -0
  28. package/dist/dialects/mssql/msSqlProvider.d.ts +2 -1
  29. package/dist/dialects/mssql/msSqlProvider.js +4 -8
  30. package/dist/dialects/mssql/msSqlProvider.js.map +1 -1
  31. package/dist/dialects/mysql/mySqlImportProvider.d.ts +3 -0
  32. package/dist/dialects/mysql/mySqlImportProvider.js +8 -0
  33. package/dist/dialects/mysql/mySqlImportProvider.js.map +1 -0
  34. package/dist/dialects/mysql/mySqlProvider.d.ts +2 -20
  35. package/dist/dialects/mysql/mySqlProvider.js +2 -233
  36. package/dist/dialects/mysql/mySqlProvider.js.map +1 -1
  37. package/dist/dialects/oracle/oracleProvider.d.ts +5 -1
  38. package/dist/dialects/oracle/oracleProvider.js +14 -6
  39. package/dist/dialects/oracle/oracleProvider.js.map +1 -1
  40. package/dist/dialects/postgresql/postgreSqlProvider.d.ts +2 -1
  41. package/dist/dialects/postgresql/postgreSqlProvider.js +4 -1
  42. package/dist/dialects/postgresql/postgreSqlProvider.js.map +1 -1
  43. package/dist/dialects/sqlite/sqliteSqlProvider.d.ts +2 -1
  44. package/dist/dialects/sqlite/sqliteSqlProvider.js +1 -2
  45. package/dist/dialects/sqlite/sqliteSqlProvider.js.map +1 -1
  46. package/dist/index.d.ts +9 -4
  47. package/dist/index.js +5 -5
  48. package/dist/index.js.map +1 -1
  49. package/dist/lib/code-flow/codeFlow.js.map +1 -1
  50. package/dist/lib/markdown-object/markdownModel.d.ts +0 -4
  51. package/dist/lib/markdown-object/markdownModel.js +0 -4
  52. package/dist/lib/markdown-object/markdownModel.js.map +1 -1
  53. package/dist/lib/markdown-object/markdownReader.d.ts +19 -0
  54. package/dist/lib/markdown-object/markdownReader.js +85 -28
  55. package/dist/lib/markdown-object/markdownReader.js.map +1 -1
  56. package/dist/lib/markdown-object/markdownWriter.d.ts +25 -1
  57. package/dist/lib/markdown-object/markdownWriter.js +117 -52
  58. package/dist/lib/markdown-object/markdownWriter.js.map +1 -1
  59. package/dist/lib/markdown-object/readerContext.js +3 -1
  60. package/dist/lib/markdown-object/readerContext.js.map +1 -1
  61. package/dist/lib/utils/fileHelper.d.ts +4 -0
  62. package/dist/lib/utils/fileHelper.js +20 -1
  63. package/dist/lib/utils/fileHelper.js.map +1 -1
  64. package/dist/lib/utils/logger.js.map +1 -1
  65. package/dist/lib/utils/markdownParser.js +3 -6
  66. package/dist/lib/utils/markdownParser.js.map +1 -1
  67. package/dist/lib/utils/sqlHelper.js.map +1 -1
  68. package/dist/lib/utils/textFileReader.js +2 -2
  69. package/dist/lib/utils/textFileReader.js.map +1 -1
  70. package/dist/lib/utils/textHelper.d.ts +18 -0
  71. package/dist/lib/utils/textHelper.js +62 -0
  72. package/dist/lib/utils/textHelper.js.map +1 -1
  73. package/dist/{services → models}/databaseTypes.d.ts +0 -0
  74. package/dist/{services → models}/databaseTypes.js +0 -0
  75. package/dist/models/databaseTypes.js.map +1 -0
  76. package/dist/models/dbColumn.d.ts +43 -0
  77. package/dist/models/dbColumn.js +3 -0
  78. package/dist/models/dbColumn.js.map +1 -0
  79. package/dist/models/dbDiffModel.d.ts +43 -0
  80. package/dist/models/dbDiffModel.js +3 -0
  81. package/dist/models/dbDiffModel.js.map +1 -0
  82. package/dist/models/dbForeignKey.d.ts +33 -0
  83. package/dist/models/dbForeignKey.js +3 -0
  84. package/dist/models/dbForeignKey.js.map +1 -0
  85. package/dist/models/dbIndex.d.ts +28 -0
  86. package/dist/models/dbIndex.js +3 -0
  87. package/dist/models/dbIndex.js.map +1 -0
  88. package/dist/models/dbIndexType.d.ts +8 -0
  89. package/dist/models/dbIndexType.js +13 -0
  90. package/dist/models/dbIndexType.js.map +1 -0
  91. package/dist/models/dbModel.d.ts +10 -0
  92. package/dist/{services → models}/dbModel.js +0 -0
  93. package/dist/{services → models}/dbModel.js.map +1 -1
  94. package/dist/models/dbPrimaryKey.d.ts +16 -0
  95. package/dist/models/dbPrimaryKey.js +3 -0
  96. package/dist/models/dbPrimaryKey.js.map +1 -0
  97. package/dist/models/dbTable.d.ts +49 -0
  98. package/dist/models/dbTable.js +3 -0
  99. package/dist/models/dbTable.js.map +1 -0
  100. package/dist/models/dbTableMarkdown.d.ts +34 -0
  101. package/dist/models/dbTableMarkdown.js +3 -0
  102. package/dist/models/dbTableMarkdown.js.map +1 -0
  103. package/dist/services/dbOptions.d.ts +35 -0
  104. package/dist/services/dbOptions.js +18 -0
  105. package/dist/services/dbOptions.js.map +1 -0
  106. package/dist/services/dbmOptions.d.ts +7 -3
  107. package/dist/services/dbmOptions.js +7 -3
  108. package/dist/services/dbmOptions.js.map +1 -1
  109. package/dist/services/dbmService.d.ts +36 -1
  110. package/dist/services/dbmService.js +87 -13
  111. package/dist/services/dbmService.js.map +1 -1
  112. package/package.json +32 -40
  113. package/dist/services/databaseTypes.js.map +0 -1
  114. package/dist/services/dbModel.d.ts +0 -135
package/CHANGELOG.md CHANGED
@@ -7,27 +7,39 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
- ## [1.0.6] - 2021-11-19
10
+ ## [2.0.1] - 2022-12-08
11
11
 
12
12
  ### Changes
13
13
 
14
+ - [Feature]: [mariadb/mysql] provice method `fromDatabase`
15
+ Generate database model markdow files from a specific database.
16
+ - [Feature]: [mariadb/mysql] provice method `toUpgradeSql`
17
+ Generate a SQL file with upgrade scripts.
18
+ - [Feature]: provide more readable format for markdown files
19
+ - [Feature]: [mariadb/mysql] provice method `genIndexFile`
20
+ Generate a `index.md` for all tables
21
+
22
+ ## [1.0.6] - 2021-11-19
23
+
24
+ ### Fix
25
+
14
26
  - [Defect]: error when there is an empty definition file
15
27
 
16
28
  ## [1.0.5] - 2021-11-19
17
29
 
18
- ### Changes
30
+ ### Fix
19
31
 
20
32
  - [Defect]: bad package
21
33
 
22
34
  ## [1.0.4] - 2021-11-19
23
35
 
24
- ### Changes
36
+ ### Fix
25
37
 
26
38
  - [Defect]: bad package
27
39
 
28
40
  ## [1.0.3] - 2021-11-17
29
41
 
30
- ### Changes
42
+ ### Fix
31
43
 
32
44
  - [Defect]: do not export file when file name is not provided.
33
45
 
@@ -36,6 +48,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
36
48
  ### Changes
37
49
 
38
50
  - [Feature]: provice method toMarkdown
51
+
52
+ ### Fixed
53
+
39
54
  - [Defect]: some document issues.
40
55
 
41
56
  ## [1.0.1] - 2020-02-22
package/CONTRIBUTING.md CHANGED
@@ -3,22 +3,26 @@
3
3
  ## Prepare Development Environment
4
4
 
5
5
  ```sh
6
- yarn install -g prettier
7
- yarn install -g ts-node
8
- yarn install -g typescript
9
- yarn install
6
+ npm add --global yarn
7
+ npm add --global prettier typescript ts-node
8
+ yarn
10
9
  yarn prepare
11
10
  ```
12
11
 
13
12
  ## Publish steps
14
13
 
15
- - change the package version
16
- - change CHANGELOG
17
- - change version in README
14
+ - change the package version `package.json`
15
+ - change `CHANGELOG.md` for new features or fixes.
16
+ - update sample scripts `examples\generator.ts`
17
+ - update `README.md`
18
+ - version
19
+ - sample typescrit
20
+ - features and so on
18
21
  - build: run `yarn build`
19
22
  - check the package
23
+ - edit `~/npmrc`, comment out the mirrow repositories
24
+ - if need, `npm adduser` to add your npm user
20
25
  - publish: `npm publish --access public`
21
-
22
26
  - document: update gitee pages
23
27
 
24
28
  ## Test
@@ -32,7 +36,18 @@ yarn test
32
36
  - test a specific test file
33
37
 
34
38
  ```sh
35
- jest filename.test.ts
39
+ yarn test filename.test.ts
40
+ ```
41
+
42
+ ## Tips
43
+
44
+ - we can use the variable `OverwriteExpected` to overwrite expected files
45
+
46
+ [dbmService.test.ts](tests\services\dbmService.test.ts)
47
+
48
+ ```ts
49
+ // used to overwrite expected data
50
+ const OverwriteExpected = false
36
51
  ```
37
52
 
38
53
  ## Command
@@ -43,6 +58,16 @@ jest filename.test.ts
43
58
  // run tests\data\generateMarkdown.ts
44
59
  ```
45
60
 
61
+ - husky: project initialization
62
+
63
+ ```sh
64
+ # husky init (for project initialization)
65
+ # npx husky-init
66
+ ```
67
+
68
+ - husky: pre-commit command
69
+ [pre-commit.sh](.husky/pre-commit)
70
+
46
71
  ## Guidelings
47
72
 
48
73
  ### Coding Conventions
package/README.md CHANGED
@@ -6,7 +6,7 @@ Now, you may define your database tables in markdown files, and this utility wil
6
6
 
7
7
  ## Release Notes
8
8
 
9
- ### 1.0.6
9
+ ### 2.0.1
10
10
 
11
11
  [Change Log](./CHANGELOG.md)
12
12
 
@@ -15,86 +15,123 @@ Now, you may define your database tables in markdown files, and this utility wil
15
15
  Define a markdown file(.db.md) like:
16
16
 
17
17
  ```markdown
18
- # Table: Departments
18
+ # Table: departments
19
19
 
20
- - `Name`: Departments
21
- - `Comment`: The department table.
20
+ ## `Table`
21
+
22
+ | `Name` | `Comment` | `Character Set` | `Collation` |
23
+ | ----------- | --------------------- | --------------- | ------------------ |
24
+ | departments | The department table. | utf8mb4 | utf8mb4_general_ci |
22
25
 
23
26
  ## `Primary Key`
24
27
 
25
- - `Columns`: DepartmentID
26
- - `Cluster`: `true`
28
+ | `Columns` |
29
+ | ------------ |
30
+ | DepartmentID |
27
31
 
28
- ## `Indexes[]`
32
+ ## `Indexes`
29
33
 
30
- ## `Foreign Keys[]`
34
+ ## `Foreign Keys`
31
35
 
32
36
  | `Columns` | `Ref Table` | `Ref Columns` | `Options` |
33
37
  | --------- | ----------- | ------------- | --------- |
34
- | ManagerID | Employees | EmployeeID | |
35
- | ParentID | Departments | DepartmentID | |
36
-
37
- ## `Columns[]`
38
-
39
- | `Label` | `Name` | `Type` | `Nullable` | `Default` | `Comment` |
40
- | ----------------- | -------------- | ------------------ | ---------- | --------- | --------- |
41
- | Department ID | DepartmentID | int auto_increment | `false` | | |
42
- | Department Name | DepartmentName | varchar(50) | `false` | | |
43
- | Parent Department | ParentID | int | `true` | | |
44
- | Manager | ManagerID | int | `true` | | |
38
+ | ManagerID | employees | EmployeeID | |
39
+ | ParentID | departments | DepartmentID | |
40
+
41
+ ## `Columns`
42
+
43
+ | `Label` | `Name` | `Type` | `Nullable` | `Default` | `Comment` |
44
+ | --------------- | -------------- | -------------------------------------- | ---------- | ------------------- | -------------------- |
45
+ | Department ID | DepartmentID | int auto_increment | `No` | | Department ID |
46
+ | Department Name | DepartmentName | varchar(50) | `No` | | Department Name |
47
+ | Parent ID | ParentID | int | `Yes` | | Parent Department |
48
+ | Manager ID | ManagerID | int | `Yes` | | Manager |
49
+ | Created By | CreatedBy | varchar(255) | `No` | '' | Created By User Name |
50
+ | Create Time | CreateTime | datetime | `No` | current_timestamp() | Created Time |
51
+ | Update By | UpdateBy | varchar(255) | `No` | '' | Updated By User Name |
52
+ | Update Time | UpdateTime | datetime on update current_timestamp() | `No` | current_timestamp() | Updated Time |
45
53
  ```
46
54
 
47
55
  You will get SQL scripts:
48
56
 
49
57
  ```sql
50
- CREATE TABLE Departments (
51
- DepartmentID int auto_increment NOT NULL COMMENT 'Department ID'
52
- ,DepartmentName varchar(50) NOT NULL COMMENT 'Department Name'
53
- ,ParentID int NULL COMMENT 'Parent Department'
54
- ,ManagerID int NULL COMMENT 'Manager'
55
- ,CONSTRAINT PK_Departments PRIMARY KEY (DepartmentID)
56
- );
58
+ -- Create table 'departments'
59
+ CREATE TABLE `departments` (
60
+ `DepartmentID` int auto_increment NOT NULL COMMENT 'Department ID'
61
+ , `DepartmentName` varchar(50) NOT NULL COMMENT 'Department Name'
62
+ , `ParentID` int COMMENT 'Parent Department'
63
+ , `ManagerID` int COMMENT 'Manager'
64
+ , `CreatedBy` varchar(255) NOT NULL DEFAULT '' COMMENT 'Created By User Name'
65
+ , `CreateTime` datetime NOT NULL DEFAULT current_timestamp() COMMENT 'Created Time'
66
+ , `UpdateBy` varchar(255) NOT NULL DEFAULT '' COMMENT 'Updated By User Name'
67
+ , `UpdateTime` datetime on update current_timestamp() NOT NULL DEFAULT current_timestamp() COMMENT 'Updated Time'
68
+ , PRIMARY KEY (DepartmentID)
69
+ ) COMMENT='The department table.'
70
+ ;
57
71
  ```
58
72
 
59
73
  ## Sample Code
60
74
 
61
75
  ```typescript
62
- import * as path from 'path';
63
-
64
- import { DatabaseTypes, DbmService, DbmOptions } from 'db-modeling-markdown';
65
-
66
- const context: DbmOptions = new DbmOptions();
67
- context.database = DatabaseTypes.mysql;
68
- context.sourceFolder = path.join(__dirname, '../tests/data/mysql/tables');
76
+ import * as path from 'path'
77
+
78
+ import { DatabaseTypes, DbmOptions, DbmService } from '../src'
79
+
80
+ const options: DbmOptions = new DbmOptions()
81
+ options.database = DatabaseTypes.mariadb
82
+
83
+ // Generate database modeling markdown files (.db.md) from a database
84
+ options.sourceFolder = path.join(__dirname, `../../temp/tables/v1`)
85
+ await DbmService.fromDatabase(
86
+ {
87
+ databaseType: options.database,
88
+ host: '127.0.0.1',
89
+ port: 3306,
90
+ user: 'root',
91
+ password: 'password',
92
+ database: 'my-db',
93
+ },
94
+ options.sourceFolder,
95
+ true,
96
+ )
69
97
 
70
98
  // Read table definition markdow files(.db.md), and produce a sql file with create-table-if-not-exists scripts
71
- context.targetPath = path.join(__dirname, '../tmp/createTableIf.sql');
72
- DbmService.toCreateTableIfNotExistsSql(context);
99
+ options.sourceFolder = path.join(__dirname, '../tests/data/mariadb/tables')
100
+ options.targetPath = path.join(__dirname, '../temp/createTableIf.sql')
101
+ DbmService.toCreateTableIfNotExistsSql(options)
73
102
 
74
103
  // Read table definition markdow files(.db.md), and produce a sql file with create-table scripts
75
- context.targetPath = path.join(__dirname, '../tmp/createTable.sql');
76
- DbmService.toCreateTableSql(context);
104
+ options.targetPath = path.join(__dirname, '../temp/createTable.sql')
105
+ DbmService.toCreateTableSql(options)
77
106
 
78
107
  // Read table definition markdow files(.db.md), and produce a sql file with drop-table scripts
79
- context.targetPath = path.join(__dirname, '../tmp/dropTable.sql');
80
- DbmService.toDropTableSql(context);
108
+ options.targetPath = path.join(__dirname, '../temp/dropTable.sql')
109
+ DbmService.toDropTableSql(options)
81
110
 
82
111
  // Read table definition markdow files(.db.md), and produce a sql file with drop-then-create-table scripts
83
- context.targetPath = path.join(__dirname, '../tmp/dropThenCreateTable.sql');
84
- DbmService.toDropThenCreateTableSql(context);
112
+ options.targetPath = path.join(__dirname, '../temp/dropThenCreateTable.sql')
113
+ DbmService.toDropThenCreateTableSql(options)
114
+
115
+ // Read table definition markdow files(.db.md), and produce a sql file with upgrade scripts
116
+ options.previousVersionFolder = path.join(__dirname, `../tests/data/mariadb/tables/v1`)
117
+ options.targetPath = path.join(__dirname, '../temp/upgrade.sql')
118
+ DbmService.toUpgradeSql(options)
85
119
 
86
120
  // Read table definition markdow files(.db.md), and produce a json file
87
- context.targetPath = path.join(__dirname, '../tmp/model.json');
88
- DbmService.toJson(context);
121
+ options.targetPath = path.join(__dirname, '../temp/model.json')
122
+ DbmService.toJson(options)
89
123
 
90
124
  // Read table definition markdow files(.db.md), and produce a model object
91
- context.targetPath = '';
92
- const model = DbmService.toModel(context);
93
- console.log(JSON.stringify(model, null, 2));
125
+ options.targetPath = ''
126
+ const model = DbmService.toModel(options)
127
+ // eslint-disable-next-line no-console
128
+ console.log(JSON.stringify(model, null, 2))
94
129
 
95
130
  // Generate database modeling markdown files (.db.md) from a model
96
- DbmService.toMarkdown(model, path.join(__dirname, '../tmp/tables'), true);
131
+ DbmService.toMarkdown(model, path.join(__dirname, '../temp/tables'), true)
97
132
 
133
+ // Generate index.md from a model
134
+ DbmService.genIndexFile(model, options.sourceFolder)
98
135
  ```
99
136
 
100
137
  ## Features
@@ -113,8 +150,15 @@ DbmService.toMarkdown(model, path.join(__dirname, '../tmp/tables'), true);
113
150
  - Support generate SQL scripts of create tables if not exists.
114
151
  - Support generate SQL scripts of drop then create tables.
115
152
  - Support generate SQL scripts of drop tables.
153
+ - Support generate SQL scripts of upgrade a database (mariadb/mysql only).
154
+ - Support generate database definition markdown files from a database (mariadb/mysql only).
116
155
  - Support generate a json file of the database model.
117
156
  - Support generate an model object of the database model.
118
- - Support generate database definition markdown files from a database model.
157
+ - Support generate database definition markdown files from a database model (json).
158
+ - Support generate `index.md` for a database model.
159
+
160
+ ## Contributing
161
+
162
+ Please see [Contributing](./CONTRIBUTING.md)
119
163
 
120
164
  **Enjoy!**
@@ -0,0 +1,5 @@
1
+ import { DbModel } from '../../models/dbModel';
2
+ import { DbOptions } from '../../services/dbOptions';
3
+ export declare abstract class DbImportProvider {
4
+ abstract getModel(dbOptions: DbOptions): Promise<DbModel>;
5
+ }
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DbImportProvider = void 0;
4
+ class DbImportProvider {
5
+ }
6
+ exports.DbImportProvider = DbImportProvider;
7
+ //# sourceMappingURL=dbImportProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dbImportProvider.js","sourceRoot":"","sources":["../../../src/dialects/core/dbImportProvider.ts"],"names":[],"mappings":";;;AAGA,MAAsB,gBAAgB;CAErC;AAFD,4CAEC"}
@@ -1,11 +1,18 @@
1
- import { DbModel, DbColumn, DbForeignKey, DbIndex, DbTable } from '../../services/dbModel';
1
+ import { DbColumn } from '../../models/dbColumn';
2
+ import { DbForeignKey } from '../../models/dbForeignKey';
3
+ import { DbIndex } from '../../models/dbIndex';
4
+ import { DbModel } from '../../models/dbModel';
5
+ import { DbTable } from '../../models/dbTable';
6
+ export declare const line: string;
7
+ export declare const indent: string;
2
8
  export declare abstract class DbProvider {
3
9
  private outputs;
4
10
  getColumnComment(column: DbColumn): string;
5
- abstract getCreateTableIfNotExistsSql(model: DbModel, withComments: boolean): string;
6
- abstract getCreateTableSql(model: DbModel, withComments: boolean): string;
7
- abstract getDropTableSql(model: DbModel, withComments: boolean): string;
8
- abstract getDropThenCreateTableSql(model: DbModel, withComments: boolean): string;
11
+ abstract getCreateTableIfNotExistsSql(model: DbModel, withComment: boolean): string;
12
+ abstract getCreateTableSql(model: DbModel, withComment: boolean): string;
13
+ abstract getDropTableSql(model: DbModel, withComment: boolean): string;
14
+ abstract getDropThenCreateTableSql(model: DbModel, withComment: boolean): string;
15
+ getUpgradeSql(fromModel: DbModel, model: DbModel, withComment: boolean): string;
9
16
  private getOutput;
10
17
  outputCopy(): string;
11
18
  outputInitialize(): void;
@@ -13,9 +20,15 @@ export declare abstract class DbProvider {
13
20
  outputlnln(text: string, outputId?: number): void;
14
21
  renderDefaultName(table: DbTable, column: DbColumn): string;
15
22
  renderFkName(table: DbTable, foreignKey: DbForeignKey): string;
23
+ renderFkName2(tableName: string, foreignKey: DbForeignKey): string;
16
24
  renderIndexName(table: DbTable, index: DbIndex): string;
25
+ renderIndexName2(tableName: string, index: DbIndex): string;
17
26
  renderPkName(table: DbTable): string;
18
27
  renderTableName(name: string): string;
28
+ /**
29
+ * make sure the length of the name is <= 64
30
+ * @param name the key name
31
+ */
32
+ private renderName;
19
33
  stripBrackets(value: string, stripAll?: boolean): string;
20
34
  }
21
- export declare const line: string;
@@ -1,17 +1,24 @@
1
1
  "use strict";
2
+ /* eslint-disable class-methods-use-this */
2
3
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.line = exports.DbProvider = void 0;
4
+ exports.DbProvider = exports.indent = exports.line = void 0;
5
+ exports.line = '\n';
6
+ exports.indent = ' ';
4
7
  class DbProvider {
5
8
  constructor() {
6
9
  this.outputs = new Map();
7
10
  }
8
11
  getColumnComment(column) {
9
- let sqlComment = (column.comment ? column.comment : '');
10
- if (sqlComment.length === 0 && column.label.length > 0) {
12
+ let sqlComment = column.comment ? column.comment : '';
13
+ if (sqlComment.length === 0 && column.label) {
11
14
  sqlComment = column.label;
12
15
  }
13
16
  return sqlComment;
14
17
  }
18
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
19
+ getUpgradeSql(fromModel, model, withComment) {
20
+ throw new Error('Method not implemented.');
21
+ }
15
22
  getOutput(outputId) {
16
23
  let output = this.outputs.get(outputId);
17
24
  if (output === undefined) {
@@ -48,10 +55,23 @@ class DbProvider {
48
55
  return `DF_${this.renderTableName(table.name)}_${column.name}`;
49
56
  }
50
57
  renderFkName(table, foreignKey) {
51
- return `FK_${this.renderTableName(table.name)}_${foreignKey.columns.replace(/[()\s]/g, '').replace(',', '_')}`;
58
+ return this.renderFkName2(table.name, foreignKey);
59
+ }
60
+ renderFkName2(tableName, foreignKey) {
61
+ return `FK_${this.renderTableName(tableName)}_${foreignKey.columns
62
+ .replace(/[()\s]/g, '')
63
+ .replace(/,/g, '_')}`;
52
64
  }
53
65
  renderIndexName(table, index) {
54
- return `IK_${this.renderTableName(table.name)}_${index.columns.replace(/[()\s]/g, '').replace(',', '_')}`;
66
+ return this.renderIndexName2(table.name, index);
67
+ }
68
+ renderIndexName2(tableName, index) {
69
+ if (index.name) {
70
+ return index.name;
71
+ }
72
+ return `IK_${this.renderTableName(tableName)}_${index.columns
73
+ .replace(/[()\s]/g, '')
74
+ .replace(/,/g, '_')}`;
55
75
  }
56
76
  renderPkName(table) {
57
77
  return `PK_${this.renderTableName(table.name)}`;
@@ -59,6 +79,21 @@ class DbProvider {
59
79
  renderTableName(name) {
60
80
  return name.replace('\\s', '').replace('_', '');
61
81
  }
82
+ /**
83
+ * make sure the length of the name is <= 64
84
+ * @param name the key name
85
+ */
86
+ renderName(prefix, columns, name) {
87
+ if (name.length <= 64) {
88
+ return name;
89
+ }
90
+ const sections = name.split('_');
91
+ // for 1 field case, cut it
92
+ if (sections.length <= 2) {
93
+ return name.substring(0, 64);
94
+ }
95
+ return name;
96
+ }
62
97
  stripBrackets(value, stripAll = false) {
63
98
  let newValue = value;
64
99
  const minLength = stripAll ? 2 : 4;
@@ -82,5 +117,4 @@ class DbProvider {
82
117
  }
83
118
  }
84
119
  exports.DbProvider = DbProvider;
85
- exports.line = '\n';
86
120
  //# sourceMappingURL=dbProvider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dbProvider.js","sourceRoot":"","sources":["../../../src/dialects/core/dbProvider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dbProvider.js","sourceRoot":"","sources":["../../../src/dialects/core/dbProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import { DbColumn } from '../../models/dbColumn';
2
+ import { DbForeignKey } from '../../models/dbForeignKey';
3
+ import { DbIndex } from '../../models/dbIndex';
4
+ import { DbModel } from '../../models/dbModel';
5
+ import { DbTable } from '../../models/dbTable';
6
+ export declare const line: string;
7
+ export declare const indent: string;
8
+ export declare class DbUtils {
9
+ static getComment(column: DbColumn): string | undefined;
10
+ /**
11
+ * Generate names for indexes and foreign keys
12
+ * @param model the database model
13
+ * @param maxLength the max length of key name limitation
14
+ */
15
+ static genModelNames(model: DbModel, maxLength?: number): void;
16
+ /**
17
+ * Generate names for indexes and foreign keys
18
+ * - table name + first field
19
+ * - if there is a duplicate, and more fields
20
+ * - only keep characters in max length
21
+ * - if there is a duplicate, remove and last 4 chars and add an index like 0001.
22
+ * @param table
23
+ * @param maxLength
24
+ */
25
+ static genTableNames(table: DbTable, maxLength?: number): void;
26
+ static renderDefaultName(table: DbTable, column: DbColumn): string;
27
+ static renderFkName(table: DbTable, foreignKey: DbForeignKey): string;
28
+ static renderFkName2(tableName: string, foreignKey: DbForeignKey): string;
29
+ static renderIndexName(table: DbTable, index: DbIndex): string;
30
+ static renderIndexName2(tableName: string, index: DbIndex): string;
31
+ static renderPkName(table: DbTable): string;
32
+ static renderTableName(name: string): string;
33
+ static stripBrackets(value: string, stripAll?: boolean): string;
34
+ static log(data: any): string;
35
+ }