@l-v-yonsama/multi-platform-database-drivers 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.editorconfig +15 -0
- package/.eslintignore +1 -0
- package/.eslintrc.json +30 -0
- package/.github/workflows/npm-publish-github-packages.yml +50 -0
- package/.prettierrc +12 -0
- package/README.md +7 -0
- package/__tests__/db/drivers/AwsS3Driver.test.ts +97 -0
- package/__tests__/db/drivers/MySQLDriver.test.ts +140 -0
- package/__tests__/db/drivers/PostgresDriver.test.ts +139 -0
- package/__tests__/db/drivers/RedisDriver.test.ts +156 -0
- package/jest.config.js +18 -0
- package/package.json +76 -0
- package/src/db/DBError.ts +26 -0
- package/src/db/drivers/AwsS3Driver.ts +539 -0
- package/src/db/drivers/BaseDriver.ts +256 -0
- package/src/db/drivers/MongoDriver.js +110 -0
- package/src/db/drivers/MySQLDriver.ts +318 -0
- package/src/db/drivers/PostgresDriver.ts +363 -0
- package/src/db/drivers/RedisDriver.ts +277 -0
- package/src/db/manager.ts +95 -0
- package/src/db/resource/DbResource.ts +579 -0
- package/src/db/resource/MultipleResultSetDataHolder.ts +119 -0
- package/src/db/resource/ResourceUtil.ts +366 -0
- package/src/db/resource/ResultSetDataHolder.ts +806 -0
- package/src/db/resource/types/DBType.ts +43 -0
- package/src/db/resource/types/GeneralColumnType.ts +321 -0
- package/src/db/resource/types/MySQLColumnType.ts +134 -0
- package/src/db/resource/types/ODBCVendorType.ts +3 -0
- package/src/db/resource/types/PostgresColumnType.ts +94 -0
- package/src/db/resource/types/RedisKeyType.ts +48 -0
- package/src/db/resource/types/ResourceType.ts +10 -0
- package/src/main.ts +1 -0
- package/src/service/request/general_db_request.ts +20 -0
- package/src/service/request/redis_request.ts +21 -0
- package/src/service/request/s3_request.ts +15 -0
- package/src/service/response/GeneralReponse.ts +10 -0
- package/src/types/DateModifiedType.ts +75 -0
- package/src/types/FileKindType.ts +80 -0
- package/src/util/file_util.ts +178 -0
- package/tsconfig.json +23 -0
- package/tsconfig.release.json +23 -0
- package/unit-test.yml +41 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export enum DBType {
|
|
2
|
+
ODBC = 50,
|
|
3
|
+
MySQL = 100,
|
|
4
|
+
Postgres = 110,
|
|
5
|
+
Firestore = 150,
|
|
6
|
+
Mongodb = 200,
|
|
7
|
+
Redis = 300,
|
|
8
|
+
AwsS3 = 400,
|
|
9
|
+
Minio = 402,
|
|
10
|
+
IndexedDB = 500,
|
|
11
|
+
Unknown = 9999,
|
|
12
|
+
}
|
|
13
|
+
export namespace DBType {
|
|
14
|
+
export function parse(s: number): DBType {
|
|
15
|
+
return s;
|
|
16
|
+
}
|
|
17
|
+
export function isAwsOrMinio(s: any): boolean {
|
|
18
|
+
if (DBType.AwsS3 == s || DBType.Minio == s) {
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
if ('AwsS3' === s || 'Minio' === s) {
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
export function isRDB(s: any): boolean {
|
|
27
|
+
if (DBType.ODBC == s || DBType.MySQL == s || DBType.Postgres == s) {
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
export function currentSupportList(): any[] {
|
|
33
|
+
const r: any[] = [];
|
|
34
|
+
r.push({ value: DBType.ODBC, name: 'ODBC' });
|
|
35
|
+
r.push({ value: DBType.MySQL, name: 'MySQL' });
|
|
36
|
+
r.push({ value: DBType.Postgres, name: 'Postgres' });
|
|
37
|
+
r.push({ value: DBType.Redis, name: 'Redis' });
|
|
38
|
+
r.push({ value: DBType.AwsS3, name: 'AwsS3' });
|
|
39
|
+
r.push({ value: DBType.Minio, name: 'Minio' });
|
|
40
|
+
r.push({ value: DBType.IndexedDB, name: 'IndexedDB' });
|
|
41
|
+
return r;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
import { EnumValues } from 'enum-values';
|
|
2
|
+
|
|
3
|
+
export enum GeneralColumnType {
|
|
4
|
+
BIT,
|
|
5
|
+
VARBIT,
|
|
6
|
+
BOOLEAN,
|
|
7
|
+
CHAR,
|
|
8
|
+
VARCHAR,
|
|
9
|
+
TINYTEXT,
|
|
10
|
+
MEDIUMTEXT,
|
|
11
|
+
TEXT,
|
|
12
|
+
LONGTEXT,
|
|
13
|
+
CLOB,
|
|
14
|
+
INET,
|
|
15
|
+
TINYINT,
|
|
16
|
+
SMALLINT,
|
|
17
|
+
MEDIUMINT,
|
|
18
|
+
INTEGER,
|
|
19
|
+
BIGINT,
|
|
20
|
+
DECIMAL,
|
|
21
|
+
LONG,
|
|
22
|
+
LONGLONG,
|
|
23
|
+
NUMERIC,
|
|
24
|
+
FLOAT,
|
|
25
|
+
DOUBLE_PRECISION,
|
|
26
|
+
REAL,
|
|
27
|
+
SERIAL,
|
|
28
|
+
MONEY,
|
|
29
|
+
JSON,
|
|
30
|
+
JSONB,
|
|
31
|
+
LINE,
|
|
32
|
+
LSEG,
|
|
33
|
+
MACADDR,
|
|
34
|
+
PATH,
|
|
35
|
+
PG_LSN,
|
|
36
|
+
POINT,
|
|
37
|
+
POLYGON,
|
|
38
|
+
TIME,
|
|
39
|
+
TIME_WITH_TIME_ZONE,
|
|
40
|
+
DATE,
|
|
41
|
+
TIMESTAMP,
|
|
42
|
+
TIMESTAMP_WITH_TIME_ZONE,
|
|
43
|
+
YEAR,
|
|
44
|
+
ENUM,
|
|
45
|
+
SET,
|
|
46
|
+
TSQUERY,
|
|
47
|
+
TSVECTOR,
|
|
48
|
+
TXID_SNAPSHOT,
|
|
49
|
+
UUID,
|
|
50
|
+
CIDR,
|
|
51
|
+
CIRCLE,
|
|
52
|
+
BOX,
|
|
53
|
+
BYTEA,
|
|
54
|
+
BINARY,
|
|
55
|
+
BLOB,
|
|
56
|
+
MEDIUMBLOB,
|
|
57
|
+
LONGBLOB,
|
|
58
|
+
XML,
|
|
59
|
+
NAME,
|
|
60
|
+
ARRAY,
|
|
61
|
+
XID,
|
|
62
|
+
INTERVAL,
|
|
63
|
+
OID,
|
|
64
|
+
REGTYPE,
|
|
65
|
+
REGPROC,
|
|
66
|
+
PG_NODE_TREE,
|
|
67
|
+
PG_NDISTINCT,
|
|
68
|
+
PG_DEPENDENCIES,
|
|
69
|
+
OBJECT,
|
|
70
|
+
UNKNOWN = -1,
|
|
71
|
+
}
|
|
72
|
+
export namespace GeneralColumnType {
|
|
73
|
+
export function parse(s: string | null | undefined): GeneralColumnType {
|
|
74
|
+
if (s === undefined || s === null) {
|
|
75
|
+
return GeneralColumnType.UNKNOWN;
|
|
76
|
+
}
|
|
77
|
+
s = s.toUpperCase();
|
|
78
|
+
if ('VAR_STRING' === s) {
|
|
79
|
+
return GeneralColumnType.VARCHAR;
|
|
80
|
+
} else if ('TINY' === s) {
|
|
81
|
+
return GeneralColumnType.TINYINT;
|
|
82
|
+
} else if ('DATETIME' === s || 'TIMESTAMP(6)' === s) {
|
|
83
|
+
return GeneralColumnType.TIMESTAMP;
|
|
84
|
+
} else if ('VARCHAR2' === s) {
|
|
85
|
+
return GeneralColumnType.VARCHAR;
|
|
86
|
+
} else if ('NUMBER' === s) {
|
|
87
|
+
return GeneralColumnType.NUMERIC;
|
|
88
|
+
}
|
|
89
|
+
const list = EnumValues.getNamesAndValues(GeneralColumnType);
|
|
90
|
+
const m = list.find((a) => a.name === s);
|
|
91
|
+
if (m) {
|
|
92
|
+
return <number>m.value;
|
|
93
|
+
}
|
|
94
|
+
return GeneralColumnType.UNKNOWN;
|
|
95
|
+
}
|
|
96
|
+
export function isNumericLike(type: GeneralColumnType): boolean {
|
|
97
|
+
switch (type) {
|
|
98
|
+
// number
|
|
99
|
+
case GeneralColumnType.TINYINT:
|
|
100
|
+
case GeneralColumnType.SMALLINT:
|
|
101
|
+
case GeneralColumnType.MEDIUMINT:
|
|
102
|
+
case GeneralColumnType.INTEGER:
|
|
103
|
+
case GeneralColumnType.LONG:
|
|
104
|
+
case GeneralColumnType.LONGLONG:
|
|
105
|
+
case GeneralColumnType.BIGINT:
|
|
106
|
+
case GeneralColumnType.SERIAL:
|
|
107
|
+
case GeneralColumnType.MONEY:
|
|
108
|
+
case GeneralColumnType.YEAR:
|
|
109
|
+
case GeneralColumnType.FLOAT:
|
|
110
|
+
case GeneralColumnType.DOUBLE_PRECISION:
|
|
111
|
+
case GeneralColumnType.NUMERIC:
|
|
112
|
+
case GeneralColumnType.DECIMAL:
|
|
113
|
+
return true;
|
|
114
|
+
}
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
export function parseHandsonType(type: GeneralColumnType): string {
|
|
118
|
+
switch (type) {
|
|
119
|
+
// number
|
|
120
|
+
case GeneralColumnType.TINYINT:
|
|
121
|
+
case GeneralColumnType.SMALLINT:
|
|
122
|
+
case GeneralColumnType.MEDIUMINT:
|
|
123
|
+
case GeneralColumnType.INTEGER:
|
|
124
|
+
case GeneralColumnType.LONG:
|
|
125
|
+
case GeneralColumnType.LONGLONG:
|
|
126
|
+
case GeneralColumnType.BIGINT:
|
|
127
|
+
case GeneralColumnType.SERIAL:
|
|
128
|
+
case GeneralColumnType.MONEY:
|
|
129
|
+
case GeneralColumnType.YEAR:
|
|
130
|
+
return 'numeric_integers';
|
|
131
|
+
case GeneralColumnType.FLOAT:
|
|
132
|
+
case GeneralColumnType.DOUBLE_PRECISION:
|
|
133
|
+
case GeneralColumnType.NUMERIC:
|
|
134
|
+
case GeneralColumnType.DECIMAL:
|
|
135
|
+
return 'numeric_decimals';
|
|
136
|
+
case GeneralColumnType.DATE:
|
|
137
|
+
return 'date';
|
|
138
|
+
case GeneralColumnType.TIMESTAMP:
|
|
139
|
+
case GeneralColumnType.TIMESTAMP_WITH_TIME_ZONE:
|
|
140
|
+
return 'timestamp';
|
|
141
|
+
case GeneralColumnType.BIT:
|
|
142
|
+
return 'text';
|
|
143
|
+
case GeneralColumnType.VARBIT:
|
|
144
|
+
return 'text';
|
|
145
|
+
case GeneralColumnType.BOOLEAN:
|
|
146
|
+
return 'checkbox';
|
|
147
|
+
case GeneralColumnType.BOX:
|
|
148
|
+
return 'text';
|
|
149
|
+
// blob
|
|
150
|
+
case GeneralColumnType.BYTEA:
|
|
151
|
+
case GeneralColumnType.BLOB:
|
|
152
|
+
case GeneralColumnType.MEDIUMBLOB:
|
|
153
|
+
case GeneralColumnType.LONGBLOB:
|
|
154
|
+
case GeneralColumnType.BINARY:
|
|
155
|
+
return 'text';
|
|
156
|
+
case GeneralColumnType.INET:
|
|
157
|
+
return 'text';
|
|
158
|
+
case GeneralColumnType.CHAR:
|
|
159
|
+
return 'text';
|
|
160
|
+
case GeneralColumnType.VARCHAR:
|
|
161
|
+
return 'text';
|
|
162
|
+
case GeneralColumnType.CIDR:
|
|
163
|
+
return 'text';
|
|
164
|
+
case GeneralColumnType.CIRCLE:
|
|
165
|
+
return 'text';
|
|
166
|
+
case GeneralColumnType.JSON:
|
|
167
|
+
return 'text';
|
|
168
|
+
case GeneralColumnType.JSONB:
|
|
169
|
+
return 'text';
|
|
170
|
+
case GeneralColumnType.LINE:
|
|
171
|
+
return 'text';
|
|
172
|
+
case GeneralColumnType.LSEG:
|
|
173
|
+
return 'text';
|
|
174
|
+
case GeneralColumnType.MACADDR:
|
|
175
|
+
return 'text';
|
|
176
|
+
case GeneralColumnType.PATH:
|
|
177
|
+
return 'text';
|
|
178
|
+
case GeneralColumnType.PG_LSN:
|
|
179
|
+
return 'text';
|
|
180
|
+
case GeneralColumnType.POINT:
|
|
181
|
+
return 'text';
|
|
182
|
+
case GeneralColumnType.POLYGON:
|
|
183
|
+
return 'text';
|
|
184
|
+
case GeneralColumnType.REAL:
|
|
185
|
+
return 'text';
|
|
186
|
+
case GeneralColumnType.TINYTEXT:
|
|
187
|
+
case GeneralColumnType.MEDIUMTEXT:
|
|
188
|
+
case GeneralColumnType.TEXT:
|
|
189
|
+
case GeneralColumnType.LONGTEXT:
|
|
190
|
+
case GeneralColumnType.CLOB:
|
|
191
|
+
return 'text';
|
|
192
|
+
case GeneralColumnType.TIME:
|
|
193
|
+
return 'text';
|
|
194
|
+
case GeneralColumnType.TIME_WITH_TIME_ZONE:
|
|
195
|
+
return 'text';
|
|
196
|
+
case GeneralColumnType.TSQUERY:
|
|
197
|
+
return 'text';
|
|
198
|
+
case GeneralColumnType.TSVECTOR:
|
|
199
|
+
return 'text';
|
|
200
|
+
case GeneralColumnType.TXID_SNAPSHOT:
|
|
201
|
+
return 'text';
|
|
202
|
+
case GeneralColumnType.UUID:
|
|
203
|
+
return 'text';
|
|
204
|
+
case GeneralColumnType.XML:
|
|
205
|
+
return 'text';
|
|
206
|
+
// enum, set
|
|
207
|
+
case GeneralColumnType.ENUM:
|
|
208
|
+
case GeneralColumnType.SET:
|
|
209
|
+
return 'text';
|
|
210
|
+
case GeneralColumnType.UNKNOWN:
|
|
211
|
+
return 'text';
|
|
212
|
+
default:
|
|
213
|
+
return 'text';
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
export function parseFaIconType(type: GeneralColumnType): string {
|
|
218
|
+
switch (type) {
|
|
219
|
+
// string
|
|
220
|
+
case GeneralColumnType.CHAR:
|
|
221
|
+
case GeneralColumnType.VARCHAR:
|
|
222
|
+
case GeneralColumnType.TINYTEXT:
|
|
223
|
+
case GeneralColumnType.MEDIUMTEXT:
|
|
224
|
+
case GeneralColumnType.TEXT:
|
|
225
|
+
case GeneralColumnType.LONGTEXT:
|
|
226
|
+
case GeneralColumnType.CLOB:
|
|
227
|
+
return 'fa-font';
|
|
228
|
+
// time
|
|
229
|
+
case GeneralColumnType.TIME:
|
|
230
|
+
case GeneralColumnType.TIME_WITH_TIME_ZONE:
|
|
231
|
+
return 'fa-clock';
|
|
232
|
+
// date
|
|
233
|
+
case GeneralColumnType.DATE:
|
|
234
|
+
return 'fa-calendar';
|
|
235
|
+
// datetime
|
|
236
|
+
case GeneralColumnType.TIMESTAMP:
|
|
237
|
+
case GeneralColumnType.TIMESTAMP_WITH_TIME_ZONE:
|
|
238
|
+
return 'fa-calendar-times';
|
|
239
|
+
// int, long
|
|
240
|
+
case GeneralColumnType.TINYINT:
|
|
241
|
+
case GeneralColumnType.SMALLINT:
|
|
242
|
+
case GeneralColumnType.INTEGER:
|
|
243
|
+
case GeneralColumnType.BIGINT:
|
|
244
|
+
case GeneralColumnType.LONG:
|
|
245
|
+
case GeneralColumnType.LONGLONG:
|
|
246
|
+
case GeneralColumnType.SERIAL:
|
|
247
|
+
return 'fa-sort-numeric-down';
|
|
248
|
+
// float, double, real
|
|
249
|
+
case GeneralColumnType.DECIMAL:
|
|
250
|
+
case GeneralColumnType.FLOAT:
|
|
251
|
+
case GeneralColumnType.DOUBLE_PRECISION:
|
|
252
|
+
case GeneralColumnType.REAL:
|
|
253
|
+
return 'fa-sort-numeric-down';
|
|
254
|
+
// number
|
|
255
|
+
case GeneralColumnType.NUMERIC:
|
|
256
|
+
return 'fa-sort-numeric-down';
|
|
257
|
+
// money
|
|
258
|
+
case GeneralColumnType.MONEY:
|
|
259
|
+
return 'fa-money-bill-alt';
|
|
260
|
+
// bit
|
|
261
|
+
case GeneralColumnType.BIT:
|
|
262
|
+
case GeneralColumnType.VARBIT:
|
|
263
|
+
return 'fa-chess-board';
|
|
264
|
+
// boolean
|
|
265
|
+
case GeneralColumnType.BOOLEAN:
|
|
266
|
+
return 'fa-chess-board';
|
|
267
|
+
// json
|
|
268
|
+
case GeneralColumnType.JSON:
|
|
269
|
+
case GeneralColumnType.JSONB:
|
|
270
|
+
return 'fa-code';
|
|
271
|
+
// binary or blob
|
|
272
|
+
case GeneralColumnType.BINARY:
|
|
273
|
+
case GeneralColumnType.BYTEA:
|
|
274
|
+
case GeneralColumnType.BLOB:
|
|
275
|
+
case GeneralColumnType.MEDIUMBLOB:
|
|
276
|
+
case GeneralColumnType.LONGBLOB:
|
|
277
|
+
return 'fa-chess-board';
|
|
278
|
+
// array
|
|
279
|
+
case GeneralColumnType.ARRAY:
|
|
280
|
+
return 'fa-list';
|
|
281
|
+
// object
|
|
282
|
+
case GeneralColumnType.OBJECT:
|
|
283
|
+
return 'fa-folder';
|
|
284
|
+
// etc
|
|
285
|
+
case GeneralColumnType.BOX:
|
|
286
|
+
case GeneralColumnType.CIDR:
|
|
287
|
+
case GeneralColumnType.CIRCLE:
|
|
288
|
+
case GeneralColumnType.INET:
|
|
289
|
+
case GeneralColumnType.LINE:
|
|
290
|
+
case GeneralColumnType.LSEG:
|
|
291
|
+
case GeneralColumnType.MACADDR:
|
|
292
|
+
case GeneralColumnType.PATH:
|
|
293
|
+
case GeneralColumnType.PG_LSN:
|
|
294
|
+
case GeneralColumnType.POINT:
|
|
295
|
+
case GeneralColumnType.POLYGON:
|
|
296
|
+
case GeneralColumnType.TSQUERY:
|
|
297
|
+
case GeneralColumnType.TSVECTOR:
|
|
298
|
+
case GeneralColumnType.TXID_SNAPSHOT:
|
|
299
|
+
case GeneralColumnType.UUID:
|
|
300
|
+
case GeneralColumnType.XML:
|
|
301
|
+
case GeneralColumnType.NAME:
|
|
302
|
+
case GeneralColumnType.XID:
|
|
303
|
+
case GeneralColumnType.INTERVAL:
|
|
304
|
+
case GeneralColumnType.OID:
|
|
305
|
+
case GeneralColumnType.REGTYPE:
|
|
306
|
+
case GeneralColumnType.REGPROC:
|
|
307
|
+
case GeneralColumnType.PG_NODE_TREE:
|
|
308
|
+
case GeneralColumnType.PG_NDISTINCT:
|
|
309
|
+
case GeneralColumnType.PG_DEPENDENCIES:
|
|
310
|
+
case GeneralColumnType.UNKNOWN:
|
|
311
|
+
return 'fa-question-circle';
|
|
312
|
+
// enum, set
|
|
313
|
+
case GeneralColumnType.ENUM:
|
|
314
|
+
return 'fa-list';
|
|
315
|
+
case GeneralColumnType.SET:
|
|
316
|
+
return 'fa-list-ol';
|
|
317
|
+
default:
|
|
318
|
+
return 'fa-question-circle';
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { EnumValues } from 'enum-values';
|
|
2
|
+
import { FieldPacket } from 'mysql2';
|
|
3
|
+
|
|
4
|
+
export enum MySQLColumnType {
|
|
5
|
+
DECIMAL = 0x00, // DECIMAL
|
|
6
|
+
TINYINT = 0x01, // TINYINT, 1 byte
|
|
7
|
+
SMALLINT = 0x02, // SMALLINT, 2 bytes
|
|
8
|
+
INTEGER = 3, // (3) integer
|
|
9
|
+
FLOAT = 0x04, // FLOAT, 4-8 bytes
|
|
10
|
+
REAL = 0x05, // (5) REAL, DOUBLE, 8 bytes
|
|
11
|
+
NULL = 0x06, // NULL (used for prepared statements, I think)
|
|
12
|
+
TIMESTAMP = 0x07, // TIMESTAMP
|
|
13
|
+
BIGINT = 0x08, // BIGINT, 8 bytes
|
|
14
|
+
MEDIUMINT = 0x09, // MEDIUMINT, 3 bytes
|
|
15
|
+
DATE = 0x0a, // DATE
|
|
16
|
+
TIME = 0x0b, // TIME
|
|
17
|
+
DATETIME = 0x0c, // DATETIME
|
|
18
|
+
YEAR = 0x0d, // YEAR, 1 byte (don't ask)
|
|
19
|
+
NEWDATE = 0x0e, // ?
|
|
20
|
+
BIT = 0x10, // BIT, 1-8 byte
|
|
21
|
+
TIMESTAMP2 = 0x11, // TIMESTAMP with fractional seconds
|
|
22
|
+
DATETIME2 = 0x12, // DATETIME with fractional seconds
|
|
23
|
+
TIME2 = 0x13, // TIME with fractional seconds
|
|
24
|
+
JSON = 0xf5, // (245)JSON
|
|
25
|
+
NUMERIC = 0xf6, // (246)DECIMAL
|
|
26
|
+
ENUM = 0xf7, // ENUM
|
|
27
|
+
SET = 0xf8, // SET
|
|
28
|
+
// TINY_BLOB = 0xf9, // TINYBLOB, TINYTEXT
|
|
29
|
+
// MEDIUM_BLOB = 0xfa, // MEDIUMBLOB, MEDIUMTEXT
|
|
30
|
+
// LONG_BLOB = 0xfb, // LONGBLOG, LONGTEXT
|
|
31
|
+
// BLOB = 0xfc, // (252)BLOB, TEXT
|
|
32
|
+
VARCHAR = 0xfd, // (253)VARCHAR, VARBINARY
|
|
33
|
+
POINT = 0xff, // (255)GEOMETRY,
|
|
34
|
+
TINYTEXT = 1001, // (252)BLOB, TINYTEXT(length: 765, flags: 16,)
|
|
35
|
+
TEXT = 1002, // (252)TEXt(length: 196605, flags: 16)
|
|
36
|
+
BLOB = 1012, // (252)BLOB(length: 65535, flags: 144)
|
|
37
|
+
MEDIUMTEXT = 1003, // (252)BLOB, TEXt(length: 50331645,, flags: 16)
|
|
38
|
+
MEDIUMBLOB = 1013, // (252)MEDIUMBLOB(length: 16777215,, flags: 144)
|
|
39
|
+
LONGTEXT = 1004, // (252)BLOB, long TEXT(length: 4294967295,flags: 16)
|
|
40
|
+
LONGBLOB = 1014, // (252)LONGBLOB,(length: 4294967295,flags: 144)
|
|
41
|
+
CHAR = 2001, // (254)CHAR(flags: 20483,)
|
|
42
|
+
BINARY = 2002, // (254)BINARY(flags: 128,)
|
|
43
|
+
UNKNOWN,
|
|
44
|
+
}
|
|
45
|
+
export namespace MySQLColumnType {
|
|
46
|
+
export function parseByFieldInfo(fieldInfo: FieldPacket): number {
|
|
47
|
+
if (fieldInfo === undefined || fieldInfo === null) {
|
|
48
|
+
return MySQLColumnType.UNKNOWN;
|
|
49
|
+
}
|
|
50
|
+
const numOfType = fieldInfo.type.valueOf();
|
|
51
|
+
const numOfLength = fieldInfo.length || fieldInfo['columnLength'];
|
|
52
|
+
const flags = fieldInfo.flags;
|
|
53
|
+
switch (numOfType) {
|
|
54
|
+
case 252:
|
|
55
|
+
if (flags === 144) {
|
|
56
|
+
if (numOfLength === 4294967295) {
|
|
57
|
+
return MySQLColumnType.LONGBLOB;
|
|
58
|
+
} else if (numOfLength === 16777215) {
|
|
59
|
+
return MySQLColumnType.MEDIUMBLOB;
|
|
60
|
+
} else if (numOfLength === 65535) {
|
|
61
|
+
return MySQLColumnType.BLOB;
|
|
62
|
+
}
|
|
63
|
+
if (numOfLength === 262140) {
|
|
64
|
+
// Default type
|
|
65
|
+
return MySQLColumnType.UNKNOWN;
|
|
66
|
+
}
|
|
67
|
+
} else {
|
|
68
|
+
if (
|
|
69
|
+
numOfLength === 4294967295 ||
|
|
70
|
+
numOfLength === 589815 ||
|
|
71
|
+
numOfLength === 589779
|
|
72
|
+
) {
|
|
73
|
+
// flags:17, (length: 589815 | 589779) information_schema.COLUMNS.GENERATION_EXPRESSION => longtext
|
|
74
|
+
return MySQLColumnType.LONGTEXT;
|
|
75
|
+
} else if (numOfLength === 50331645) {
|
|
76
|
+
return MySQLColumnType.MEDIUMTEXT;
|
|
77
|
+
} else if (numOfLength === 196605) {
|
|
78
|
+
return MySQLColumnType.TEXT;
|
|
79
|
+
} else if (numOfLength === 765) {
|
|
80
|
+
return MySQLColumnType.TINYTEXT;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
console.error(`L83 can't parse from `, fieldInfo);
|
|
84
|
+
return MySQLColumnType.UNKNOWN;
|
|
85
|
+
case 254:
|
|
86
|
+
if (flags === 128) {
|
|
87
|
+
return MySQLColumnType.BINARY;
|
|
88
|
+
}
|
|
89
|
+
return MySQLColumnType.CHAR;
|
|
90
|
+
default:
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
const e = EnumValues.getNamesAndValues(MySQLColumnType).find(
|
|
94
|
+
(a) => a.value === numOfType,
|
|
95
|
+
);
|
|
96
|
+
if (e) {
|
|
97
|
+
return e.value as number;
|
|
98
|
+
}
|
|
99
|
+
// console.error(`can't parse from `, fieldInfo);
|
|
100
|
+
return MySQLColumnType.UNKNOWN;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
export function parse(s: number | string | undefined): MySQLColumnType {
|
|
104
|
+
if (s === undefined || s === null) {
|
|
105
|
+
return MySQLColumnType.UNKNOWN;
|
|
106
|
+
}
|
|
107
|
+
if (typeof s === 'number') {
|
|
108
|
+
if (EnumValues.getNameFromValue(MySQLColumnType, s) === null) {
|
|
109
|
+
return MySQLColumnType.UNKNOWN;
|
|
110
|
+
}
|
|
111
|
+
return s;
|
|
112
|
+
}
|
|
113
|
+
s = s.toUpperCase();
|
|
114
|
+
if ('CHAR' === s || 'CHARACTER' === s) {
|
|
115
|
+
return MySQLColumnType.CHAR;
|
|
116
|
+
} else if ('INT' === s) {
|
|
117
|
+
return MySQLColumnType.INTEGER;
|
|
118
|
+
} else if ('POLYGON' === s) {
|
|
119
|
+
return MySQLColumnType.POINT;
|
|
120
|
+
} else if ('DOUBLE' === s) {
|
|
121
|
+
return MySQLColumnType.REAL;
|
|
122
|
+
} else if ('LONGLONG' === s) {
|
|
123
|
+
return MySQLColumnType.BIGINT;
|
|
124
|
+
}
|
|
125
|
+
const e = EnumValues.getNamesAndValues(MySQLColumnType).find(
|
|
126
|
+
(a) => a.name === s,
|
|
127
|
+
);
|
|
128
|
+
if (e) {
|
|
129
|
+
return e.value as MySQLColumnType;
|
|
130
|
+
}
|
|
131
|
+
// console.error(`can't parse from `, s, typeof s);
|
|
132
|
+
return MySQLColumnType.UNKNOWN;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { EnumValues } from 'enum-values';
|
|
2
|
+
|
|
3
|
+
export enum PostgresColumnType {
|
|
4
|
+
BIGINT = 20,
|
|
5
|
+
BIT = 1560,
|
|
6
|
+
VARBIT = 1562,
|
|
7
|
+
BOOLEAN = 16,
|
|
8
|
+
BOX = 603,
|
|
9
|
+
BYTEA = 17,
|
|
10
|
+
CHAR = 1042,
|
|
11
|
+
VARCHAR = 1043,
|
|
12
|
+
CIDR = 650,
|
|
13
|
+
CIRCLE = 718,
|
|
14
|
+
DATE = 1082,
|
|
15
|
+
DOUBLE_PRECISION = 701,
|
|
16
|
+
INET = 869,
|
|
17
|
+
INTEGER = 23,
|
|
18
|
+
JSON = 114,
|
|
19
|
+
JSONB = 3802,
|
|
20
|
+
LINE = 628,
|
|
21
|
+
LSEG = 601,
|
|
22
|
+
MACADDR = 829,
|
|
23
|
+
MONEY = 790,
|
|
24
|
+
NUMERIC = 1700,
|
|
25
|
+
PATH = 602,
|
|
26
|
+
PG_LSN = 3220,
|
|
27
|
+
POINT = 600,
|
|
28
|
+
POLYGON = 604,
|
|
29
|
+
REAL = 700,
|
|
30
|
+
SMALLINT = 21,
|
|
31
|
+
// SERIAL = 23, dosen't use. INTEGER
|
|
32
|
+
TEXT = 25,
|
|
33
|
+
TIME = 1083,
|
|
34
|
+
TIME_WITH_TIME_ZONE = 1266,
|
|
35
|
+
TIMESTAMP = 1114,
|
|
36
|
+
TIMESTAMP_WITH_TIME_ZONE = 1184,
|
|
37
|
+
TSQUERY = 3615,
|
|
38
|
+
TSVECTOR = 3614,
|
|
39
|
+
TXID_SNAPSHOT = 2970,
|
|
40
|
+
UUID = 2950,
|
|
41
|
+
XML = 142,
|
|
42
|
+
NAME,
|
|
43
|
+
ARRAY,
|
|
44
|
+
XID,
|
|
45
|
+
INTERVAL,
|
|
46
|
+
OID,
|
|
47
|
+
REGTYPE,
|
|
48
|
+
REGPROC,
|
|
49
|
+
PG_NODE_TREE,
|
|
50
|
+
PG_NDISTINCT,
|
|
51
|
+
PG_DEPENDENCIES,
|
|
52
|
+
UNKNOWN = -1,
|
|
53
|
+
}
|
|
54
|
+
export namespace PostgresColumnType {
|
|
55
|
+
export function parse(s: number | string | undefined): PostgresColumnType {
|
|
56
|
+
if (s === undefined || s === null) {
|
|
57
|
+
return PostgresColumnType.UNKNOWN;
|
|
58
|
+
}
|
|
59
|
+
if (typeof s === 'number') {
|
|
60
|
+
if (EnumValues.getNameFromValue(PostgresColumnType, s) === null) {
|
|
61
|
+
return PostgresColumnType.UNKNOWN;
|
|
62
|
+
}
|
|
63
|
+
return s;
|
|
64
|
+
}
|
|
65
|
+
s = s.toUpperCase().replace(/"/g, '');
|
|
66
|
+
if ('CHAR' === s || 'CHARACTER' === s) {
|
|
67
|
+
return PostgresColumnType.CHAR;
|
|
68
|
+
} else if ('CHARACTER VARYING' === s) {
|
|
69
|
+
return PostgresColumnType.VARCHAR;
|
|
70
|
+
} else if ('DOUBLE PRECISION' === s) {
|
|
71
|
+
return PostgresColumnType.DOUBLE_PRECISION;
|
|
72
|
+
} else if ('ANYARRAY' === s) {
|
|
73
|
+
return PostgresColumnType.ARRAY;
|
|
74
|
+
} else if ('TIMESTAMP WITH TIME ZONE' === s) {
|
|
75
|
+
return PostgresColumnType.TIMESTAMP_WITH_TIME_ZONE;
|
|
76
|
+
} else if ('TIMESTAMP WITHOUT TIME ZONE' === s) {
|
|
77
|
+
return PostgresColumnType.TIMESTAMP;
|
|
78
|
+
} else if ('TIME WITH TIME ZONE' === s) {
|
|
79
|
+
return PostgresColumnType.TIME_WITH_TIME_ZONE;
|
|
80
|
+
} else if ('ABSTIME' === s || 'TIME WITHOUT TIME ZONE' === s) {
|
|
81
|
+
return PostgresColumnType.TIME;
|
|
82
|
+
} else if ('BIT VARYING' === s) {
|
|
83
|
+
return PostgresColumnType.VARBIT;
|
|
84
|
+
}
|
|
85
|
+
const e = EnumValues.getNamesAndValues(PostgresColumnType).find(
|
|
86
|
+
(a) => a.name === s,
|
|
87
|
+
);
|
|
88
|
+
if (e) {
|
|
89
|
+
return e.value as PostgresColumnType;
|
|
90
|
+
}
|
|
91
|
+
// console.error(`can't parse from `, s, typeof s);
|
|
92
|
+
return PostgresColumnType.UNKNOWN;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { EnumValues } from 'enum-values';
|
|
2
|
+
|
|
3
|
+
export enum RedisKeyType {
|
|
4
|
+
string = 10,
|
|
5
|
+
list = 20,
|
|
6
|
+
set = 30,
|
|
7
|
+
zset = 40,
|
|
8
|
+
hash = 50,
|
|
9
|
+
UNKNOWN,
|
|
10
|
+
}
|
|
11
|
+
export namespace RedisKeyType {
|
|
12
|
+
export function parse(s: string | number | undefined): RedisKeyType {
|
|
13
|
+
if (s === undefined) {
|
|
14
|
+
return RedisKeyType.UNKNOWN;
|
|
15
|
+
}
|
|
16
|
+
if (typeof s === 'string') {
|
|
17
|
+
s = s.toLowerCase();
|
|
18
|
+
const list = EnumValues.getNamesAndValues(RedisKeyType);
|
|
19
|
+
const m = list.find((a) => a.name === s);
|
|
20
|
+
if (m) {
|
|
21
|
+
return <number>m.value;
|
|
22
|
+
}
|
|
23
|
+
console.log('type=', s, ' is unknown.');
|
|
24
|
+
return RedisKeyType.UNKNOWN;
|
|
25
|
+
}
|
|
26
|
+
try {
|
|
27
|
+
return s;
|
|
28
|
+
} catch (e) {
|
|
29
|
+
console.log('type=', s, ' is unknown.');
|
|
30
|
+
return RedisKeyType.UNKNOWN;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export function parseFaIconType(type: RedisKeyType): string {
|
|
34
|
+
switch (type) {
|
|
35
|
+
case RedisKeyType.string:
|
|
36
|
+
return 'fa-font';
|
|
37
|
+
case RedisKeyType.list:
|
|
38
|
+
return 'fa-list';
|
|
39
|
+
case RedisKeyType.set:
|
|
40
|
+
case RedisKeyType.zset:
|
|
41
|
+
return 'fa-list-ol';
|
|
42
|
+
case RedisKeyType.hash:
|
|
43
|
+
return 'fa-h-square';
|
|
44
|
+
default:
|
|
45
|
+
return 'fa-question-circle';
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
package/src/main.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
console.log('hoge');
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export interface GeneralDbRequest {
|
|
2
|
+
command: GeneralDbCommandType;
|
|
3
|
+
connection_id?: string;
|
|
4
|
+
connection_def_name?: string;
|
|
5
|
+
label?: string;
|
|
6
|
+
sql?: string;
|
|
7
|
+
needs_column_resolve?: boolean;
|
|
8
|
+
options?: any;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export enum GeneralDbCommandType {
|
|
12
|
+
CountTables = 'CountTables',
|
|
13
|
+
ListByParams = 'ListByParams',
|
|
14
|
+
ListProposals = 'ListProposals',
|
|
15
|
+
ExecuteSql = 'ExecuteSql',
|
|
16
|
+
TestConnection = 'TestConnection',
|
|
17
|
+
ToggleConnection = 'ToggleConnection',
|
|
18
|
+
BatchInsertFromArray = 'BatchInsertFromArray'
|
|
19
|
+
}
|
|
20
|
+
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { RedisKeyType } from '../../db/resource/types/RedisKeyType';
|
|
2
|
+
|
|
3
|
+
export interface RedisRequest {
|
|
4
|
+
connection_id: string;
|
|
5
|
+
index: number;
|
|
6
|
+
command: RedisCommandType;
|
|
7
|
+
key?: string;
|
|
8
|
+
type?: RedisKeyType;
|
|
9
|
+
options?: any;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export enum RedisCommandType {
|
|
13
|
+
Dbsize = 'dbsize',
|
|
14
|
+
Flushall = 'Flushall',
|
|
15
|
+
Flushdb = 'Flushdb',
|
|
16
|
+
GetValue = 'GetValue',
|
|
17
|
+
Info = 'info',
|
|
18
|
+
Scan = 'Scan',
|
|
19
|
+
SetValue = 'SetValue',
|
|
20
|
+
}
|
|
21
|
+
|