@l-v-yonsama/multi-platform-database-drivers 0.1.9 → 0.1.10
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/README.md +6 -0
- package/built/src/db/drivers/AwsS3Driver.js +122 -421
- package/built/src/db/drivers/AwsS3Driver.js.map +1 -1
- package/built/src/db/drivers/BaseDriver.js +61 -67
- package/built/src/db/drivers/BaseDriver.js.map +1 -1
- package/built/src/db/drivers/MySQLDriver.js +187 -184
- package/built/src/db/drivers/MySQLDriver.js.map +1 -1
- package/built/src/db/drivers/PostgresDriver.js +173 -186
- package/built/src/db/drivers/PostgresDriver.js.map +1 -1
- package/built/src/db/drivers/RedisDriver.js +170 -160
- package/built/src/db/drivers/RedisDriver.js.map +1 -1
- package/built/src/db/resource/DbResource.js +0 -20
- package/built/src/db/resource/DbResource.js.map +1 -1
- package/built/src/db/resource/MultipleResultSetDataHolder.js +0 -1
- package/built/src/db/resource/MultipleResultSetDataHolder.js.map +1 -1
- package/built/src/db/resource/ResourceHelper.js +0 -1
- package/built/src/db/resource/ResourceHelper.js.map +1 -1
- package/built/src/db/resource/ResultSetDataHolder.d.ts +0 -11
- package/built/src/db/resource/ResultSetDataHolder.js +0 -42
- package/built/src/db/resource/ResultSetDataHolder.js.map +1 -1
- package/built/src/db/resource/types/GeneralColumnType.js +0 -20
- package/built/src/db/resource/types/GeneralColumnType.js.map +1 -1
- package/built/src/db/resource/types/MySQLColumnType.js +0 -7
- package/built/src/db/resource/types/MySQLColumnType.js.map +1 -1
- package/built/src/db/resource/types/PostgresColumnType.js +0 -2
- package/built/src/db/resource/types/PostgresColumnType.js.map +1 -1
- package/built/src/service/DBAccessService.js +262 -245
- package/built/src/service/DBAccessService.js.map +1 -1
- package/built/src/service/DBDriverResolver.js +13 -25
- package/built/src/service/DBDriverResolver.js.map +1 -1
- package/built/src/service/SQLService.js +0 -4
- package/built/src/service/SQLService.js.map +1 -1
- package/built/src/service/request/index.d.ts +0 -2
- package/package.json +1 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
3
4
|
const DBError_1 = require("../DBError");
|
|
4
5
|
const tunnel = require("tunnel-ssh");
|
|
5
6
|
const get_port_1 = require("get-port");
|
|
@@ -10,7 +11,6 @@ class BaseDriver {
|
|
|
10
11
|
constructor(conRes) {
|
|
11
12
|
this.conRes = conRes;
|
|
12
13
|
this.isConnected = false;
|
|
13
|
-
// log.info(this.getName(), '★CREATED', this.conRes.id);
|
|
14
14
|
}
|
|
15
15
|
getName() {
|
|
16
16
|
return this.constructor.name;
|
|
@@ -28,7 +28,6 @@ class BaseDriver {
|
|
|
28
28
|
sql = sql.toLocaleLowerCase();
|
|
29
29
|
sql = sql.replace(/-- .+/, '');
|
|
30
30
|
sql = sql.replace(/(\r\n|\r|\n|\t| )+/g, ' ').trim();
|
|
31
|
-
// console.log('final sql =[' + sql + ']');
|
|
32
31
|
if (sql.match(/select[ ]+[^ ]+[ ]+from/)) {
|
|
33
32
|
return true;
|
|
34
33
|
}
|
|
@@ -46,11 +45,6 @@ class BaseDriver {
|
|
|
46
45
|
const myRegexp = /(FROM|UPDATE)[\s]+(([^\s()]+)\.)?([^\s()]+)/gim;
|
|
47
46
|
let match = myRegexp.exec(sql);
|
|
48
47
|
while (match != null) {
|
|
49
|
-
// sql=SELECT * FROM SSS.TTT
|
|
50
|
-
// [1]=SSS.TTT
|
|
51
|
-
// [2]=SSS.
|
|
52
|
-
// [3]=SSS
|
|
53
|
-
// [4]=TTT
|
|
54
48
|
ret.list.push({ schema: match[3], table: match[4] });
|
|
55
49
|
match = myRegexp.exec(sql);
|
|
56
50
|
}
|
|
@@ -90,16 +84,13 @@ class BaseDriver {
|
|
|
90
84
|
const hints = resolver.hints.list[i];
|
|
91
85
|
const t = resource_1.ResourceHelper.findResource(this.conRes, ResourceType_1.ResourceType.Table, hints.table);
|
|
92
86
|
if (t) {
|
|
93
|
-
// log.info(LOG_PREFIX, "#resolveColumn found table", hints.table);
|
|
94
87
|
return t.getChildByName(column, { unwrapQuote: true });
|
|
95
88
|
}
|
|
96
89
|
else {
|
|
97
|
-
// log.warn(LOG_PREFIX, "#resolveColumn not found table", hints.table);
|
|
98
90
|
}
|
|
99
91
|
}
|
|
100
92
|
}
|
|
101
93
|
else {
|
|
102
|
-
// log.warn(LOG_PREFIX, '#resolveColumn no connection res.')
|
|
103
94
|
}
|
|
104
95
|
return undefined;
|
|
105
96
|
}
|
|
@@ -110,77 +101,80 @@ class BaseDriver {
|
|
|
110
101
|
}
|
|
111
102
|
return '';
|
|
112
103
|
}
|
|
113
|
-
|
|
114
|
-
this
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
}
|
|
124
|
-
this.sshServer = tunnel(setting, function (err) {
|
|
125
|
-
if (err) {
|
|
126
|
-
reject(err);
|
|
127
|
-
}
|
|
128
|
-
else {
|
|
129
|
-
resolve('');
|
|
104
|
+
connectToSshServer() {
|
|
105
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
106
|
+
this.sshLocalPort = yield (0, get_port_1.default)({ port: (0, get_port_1.portNumbers)(13000, 15100) });
|
|
107
|
+
return new Promise((resolve, reject) => {
|
|
108
|
+
const setting = Object.assign({}, this.conRes.ssh, {
|
|
109
|
+
localHost: '127.0.0.1',
|
|
110
|
+
localPort: this.sshLocalPort,
|
|
111
|
+
});
|
|
112
|
+
if (setting.authMethod === 'privateKey') {
|
|
113
|
+
setting.privateKey = fs.readFileSync(setting.privateKeyPath, 'utf8');
|
|
130
114
|
}
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
115
|
+
this.sshServer = tunnel(setting, function (err) {
|
|
116
|
+
if (err) {
|
|
117
|
+
reject(err);
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
resolve('');
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
this.sshServer.on('error', function (err) {
|
|
124
|
+
console.error('Something bad happened:', err);
|
|
125
|
+
});
|
|
135
126
|
});
|
|
136
127
|
});
|
|
137
128
|
}
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
if (this.
|
|
144
|
-
|
|
129
|
+
connect() {
|
|
130
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
131
|
+
let errorReason = '';
|
|
132
|
+
try {
|
|
133
|
+
this.initBaseStatus();
|
|
134
|
+
if (this.conRes) {
|
|
135
|
+
if (this.isNeedsSsh()) {
|
|
136
|
+
yield this.connectToSshServer();
|
|
137
|
+
}
|
|
138
|
+
errorReason = yield this.connectSub();
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
errorReason = 'Connection property is nothing';
|
|
145
142
|
}
|
|
146
|
-
errorReason = await this.connectSub();
|
|
147
143
|
}
|
|
148
|
-
|
|
149
|
-
errorReason =
|
|
144
|
+
catch (e) {
|
|
145
|
+
errorReason = e.message;
|
|
150
146
|
}
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
}
|
|
155
|
-
this.isConnected = errorReason === '';
|
|
156
|
-
return errorReason;
|
|
147
|
+
this.isConnected = errorReason === '';
|
|
148
|
+
return errorReason;
|
|
149
|
+
});
|
|
157
150
|
}
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
if (this.
|
|
163
|
-
|
|
151
|
+
disconnect() {
|
|
152
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
153
|
+
let errorReason = '';
|
|
154
|
+
try {
|
|
155
|
+
if (this.conRes) {
|
|
156
|
+
if (this.isConnected) {
|
|
157
|
+
errorReason = yield this.closeSub();
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
}
|
|
164
161
|
}
|
|
165
162
|
else {
|
|
166
|
-
|
|
163
|
+
errorReason = 'Connection property is nothing';
|
|
167
164
|
}
|
|
168
165
|
}
|
|
169
|
-
|
|
170
|
-
errorReason =
|
|
166
|
+
catch (e) {
|
|
167
|
+
errorReason = e.message;
|
|
171
168
|
}
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
this.sshServer.close();
|
|
179
|
-
this.sshServer = undefined;
|
|
169
|
+
finally {
|
|
170
|
+
if (this.sshServer) {
|
|
171
|
+
this.sshServer.close();
|
|
172
|
+
this.sshServer = undefined;
|
|
173
|
+
}
|
|
174
|
+
this.initBaseStatus();
|
|
180
175
|
}
|
|
181
|
-
|
|
182
|
-
}
|
|
183
|
-
return errorReason;
|
|
176
|
+
return errorReason;
|
|
177
|
+
});
|
|
184
178
|
}
|
|
185
179
|
createDBError(message, sourceError) {
|
|
186
180
|
return new DBError_1.default(message, sourceError.code, sourceError.errno, sourceError.sqlMessage, sourceError.sqlState);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseDriver.js","sourceRoot":"","sources":["../../../../src/db/drivers/BaseDriver.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"BaseDriver.js","sourceRoot":"","sources":["../../../../src/db/drivers/BaseDriver.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
3
4
|
const BaseDriver_1 = require("./BaseDriver");
|
|
4
5
|
const mysql = require("mysql2/promise");
|
|
5
6
|
const ResultSetDataHolder_1 = require("../resource/ResultSetDataHolder");
|
|
@@ -18,208 +19,207 @@ class MySQLDriver extends BaseDriver_1.default {
|
|
|
18
19
|
const name = enum_values_1.EnumValues.getNameFromValue(MySQLColumnType_1.MySQLColumnType, MySQLColumnType_1.MySQLColumnType.parseByFieldInfo(fieldInfo));
|
|
19
20
|
const key = new ResultSetDataHolder_1.RdhKey(fieldInfo.name, GeneralColumnType_1.GeneralColumnType.parse(name), super.resolveColumnComment(fieldInfo.orgName, resolver));
|
|
20
21
|
if (key.type === GeneralColumnType_1.GeneralColumnType.UNKNOWN) {
|
|
21
|
-
// log.error(LOG_PREFIX, 'Unknownt=', fieldInfo)
|
|
22
22
|
}
|
|
23
|
-
// console.log('key=', key, EnumValues.getNameFromValue(GeneralColumnType, key.type));
|
|
24
23
|
return key;
|
|
25
24
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
catch (e) {
|
|
42
|
-
errorMessage = e.message;
|
|
43
|
-
}
|
|
44
|
-
return errorMessage;
|
|
45
|
-
}
|
|
46
|
-
async test(with_connect = false) {
|
|
47
|
-
let errorReason = '';
|
|
48
|
-
if (with_connect) {
|
|
49
|
-
errorReason = await this.connect();
|
|
50
|
-
}
|
|
51
|
-
if (!errorReason) {
|
|
52
|
-
const rdh = await this.requestSql('SELECT 1 from DUAL');
|
|
53
|
-
if (rdh && rdh.errorMessage) {
|
|
54
|
-
return rdh.errorMessage;
|
|
25
|
+
connectSub() {
|
|
26
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
27
|
+
let errorMessage = '';
|
|
28
|
+
const options = {
|
|
29
|
+
connectionLimit: 4,
|
|
30
|
+
multipleStatements: true,
|
|
31
|
+
port: this.conRes.port,
|
|
32
|
+
host: this.conRes.host,
|
|
33
|
+
user: this.conRes.user,
|
|
34
|
+
password: this.conRes.password,
|
|
35
|
+
database: this.conRes.database,
|
|
36
|
+
};
|
|
37
|
+
this.client = mysql.createPool(options);
|
|
38
|
+
try {
|
|
39
|
+
errorMessage = yield this.test();
|
|
55
40
|
}
|
|
56
|
-
|
|
57
|
-
|
|
41
|
+
catch (e) {
|
|
42
|
+
errorMessage = e.message;
|
|
58
43
|
}
|
|
59
|
-
|
|
60
|
-
|
|
44
|
+
return errorMessage;
|
|
45
|
+
});
|
|
61
46
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
let binds = [];
|
|
68
|
-
if (options && options.binds) {
|
|
69
|
-
binds = options.binds;
|
|
70
|
-
}
|
|
71
|
-
let resolver;
|
|
72
|
-
if (options && options.needs_column_resolve === true) {
|
|
73
|
-
resolver = this.createColumnResolver(sql);
|
|
47
|
+
test(with_connect = false) {
|
|
48
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
49
|
+
let errorReason = '';
|
|
50
|
+
if (with_connect) {
|
|
51
|
+
errorReason = yield this.connect();
|
|
74
52
|
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
if (
|
|
78
|
-
|
|
79
|
-
// Ok Packet {
|
|
80
|
-
// fieldCount: 0,
|
|
81
|
-
// affectedRows: 1,
|
|
82
|
-
// insertId: 0,
|
|
83
|
-
// serverStatus: 2,
|
|
84
|
-
// warningCount: 0,
|
|
85
|
-
// message: '',
|
|
86
|
-
// protocol41: true,
|
|
87
|
-
// changedRows: 0 }
|
|
88
|
-
const results = rows;
|
|
89
|
-
rdh = new ResultSetDataHolder_1.default([
|
|
90
|
-
'fieldCount',
|
|
91
|
-
'affectedRows',
|
|
92
|
-
'insertId',
|
|
93
|
-
'serverStatus',
|
|
94
|
-
'warningStatus',
|
|
95
|
-
'changedRows',
|
|
96
|
-
]);
|
|
97
|
-
rdh.addRow({
|
|
98
|
-
fieldCount: results.fieldCount,
|
|
99
|
-
affectedRows: results.affectedRows,
|
|
100
|
-
insertId: results.insertId,
|
|
101
|
-
serverStatus: results.serverStatus,
|
|
102
|
-
warningStatus: results.warningStatus,
|
|
103
|
-
changedRows: results.changedRows,
|
|
104
|
-
});
|
|
53
|
+
if (!errorReason) {
|
|
54
|
+
const rdh = yield this.requestSql('SELECT 1 from DUAL');
|
|
55
|
+
if (rdh && rdh.errorMessage) {
|
|
56
|
+
return rdh.errorMessage;
|
|
105
57
|
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
? []
|
|
109
|
-
: fields.map((f) => this.fieldInfo2Key(f, resolver)));
|
|
110
|
-
rows.forEach((result) => {
|
|
111
|
-
rdh.addRow(result);
|
|
112
|
-
});
|
|
58
|
+
if (with_connect) {
|
|
59
|
+
yield this.disconnect();
|
|
113
60
|
}
|
|
114
61
|
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
else {
|
|
120
|
-
new Error('No connection');
|
|
121
|
-
}
|
|
122
|
-
return rdh;
|
|
62
|
+
return errorReason;
|
|
63
|
+
});
|
|
123
64
|
}
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
}
|
|
132
|
-
if (options && options.progress_callback) {
|
|
133
|
-
if (counter % 5 === 0) {
|
|
134
|
-
options.progress_callback(`Count ${prefix}${st.table}`, 70);
|
|
65
|
+
requestSql(sql, options) {
|
|
66
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
67
|
+
let rdh = new ResultSetDataHolder_1.default([]);
|
|
68
|
+
if (this.client) {
|
|
69
|
+
let binds = [];
|
|
70
|
+
if (options && options.binds) {
|
|
71
|
+
binds = options.binds;
|
|
135
72
|
}
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
73
|
+
let resolver;
|
|
74
|
+
if (options && options.needs_column_resolve === true) {
|
|
75
|
+
resolver = this.createColumnResolver(sql);
|
|
76
|
+
}
|
|
77
|
+
const [rows, fields] = yield this.client.execute(sql, binds);
|
|
78
|
+
try {
|
|
79
|
+
if (fields === undefined) {
|
|
80
|
+
const results = rows;
|
|
81
|
+
rdh = new ResultSetDataHolder_1.default([
|
|
82
|
+
'fieldCount',
|
|
83
|
+
'affectedRows',
|
|
84
|
+
'insertId',
|
|
85
|
+
'serverStatus',
|
|
86
|
+
'warningStatus',
|
|
87
|
+
'changedRows',
|
|
88
|
+
]);
|
|
89
|
+
rdh.addRow({
|
|
90
|
+
fieldCount: results.fieldCount,
|
|
91
|
+
affectedRows: results.affectedRows,
|
|
92
|
+
insertId: results.insertId,
|
|
93
|
+
serverStatus: results.serverStatus,
|
|
94
|
+
warningStatus: results.warningStatus,
|
|
95
|
+
changedRows: results.changedRows,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
rdh = new ResultSetDataHolder_1.default(fields === undefined
|
|
100
|
+
? []
|
|
101
|
+
: fields.map((f) => this.fieldInfo2Key(f, resolver)));
|
|
102
|
+
rows.forEach((result) => {
|
|
103
|
+
rdh.addRow(result);
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
catch (err) {
|
|
108
|
+
rdh = ResultSetDataHolder_1.default.create(err);
|
|
144
109
|
}
|
|
145
110
|
}
|
|
146
|
-
|
|
147
|
-
|
|
111
|
+
else {
|
|
112
|
+
new Error('No connection');
|
|
148
113
|
}
|
|
149
|
-
|
|
150
|
-
}
|
|
151
|
-
return list;
|
|
114
|
+
return rdh;
|
|
115
|
+
});
|
|
152
116
|
}
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
117
|
+
countTables(tables, options) {
|
|
118
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
119
|
+
const list = new Array();
|
|
120
|
+
let counter = 1;
|
|
121
|
+
for (const st of tables.list) {
|
|
122
|
+
let prefix = '';
|
|
123
|
+
if (st.schema) {
|
|
124
|
+
prefix = st.schema + '.';
|
|
125
|
+
}
|
|
126
|
+
if (options && options.progress_callback) {
|
|
127
|
+
if (counter % 5 === 0) {
|
|
128
|
+
options.progress_callback(`Count ${prefix}${st.table}`, 70);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
const sql = `SELECT COUNT(*) as count FROM ${prefix}${st.table}`;
|
|
132
|
+
try {
|
|
133
|
+
const [results] = yield this.client.query(sql, []);
|
|
134
|
+
if (results && results.length > 0) {
|
|
135
|
+
const row = results[0];
|
|
136
|
+
const obj = Object.assign({ count: row.count }, st);
|
|
137
|
+
list.push(obj);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
catch (e) {
|
|
141
|
+
console.error(e);
|
|
142
|
+
}
|
|
143
|
+
counter++;
|
|
144
|
+
}
|
|
145
|
+
return list;
|
|
167
146
|
});
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
147
|
+
}
|
|
148
|
+
getInfomationSchemas(options) {
|
|
149
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
150
|
+
if (!this.conRes) {
|
|
151
|
+
return [];
|
|
152
|
+
}
|
|
153
|
+
const dbResources = new Array();
|
|
154
|
+
const dbDatabase = new DbResource_1.DbDatabase(this.conRes.database);
|
|
155
|
+
dbResources.push(dbDatabase);
|
|
156
|
+
let progress = 10;
|
|
178
157
|
if (options.progress_callback) {
|
|
179
|
-
|
|
180
|
-
options.progress_callback(`${dbTables.length} Tables found in Schema[${dbSchema.getName()}].`, progress);
|
|
158
|
+
options.progress_callback(`${dbResources.length} Databases found.`, progress);
|
|
181
159
|
}
|
|
182
|
-
|
|
183
|
-
|
|
160
|
+
const dbSchemas = yield this.getSchemas(dbDatabase);
|
|
161
|
+
dbSchemas.forEach((res) => {
|
|
162
|
+
dbDatabase.addChild(res);
|
|
163
|
+
});
|
|
164
|
+
this.resetDefaultSchema(dbDatabase);
|
|
165
|
+
progress = 30;
|
|
184
166
|
if (options.progress_callback) {
|
|
185
|
-
|
|
186
|
-
options.progress_callback(`Commnets finding now... in Schema[${dbSchema.getName()}].`, progress);
|
|
167
|
+
options.progress_callback(`${dbSchemas.length} Schemas found.`, progress);
|
|
187
168
|
}
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
169
|
+
const incrPerSchema = Math.round(20 / dbSchemas.length);
|
|
170
|
+
for (const dbSchema of dbSchemas) {
|
|
171
|
+
const dbTables = yield this.getTables(dbSchema);
|
|
172
|
+
dbTables.forEach((res) => dbSchema.addChild(res));
|
|
173
|
+
if (options.progress_callback) {
|
|
174
|
+
progress += incrPerSchema;
|
|
175
|
+
options.progress_callback(`${dbTables.length} Tables found in Schema[${dbSchema.getName()}].`, progress);
|
|
176
|
+
}
|
|
191
177
|
}
|
|
192
|
-
|
|
193
|
-
|
|
178
|
+
for (const dbSchema of dbSchemas) {
|
|
179
|
+
if (options.progress_callback) {
|
|
180
|
+
progress += incrPerSchema;
|
|
181
|
+
options.progress_callback(`Commnets finding now... in Schema[${dbSchema.getName()}].`, progress);
|
|
182
|
+
}
|
|
183
|
+
for (const dbTable of dbSchema.getChildren()) {
|
|
184
|
+
const dbColumns = yield this.getColumns(dbTable);
|
|
185
|
+
dbColumns.forEach((res) => dbTable.addChild(res));
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
return dbResources;
|
|
189
|
+
});
|
|
194
190
|
}
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
191
|
+
getSchemas(dbDatabase) {
|
|
192
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
193
|
+
const rdh = yield this.requestSql(`SELECT SCHEMA_NAME AS name
|
|
198
194
|
FROM INFORMATION_SCHEMA.SCHEMATA
|
|
199
195
|
WHERE LOWER(SCHEMA_NAME) NOT IN ('information_schema', 'sys', 'performance_schema')
|
|
200
196
|
ORDER BY name`);
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
197
|
+
return rdh.rows.map((r) => {
|
|
198
|
+
const res = new DbResource_1.DbSchema(r.values.name);
|
|
199
|
+
return res;
|
|
200
|
+
});
|
|
204
201
|
});
|
|
205
202
|
}
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
203
|
+
getTables(dbSchema) {
|
|
204
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
205
|
+
const rdh = yield this
|
|
206
|
+
.requestSql(`SELECT TABLE_NAME as name, CASE TABLE_TYPE
|
|
209
207
|
WHEN 'BASE TABLE' THEN 'TABLE'
|
|
210
208
|
WHEN 'SYSTEM VIEW' THEN 'VIEW'
|
|
211
209
|
ELSE 'TABLE' END AS table_type,
|
|
212
210
|
TABLE_COMMENT as comment
|
|
213
211
|
FROM INFORMATION_SCHEMA.TABLES
|
|
214
212
|
WHERE TABLE_SCHEMA = '${dbSchema.getName()}' `);
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
213
|
+
return rdh.rows.map((r) => {
|
|
214
|
+
const res = new DbResource_1.DbTable(r.values.name, r.values.table_type, r.values.comment);
|
|
215
|
+
return res;
|
|
216
|
+
});
|
|
218
217
|
});
|
|
219
218
|
}
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
219
|
+
getColumns(dbTable) {
|
|
220
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
221
|
+
const binds = [dbTable.getParent().getName(), dbTable.getName()];
|
|
222
|
+
const rdh = yield this.requestSql(`SELECT COLUMN_NAME as name,
|
|
223
223
|
DATA_TYPE as col_type,
|
|
224
224
|
CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END as nullable,
|
|
225
225
|
COLUMN_KEY as col_key,
|
|
@@ -228,27 +228,30 @@ class MySQLDriver extends BaseDriver_1.default {
|
|
|
228
228
|
COLUMN_COMMENT as comment
|
|
229
229
|
FROM INFORMATION_SCHEMA.COLUMNS
|
|
230
230
|
WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ?`, { binds });
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
231
|
+
return rdh.rows.map((r) => {
|
|
232
|
+
const type_name = enum_values_1.EnumValues.getNameFromValue(MySQLColumnType_1.MySQLColumnType, MySQLColumnType_1.MySQLColumnType.parse(r.values.col_type));
|
|
233
|
+
const res = new DbResource_1.DbColumn(r.values.name, GeneralColumnType_1.GeneralColumnType.parse(type_name), {
|
|
234
|
+
nullable: r.values.nullable === 1,
|
|
235
|
+
key: r.values.col_key,
|
|
236
|
+
default: r.values.col_default,
|
|
237
|
+
extra: r.values.col_extra,
|
|
238
|
+
}, r.values.comment);
|
|
239
|
+
return res;
|
|
240
|
+
});
|
|
240
241
|
});
|
|
241
242
|
}
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
243
|
+
closeSub() {
|
|
244
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
245
|
+
try {
|
|
246
|
+
if (this.client) {
|
|
247
|
+
yield this.client.end();
|
|
248
|
+
}
|
|
249
|
+
return '';
|
|
246
250
|
}
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
}
|
|
251
|
+
catch (e) {
|
|
252
|
+
return e.message;
|
|
253
|
+
}
|
|
254
|
+
});
|
|
252
255
|
}
|
|
253
256
|
}
|
|
254
257
|
exports.default = MySQLDriver;
|