fdb2 1.0.2 → 1.0.3

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 (91) hide show
  1. package/dist/public/.vite/manifest.json +82 -0
  2. package/dist/public/bootstrap-icons.woff +0 -0
  3. package/dist/public/bootstrap-icons.woff2 +0 -0
  4. package/dist/public/bootstrap.css +14152 -0
  5. package/dist/public/bootstrap.js +5038 -0
  6. package/dist/public/explorer.css +2137 -0
  7. package/dist/public/explorer.js +49846 -0
  8. package/dist/public/index.css +1071 -0
  9. package/dist/public/index.js +12811 -0
  10. package/dist/public/layout.css +318 -0
  11. package/dist/public/layout.js +25 -0
  12. package/dist/public/vue.css +1 -0
  13. package/dist/public/vue.js +9111 -0
  14. package/dist/server/index.d.ts +2 -0
  15. package/dist/server/index.d.ts.map +1 -0
  16. package/dist/server/index.js +598 -0
  17. package/dist/server/index.js.map +1 -0
  18. package/dist/server/index.ts +677 -0
  19. package/dist/server/model/connection.entity.d.ts +55 -0
  20. package/dist/server/model/connection.entity.d.ts.map +1 -0
  21. package/dist/server/model/connection.entity.js +59 -0
  22. package/dist/server/model/connection.entity.js.map +1 -0
  23. package/dist/server/model/connection.entity.ts +66 -0
  24. package/dist/server/model/database.entity.d.ts +203 -0
  25. package/dist/server/model/database.entity.d.ts.map +1 -0
  26. package/dist/server/model/database.entity.js +211 -0
  27. package/dist/server/model/database.entity.js.map +1 -0
  28. package/dist/server/model/database.entity.ts +246 -0
  29. package/dist/server/service/connection.service.d.ts +79 -0
  30. package/dist/server/service/connection.service.d.ts.map +1 -0
  31. package/dist/server/service/connection.service.js +351 -0
  32. package/dist/server/service/connection.service.js.map +1 -0
  33. package/dist/server/service/connection.service.ts +341 -0
  34. package/dist/server/service/database/base.service.d.ts +152 -0
  35. package/dist/server/service/database/base.service.d.ts.map +1 -0
  36. package/dist/server/service/database/base.service.js +236 -0
  37. package/dist/server/service/database/base.service.js.map +1 -0
  38. package/dist/server/service/database/base.service.ts +363 -0
  39. package/dist/server/service/database/cockroachdb.service.d.ts +95 -0
  40. package/dist/server/service/database/cockroachdb.service.d.ts.map +1 -0
  41. package/dist/server/service/database/cockroachdb.service.js +634 -0
  42. package/dist/server/service/database/cockroachdb.service.js.map +1 -0
  43. package/dist/server/service/database/cockroachdb.service.ts +659 -0
  44. package/dist/server/service/database/database.service.d.ts +487 -0
  45. package/dist/server/service/database/database.service.d.ts.map +1 -0
  46. package/dist/server/service/database/database.service.js +580 -0
  47. package/dist/server/service/database/database.service.js.map +1 -0
  48. package/dist/server/service/database/database.service.ts +630 -0
  49. package/dist/server/service/database/index.d.ts +8 -0
  50. package/dist/server/service/database/index.d.ts.map +1 -0
  51. package/dist/server/service/database/index.js +18 -0
  52. package/dist/server/service/database/index.js.map +1 -0
  53. package/dist/server/service/database/index.ts +7 -0
  54. package/dist/server/service/database/mongodb.service.d.ts +99 -0
  55. package/dist/server/service/database/mongodb.service.d.ts.map +1 -0
  56. package/dist/server/service/database/mongodb.service.js +459 -0
  57. package/dist/server/service/database/mongodb.service.js.map +1 -0
  58. package/dist/server/service/database/mongodb.service.ts +454 -0
  59. package/dist/server/service/database/mssql.service.d.ts +98 -0
  60. package/dist/server/service/database/mssql.service.d.ts.map +1 -0
  61. package/dist/server/service/database/mssql.service.js +694 -0
  62. package/dist/server/service/database/mssql.service.js.map +1 -0
  63. package/dist/server/service/database/mssql.service.ts +723 -0
  64. package/dist/server/service/database/mysql.service.d.ts +94 -0
  65. package/dist/server/service/database/mysql.service.d.ts.map +1 -0
  66. package/dist/server/service/database/mysql.service.js +735 -0
  67. package/dist/server/service/database/mysql.service.js.map +1 -0
  68. package/dist/server/service/database/mysql.service.ts +761 -0
  69. package/dist/server/service/database/oracle.service.d.ts +106 -0
  70. package/dist/server/service/database/oracle.service.d.ts.map +1 -0
  71. package/dist/server/service/database/oracle.service.js +787 -0
  72. package/dist/server/service/database/oracle.service.js.map +1 -0
  73. package/dist/server/service/database/oracle.service.ts +832 -0
  74. package/dist/server/service/database/postgres.service.d.ts +102 -0
  75. package/dist/server/service/database/postgres.service.d.ts.map +1 -0
  76. package/dist/server/service/database/postgres.service.js +696 -0
  77. package/dist/server/service/database/postgres.service.js.map +1 -0
  78. package/dist/server/service/database/postgres.service.ts +741 -0
  79. package/dist/server/service/database/sap.service.d.ts +95 -0
  80. package/dist/server/service/database/sap.service.d.ts.map +1 -0
  81. package/dist/server/service/database/sap.service.js +695 -0
  82. package/dist/server/service/database/sap.service.js.map +1 -0
  83. package/dist/server/service/database/sap.service.ts +713 -0
  84. package/dist/server/service/database/sqlite.service.d.ts +92 -0
  85. package/dist/server/service/database/sqlite.service.d.ts.map +1 -0
  86. package/dist/server/service/database/sqlite.service.js +532 -0
  87. package/dist/server/service/database/sqlite.service.js.map +1 -0
  88. package/dist/server/service/database/sqlite.service.ts +559 -0
  89. package/dist/server/service/session.service.ts +158 -0
  90. package/dist/view/index.html +45 -0
  91. package/package.json +1 -1
