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
@@ -49,15 +49,15 @@ class CockroachDBService extends base_service_1.BaseDatabaseService {
49
49
  * 获取CockroachDB数据库列表
50
50
  */
51
51
  async getDatabases(dataSource) {
52
- const result = await dataSource.query(`
53
- SELECT
54
- database_name as name
55
- FROM
56
- information_schema.databases
57
- WHERE
58
- database_name NOT IN ('system', 'pg_catalog', 'information_schema', 'crdb_internal')
59
- ORDER BY
60
- database_name
52
+ const result = await dataSource.query(`
53
+ SELECT
54
+ database_name as name
55
+ FROM
56
+ information_schema.databases
57
+ WHERE
58
+ database_name NOT IN ('system', 'pg_catalog', 'information_schema', 'crdb_internal')
59
+ ORDER BY
60
+ database_name
61
61
  `);
62
62
  return result.map((row) => row.name);
63
63
  }
@@ -65,18 +65,18 @@ class CockroachDBService extends base_service_1.BaseDatabaseService {
65
65
  * 获取CockroachDB表列表
66
66
  */
67
67
  async getTables(dataSource, database) {
68
- const result = await dataSource.query(`
69
- SELECT
70
- t.table_name as name,
71
- 'table' as type,
72
- obj_description(t.oid) as comment
73
- FROM
74
- information_schema.tables t
75
- WHERE
76
- t.table_schema = $1
77
- AND t.table_type = 'BASE TABLE'
78
- ORDER BY
79
- t.table_name
68
+ const result = await dataSource.query(`
69
+ SELECT
70
+ t.table_name as name,
71
+ 'table' as type,
72
+ obj_description(t.oid) as comment
73
+ FROM
74
+ information_schema.tables t
75
+ WHERE
76
+ t.table_schema = $1
77
+ AND t.table_type = 'BASE TABLE'
78
+ ORDER BY
79
+ t.table_name
80
80
  `, [database]);
81
81
  return result.map((row) => ({
82
82
  name: row.name,
@@ -91,34 +91,34 @@ class CockroachDBService extends base_service_1.BaseDatabaseService {
91
91
  * 获取CockroachDB列信息
92
92
  */
93
93
  async getColumns(dataSource, database, table) {
94
- const result = await dataSource.query(`
95
- SELECT
96
- column_name as name,
97
- data_type as type,
98
- is_nullable as nullable,
99
- column_default as defaultValue,
100
- CASE
101
- WHEN column_name IN (
102
- SELECT column_name
103
- FROM information_schema.key_column_usage
104
- WHERE table_schema = $1
105
- AND table_name = $2
106
- AND constraint_name LIKE '%_pkey'
107
- ) THEN true
108
- ELSE false
109
- END as isPrimary,
110
- CASE
111
- WHEN data_type LIKE '%serial%' OR data_type LIKE '%identity%'
112
- THEN true
113
- ELSE false
114
- END as isAutoIncrement
115
- FROM
116
- information_schema.columns
117
- WHERE
118
- table_schema = $1
119
- AND table_name = $2
120
- ORDER BY
121
- ordinal_position
94
+ const result = await dataSource.query(`
95
+ SELECT
96
+ column_name as name,
97
+ data_type as type,
98
+ is_nullable as nullable,
99
+ column_default as defaultValue,
100
+ CASE
101
+ WHEN column_name IN (
102
+ SELECT column_name
103
+ FROM information_schema.key_column_usage
104
+ WHERE table_schema = $1
105
+ AND table_name = $2
106
+ AND constraint_name LIKE '%_pkey'
107
+ ) THEN true
108
+ ELSE false
109
+ END as isPrimary,
110
+ CASE
111
+ WHEN data_type LIKE '%serial%' OR data_type LIKE '%identity%'
112
+ THEN true
113
+ ELSE false
114
+ END as isAutoIncrement
115
+ FROM
116
+ information_schema.columns
117
+ WHERE
118
+ table_schema = $1
119
+ AND table_name = $2
120
+ ORDER BY
121
+ ordinal_position
122
122
  `, [database, table]);
123
123
  return result.map((row) => ({
124
124
  name: row.name,
@@ -133,28 +133,28 @@ class CockroachDBService extends base_service_1.BaseDatabaseService {
133
133
  * 获取CockroachDB索引信息
134
134
  */
135
135
  async getIndexes(dataSource, database, table) {
136
- const result = await dataSource.query(`
137
- SELECT
138
- i.relname as name,
139
- CASE
140
- WHEN i.indisunique THEN 'UNIQUE'
141
- ELSE 'INDEX'
142
- END as type,
143
- array_agg(a.attname ORDER BY k.n) as columns,
144
- i.indisunique as unique
145
- FROM
146
- pg_index i
147
- JOIN pg_class t ON t.oid = i.indrelid
148
- JOIN pg_namespace n ON n.oid = t.relnamespace
149
- JOIN pg_attribute a ON a.attrelid = t.oid AND a.attnum = ANY(i.indkey)
150
- CROSS JOIN LATERAL unnest(i.indkey) WITH ORDINALITY AS k(n, ord) ON true
151
- WHERE
152
- n.nspname = $1
153
- AND t.relname = $2
154
- GROUP BY
155
- i.relname, i.indisunique
156
- ORDER BY
157
- i.relname
136
+ const result = await dataSource.query(`
137
+ SELECT
138
+ i.relname as name,
139
+ CASE
140
+ WHEN i.indisunique THEN 'UNIQUE'
141
+ ELSE 'INDEX'
142
+ END as type,
143
+ array_agg(a.attname ORDER BY k.n) as columns,
144
+ i.indisunique as unique
145
+ FROM
146
+ pg_index i
147
+ JOIN pg_class t ON t.oid = i.indrelid
148
+ JOIN pg_namespace n ON n.oid = t.relnamespace
149
+ JOIN pg_attribute a ON a.attrelid = t.oid AND a.attnum = ANY(i.indkey)
150
+ CROSS JOIN LATERAL unnest(i.indkey) WITH ORDINALITY AS k(n, ord) ON true
151
+ WHERE
152
+ n.nspname = $1
153
+ AND t.relname = $2
154
+ GROUP BY
155
+ i.relname, i.indisunique
156
+ ORDER BY
157
+ i.relname
158
158
  `, [database, table]);
159
159
  return result.map((row) => ({
160
160
  name: row.name,
@@ -167,30 +167,30 @@ class CockroachDBService extends base_service_1.BaseDatabaseService {
167
167
  * 获取CockroachDB外键信息
168
168
  */
169
169
  async getForeignKeys(dataSource, database, table) {
170
- const result = await dataSource.query(`
171
- SELECT
172
- tc.constraint_name as name,
173
- kcu.column_name as column,
174
- ccu.table_name as referencedTable,
175
- ccu.column_name as referencedColumn,
176
- rc.update_rule as onUpdate,
177
- rc.delete_rule as onDelete
178
- FROM
179
- information_schema.table_constraints tc
180
- JOIN information_schema.key_column_usage kcu
181
- ON tc.constraint_name = kcu.constraint_name
182
- AND tc.table_schema = kcu.table_schema
183
- JOIN information_schema.constraint_column_usage ccu
184
- ON ccu.constraint_name = tc.constraint_name
185
- AND ccu.table_schema = tc.table_schema
186
- JOIN information_schema.referential_constraints rc
187
- ON rc.constraint_name = tc.constraint_name
188
- WHERE
189
- tc.constraint_type = 'FOREIGN KEY'
190
- AND tc.table_schema = $1
191
- AND tc.table_name = $2
192
- ORDER BY
193
- tc.constraint_name
170
+ const result = await dataSource.query(`
171
+ SELECT
172
+ tc.constraint_name as name,
173
+ kcu.column_name as column,
174
+ ccu.table_name as referencedTable,
175
+ ccu.column_name as referencedColumn,
176
+ rc.update_rule as onUpdate,
177
+ rc.delete_rule as onDelete
178
+ FROM
179
+ information_schema.table_constraints tc
180
+ JOIN information_schema.key_column_usage kcu
181
+ ON tc.constraint_name = kcu.constraint_name
182
+ AND tc.table_schema = kcu.table_schema
183
+ JOIN information_schema.constraint_column_usage ccu
184
+ ON ccu.constraint_name = tc.constraint_name
185
+ AND ccu.table_schema = tc.table_schema
186
+ JOIN information_schema.referential_constraints rc
187
+ ON rc.constraint_name = tc.constraint_name
188
+ WHERE
189
+ tc.constraint_type = 'FOREIGN KEY'
190
+ AND tc.table_schema = $1
191
+ AND tc.table_name = $2
192
+ ORDER BY
193
+ tc.constraint_name
194
194
  `, [database, table]);
195
195
  return result.map((row) => ({
196
196
  name: row.name,
@@ -206,13 +206,13 @@ class CockroachDBService extends base_service_1.BaseDatabaseService {
206
206
  */
207
207
  async getDatabaseSize(dataSource, database) {
208
208
  try {
209
- const result = await dataSource.query(`
210
- SELECT
211
- pg_database_size(datname) as size
212
- FROM
213
- pg_database
214
- WHERE
215
- datname = $1
209
+ const result = await dataSource.query(`
210
+ SELECT
211
+ pg_database_size(datname) as size
212
+ FROM
213
+ pg_database
214
+ WHERE
215
+ datname = $1
216
216
  `, [database]);
217
217
  return result[0]?.size || 0;
218
218
  }
@@ -224,16 +224,16 @@ class CockroachDBService extends base_service_1.BaseDatabaseService {
224
224
  * 获取CockroachDB视图列表
225
225
  */
226
226
  async getViews(dataSource, database) {
227
- const result = await dataSource.query(`
228
- SELECT
229
- table_name as name,
230
- view_definition as definition
231
- FROM
232
- information_schema.views
233
- WHERE
234
- table_schema = $1
235
- ORDER BY
236
- table_name
227
+ const result = await dataSource.query(`
228
+ SELECT
229
+ table_name as name,
230
+ view_definition as definition
231
+ FROM
232
+ information_schema.views
233
+ WHERE
234
+ table_schema = $1
235
+ ORDER BY
236
+ table_name
237
237
  `, [database]);
238
238
  return result.map((row) => ({
239
239
  name: row.name,
@@ -246,14 +246,14 @@ class CockroachDBService extends base_service_1.BaseDatabaseService {
246
246
  * 获取CockroachDB视图定义
247
247
  */
248
248
  async getViewDefinition(dataSource, database, viewName) {
249
- const result = await dataSource.query(`
250
- SELECT
251
- view_definition as definition
252
- FROM
253
- information_schema.views
254
- WHERE
255
- table_schema = $1
256
- AND table_name = $2
249
+ const result = await dataSource.query(`
250
+ SELECT
251
+ view_definition as definition
252
+ FROM
253
+ information_schema.views
254
+ WHERE
255
+ table_schema = $1
256
+ AND table_name = $2
257
257
  `, [database, viewName]);
258
258
  return result[0]?.definition || '';
259
259
  }
@@ -261,19 +261,19 @@ class CockroachDBService extends base_service_1.BaseDatabaseService {
261
261
  * 获取CockroachDB存储过程列表
262
262
  */
263
263
  async getProcedures(dataSource, database) {
264
- const result = await dataSource.query(`
265
- SELECT
266
- p.proname as name,
267
- pg_get_userbyid(p.proowner).usename as owner,
268
- pg_get_functiondef(p.oid) as definition
269
- FROM
270
- pg_proc p
271
- JOIN pg_namespace n ON n.oid = p.pronamespace
272
- WHERE
273
- n.nspname = $1
274
- AND p.prokind = 'f'
275
- ORDER BY
276
- p.proname
264
+ const result = await dataSource.query(`
265
+ SELECT
266
+ p.proname as name,
267
+ pg_get_userbyid(p.proowner).usename as owner,
268
+ pg_get_functiondef(p.oid) as definition
269
+ FROM
270
+ pg_proc p
271
+ JOIN pg_namespace n ON n.oid = p.pronamespace
272
+ WHERE
273
+ n.nspname = $1
274
+ AND p.prokind = 'f'
275
+ ORDER BY
276
+ p.proname
277
277
  `, [database]);
278
278
  return result.map((row) => ({
279
279
  name: row.name,
@@ -285,15 +285,15 @@ class CockroachDBService extends base_service_1.BaseDatabaseService {
285
285
  * 获取CockroachDB存储过程定义
286
286
  */
287
287
  async getProcedureDefinition(dataSource, database, procedureName) {
288
- const result = await dataSource.query(`
289
- SELECT
290
- pg_get_functiondef(p.oid) as definition
291
- FROM
292
- pg_proc p
293
- JOIN pg_namespace n ON n.oid = p.pronamespace
294
- WHERE
295
- n.nspname = $1
296
- AND p.proname = $2
288
+ const result = await dataSource.query(`
289
+ SELECT
290
+ pg_get_functiondef(p.oid) as definition
291
+ FROM
292
+ pg_proc p
293
+ JOIN pg_namespace n ON n.oid = p.pronamespace
294
+ WHERE
295
+ n.nspname = $1
296
+ AND p.proname = $2
297
297
  `, [database, procedureName]);
298
298
  return result[0]?.definition || '';
299
299
  }
@@ -361,18 +361,18 @@ class CockroachDBService extends base_service_1.BaseDatabaseService {
361
361
  */
362
362
  async viewLogs(dataSource, database, limit = 100) {
363
363
  try {
364
- const result = await dataSource.query(`
365
- SELECT
366
- log_time,
367
- user_name,
368
- database_name,
369
- error_severity,
370
- message
371
- FROM
372
- crdb_internal.statement_statistics
373
- ORDER BY
374
- log_time DESC
375
- LIMIT $1
364
+ const result = await dataSource.query(`
365
+ SELECT
366
+ log_time,
367
+ user_name,
368
+ database_name,
369
+ error_severity,
370
+ message
371
+ FROM
372
+ crdb_internal.statement_statistics
373
+ ORDER BY
374
+ log_time DESC
375
+ LIMIT $1
376
376
  `, [limit]);
377
377
  return result;
378
378
  }
@@ -48,12 +48,12 @@ class SQLServerService extends base_service_1.BaseDatabaseService {
48
48
  * 获取SQL Server数据库列表
49
49
  */
50
50
  async getDatabases(dataSource) {
51
- const result = await dataSource.query(`
52
- SELECT name
53
- FROM sys.databases
54
- WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb')
55
- AND state = 0
56
- ORDER BY name
51
+ const result = await dataSource.query(`
52
+ SELECT name
53
+ FROM sys.databases
54
+ WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb')
55
+ AND state = 0
56
+ ORDER BY name
57
57
  `);
58
58
  return result.map((row) => row.name);
59
59
  }
@@ -61,19 +61,19 @@ class SQLServerService extends base_service_1.BaseDatabaseService {
61
61
  * 获取SQL Server表列表
62
62
  */
63
63
  async getTables(dataSource, database) {
64
- const result = await dataSource.query(`
65
- SELECT
66
- t.name,
67
- 'BASE TABLE' as type,
68
- p.rows as rowCount,
69
- SUM(a.total_pages) * 8 * 1024 as dataSize
70
- FROM ${this.quoteIdentifier(database)}.sys.tables t
71
- INNER JOIN ${this.quoteIdentifier(database)}.sys.partitions p ON t.object_id = p.object_id
72
- INNER JOIN ${this.quoteIdentifier(database)}.sys.allocation_units a ON p.partition_id = a.container_id
73
- WHERE t.is_ms_shipped = 0
74
- AND p.index_id IN (0, 1)
75
- GROUP BY t.name, p.rows
76
- ORDER BY t.name
64
+ const result = await dataSource.query(`
65
+ SELECT
66
+ t.name,
67
+ 'BASE TABLE' as type,
68
+ p.rows as rowCount,
69
+ SUM(a.total_pages) * 8 * 1024 as dataSize
70
+ FROM ${this.quoteIdentifier(database)}.sys.tables t
71
+ INNER JOIN ${this.quoteIdentifier(database)}.sys.partitions p ON t.object_id = p.object_id
72
+ INNER JOIN ${this.quoteIdentifier(database)}.sys.allocation_units a ON p.partition_id = a.container_id
73
+ WHERE t.is_ms_shipped = 0
74
+ AND p.index_id IN (0, 1)
75
+ GROUP BY t.name, p.rows
76
+ ORDER BY t.name
77
77
  `);
78
78
  return result.map((row) => ({
79
79
  name: row.name,
@@ -88,20 +88,20 @@ class SQLServerService extends base_service_1.BaseDatabaseService {
88
88
  */
89
89
  async getColumns(dataSource, database, table) {
90
90
  // 使用兼容的SQL查询,避免使用可能不兼容的函数
91
- const result = await dataSource.query(`
92
- SELECT
93
- c.name,
94
- t.name as type,
95
- c.max_length as length,
96
- c.precision,
97
- c.scale,
98
- c.is_nullable as nullable,
99
- c.default_object_id,
100
- COLUMNPROPERTY(c.object_id, c.name, 'IsIdentity') as isIdentity
101
- FROM ${this.quoteIdentifier(database)}.sys.columns c
102
- INNER JOIN ${this.quoteIdentifier(database)}.sys.types t ON c.user_type_id = t.user_type_id
103
- WHERE c.object_id = OBJECT_ID(?)
104
- ORDER BY c.column_id
91
+ const result = await dataSource.query(`
92
+ SELECT
93
+ c.name,
94
+ t.name as type,
95
+ c.max_length as length,
96
+ c.precision,
97
+ c.scale,
98
+ c.is_nullable as nullable,
99
+ c.default_object_id,
100
+ COLUMNPROPERTY(c.object_id, c.name, 'IsIdentity') as isIdentity
101
+ FROM ${this.quoteIdentifier(database)}.sys.columns c
102
+ INNER JOIN ${this.quoteIdentifier(database)}.sys.types t ON c.user_type_id = t.user_type_id
103
+ WHERE c.object_id = OBJECT_ID(?)
104
+ ORDER BY c.column_id
105
105
  `, [`${database}.${table}`]);
106
106
  // 获取主键信息
107
107
  const primaryKeys = await this.getPrimaryKeys(dataSource, database, table);
@@ -121,18 +121,18 @@ class SQLServerService extends base_service_1.BaseDatabaseService {
121
121
  * 获取SQL Server索引信息
122
122
  */
123
123
  async getIndexes(dataSource, database, table) {
124
- const result = await dataSource.query(`
125
- SELECT
126
- i.name,
127
- i.type_desc as type,
128
- c.name as column,
129
- i.is_unique as isUnique
130
- FROM ${this.quoteIdentifier(database)}.sys.indexes i
131
- INNER JOIN ${this.quoteIdentifier(database)}.sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = ic.index_id
132
- INNER JOIN ${this.quoteIdentifier(database)}.sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id
133
- WHERE i.object_id = OBJECT_ID(?)
134
- AND i.is_primary_key = 0
135
- ORDER BY i.name, ic.key_ordinal
124
+ const result = await dataSource.query(`
125
+ SELECT
126
+ i.name,
127
+ i.type_desc as type,
128
+ c.name as column,
129
+ i.is_unique as isUnique
130
+ FROM ${this.quoteIdentifier(database)}.sys.indexes i
131
+ INNER JOIN ${this.quoteIdentifier(database)}.sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = ic.index_id
132
+ INNER JOIN ${this.quoteIdentifier(database)}.sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id
133
+ WHERE i.object_id = OBJECT_ID(?)
134
+ AND i.is_primary_key = 0
135
+ ORDER BY i.name, ic.key_ordinal
136
136
  `, [`${database}.${table}`]);
137
137
  // 按索引名分组
138
138
  const indexMap = new Map();
@@ -153,20 +153,20 @@ class SQLServerService extends base_service_1.BaseDatabaseService {
153
153
  * 获取SQL Server外键信息
154
154
  */
155
155
  async getForeignKeys(dataSource, database, table) {
156
- const result = await dataSource.query(`
157
- SELECT
158
- fk.name as name,
159
- c.name as column,
160
- rt.name as referencedTable,
161
- rc.name as referencedColumn,
162
- fk.delete_action_desc as onDelete,
163
- fk.update_action_desc as onUpdate
164
- FROM ${this.quoteIdentifier(database)}.sys.foreign_keys fk
165
- INNER JOIN ${this.quoteIdentifier(database)}.sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id
166
- INNER JOIN ${this.quoteIdentifier(database)}.sys.columns c ON fkc.parent_object_id = c.object_id AND fkc.parent_column_id = c.column_id
167
- INNER JOIN ${this.quoteIdentifier(database)}.sys.columns rc ON fkc.referenced_object_id = rc.object_id AND fkc.referenced_column_id = rc.column_id
168
- INNER JOIN ${this.quoteIdentifier(database)}.sys.tables rt ON fkc.referenced_object_id = rt.object_id
169
- WHERE fkc.parent_object_id = OBJECT_ID(?)
156
+ const result = await dataSource.query(`
157
+ SELECT
158
+ fk.name as name,
159
+ c.name as column,
160
+ rt.name as referencedTable,
161
+ rc.name as referencedColumn,
162
+ fk.delete_action_desc as onDelete,
163
+ fk.update_action_desc as onUpdate
164
+ FROM ${this.quoteIdentifier(database)}.sys.foreign_keys fk
165
+ INNER JOIN ${this.quoteIdentifier(database)}.sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id
166
+ INNER JOIN ${this.quoteIdentifier(database)}.sys.columns c ON fkc.parent_object_id = c.object_id AND fkc.parent_column_id = c.column_id
167
+ INNER JOIN ${this.quoteIdentifier(database)}.sys.columns rc ON fkc.referenced_object_id = rc.object_id AND fkc.referenced_column_id = rc.column_id
168
+ INNER JOIN ${this.quoteIdentifier(database)}.sys.tables rt ON fkc.referenced_object_id = rt.object_id
169
+ WHERE fkc.parent_object_id = OBJECT_ID(?)
170
170
  `, [`${database}.${table}`]);
171
171
  return result.map((row) => ({
172
172
  name: row.name,
@@ -181,10 +181,10 @@ class SQLServerService extends base_service_1.BaseDatabaseService {
181
181
  * 获取SQL Server数据库大小
182
182
  */
183
183
  async getDatabaseSize(dataSource, database) {
184
- const result = await dataSource.query(`
185
- SELECT SUM(size * 8 * 1024) as size
186
- FROM sys.master_files
187
- WHERE database_id = DB_ID(?)
184
+ const result = await dataSource.query(`
185
+ SELECT SUM(size * 8 * 1024) as size
186
+ FROM sys.master_files
187
+ WHERE database_id = DB_ID(?)
188
188
  `, [database]);
189
189
  return result[0]?.size || 0;
190
190
  }
@@ -192,14 +192,14 @@ class SQLServerService extends base_service_1.BaseDatabaseService {
192
192
  * 获取主键信息
193
193
  */
194
194
  async getPrimaryKeys(dataSource, database, table) {
195
- const result = await dataSource.query(`
196
- SELECT c.name
197
- FROM ${this.quoteIdentifier(database)}.sys.key_constraints k
198
- INNER JOIN ${this.quoteIdentifier(database)}.sys.index_columns ic ON k.parent_object_id = ic.object_id AND k.unique_index_id = ic.index_id
199
- INNER JOIN ${this.quoteIdentifier(database)}.sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id
200
- WHERE k.type = 'PK'
201
- AND k.parent_object_id = OBJECT_ID(?)
202
- ORDER BY ic.key_ordinal
195
+ const result = await dataSource.query(`
196
+ SELECT c.name
197
+ FROM ${this.quoteIdentifier(database)}.sys.key_constraints k
198
+ INNER JOIN ${this.quoteIdentifier(database)}.sys.index_columns ic ON k.parent_object_id = ic.object_id AND k.unique_index_id = ic.index_id
199
+ INNER JOIN ${this.quoteIdentifier(database)}.sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id
200
+ WHERE k.type = 'PK'
201
+ AND k.parent_object_id = OBJECT_ID(?)
202
+ ORDER BY ic.key_ordinal
203
203
  `, [`${database}.${table}`]);
204
204
  return result.map((row) => row.name);
205
205
  }
@@ -213,13 +213,13 @@ class SQLServerService extends base_service_1.BaseDatabaseService {
213
213
  * 获取SQL Server视图列表
214
214
  */
215
215
  async getViews(dataSource, database) {
216
- const result = await dataSource.query(`
217
- SELECT
218
- TABLE_NAME as name,
219
- '' as comment,
220
- TABLE_SCHEMA as schemaName
221
- FROM ${this.quoteIdentifier(database)}.INFORMATION_SCHEMA.VIEWS
222
- ORDER BY TABLE_NAME
216
+ const result = await dataSource.query(`
217
+ SELECT
218
+ TABLE_NAME as name,
219
+ '' as comment,
220
+ TABLE_SCHEMA as schemaName
221
+ FROM ${this.quoteIdentifier(database)}.INFORMATION_SCHEMA.VIEWS
222
+ ORDER BY TABLE_NAME
223
223
  `);
224
224
  return result.map((row) => ({
225
225
  name: row.name,
@@ -231,10 +231,10 @@ class SQLServerService extends base_service_1.BaseDatabaseService {
231
231
  * 获取SQL Server视图定义
232
232
  */
233
233
  async getViewDefinition(dataSource, database, viewName) {
234
- const result = await dataSource.query(`
235
- SELECT VIEW_DEFINITION as definition
236
- FROM ${this.quoteIdentifier(database)}.INFORMATION_SCHEMA.VIEWS
237
- WHERE TABLE_NAME = ?
234
+ const result = await dataSource.query(`
235
+ SELECT VIEW_DEFINITION as definition
236
+ FROM ${this.quoteIdentifier(database)}.INFORMATION_SCHEMA.VIEWS
237
+ WHERE TABLE_NAME = ?
238
238
  `, [viewName]);
239
239
  return result[0]?.definition || '';
240
240
  }
@@ -242,16 +242,16 @@ class SQLServerService extends base_service_1.BaseDatabaseService {
242
242
  * 获取SQL Server存储过程列表
243
243
  */
244
244
  async getProcedures(dataSource, database) {
245
- const result = await dataSource.query(`
246
- SELECT
247
- ROUTINE_NAME as name,
248
- '' as comment,
249
- ROUTINE_TYPE as type,
250
- '' as returnType,
251
- 'SQL' as language
252
- FROM ${this.quoteIdentifier(database)}.INFORMATION_SCHEMA.ROUTINES
253
- WHERE ROUTINE_SCHEMA NOT IN ('sys', 'INFORMATION_SCHEMA')
254
- ORDER BY ROUTINE_NAME
245
+ const result = await dataSource.query(`
246
+ SELECT
247
+ ROUTINE_NAME as name,
248
+ '' as comment,
249
+ ROUTINE_TYPE as type,
250
+ '' as returnType,
251
+ 'SQL' as language
252
+ FROM ${this.quoteIdentifier(database)}.INFORMATION_SCHEMA.ROUTINES
253
+ WHERE ROUTINE_SCHEMA NOT IN ('sys', 'INFORMATION_SCHEMA')
254
+ ORDER BY ROUTINE_NAME
255
255
  `);
256
256
  return result.map((row) => ({
257
257
  name: row.name,
@@ -265,10 +265,10 @@ class SQLServerService extends base_service_1.BaseDatabaseService {
265
265
  * 获取SQL Server存储过程定义
266
266
  */
267
267
  async getProcedureDefinition(dataSource, database, procedureName) {
268
- const result = await dataSource.query(`
269
- SELECT ROUTINE_DEFINITION as definition
270
- FROM ${this.quoteIdentifier(database)}.INFORMATION_SCHEMA.ROUTINES
271
- WHERE ROUTINE_NAME = ?
268
+ const result = await dataSource.query(`
269
+ SELECT ROUTINE_DEFINITION as definition
270
+ FROM ${this.quoteIdentifier(database)}.INFORMATION_SCHEMA.ROUTINES
271
+ WHERE ROUTINE_NAME = ?
272
272
  `, [procedureName]);
273
273
  return result[0]?.definition || '';
274
274
  }