fdb2 1.0.7 → 1.0.9

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 (234) hide show
  1. package/.dockerignore +21 -21
  2. package/.editorconfig +11 -11
  3. package/.eslintrc.cjs +14 -14
  4. package/.eslintrc.json +7 -7
  5. package/.prettierrc.js +3 -3
  6. package/.tpl.env +21 -21
  7. package/.vscodeignore +45 -45
  8. package/README.md +312 -312
  9. package/bin/build.sh +28 -28
  10. package/bin/deploy.sh +8 -8
  11. package/bin/dev.sh +10 -10
  12. package/bin/docker/dev-docker-compose.yml +43 -43
  13. package/bin/docker/dev.Dockerfile +24 -24
  14. package/bin/docker/prod-docker-compose.yml +17 -17
  15. package/bin/docker/prod.Dockerfile +29 -29
  16. package/bin/fdb2.js +220 -220
  17. package/dist/package.json +29 -29
  18. package/dist/pnpm-lock.yaml +1042 -354
  19. package/dist/public/explorer.css +1464 -1437
  20. package/dist/public/explorer.js +764 -226
  21. package/dist/public/index.css +1026 -1026
  22. package/dist/public/index.js +15 -9
  23. package/dist/public/layout.css +221 -221
  24. package/dist/public/layout.js +1 -1
  25. package/dist/public/vue.js +8 -2
  26. package/dist/scripts/preinstall.js +112 -112
  27. package/dist/server/index.d.ts.map +1 -1
  28. package/dist/server/index.js +8 -0
  29. package/dist/server/index.js.map +1 -1
  30. package/dist/server/index.ts +680 -671
  31. package/dist/server/model/connection.entity.ts +65 -65
  32. package/dist/server/model/database.entity.ts +245 -245
  33. package/dist/server/service/connection.service.d.ts +6 -1
  34. package/dist/server/service/connection.service.d.ts.map +1 -1
  35. package/dist/server/service/connection.service.js +15 -0
  36. package/dist/server/service/connection.service.js.map +1 -1
  37. package/dist/server/service/connection.service.ts +356 -341
  38. package/dist/server/service/database/base.service.d.ts +27 -0
  39. package/dist/server/service/database/base.service.d.ts.map +1 -1
  40. package/dist/server/service/database/base.service.js +17 -0
  41. package/dist/server/service/database/base.service.js.map +1 -1
  42. package/dist/server/service/database/base.service.ts +406 -367
  43. package/dist/server/service/database/cockroachdb.service.d.ts +16 -0
  44. package/dist/server/service/database/cockroachdb.service.d.ts.map +1 -1
  45. package/dist/server/service/database/cockroachdb.service.js +220 -154
  46. package/dist/server/service/database/cockroachdb.service.js.map +1 -1
  47. package/dist/server/service/database/cockroachdb.service.ts +871 -782
  48. package/dist/server/service/database/database.service.d.ts +4 -0
  49. package/dist/server/service/database/database.service.d.ts.map +1 -1
  50. package/dist/server/service/database/database.service.js +123 -0
  51. package/dist/server/service/database/database.service.js.map +1 -1
  52. package/dist/server/service/database/database.service.ts +775 -638
  53. package/dist/server/service/database/index.ts +6 -6
  54. package/dist/server/service/database/mongodb.service.d.ts +16 -0
  55. package/dist/server/service/database/mongodb.service.d.ts.map +1 -1
  56. package/dist/server/service/database/mongodb.service.js +35 -0
  57. package/dist/server/service/database/mongodb.service.js.map +1 -1
  58. package/dist/server/service/database/mongodb.service.ts +39 -1
  59. package/dist/server/service/database/mssql.service.d.ts +16 -0
  60. package/dist/server/service/database/mssql.service.d.ts.map +1 -1
  61. package/dist/server/service/database/mssql.service.js +168 -96
  62. package/dist/server/service/database/mssql.service.js.map +1 -1
  63. package/dist/server/service/database/mssql.service.ts +931 -840
  64. package/dist/server/service/database/mysql.service.d.ts +16 -0
  65. package/dist/server/service/database/mysql.service.d.ts.map +1 -1
  66. package/dist/server/service/database/mysql.service.js +189 -80
  67. package/dist/server/service/database/mysql.service.js.map +1 -1
  68. package/dist/server/service/database/mysql.service.ts +1025 -890
  69. package/dist/server/service/database/oracle.service.d.ts +16 -0
  70. package/dist/server/service/database/oracle.service.d.ts.map +1 -1
  71. package/dist/server/service/database/oracle.service.js +182 -120
  72. package/dist/server/service/database/oracle.service.js.map +1 -1
  73. package/dist/server/service/database/oracle.service.ts +1035 -959
  74. package/dist/server/service/database/postgres.service.d.ts +16 -0
  75. package/dist/server/service/database/postgres.service.d.ts.map +1 -1
  76. package/dist/server/service/database/postgres.service.js +154 -88
  77. package/dist/server/service/database/postgres.service.js.map +1 -1
  78. package/dist/server/service/database/postgres.service.ts +960 -871
  79. package/dist/server/service/database/sap.service.d.ts +16 -0
  80. package/dist/server/service/database/sap.service.d.ts.map +1 -1
  81. package/dist/server/service/database/sap.service.js +66 -0
  82. package/dist/server/service/database/sap.service.js.map +1 -1
  83. package/dist/server/service/database/sap.service.ts +89 -0
  84. package/dist/server/service/database/sqlite.service.d.ts +16 -0
  85. package/dist/server/service/database/sqlite.service.d.ts.map +1 -1
  86. package/dist/server/service/database/sqlite.service.js +77 -18
  87. package/dist/server/service/database/sqlite.service.js.map +1 -1
  88. package/dist/server/service/database/sqlite.service.ts +787 -708
  89. package/dist/server/service/session.service.ts +158 -158
  90. package/dist/view/index.html +38 -38
  91. package/env.d.ts +1 -1
  92. package/package.json +1 -1
  93. package/packages/vscode/.vscodeignore +44 -44
  94. package/packages/vscode/README.md +62 -62
  95. package/packages/vscode/out/database-services/cockroachdb.service.js +154 -154
  96. package/packages/vscode/out/database-services/mssql.service.js +96 -96
  97. package/packages/vscode/out/database-services/mysql.service.js +80 -80
  98. package/packages/vscode/out/database-services/oracle.service.js +120 -120
  99. package/packages/vscode/out/database-services/postgres.service.js +88 -88
  100. package/packages/vscode/out/database-services/sqlite.service.js +18 -18
  101. package/packages/vscode/out/provider/WebViewProvider.js +32 -32
  102. package/packages/vscode/package.json +142 -142
  103. package/packages/vscode/resources/icon.svg +5 -5
  104. package/packages/vscode/resources/webview/connection.css +41 -41
  105. package/packages/vscode/resources/webview/database.css +163 -163
  106. package/packages/vscode/resources/webview/index.html +9 -9
  107. package/packages/vscode/resources/webview/modules/header.tpl +13 -13
  108. package/packages/vscode/resources/webview/modules/initial_state.tpl +54 -54
  109. package/packages/vscode/resources/webview/query.css +104 -104
  110. package/packages/vscode/src/database-services/base.service.ts +362 -362
  111. package/packages/vscode/src/database-services/cockroachdb.service.ts +659 -659
  112. package/packages/vscode/src/database-services/connection.service.ts +340 -340
  113. package/packages/vscode/src/database-services/database.service.ts +629 -629
  114. package/packages/vscode/src/database-services/index.ts +6 -6
  115. package/packages/vscode/src/database-services/model/connection.entity.ts +65 -65
  116. package/packages/vscode/src/database-services/model/database.entity.ts +245 -245
  117. package/packages/vscode/src/database-services/mssql.service.ts +722 -722
  118. package/packages/vscode/src/database-services/mysql.service.ts +760 -760
  119. package/packages/vscode/src/database-services/oracle.service.ts +831 -831
  120. package/packages/vscode/src/database-services/postgres.service.ts +740 -740
  121. package/packages/vscode/src/database-services/sqlite.service.ts +558 -558
  122. package/packages/vscode/src/extension.ts +76 -76
  123. package/packages/vscode/src/provider/DatabaseTreeProvider.ts +167 -167
  124. package/packages/vscode/src/provider/WebViewProvider.ts +277 -277
  125. package/packages/vscode/src/service/DatabaseServiceBridge.ts +414 -414
  126. package/packages/vscode/src/typings/connection.ts +90 -90
  127. package/packages/vscode/tsconfig.json +21 -21
  128. package/public/index.html +9 -9
  129. package/public/modules/header.tpl +13 -13
  130. package/public/modules/initial_state.tpl +54 -54
  131. package/scripts/preinstall.js +112 -112
  132. package/server/index.ts +680 -671
  133. package/server/model/connection.entity.ts +65 -65
  134. package/server/model/database.entity.ts +245 -245
  135. package/server/service/connection.service.ts +356 -341
  136. package/server/service/database/base.service.ts +406 -367
  137. package/server/service/database/cockroachdb.service.ts +871 -782
  138. package/server/service/database/database.service.ts +775 -638
  139. package/server/service/database/index.ts +6 -6
  140. package/server/service/database/mongodb.service.ts +39 -1
  141. package/server/service/database/mssql.service.ts +931 -840
  142. package/server/service/database/mysql.service.ts +1025 -890
  143. package/server/service/database/oracle.service.ts +1035 -959
  144. package/server/service/database/postgres.service.ts +960 -871
  145. package/server/service/database/sap.service.ts +89 -0
  146. package/server/service/database/sqlite.service.ts +787 -708
  147. package/server/service/session.service.ts +158 -158
  148. package/server/tsconfig.json +20 -20
  149. package/server.js +149 -149
  150. package/server.pid +1 -0
  151. package/src/adapter/ajax.ts +135 -135
  152. package/src/assets/base.css +1 -1
  153. package/src/assets/database.css +949 -949
  154. package/src/assets/images/svg/illustrations/illustration-1.svg +1 -1
  155. package/src/assets/images/svg/illustrations/illustration-2.svg +2 -2
  156. package/src/assets/images/svg/illustrations/illustration-3.svg +50 -50
  157. package/src/assets/images/svg/illustrations/illustration-4.svg +1 -1
  158. package/src/assets/images/svg/illustrations/illustration-5.svg +73 -73
  159. package/src/assets/images/svg/illustrations/illustration-6.svg +89 -89
  160. package/src/assets/images/svg/illustrations/illustration-7.svg +39 -39
  161. package/src/assets/images/svg/separators/curve-2.svg +3 -3
  162. package/src/assets/images/svg/separators/curve.svg +3 -3
  163. package/src/assets/images/svg/separators/line.svg +3 -3
  164. package/src/assets/logo.svg +73 -73
  165. package/src/assets/main.css +1 -1
  166. package/src/base/config.ts +20 -20
  167. package/src/base/detect.ts +134 -134
  168. package/src/base/entity.ts +92 -92
  169. package/src/base/eventBus.ts +36 -36
  170. package/src/components/connection-editor/index.vue +588 -588
  171. package/src/components/dataGrid/index.vue +104 -104
  172. package/src/components/dataGrid/pagination.vue +105 -105
  173. package/src/components/loading/index.vue +42 -42
  174. package/src/components/modal/index.ts +180 -180
  175. package/src/components/modal/index.vue +560 -560
  176. package/src/components/toast/index.ts +43 -43
  177. package/src/components/toast/toast.vue +57 -57
  178. package/src/components/user/name.vue +103 -103
  179. package/src/components/user/selector.vue +416 -416
  180. package/src/domain/SysConfig.ts +74 -74
  181. package/src/platform/App.vue +7 -7
  182. package/src/platform/database/components/connection-detail.vue +1153 -1154
  183. package/src/platform/database/components/data-editor.vue +477 -477
  184. package/src/platform/database/components/database-detail.vue +1173 -1172
  185. package/src/platform/database/components/database-monitor.vue +1085 -1085
  186. package/src/platform/database/components/db-tools.vue +1264 -816
  187. package/src/platform/database/components/query-history.vue +1348 -1348
  188. package/src/platform/database/components/sql-executor.vue +737 -737
  189. package/src/platform/database/components/sql-query-editor.vue +1045 -1045
  190. package/src/platform/database/components/table-detail.vue +1375 -1376
  191. package/src/platform/database/components/table-editor.vue +916 -916
  192. package/src/platform/database/explorer.vue +1839 -1839
  193. package/src/platform/database/index.vue +1192 -1192
  194. package/src/platform/database/layout.vue +366 -366
  195. package/src/platform/database/router.ts +36 -36
  196. package/src/platform/database/styles/common.scss +601 -601
  197. package/src/platform/database/types/common.ts +444 -444
  198. package/src/platform/database/utils/export.ts +231 -231
  199. package/src/platform/database/utils/helpers.ts +436 -436
  200. package/src/platform/index.ts +32 -32
  201. package/src/platform/router.ts +40 -40
  202. package/src/platform/vscode/bridge.ts +121 -121
  203. package/src/platform/vscode/components/ConnectionPanel.vue +272 -272
  204. package/src/platform/vscode/components/DatabasePanel.vue +532 -532
  205. package/src/platform/vscode/components/QueryPanel.vue +371 -371
  206. package/src/platform/vscode/entry/connection.ts +13 -13
  207. package/src/platform/vscode/entry/database.ts +13 -13
  208. package/src/platform/vscode/entry/query.ts +13 -13
  209. package/src/platform/vscode/index.ts +5 -5
  210. package/src/service/base.ts +133 -127
  211. package/src/service/database.ts +505 -495
  212. package/src/service/login.ts +120 -120
  213. package/src/shims-vue.d.ts +6 -6
  214. package/src/stores/connection.ts +266 -266
  215. package/src/stores/session.ts +87 -87
  216. package/src/typings/database-types.ts +412 -412
  217. package/src/typings/database.ts +363 -363
  218. package/src/typings/global.d.ts +58 -58
  219. package/src/typings/pinia.d.ts +7 -7
  220. package/src/utils/clipboard.ts +29 -29
  221. package/src/utils/database-types.ts +242 -242
  222. package/src/utils/modal.ts +123 -123
  223. package/src/utils/request.ts +55 -55
  224. package/src/utils/sleep.ts +3 -3
  225. package/src/utils/toast.ts +73 -73
  226. package/src/utils/util.ts +171 -171
  227. package/src/utils/xlsx.ts +228 -228
  228. package/tsconfig.json +33 -33
  229. package/view/index.html +9 -9
  230. package/view/modules/header.tpl +13 -13
  231. package/view/modules/initial_state.tpl +19 -19
  232. package/vite.config.ts +424 -424
  233. package/vite.config.vscode.ts +47 -47
  234. package/server/backups/db_ai_breakout_2026-03-11T08-38-48-677Z.sql +0 -0