@@ -0,0 +1,630 @@
1
+ import { ConnectionService } from '../connection.service';
2
+ import { BaseDatabaseService } from './base.service';
3
+ import {
4
+ DatabaseEntity,
5
+ TableEntity
6
+ } from '../../model/database.entity';
7
+ import { MySQLService } from './mysql.service';
8
+ import { PostgreSQLService } from './postgres.service';
9
+ import { SQLiteService } from './sqlite.service';
10
+ import { OracleService } from './oracle.service';
11
+ import { SQLServerService } from './mssql.service';
12
+ import { CockroachDBService } from './cockroachdb.service';
13
+ import { MongoDBService } from './mongodb.service';
14
+ import { SAPHANADatabaseService } from './sap.service';
15
+
16
+ /**
17
+ * 数据库服务管理类
18
+ * 负责根据数据库类型选择相应的服务实现
19
+ */
20
+ export class DatabaseService {
21
+
22
+ public connectionService: ConnectionService;
23
+ private mysqlService: MySQLService;
24
+ private postgreSQLService: PostgreSQLService;
25
+ private sqliteService: SQLiteService;
26
+ private oracleService: OracleService;
27
+ private sqlServerService: SQLServerService;
28
+ private cockroachDBService: CockroachDBService;
29
+ private mongoDBService: MongoDBService;
30
+ private sapHANADatabaseService: SAPHANADatabaseService;
31
+
32
+ constructor() {
33
+ this.connectionService = new ConnectionService();
34
+
35
+ this.mysqlService = new MySQLService();
36
+ this.postgreSQLService = new PostgreSQLService();
37
+ this.sqliteService = new SQLiteService();
38
+ this.oracleService = new OracleService();
39
+ this.sqlServerService = new SQLServerService();
40
+ this.cockroachDBService = new CockroachDBService();
41
+ this.mongoDBService = new MongoDBService();
42
+ this.sapHANADatabaseService = new SAPHANADatabaseService();
43
+ }
44
+
45
+ /**
46
+ * 获取数据库服务实例
47
+ */
48
+ public getDatabaseService(type: string): BaseDatabaseService {
49
+
50
+ switch (type.toLowerCase()) {
51
+ case 'mysql':
52
+ case 'aurora-mysql':
53
+ case 'auroramysql':
54
+ return this.mysqlService;
55
+ case 'postgres':
56
+ case 'postgresql':
57
+ case 'aurora-postgres':
58
+ case 'aurorapostgres':
59
+ case 'aurora-postgresql':
60
+ return this.postgreSQLService;
61
+ case 'sqlite':
62
+ case 'better-sqlite3':
63
+ case 'bettersqlite3':
64
+ return this.sqliteService;
65
+ case 'oracle':
66
+ return this.oracleService;
67
+ case 'mssql':
68
+ case 'sqlserver':
69
+ return this.sqlServerService;
70
+ case 'cockroachdb':
71
+ case 'cockroach':
72
+ return this.cockroachDBService;
73
+ case 'mongodb':
74
+ case 'mongo':
75
+ return this.mongoDBService;
76
+ case 'sap':
77
+ case 'sap-hana':
78
+ case 'saphana':
79
+ return this.sapHANADatabaseService;
80
+ default:
81
+ throw new Error(`不支持的数据库类型: ${type}`);
82
+ }
83
+ }
84
+
85
+ /**
86
+ * 获取数据库列表
87
+ */
88
+ async getDatabases(connectionId: string): Promise<string[]> {
89
+ const dataSource = await this.connectionService.getActiveConnection(connectionId);
90
+ const databaseService = this.getDatabaseService(dataSource.options.type as string);
91
+ return databaseService.getDatabases(dataSource);
92
+ }
93
+
94
+ /**
95
+ * 获取数据库详细信息
96
+ */
97
+ async getDatabaseInfo(connectionId: string, databaseName: string): Promise<DatabaseEntity> {
98
+ const dataSource = await this.connectionService.getActiveConnection(connectionId, databaseName);
99
+ const databaseService = this.getDatabaseService(dataSource.options.type as string);
100
+ return databaseService.getDatabaseInfo(dataSource, databaseName);
101
+ }
102
+
103
+ /**
104
+ * 获取数据库表列表
105
+ */
106
+ async getTables(connectionId: string, databaseName: string): Promise<TableEntity[]> {
107
+ const dataSource = await this.connectionService.getActiveConnection(connectionId, databaseName);
108
+ const databaseService = this.getDatabaseService(dataSource.options.type as string);
109
+ return databaseService.getTables(dataSource, databaseName);
110
+ }
111
+
112
+ /**
113
+ * 获取表详细信息
114
+ */
115
+ async getTableInfo(connectionId: string, databaseName: string, tableName: string): Promise<TableEntity> {
116
+ const dataSource = await this.connectionService.getActiveConnection(connectionId, databaseName);
117
+ const databaseService = this.getDatabaseService(dataSource.options.type as string);
118
+ return databaseService.getTableInfo(dataSource, databaseName, tableName);
119
+ }
120
+
121
+ /**
122
+ * 获取表数据
123
+ */
124
+ async getTableData(
125
+ connectionId: string,
126
+ databaseName: string,
127
+ tableName: string,
128
+ page: number = 1,
129
+ pageSize: number = 100,
130
+ where?: string,
131
+ orderBy?: string
132
+ ): Promise<{ data: any[], total: number }> {
133
+ const dataSource = await this.connectionService.getActiveConnection(connectionId, databaseName);
134
+ const databaseService = this.getDatabaseService(dataSource.options.type as string);
135
+ return databaseService.getTableData(dataSource, databaseName, tableName, page, pageSize, where, orderBy);
136
+ }
137
+
138
+ /**
139
+ * 执行SQL查询
140
+ */
141
+ async executeQuery(connectionId: string, sql: string, databaseName?: string): Promise<any> {
142
+ const dataSource = await this.connectionService.getActiveConnection(connectionId, databaseName);
143
+ const databaseService = this.getDatabaseService(dataSource.options.type as string);
144
+ return databaseService.executeQuery(dataSource, sql);
145
+ }
146
+
147
+ /**
148
+ * 获取视图列表
149
+ */
150
+ async getViews(connectionId: string, databaseName: string): Promise<any[]> {
151
+ const dataSource = await this.connectionService.getActiveConnection(connectionId, databaseName);
152
+ const databaseService = this.getDatabaseService(dataSource.options.type as string);
153
+ return databaseService.getViews(dataSource, databaseName);
154
+ }
155
+
156
+ /**
157
+ * 获取视图定义
158
+ */
159
+ async getViewDefinition(connectionId: string, databaseName: string, viewName: string): Promise<string> {
160
+ const dataSource = await this.connectionService.getActiveConnection(connectionId, databaseName);
161
+ const databaseService = this.getDatabaseService(dataSource.options.type as string);
162
+ return databaseService.getViewDefinition(dataSource, databaseName, viewName);
163
+ }
164
+
165
+ /**
166
+ * 获取存储过程列表
167
+ */
168
+ async getProcedures(connectionId: string, databaseName: string): Promise<any[]> {
169
+ const dataSource = await this.connectionService.getActiveConnection(connectionId, databaseName);
170
+ const databaseService = this.getDatabaseService(dataSource.options.type as string);
171
+ return databaseService.getProcedures(dataSource, databaseName);
172
+ }
173
+
174
+ /**
175
+ * 获取存储过程定义
176
+ */
177
+ async getProcedureDefinition(connectionId: string, databaseName: string, procedureName: string): Promise<string> {
178
+ const dataSource = await this.connectionService.getActiveConnection(connectionId, databaseName);
179
+ const databaseService = this.getDatabaseService(dataSource.options.type as string);
180
+ return databaseService.getProcedureDefinition(dataSource, databaseName, procedureName);
181
+ }
182
+
183
+ /**
184
+ * 测试数据库连接
185
+ */
186
+ async testConnection(connectionId: string): Promise<boolean> {
187
+ const dataSource = await this.connectionService.getActiveConnection(connectionId);
188
+ const databaseService = this.getDatabaseService(dataSource.options.type as string);
189
+ return databaseService.testConnection(dataSource);
190
+ }
191
+
192
+ /**
193
+ * 获取支持的数据库类型
194
+ */
195
+ getSupportedDatabaseTypes() {
196
+ return [
197
+ {
198
+ value: 'mysql',
199
+ label: 'MySQL',
200
+ icon: 'bi-database',
201
+ defaultPort: 3306,
202
+ description: 'MySQL数据库',
203
+ features: {
204
+ supportSchemas: false,
205
+ supportProcedures: true,
206
+ supportTriggers: true,
207
+ supportViews: true,
208
+ supportFullTextSearch: true,
209
+ supportJson: true
210
+ }
211
+ },
212
+ {
213
+ value: 'postgres',
214
+ label: 'PostgreSQL',
215
+ icon: 'bi-database',
216
+ defaultPort: 5432,
217
+ description: 'PostgreSQL数据库',
218
+ features: {
219
+ supportSchemas: true,
220
+ supportProcedures: true,
221
+ supportTriggers: true,
222
+ supportViews: true,
223
+ supportFullTextSearch: true,
224
+ supportJson: true,
225
+ supportArrays: true,
226
+ supportEnum: true
227
+ }
228
+ },
229
+ {
230
+ value: 'sqlite',
231
+ label: 'SQLite',
232
+ icon: 'bi-database',
233
+ defaultPort: null,
234
+ description: 'SQLite数据库文件',
235
+ features: {
236
+ supportSchemas: false,
237
+ supportProcedures: false,
238
+ supportTriggers: true,
239
+ supportViews: true,
240
+ supportFullTextSearch: true,
241
+ supportJson: false,
242
+ supportArrays: false
243
+ }
244
+ },
245
+ {
246
+ value: 'oracle',
247
+ label: 'Oracle',
248
+ icon: 'bi-database',
249
+ defaultPort: 1521,
250
+ description: 'Oracle数据库',
251
+ features: {
252
+ supportSchemas: true,
253
+ supportProcedures: true,
254
+ supportTriggers: true,
255
+ supportViews: true,
256
+ supportFullTextSearch: true,
257
+ supportJson: false,
258
+ supportArrays: false,
259
+ supportSequences: true,
260
+ supportSynonyms: true
261
+ }
262
+ },
263
+ {
264
+ value: 'mssql',
265
+ label: 'SQL Server',
266
+ icon: 'bi-database',
267
+ defaultPort: 1433,
268
+ description: 'Microsoft SQL Server',
269
+ features: {
270
+ supportSchemas: false,
271
+ supportProcedures: true,
272
+ supportTriggers: true,
273
+ supportViews: true,
274
+ supportFullTextSearch: true,
275
+ supportJson: true,
276
+ supportArrays: false,
277
+ supportStoredProcedures: true
278
+ }
279
+ },
280
+ {
281
+ value: 'cockroachdb',
282
+ label: 'CockroachDB',
283
+ icon: 'bi-database',
284
+ defaultPort: 26257,
285
+ description: 'CockroachDB分布式SQL数据库',
286
+ features: {
287
+ supportSchemas: true,
288
+ supportProcedures: true,
289
+ supportTriggers: true,
290
+ supportViews: true,
291
+ supportFullTextSearch: true,
292
+ supportJson: true,
293
+ supportArrays: true,
294
+ supportEnum: true,
295
+ supportDistributed: true
296
+ }
297
+ },
298
+ {
299
+ value: 'mongodb',
300
+ label: 'MongoDB',
301
+ icon: 'bi-database',
302
+ defaultPort: 27017,
303
+ description: 'MongoDB文档数据库',
304
+ features: {
305
+ supportSchemas: false,
306
+ supportProcedures: false,
307
+ supportTriggers: false,
308
+ supportViews: false,
309
+ supportFullTextSearch: true,
310
+ supportJson: true,
311
+ supportArrays: true,
312
+ supportDocuments: true,
313
+ supportNoSQL: true
314
+ }
315
+ },
316
+ {
317
+ value: 'sap',
318
+ label: 'SAP HANA',
319
+ icon: 'bi-database',
320
+ defaultPort: 39013,
321
+ description: 'SAP HANA内存数据库',
322
+ features: {
323
+ supportSchemas: true,
324
+ supportProcedures: true,
325
+ supportTriggers: true,
326
+ supportViews: true,
327
+ supportFullTextSearch: true,
328
+ supportJson: true,
329
+ supportArrays: false,
330
+ supportInMemory: true,
331
+ supportHighPerformance: true
332
+ }
333
+ }
334
+ ];
335
+ }
336
+
337
+ /**
338
+ * 创建数据库
339
+ */
340
+ async createDatabase(connectionId: string, databaseName: string, options?: any): Promise<void> {
341
+ const dataSource = await this.connectionService.getActiveConnection(connectionId);
342
+ const databaseService = this.getDatabaseService(dataSource.options.type as string);
343
+ return databaseService.createDatabase(dataSource, databaseName, options);
344
+ }
345
+
346
+ /**
347
+ * 删除数据库
348
+ */
349
+ async dropDatabase(connectionId: string, databaseName: string): Promise<void> {
350
+ const dataSource = await this.connectionService.getActiveConnection(connectionId);
351
+ const databaseService = this.getDatabaseService(dataSource.options.type as string);
352
+ return databaseService.dropDatabase(dataSource, databaseName);
353
+ }
354
+
355
+ /**
356
+ * 导出数据库架构
357
+ */
358
+ async exportSchema(connectionId: string, databaseName: string): Promise<string> {
359
+ const dataSource = await this.connectionService.getActiveConnection(connectionId, databaseName);
360
+ const databaseService = this.getDatabaseService(dataSource.options.type as string);
361
+ return databaseService.exportSchema(dataSource, databaseName);
362
+ }
363
+
364
+ /**
365
+ * 查看数据库日志
366
+ */
367
+ async viewLogs(connectionId: string, databaseName?: string, limit: number = 100): Promise<any[]> {
368
+ const dataSource = await this.connectionService.getActiveConnection(connectionId, databaseName);
369
+ const databaseService = this.getDatabaseService(dataSource.options.type as string);
370
+ return databaseService.viewLogs(dataSource, databaseName, limit);
371
+ }
372
+
373
+ /**
374
+ * 备份数据库
375
+ */
376
+ async backupDatabase(connectionId: string, databaseName: string, options?: any): Promise<string> {
377
+ const dataSource = await this.connectionService.getActiveConnection(connectionId, databaseName);
378
+ const databaseService = this.getDatabaseService(dataSource.options.type as string);
379
+ return databaseService.backupDatabase(dataSource, databaseName, options);
380
+ }
381
+
382
+ /**
383
+ * 恢复数据库
384
+ */
385
+ async restoreDatabase(connectionId: string, databaseName: string, filePath: string, options?: any): Promise<void> {
386
+ const dataSource = await this.connectionService.getActiveConnection(connectionId, databaseName);
387
+ const databaseService = this.getDatabaseService(dataSource.options.type as string);
388
+ return databaseService.restoreDatabase(dataSource, databaseName, filePath, options);
389
+ }
390
+
391
+ /**
392
+ * 获取数据库统计信息
393
+ */
394
+ async getDatabaseStats(connectionId: string, databaseName: string): Promise<any> {
395
+ const dataSource = await this.connectionService.getActiveConnection(connectionId, databaseName);
396
+ const databaseService = this.getDatabaseService(dataSource.options.type as string);
397
+
398
+ const tables = await databaseService.getTables(dataSource, databaseName);
399
+ const tableCount = tables.length;
400
+ const size = await databaseService.getDatabaseSize(dataSource, databaseName);
401
+
402
+ return {
403
+ tableCount,
404
+ size,
405
+ tables: tables.map(table => ({
406
+ name: table.name,
407
+ rowCount: table.rowCount || 0,
408
+ size: table.dataSize || 0
409
+ }))
410
+ };
411
+ }
412
+
413
+ /**
414
+ * 优化数据库
415
+ */
416
+ async optimizeDatabase(connectionId: string, databaseName: string): Promise<any> {
417
+ const dataSource = await this.connectionService.getActiveConnection(connectionId, databaseName);
418
+ const databaseService = this.getDatabaseService(dataSource.options.type as string);
419
+
420
+ const tables = await databaseService.getTables(dataSource, databaseName);
421
+ const results = [];
422
+
423
+ for (const table of tables) {
424
+ try {
425
+ const result = await dataSource.query(`OPTIMIZE TABLE \`${table.name}\``);
426
+ results.push({ table: table.name, success: true, result });
427
+ } catch (error) {
428
+ results.push({ table: table.name, success: false, error: error.message });
429
+ }
430
+ }
431
+
432
+ return { results };
433
+ }
434
+
435
+ /**
436
+ * 分析表
437
+ */
438
+ async analyzeTables(connectionId: string, databaseName: string): Promise<any> {
439
+ const dataSource = await this.connectionService.getActiveConnection(connectionId, databaseName);
440
+ const databaseService = this.getDatabaseService(dataSource.options.type as string);
441
+
442
+ const tables = await databaseService.getTables(dataSource, databaseName);
443
+ const results = [];
444
+
445
+ for (const table of tables) {
446
+ try {
447
+ const result = await dataSource.query(`ANALYZE TABLE \`${table.name}\``);
448
+ results.push({ table: table.name, success: true, result });
449
+ } catch (error) {
450
+ results.push({ table: table.name, success: false, error: error.message });
451
+ }
452
+ }
453
+
454
+ return { results };
455
+ }
456
+
457
+ /**
458
+ * 修复表
459
+ */
460
+ async repairTables(connectionId: string, databaseName: string): Promise<any> {
461
+ const dataSource = await this.connectionService.getActiveConnection(connectionId, databaseName);
462
+ const databaseService = this.getDatabaseService(dataSource.options.type as string);
463
+
464
+ const tables = await databaseService.getTables(dataSource, databaseName);
465
+ const results = [];
466
+
467
+ for (const table of tables) {
468
+ try {
469
+ const result = await dataSource.query(`REPAIR TABLE \`${table.name}\``);
470
+ results.push({ table: table.name, success: true, result });
471
+ } catch (error) {
472
+ results.push({ table: table.name, success: false, error: error.message });
473
+ }
474
+ }
475
+
476
+ return { results };
477
+ }
478
+
479
+ /**
480
+ * 导出表数据到 SQL 文件
481
+ */
482
+ async exportTableDataToSQL(connectionId: string, databaseName: string, tableName: string, options?: any): Promise<string> {
483
+ const dataSource = await this.connectionService.getActiveConnection(connectionId, databaseName);
484
+ const databaseService = this.getDatabaseService(dataSource.options.type as string);
485
+ return databaseService.exportTableDataToSQL(dataSource, databaseName, tableName, options);
486
+ }
487
+
488
+ /**
489
+ * 导出表数据到 CSV 文件
490
+ */
491
+ async exportTableDataToCSV(connectionId: string, databaseName: string, tableName: string, options?: any): Promise<string> {
492
+ const dataSource = await this.connectionService.getActiveConnection(connectionId, databaseName);
493
+ const databaseService = this.getDatabaseService(dataSource.options.type as string);
494
+ return databaseService.exportTableDataToCSV(dataSource, databaseName, tableName, options);
495
+ }
496
+
497
+ /**
498
+ * 导出表数据到 JSON 文件
499
+ */
500
+ async exportTableDataToJSON(connectionId: string, databaseName: string, tableName: string, options?: any): Promise<string> {
501
+ const dataSource = await this.connectionService.getActiveConnection(connectionId, databaseName);
502
+ const databaseService = this.getDatabaseService(dataSource.options.type as string);
503
+ return databaseService.exportTableDataToJSON(dataSource, databaseName, tableName, options);
504
+ }
505
+
506
+ /**
507
+ * 导出表数据到 Excel 文件
508
+ */
509
+ async exportTableDataToExcel(connectionId: string, databaseName: string, tableName: string, options?: any): Promise<string> {
510
+ const dataSource = await this.connectionService.getActiveConnection(connectionId, databaseName);
511
+ const databaseService = this.getDatabaseService(dataSource.options.type as string);
512
+ return databaseService.exportTableDataToExcel(dataSource, databaseName, tableName, options);
513
+ }
514
+
515
+ /**
516
+ * 获取数据库类型特定的配置
517
+ */
518
+ getDatabaseTypeSpecificConfig(type: string) {
519
+ const service = this.getDatabaseService(type);
520
+ return {
521
+ type: service.getDatabaseType(),
522
+ features: this.getDatabaseFeatures(type)
523
+ };
524
+ }
525
+
526
+ /**
527
+ * 获取数据库特性
528
+ */
529
+ private getDatabaseFeatures(type: string) {
530
+ switch (type.toLowerCase()) {
531
+ case 'mysql':
532
+ return {
533
+ supportSchemas: false,
534
+ supportProcedures: true,
535
+ supportTriggers: true,
536
+ supportViews: true,
537
+ supportFullTextSearch: true,
538
+ supportJson: true
539
+ };
540
+ case 'postgres':
541
+ case 'postgresql':
542
+ return {
543
+ supportSchemas: true,
544
+ supportProcedures: true,
545
+ supportTriggers: true,
546
+ supportViews: true,
547
+ supportFullTextSearch: true,
548
+ supportJson: true,
549
+ supportArrays: true,
550
+ supportEnum: true
551
+ };
552
+ case 'sqlite':
553
+ return {
554
+ supportSchemas: false,
555
+ supportProcedures: false,
556
+ supportTriggers: true,
557
+ supportViews: true,
558
+ supportFullTextSearch: true,
559
+ supportJson: false,
560
+ supportArrays: false
561
+ };
562
+ case 'oracle':
563
+ return {
564
+ supportSchemas: true,
565
+ supportProcedures: true,
566
+ supportTriggers: true,
567
+ supportViews: true,
568
+ supportFullTextSearch: true,
569
+ supportJson: false,
570
+ supportArrays: false,
571
+ supportSequences: true,
572
+ supportSynonyms: true
573
+ };
574
+ case 'mssql':
575
+ case 'sqlserver':
576
+ return {
577
+ supportSchemas: false,
578
+ supportProcedures: true,
579
+ supportTriggers: true,
580
+ supportViews: true,
581
+ supportFullTextSearch: true,
582
+ supportJson: true,
583
+ supportArrays: false,
584
+ supportStoredProcedures: true
585
+ };
586
+ case 'cockroachdb':
587
+ case 'cockroach':
588
+ return {
589
+ supportSchemas: true,
590
+ supportProcedures: true,
591
+ supportTriggers: true,
592
+ supportViews: true,
593
+ supportFullTextSearch: true,
594
+ supportJson: true,
595
+ supportArrays: true,
596
+ supportEnum: true,
597
+ supportDistributed: true
598
+ };
599
+ case 'mongodb':
600
+ case 'mongo':
601
+ return {
602
+ supportSchemas: false,
603
+ supportProcedures: false,
604
+ supportTriggers: false,
605
+ supportViews: false,
606
+ supportFullTextSearch: true,
607
+ supportJson: true,
608
+ supportArrays: true,
609
+ supportDocuments: true,
610
+ supportNoSQL: true
611
+ };
612
+ case 'sap':
613
+ case 'sap-hana':
614
+ case 'saphana':
615
+ return {
616
+ supportSchemas: true,
617
+ supportProcedures: true,
618
+ supportTriggers: true,
619
+ supportViews: true,
620
+ supportFullTextSearch: true,
621
+ supportJson: true,
622
+ supportArrays: false,
623
+ supportInMemory: true,
624
+ supportHighPerformance: true
625
+ };
626
+ default:
627
+ return {};
628
+ }
629
+ }
630
+ }
@@ -0,0 +1,8 @@
1
+ export { BaseDatabaseService } from './base.service';
2
+ export { MySQLService } from './mysql.service';
3
+ export { PostgreSQLService } from './postgres.service';
4
+ export { SQLiteService } from './sqlite.service';
5
+ export { OracleService } from './oracle.service';
6
+ export { SQLServerService } from './mssql.service';
7
+ export { DatabaseService } from './database.service';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/service/database/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DatabaseService = exports.SQLServerService = exports.OracleService = exports.SQLiteService = exports.PostgreSQLService = exports.MySQLService = exports.BaseDatabaseService = void 0;
4
+ var base_service_1 = require("./base.service");
5
+ Object.defineProperty(exports, "BaseDatabaseService", { enumerable: true, get: function () { return base_service_1.BaseDatabaseService; } });
6
+ var mysql_service_1 = require("./mysql.service");
7
+ Object.defineProperty(exports, "MySQLService", { enumerable: true, get: function () { return mysql_service_1.MySQLService; } });
8
+ var postgres_service_1 = require("./postgres.service");
9
+ Object.defineProperty(exports, "PostgreSQLService", { enumerable: true, get: function () { return postgres_service_1.PostgreSQLService; } });
10
+ var sqlite_service_1 = require("./sqlite.service");
11
+ Object.defineProperty(exports, "SQLiteService", { enumerable: true, get: function () { return sqlite_service_1.SQLiteService; } });
12
+ var oracle_service_1 = require("./oracle.service");
13
+ Object.defineProperty(exports, "OracleService", { enumerable: true, get: function () { return oracle_service_1.OracleService; } });
14
+ var mssql_service_1 = require("./mssql.service");
15
+ Object.defineProperty(exports, "SQLServerService", { enumerable: true, get: function () { return mssql_service_1.SQLServerService; } });
16
+ var database_service_1 = require("./database.service");
17
+ Object.defineProperty(exports, "DatabaseService", { enumerable: true, get: function () { return database_service_1.DatabaseService; } });
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../server/service/database/index.ts"],"names":[],"mappings":";;;AAAA,+CAAqD;AAA5C,mHAAA,mBAAmB,OAAA;AAC5B,iDAA+C;AAAtC,6GAAA,YAAY,OAAA;AACrB,uDAAuD;AAA9C,qHAAA,iBAAiB,OAAA;AAC1B,mDAAiD;AAAxC,+GAAA,aAAa,OAAA;AACtB,mDAAiD;AAAxC,+GAAA,aAAa,OAAA;AACtB,iDAAmD;AAA1C,iHAAA,gBAAgB,OAAA;AACzB,uDAAqD;AAA5C,mHAAA,eAAe,OAAA"}
@@ -0,0 +1,7 @@
1
+ export { BaseDatabaseService } from './base.service';
2
+ export { MySQLService } from './mysql.service';
3
+ export { PostgreSQLService } from './postgres.service';
4
+ export { SQLiteService } from './sqlite.service';
5
+ export { OracleService } from './oracle.service';
6
+ export { SQLServerService } from './mssql.service';
7
+ export { DatabaseService } from './database.service';