@@ -217,20 +217,20 @@ class MySQLService extends base_service_1.BaseDatabaseService {
217
217
  * 获取MySQL表列表
218
218
  */
219
219
  async getTables(dataSource, database) {
220
- const result = await dataSource.query(`
221
- SELECT
222
- TABLE_NAME as name,
223
- TABLE_TYPE as type,
224
- ENGINE as engine,
225
- TABLE_ROWS as rowCount,
226
- DATA_LENGTH as dataSize,
227
- INDEX_LENGTH as indexSize,
228
- TABLE_COLLATION as collation,
229
- CREATE_TIME as createdAt,
230
- UPDATE_TIME as updatedAt,
231
- TABLE_COMMENT as comment
232
- FROM information_schema.TABLES
233
- WHERE TABLE_SCHEMA = ?
220
+ const result = await dataSource.query(`
221
+ SELECT
222
+ TABLE_NAME as name,
223
+ TABLE_TYPE as type,
224
+ ENGINE as engine,
225
+ TABLE_ROWS as rowCount,
226
+ DATA_LENGTH as dataSize,
227
+ INDEX_LENGTH as indexSize,
228
+ TABLE_COLLATION as collation,
229
+ CREATE_TIME as createdAt,
230
+ UPDATE_TIME as updatedAt,
231
+ TABLE_COMMENT as comment
232
+ FROM information_schema.TABLES
233
+ WHERE TABLE_SCHEMA = ?
234
234
  `, [database]);
235
235
  return result.map((row) => ({
236
236
  name: row.name,
@@ -250,20 +250,20 @@ class MySQLService extends base_service_1.BaseDatabaseService {
250
250
  */
251
251
  async getColumns(dataSource, database, table) {
252
252
  // 使用兼容的SQL查询,避免使用某些MySQL版本不支持的NUMERIC_PRECISION和NUMERIC_SCALE
253
- const result = await dataSource.query(`
254
- SELECT
255
- COLUMN_NAME as name,
256
- COLUMN_TYPE as type,
257
- IS_NULLABLE as nullable,
258
- COLUMN_DEFAULT as defaultValue,
259
- COLUMN_KEY as columnKey,
260
- EXTRA as extra,
261
- CHARACTER_MAXIMUM_LENGTH as length,
262
- CHARACTER_SET_NAME as charset,
263
- COLLATION_NAME as collation,
264
- COLUMN_COMMENT as comment
265
- FROM information_schema.COLUMNS
266
- WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ?
253
+ const result = await dataSource.query(`
254
+ SELECT
255
+ COLUMN_NAME as name,
256
+ COLUMN_TYPE as type,
257
+ IS_NULLABLE as nullable,
258
+ COLUMN_DEFAULT as defaultValue,
259
+ COLUMN_KEY as columnKey,
260
+ EXTRA as extra,
261
+ CHARACTER_MAXIMUM_LENGTH as length,
262
+ CHARACTER_SET_NAME as charset,
263
+ COLLATION_NAME as collation,
264
+ COLUMN_COMMENT as comment
265
+ FROM information_schema.COLUMNS
266
+ WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ?
267
267
  `, [database, table]);
268
268
  return result.map((row) => {
269
269
  // 从COLUMN_TYPE中解析精度信息
@@ -297,14 +297,14 @@ class MySQLService extends base_service_1.BaseDatabaseService {
297
297
  */
298
298
  async getIndexes(dataSource, database, table) {
299
299
  // 使用更兼容的SQL查询,避免使用保留关键字作为别名
300
- const result = await dataSource.query(`
301
- SELECT
302
- INDEX_NAME as name,
303
- INDEX_TYPE as type,
304
- COLUMN_NAME as columnName
305
- FROM information_schema.STATISTICS
306
- WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ?
307
- ORDER BY INDEX_NAME, SEQ_IN_INDEX
300
+ const result = await dataSource.query(`
301
+ SELECT
302
+ INDEX_NAME as name,
303
+ INDEX_TYPE as type,
304
+ COLUMN_NAME as columnName
305
+ FROM information_schema.STATISTICS
306
+ WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ?
307
+ ORDER BY INDEX_NAME, SEQ_IN_INDEX
308
308
  `, [database, table]);
309
309
  // 按索引名分组并判断唯一性
310
310
  const indexMap = new Map();
@@ -334,21 +334,21 @@ class MySQLService extends base_service_1.BaseDatabaseService {
334
334
  * 获取MySQL外键信息
335
335
  */
336
336
  async getForeignKeys(dataSource, database, table) {
337
- const result = await dataSource.query(`
338
- SELECT
339
- kcu.CONSTRAINT_NAME as name,
340
- kcu.COLUMN_NAME as columnName,
341
- kcu.REFERENCED_TABLE_NAME as referencedTable,
342
- kcu.REFERENCED_COLUMN_NAME as referencedColumn,
343
- rc.DELETE_RULE as onDelete,
344
- rc.UPDATE_RULE as onUpdate
345
- FROM information_schema.KEY_COLUMN_USAGE kcu
346
- LEFT JOIN information_schema.REFERENTIAL_CONSTRAINTS rc
347
- ON kcu.CONSTRAINT_NAME = rc.CONSTRAINT_NAME
348
- AND kcu.CONSTRAINT_SCHEMA = rc.CONSTRAINT_SCHEMA
349
- WHERE kcu.TABLE_SCHEMA = ?
350
- AND kcu.TABLE_NAME = ?
351
- AND kcu.REFERENCED_TABLE_NAME IS NOT NULL
337
+ const result = await dataSource.query(`
338
+ SELECT
339
+ kcu.CONSTRAINT_NAME as name,
340
+ kcu.COLUMN_NAME as columnName,
341
+ kcu.REFERENCED_TABLE_NAME as referencedTable,
342
+ kcu.REFERENCED_COLUMN_NAME as referencedColumn,
343
+ rc.DELETE_RULE as onDelete,
344
+ rc.UPDATE_RULE as onUpdate
345
+ FROM information_schema.KEY_COLUMN_USAGE kcu
346
+ LEFT JOIN information_schema.REFERENTIAL_CONSTRAINTS rc
347
+ ON kcu.CONSTRAINT_NAME = rc.CONSTRAINT_NAME
348
+ AND kcu.CONSTRAINT_SCHEMA = rc.CONSTRAINT_SCHEMA
349
+ WHERE kcu.TABLE_SCHEMA = ?
350
+ AND kcu.TABLE_NAME = ?
351
+ AND kcu.REFERENCED_TABLE_NAME IS NOT NULL
352
352
  `, [database, table]);
353
353
  return result.map((row) => ({
354
354
  name: row.name,
@@ -363,10 +363,10 @@ class MySQLService extends base_service_1.BaseDatabaseService {
363
363
  * 获取MySQL数据库大小
364
364
  */
365
365
  async getDatabaseSize(dataSource, database) {
366
- const result = await dataSource.query(`
367
- SELECT SUM(data_length + index_length) as size
368
- FROM information_schema.tables
369
- WHERE table_schema = ?
366
+ const result = await dataSource.query(`
367
+ SELECT SUM(data_length + index_length) as size
368
+ FROM information_schema.tables
369
+ WHERE table_schema = ?
370
370
  `, [database]);
371
371
  return result[0]?.size || 0;
372
372
  }
@@ -381,13 +381,13 @@ class MySQLService extends base_service_1.BaseDatabaseService {
381
381
  */
382
382
  async getViews(dataSource, database) {
383
383
  // 完全移除TABLE_COMMENT字段,因为某些MySQL版本中不存在该字段
384
- const result = await dataSource.query(`
385
- SELECT
386
- TABLE_NAME as name,
387
- TABLE_SCHEMA as schemaName
388
- FROM information_schema.VIEWS
389
- WHERE TABLE_SCHEMA = ?
390
- ORDER BY TABLE_NAME
384
+ const result = await dataSource.query(`
385
+ SELECT
386
+ TABLE_NAME as name,
387
+ TABLE_SCHEMA as schemaName
388
+ FROM information_schema.VIEWS
389
+ WHERE TABLE_SCHEMA = ?
390
+ ORDER BY TABLE_NAME
391
391
  `, [database]);
392
392
  return result.map((row) => ({
393
393
  name: row.name,
@@ -399,11 +399,11 @@ class MySQLService extends base_service_1.BaseDatabaseService {
399
399
  * 获取MySQL视图定义
400
400
  */
401
401
  async getViewDefinition(dataSource, database, viewName) {
402
- const result = await dataSource.query(`
403
- SELECT VIEW_DEFINITION as definition
404
- FROM information_schema.VIEWS
405
- WHERE TABLE_SCHEMA = ?
406
- AND TABLE_NAME = ?
402
+ const result = await dataSource.query(`
403
+ SELECT VIEW_DEFINITION as definition
404
+ FROM information_schema.VIEWS
405
+ WHERE TABLE_SCHEMA = ?
406
+ AND TABLE_NAME = ?
407
407
  `, [database, viewName]);
408
408
  return result[0]?.definition || '';
409
409
  }
@@ -411,14 +411,14 @@ class MySQLService extends base_service_1.BaseDatabaseService {
411
411
  * 获取MySQL存储过程列表
412
412
  */
413
413
  async getProcedures(dataSource, database) {
414
- const result = await dataSource.query(`
415
- SELECT
416
- ROUTINE_NAME as name,
417
- ROUTINE_TYPE as type,
418
- ROUTINE_COMMENT as comment
419
- FROM information_schema.ROUTINES
420
- WHERE ROUTINE_SCHEMA = ?
421
- ORDER BY ROUTINE_NAME
414
+ const result = await dataSource.query(`
415
+ SELECT
416
+ ROUTINE_NAME as name,
417
+ ROUTINE_TYPE as type,
418
+ ROUTINE_COMMENT as comment
419
+ FROM information_schema.ROUTINES
420
+ WHERE ROUTINE_SCHEMA = ?
421
+ ORDER BY ROUTINE_NAME
422
422
  `, [database]);
423
423
  return result.map((row) => ({
424
424
  name: row.name,
@@ -432,11 +432,11 @@ class MySQLService extends base_service_1.BaseDatabaseService {
432
432
  * 获取MySQL存储过程定义
433
433
  */
434
434
  async getProcedureDefinition(dataSource, database, procedureName) {
435
- const result = await dataSource.query(`
436
- SELECT ROUTINE_DEFINITION as definition
437
- FROM information_schema.ROUTINES
438
- WHERE ROUTINE_SCHEMA = ?
439
- AND ROUTINE_NAME = ?
435
+ const result = await dataSource.query(`
436
+ SELECT ROUTINE_DEFINITION as definition
437
+ FROM information_schema.ROUTINES
438
+ WHERE ROUTINE_SCHEMA = ?
439
+ AND ROUTINE_NAME = ?
440
440
  `, [database, procedureName]);
441
441
  return result[0]?.definition || '';
442
442
  }
@@ -49,11 +49,11 @@ class OracleService extends base_service_1.BaseDatabaseService {
49
49
  * 获取Oracle数据库列表(用户schema)
50
50
  */
51
51
  async getDatabases(dataSource) {
52
- const result = await dataSource.query(`
53
- SELECT username as name
54
- FROM all_users
55
- WHERE username NOT IN ('SYS', 'SYSTEM', 'XDB', 'OUTLN')
56
- ORDER BY username
52
+ const result = await dataSource.query(`
53
+ SELECT username as name
54
+ FROM all_users
55
+ WHERE username NOT IN ('SYS', 'SYSTEM', 'XDB', 'OUTLN')
56
+ ORDER BY username
57
57
  `);
58
58
  return result.map((row) => row.name);
59
59
  }
@@ -61,15 +61,15 @@ class OracleService extends base_service_1.BaseDatabaseService {
61
61
  * 获取Oracle表列表
62
62
  */
63
63
  async getTables(dataSource, database) {
64
- const result = await dataSource.query(`
65
- SELECT
66
- table_name as name,
67
- 'TABLE' as type
68
- FROM all_tables
69
- WHERE owner = ?
70
- AND table_name NOT LIKE 'BIN$%'
71
- AND temporary = 'N'
72
- ORDER BY table_name
64
+ const result = await dataSource.query(`
65
+ SELECT
66
+ table_name as name,
67
+ 'TABLE' as type
68
+ FROM all_tables
69
+ WHERE owner = ?
70
+ AND table_name NOT LIKE 'BIN$%'
71
+ AND temporary = 'N'
72
+ ORDER BY table_name
73
73
  `, [database.toUpperCase()]);
74
74
  return result.map((row) => ({
75
75
  name: row.name,
@@ -84,17 +84,17 @@ class OracleService extends base_service_1.BaseDatabaseService {
84
84
  */
85
85
  async getColumns(dataSource, database, table) {
86
86
  // 使用兼容的SQL查询,移除可能不兼容的字段
87
- const result = await dataSource.query(`
88
- SELECT
89
- column_name as name,
90
- data_type as type,
91
- data_length as length,
92
- nullable as nullable,
93
- data_default as defaultValue
94
- FROM all_tab_columns
95
- WHERE owner = ?
96
- AND table_name = ?
97
- ORDER BY column_id
87
+ const result = await dataSource.query(`
88
+ SELECT
89
+ column_name as name,
90
+ data_type as type,
91
+ data_length as length,
92
+ nullable as nullable,
93
+ data_default as defaultValue
94
+ FROM all_tab_columns
95
+ WHERE owner = ?
96
+ AND table_name = ?
97
+ ORDER BY column_id
98
98
  `, [
99
99
  database.toUpperCase(),
100
100
  table.toUpperCase()
@@ -133,20 +133,20 @@ class OracleService extends base_service_1.BaseDatabaseService {
133
133
  * 获取Oracle索引信息
134
134
  */
135
135
  async getIndexes(dataSource, database, table) {
136
- const result = await dataSource.query(`
137
- SELECT DISTINCT
138
- i.index_name as name,
139
- DECODE(i.uniqueness, 'UNIQUE', 'UNIQUE INDEX', 'INDEX') as type,
140
- ic.column_name as column
141
- FROM all_indexes i
142
- JOIN all_ind_columns ic ON i.index_name = ic.index_name
143
- WHERE i.table_owner = ?
144
- AND i.table_name = ?
145
- AND i.index_name NOT IN (SELECT constraint_name
146
- FROM all_constraints
147
- WHERE constraint_type = 'P'
148
- AND table_owner = ?)
149
- ORDER BY i.index_name, ic.column_position
136
+ const result = await dataSource.query(`
137
+ SELECT DISTINCT
138
+ i.index_name as name,
139
+ DECODE(i.uniqueness, 'UNIQUE', 'UNIQUE INDEX', 'INDEX') as type,
140
+ ic.column_name as column
141
+ FROM all_indexes i
142
+ JOIN all_ind_columns ic ON i.index_name = ic.index_name
143
+ WHERE i.table_owner = ?
144
+ AND i.table_name = ?
145
+ AND i.index_name NOT IN (SELECT constraint_name
146
+ FROM all_constraints
147
+ WHERE constraint_type = 'P'
148
+ AND table_owner = ?)
149
+ ORDER BY i.index_name, ic.column_position
150
150
  `, [
151
151
  database.toUpperCase(),
152
152
  table.toUpperCase(),
@@ -171,20 +171,20 @@ class OracleService extends base_service_1.BaseDatabaseService {
171
171
  * 获取Oracle外键信息
172
172
  */
173
173
  async getForeignKeys(dataSource, database, table) {
174
- const result = await dataSource.query(`
175
- SELECT
176
- c.constraint_name as name,
177
- cc.column_name as column,
178
- r.table_name as referencedTable,
179
- rc.column_name as referencedColumn,
180
- c.delete_rule as onDelete
181
- FROM all_constraints c
182
- JOIN all_cons_columns cc ON c.constraint_name = cc.constraint_name
183
- JOIN all_constraints r ON c.r_constraint_name = r.constraint_name
184
- JOIN all_cons_columns rc ON r.constraint_name = rc.constraint_name AND cc.position = rc.position
185
- WHERE c.constraint_type = 'R'
186
- AND c.owner = ?
187
- AND c.table_name = ?
174
+ const result = await dataSource.query(`
175
+ SELECT
176
+ c.constraint_name as name,
177
+ cc.column_name as column,
178
+ r.table_name as referencedTable,
179
+ rc.column_name as referencedColumn,
180
+ c.delete_rule as onDelete
181
+ FROM all_constraints c
182
+ JOIN all_cons_columns cc ON c.constraint_name = cc.constraint_name
183
+ JOIN all_constraints r ON c.r_constraint_name = r.constraint_name
184
+ JOIN all_cons_columns rc ON r.constraint_name = rc.constraint_name AND cc.position = rc.position
185
+ WHERE c.constraint_type = 'R'
186
+ AND c.owner = ?
187
+ AND c.table_name = ?
188
188
  `, [
189
189
  database.toUpperCase(),
190
190
  table.toUpperCase()
@@ -202,9 +202,9 @@ class OracleService extends base_service_1.BaseDatabaseService {
202
202
  * 获取Oracle数据库大小(用户schema大小)
203
203
  */
204
204
  async getDatabaseSize(dataSource, database) {
205
- const result = await dataSource.query(`
206
- SELECT SUM(bytes) as size
207
- FROM user_segments
205
+ const result = await dataSource.query(`
206
+ SELECT SUM(bytes) as size
207
+ FROM user_segments
208
208
  `);
209
209
  return result[0]?.size || 0;
210
210
  }
@@ -213,12 +213,12 @@ class OracleService extends base_service_1.BaseDatabaseService {
213
213
  */
214
214
  async getTableStats(dataSource, database, table) {
215
215
  try {
216
- const result = await dataSource.query(`
217
- SELECT
218
- num_rows as rowCount,
219
- (SELECT SUM(bytes) FROM user_segments WHERE segment_name = ?) as dataSize
220
- FROM all_tables
221
- WHERE owner = ? AND table_name = ?
216
+ const result = await dataSource.query(`
217
+ SELECT
218
+ num_rows as rowCount,
219
+ (SELECT SUM(bytes) FROM user_segments WHERE segment_name = ?) as dataSize
220
+ FROM all_tables
221
+ WHERE owner = ? AND table_name = ?
222
222
  `, [
223
223
  table.toUpperCase(),
224
224
  database.toUpperCase(),
@@ -243,14 +243,14 @@ class OracleService extends base_service_1.BaseDatabaseService {
243
243
  * 获取主键信息
244
244
  */
245
245
  async getPrimaryKeys(dataSource, database, table) {
246
- const result = await dataSource.query(`
247
- SELECT column_name
248
- FROM all_cons_columns cc
249
- JOIN all_constraints c ON cc.constraint_name = c.constraint_name
250
- WHERE c.constraint_type = 'P'
251
- AND c.owner = ?
252
- AND c.table_name = ?
253
- ORDER BY cc.position
246
+ const result = await dataSource.query(`
247
+ SELECT column_name
248
+ FROM all_cons_columns cc
249
+ JOIN all_constraints c ON cc.constraint_name = c.constraint_name
250
+ WHERE c.constraint_type = 'P'
251
+ AND c.owner = ?
252
+ AND c.table_name = ?
253
+ ORDER BY cc.position
254
254
  `, [
255
255
  database.toUpperCase(),
256
256
  table.toUpperCase()
@@ -262,16 +262,16 @@ class OracleService extends base_service_1.BaseDatabaseService {
262
262
  */
263
263
  async getSequenceColumns(dataSource, database, table) {
264
264
  try {
265
- const result = await dataSource.query(`
266
- SELECT acc.column_name
267
- FROM all_tab_columns acc
268
- JOIN all_triggers at ON acc.table_name = at.table_name
269
- AND acc.owner = at.owner
270
- JOIN all_sequences seq ON at.trigger_name LIKE seq.sequence_name || '%'
271
- WHERE acc.owner = ?
272
- AND acc.table_name = ?
273
- AND acc.data_default IS NOT NULL
274
- AND acc.data_default LIKE seq.sequence_name || '.nextval'
265
+ const result = await dataSource.query(`
266
+ SELECT acc.column_name
267
+ FROM all_tab_columns acc
268
+ JOIN all_triggers at ON acc.table_name = at.table_name
269
+ AND acc.owner = at.owner
270
+ JOIN all_sequences seq ON at.trigger_name LIKE seq.sequence_name || '%'
271
+ WHERE acc.owner = ?
272
+ AND acc.table_name = ?
273
+ AND acc.data_default IS NOT NULL
274
+ AND acc.data_default LIKE seq.sequence_name || '.nextval'
275
275
  `, [
276
276
  database.toUpperCase(),
277
277
  table.toUpperCase()
@@ -293,13 +293,13 @@ class OracleService extends base_service_1.BaseDatabaseService {
293
293
  * 获取Oracle视图列表
294
294
  */
295
295
  async getViews(dataSource, database) {
296
- const result = await dataSource.query(`
297
- SELECT
298
- view_name as name,
299
- '' as comment
300
- FROM all_views
301
- WHERE owner = ?
302
- ORDER BY view_name
296
+ const result = await dataSource.query(`
297
+ SELECT
298
+ view_name as name,
299
+ '' as comment
300
+ FROM all_views
301
+ WHERE owner = ?
302
+ ORDER BY view_name
303
303
  `, [database.toUpperCase()]);
304
304
  return result.map((row) => ({
305
305
  name: row.name,
@@ -311,11 +311,11 @@ class OracleService extends base_service_1.BaseDatabaseService {
311
311
  * 获取Oracle视图定义
312
312
  */
313
313
  async getViewDefinition(dataSource, database, viewName) {
314
- const result = await dataSource.query(`
315
- SELECT text as definition
316
- FROM all_views
317
- WHERE owner = ?
318
- AND view_name = ?
314
+ const result = await dataSource.query(`
315
+ SELECT text as definition
316
+ FROM all_views
317
+ WHERE owner = ?
318
+ AND view_name = ?
319
319
  `, [database.toUpperCase(), viewName.toUpperCase()]);
320
320
  return result[0]?.definition || '';
321
321
  }
@@ -323,18 +323,18 @@ class OracleService extends base_service_1.BaseDatabaseService {
323
323
  * 获取Oracle存储过程列表
324
324
  */
325
325
  async getProcedures(dataSource, database) {
326
- const result = await dataSource.query(`
327
- SELECT
328
- object_name as name,
329
- '' as comment,
330
- 'PROCEDURE' as type,
331
- '' as returnType,
332
- 'PL/SQL' as language
333
- FROM all_objects
334
- WHERE owner = ?
335
- AND object_type IN ('PROCEDURE', 'FUNCTION')
336
- AND status = 'VALID'
337
- ORDER BY object_name
326
+ const result = await dataSource.query(`
327
+ SELECT
328
+ object_name as name,
329
+ '' as comment,
330
+ 'PROCEDURE' as type,
331
+ '' as returnType,
332
+ 'PL/SQL' as language
333
+ FROM all_objects
334
+ WHERE owner = ?
335
+ AND object_type IN ('PROCEDURE', 'FUNCTION')
336
+ AND status = 'VALID'
337
+ ORDER BY object_name
338
338
  `, [database.toUpperCase()]);
339
339
  return result.map((row) => ({
340
340
  name: row.name,
@@ -348,12 +348,12 @@ class OracleService extends base_service_1.BaseDatabaseService {
348
348
  * 获取Oracle存储过程定义
349
349
  */
350
350
  async getProcedureDefinition(dataSource, database, procedureName) {
351
- const result = await dataSource.query(`
352
- SELECT text as definition
353
- FROM all_source
354
- WHERE owner = ?
355
- AND name = ?
356
- ORDER BY line
351
+ const result = await dataSource.query(`
352
+ SELECT text as definition
353
+ FROM all_source
354
+ WHERE owner = ?
355
+ AND name = ?
356
+ ORDER BY line
357
357
  `, [database.toUpperCase(), procedureName.toUpperCase()]);
358
358
  return result.map((row) => row.definition).join('\n') || '';
359
359
  }
@@ -470,16 +470,16 @@ class OracleService extends base_service_1.BaseDatabaseService {
470
470
  // Oracle查看日志
471
471
  try {
472
472
  // 尝试查看Oracle警告日志
473
- const logs = await dataSource.query(`
474
- SELECT * FROM v$diag_info WHERE name LIKE '%Log%'
473
+ const logs = await dataSource.query(`
474
+ SELECT * FROM v$diag_info WHERE name LIKE '%Log%'
475
475
  `);
476
476
  return logs;
477
477
  }
478
478
  catch (error) {
479
479
  try {
480
480
  // 尝试查看Oracle系统事件
481
- const logs = await dataSource.query(`
482
- SELECT * FROM v$event_name WHERE name LIKE '%log%' LIMIT ${limit}
481
+ const logs = await dataSource.query(`
482
+ SELECT * FROM v$event_name WHERE name LIKE '%log%' LIMIT ${limit}
483
483
  `);
484
484
  return logs;
485
485
  }
@@ -541,12 +541,12 @@ class OracleService extends base_service_1.BaseDatabaseService {
541
541
  // 构建RMAN命令
542
542
  const rmanCommand = `rman target ${user}/${password}@${host}:${port}/${serviceName} cmdfile=${backupPath}/restore.rman`;
543
543
  // 创建RMAN命令文件
544
- const rmanScript = `
545
- SHUTDOWN IMMEDIATE;
546
- STARTUP MOUNT;
547
- RESTORE DATABASE FROM DISK '${filePath}';
548
- RECOVER DATABASE;
549
- ALTER DATABASE OPEN;
544
+ const rmanScript = `
545
+ SHUTDOWN IMMEDIATE;
546
+ STARTUP MOUNT;
547
+ RESTORE DATABASE FROM DISK '${filePath}';
548
+ RECOVER DATABASE;
549
+ ALTER DATABASE OPEN;
550
550
  `;
551
551
  fs.writeFileSync(path.join(backupPath, 'restore.rman'), rmanScript);
552
552
  // 执行命令