fdb2 1.0.8 → 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 (235) 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 +759 -223
  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/fdb2.server.pid +0 -1
  235. package/server/backups/db_ai_breakout_2026-03-11T08-38-48-677Z.sql +0 -0
@@ -49,10 +49,10 @@ class PostgreSQLService extends base_service_1.BaseDatabaseService {
49
49
  * 获取PostgreSQL数据库列表
50
50
  */
51
51
  async getDatabases(dataSource) {
52
- const result = await dataSource.query(`
53
- SELECT datname as name
54
- FROM pg_database
55
- WHERE datistemplate = false
52
+ const result = await dataSource.query(`
53
+ SELECT datname as name
54
+ FROM pg_database
55
+ WHERE datistemplate = false
56
56
  `);
57
57
  return result.map((row) => row.name);
58
58
  }
@@ -60,16 +60,16 @@ class PostgreSQLService extends base_service_1.BaseDatabaseService {
60
60
  * 获取PostgreSQL表列表
61
61
  */
62
62
  async getTables(dataSource, database) {
63
- const result = await dataSource.query(`
64
- SELECT
65
- t.table_name as name,
66
- 'BASE TABLE' as type,
67
- '' as collation,
68
- obj_description(c.oid) as comment
69
- FROM information_schema.tables t
70
- LEFT JOIN pg_class c ON c.relname = t.table_name
71
- WHERE t.table_schema NOT IN ('information_schema', 'pg_catalog')
72
- AND t.table_type = 'BASE TABLE'
63
+ const result = await dataSource.query(`
64
+ SELECT
65
+ t.table_name as name,
66
+ 'BASE TABLE' as type,
67
+ '' as collation,
68
+ obj_description(c.oid) as comment
69
+ FROM information_schema.tables t
70
+ LEFT JOIN pg_class c ON c.relname = t.table_name
71
+ WHERE t.table_schema NOT IN ('information_schema', 'pg_catalog')
72
+ AND t.table_type = 'BASE TABLE'
73
73
  `);
74
74
  return result.map((row) => ({
75
75
  name: row.name,
@@ -86,15 +86,15 @@ class PostgreSQLService extends base_service_1.BaseDatabaseService {
86
86
  */
87
87
  async getColumns(dataSource, database, table) {
88
88
  // 使用兼容的SQL查询,移除可能不兼容的精度字段
89
- const result = await dataSource.query(`
90
- SELECT
91
- column_name as name,
92
- data_type as type,
93
- is_nullable as nullable,
94
- column_default as defaultValue,
95
- character_maximum_length as length
96
- FROM information_schema.columns
97
- WHERE table_name = $1
89
+ const result = await dataSource.query(`
90
+ SELECT
91
+ column_name as name,
92
+ data_type as type,
93
+ is_nullable as nullable,
94
+ column_default as defaultValue,
95
+ character_maximum_length as length
96
+ FROM information_schema.columns
97
+ WHERE table_name = $1
98
98
  `, [table]);
99
99
  // 获取主键信息
100
100
  const primaryKeys = await this.getPrimaryKeys(dataSource, table);
@@ -131,12 +131,12 @@ class PostgreSQLService extends base_service_1.BaseDatabaseService {
131
131
  * 获取PostgreSQL索引信息
132
132
  */
133
133
  async getIndexes(dataSource, database, table) {
134
- const result = await dataSource.query(`
135
- SELECT
136
- indexname as name,
137
- indexdef as definition
138
- FROM pg_indexes
139
- WHERE tablename = $1
134
+ const result = await dataSource.query(`
135
+ SELECT
136
+ indexname as name,
137
+ indexdef as definition
138
+ FROM pg_indexes
139
+ WHERE tablename = $1
140
140
  `, [table]);
141
141
  return result.map((row) => ({
142
142
  name: row.name,
@@ -149,22 +149,22 @@ class PostgreSQLService extends base_service_1.BaseDatabaseService {
149
149
  * 获取PostgreSQL外键信息
150
150
  */
151
151
  async getForeignKeys(dataSource, database, table) {
152
- const result = await dataSource.query(`
153
- SELECT
154
- tc.constraint_name as name,
155
- kcu.column_name as column,
156
- ccu.table_name as referencedTable,
157
- ccu.column_name as referencedColumn,
158
- rc.delete_rule as onDelete
159
- FROM information_schema.table_constraints tc
160
- JOIN information_schema.key_column_usage kcu
161
- ON tc.constraint_name = kcu.constraint_name
162
- JOIN information_schema.constraint_column_usage ccu
163
- ON ccu.constraint_name = tc.constraint_name
164
- JOIN information_schema.referential_constraints rc
165
- ON tc.constraint_name = rc.constraint_name
166
- WHERE tc.constraint_type = 'FOREIGN KEY'
167
- AND tc.table_name = $1
152
+ const result = await dataSource.query(`
153
+ SELECT
154
+ tc.constraint_name as name,
155
+ kcu.column_name as column,
156
+ ccu.table_name as referencedTable,
157
+ ccu.column_name as referencedColumn,
158
+ rc.delete_rule as onDelete
159
+ FROM information_schema.table_constraints tc
160
+ JOIN information_schema.key_column_usage kcu
161
+ ON tc.constraint_name = kcu.constraint_name
162
+ JOIN information_schema.constraint_column_usage ccu
163
+ ON ccu.constraint_name = tc.constraint_name
164
+ JOIN information_schema.referential_constraints rc
165
+ ON tc.constraint_name = rc.constraint_name
166
+ WHERE tc.constraint_type = 'FOREIGN KEY'
167
+ AND tc.table_name = $1
168
168
  `, [table]);
169
169
  return result.map((row) => ({
170
170
  name: row.name,
@@ -179,8 +179,8 @@ class PostgreSQLService extends base_service_1.BaseDatabaseService {
179
179
  * 获取PostgreSQL数据库大小
180
180
  */
181
181
  async getDatabaseSize(dataSource, database) {
182
- const result = await dataSource.query(`
183
- SELECT pg_database_size($1) as size
182
+ const result = await dataSource.query(`
183
+ SELECT pg_database_size($1) as size
184
184
  `, [database]);
185
185
  return result[0]?.size || 0;
186
186
  }
@@ -188,13 +188,13 @@ class PostgreSQLService extends base_service_1.BaseDatabaseService {
188
188
  * 获取主键信息
189
189
  */
190
190
  async getPrimaryKeys(dataSource, table) {
191
- const result = await dataSource.query(`
192
- SELECT column_name
193
- FROM information_schema.table_constraints tc
194
- JOIN information_schema.key_column_usage kcu
195
- ON tc.constraint_name = kcu.constraint_name
196
- WHERE tc.constraint_type = 'PRIMARY KEY'
197
- AND tc.table_name = $1
191
+ const result = await dataSource.query(`
192
+ SELECT column_name
193
+ FROM information_schema.table_constraints tc
194
+ JOIN information_schema.key_column_usage kcu
195
+ ON tc.constraint_name = kcu.constraint_name
196
+ WHERE tc.constraint_type = 'PRIMARY KEY'
197
+ AND tc.table_name = $1
198
198
  `, [table]);
199
199
  return result.map((row) => row.column_name);
200
200
  }
@@ -203,11 +203,11 @@ class PostgreSQLService extends base_service_1.BaseDatabaseService {
203
203
  */
204
204
  async getIdentityColumns(dataSource, table) {
205
205
  try {
206
- const result = await dataSource.query(`
207
- SELECT column_name
208
- FROM information_schema.columns
209
- WHERE table_name = $1
210
- AND is_identity = 'YES'
206
+ const result = await dataSource.query(`
207
+ SELECT column_name
208
+ FROM information_schema.columns
209
+ WHERE table_name = $1
210
+ AND is_identity = 'YES'
211
211
  `, [table]);
212
212
  return result.map((row) => row.column_name);
213
213
  }
@@ -226,15 +226,15 @@ class PostgreSQLService extends base_service_1.BaseDatabaseService {
226
226
  * 获取PostgreSQL视图列表
227
227
  */
228
228
  async getViews(dataSource, database) {
229
- const result = await dataSource.query(`
230
- SELECT
231
- table_name as name,
232
- COALESCE(obj_description(c.oid), '') as comment,
233
- table_schema as schemaName
234
- FROM information_schema.views v
235
- LEFT JOIN pg_class c ON c.relname = v.table_name
236
- WHERE v.table_schema NOT IN ('information_schema', 'pg_catalog')
237
- ORDER BY v.table_name
229
+ const result = await dataSource.query(`
230
+ SELECT
231
+ table_name as name,
232
+ COALESCE(obj_description(c.oid), '') as comment,
233
+ table_schema as schemaName
234
+ FROM information_schema.views v
235
+ LEFT JOIN pg_class c ON c.relname = v.table_name
236
+ WHERE v.table_schema NOT IN ('information_schema', 'pg_catalog')
237
+ ORDER BY v.table_name
238
238
  `);
239
239
  return result.map((row) => ({
240
240
  name: row.name,
@@ -246,11 +246,11 @@ class PostgreSQLService extends base_service_1.BaseDatabaseService {
246
246
  * 获取PostgreSQL视图定义
247
247
  */
248
248
  async getViewDefinition(dataSource, database, viewName) {
249
- const result = await dataSource.query(`
250
- SELECT view_definition as definition
251
- FROM information_schema.views
252
- WHERE table_name = $1
253
- AND table_schema NOT IN ('information_schema', 'pg_catalog')
249
+ const result = await dataSource.query(`
250
+ SELECT view_definition as definition
251
+ FROM information_schema.views
252
+ WHERE table_name = $1
253
+ AND table_schema NOT IN ('information_schema', 'pg_catalog')
254
254
  `, [viewName]);
255
255
  return result[0]?.definition || '';
256
256
  }
@@ -258,16 +258,16 @@ class PostgreSQLService extends base_service_1.BaseDatabaseService {
258
258
  * 获取PostgreSQL存储过程列表
259
259
  */
260
260
  async getProcedures(dataSource, database) {
261
- const result = await dataSource.query(`
262
- SELECT
263
- routine_name as name,
264
- '' as comment,
265
- routine_type as type,
266
- COALESCE(data_type, '') as returnType,
267
- external_language as language
268
- FROM information_schema.routines
269
- WHERE routine_schema NOT IN ('information_schema', 'pg_catalog')
270
- ORDER BY routine_name
261
+ const result = await dataSource.query(`
262
+ SELECT
263
+ routine_name as name,
264
+ '' as comment,
265
+ routine_type as type,
266
+ COALESCE(data_type, '') as returnType,
267
+ external_language as language
268
+ FROM information_schema.routines
269
+ WHERE routine_schema NOT IN ('information_schema', 'pg_catalog')
270
+ ORDER BY routine_name
271
271
  `);
272
272
  return result.map((row) => ({
273
273
  name: row.name,
@@ -281,11 +281,11 @@ class PostgreSQLService extends base_service_1.BaseDatabaseService {
281
281
  * 获取PostgreSQL存储过程定义
282
282
  */
283
283
  async getProcedureDefinition(dataSource, database, procedureName) {
284
- const result = await dataSource.query(`
285
- SELECT routine_definition as definition
286
- FROM information_schema.routines
287
- WHERE routine_name = $1
288
- AND routine_schema NOT IN ('information_schema', 'pg_catalog')
284
+ const result = await dataSource.query(`
285
+ SELECT routine_definition as definition
286
+ FROM information_schema.routines
287
+ WHERE routine_name = $1
288
+ AND routine_schema NOT IN ('information_schema', 'pg_catalog')
289
289
  `, [procedureName]);
290
290
  return result[0]?.definition || '';
291
291
  }
@@ -56,13 +56,13 @@ class SQLiteService extends base_service_1.BaseDatabaseService {
56
56
  * 获取SQLite表列表
57
57
  */
58
58
  async getTables(dataSource, database) {
59
- const result = await dataSource.query(`
60
- SELECT
61
- tbl_name as name,
62
- 'table' as type,
63
- sql as definition
64
- FROM sqlite_master
65
- WHERE type = 'table' AND tbl_name NOT LIKE 'sqlite_%'
59
+ const result = await dataSource.query(`
60
+ SELECT
61
+ tbl_name as name,
62
+ 'table' as type,
63
+ sql as definition
64
+ FROM sqlite_master
65
+ WHERE type = 'table' AND tbl_name NOT LIKE 'sqlite_%'
66
66
  `);
67
67
  return result.map((row) => ({
68
68
  name: row.name,
@@ -128,13 +128,13 @@ class SQLiteService extends base_service_1.BaseDatabaseService {
128
128
  * 获取SQLite视图列表
129
129
  */
130
130
  async getViews(dataSource, database) {
131
- const result = await dataSource.query(`
132
- SELECT
133
- name,
134
- sql as definition
135
- FROM sqlite_master
136
- WHERE type = 'view' AND name NOT LIKE 'sqlite_%'
137
- ORDER BY name
131
+ const result = await dataSource.query(`
132
+ SELECT
133
+ name,
134
+ sql as definition
135
+ FROM sqlite_master
136
+ WHERE type = 'view' AND name NOT LIKE 'sqlite_%'
137
+ ORDER BY name
138
138
  `);
139
139
  return result.map((row) => ({
140
140
  name: row.name,
@@ -147,10 +147,10 @@ class SQLiteService extends base_service_1.BaseDatabaseService {
147
147
  * 获取SQLite视图定义
148
148
  */
149
149
  async getViewDefinition(dataSource, database, viewName) {
150
- const result = await dataSource.query(`
151
- SELECT sql as definition
152
- FROM sqlite_master
153
- WHERE type = 'view' AND name = $1
150
+ const result = await dataSource.query(`
151
+ SELECT sql as definition
152
+ FROM sqlite_master
153
+ WHERE type = 'view' AND name = $1
154
154
  `, [viewName]);
155
155
  return result[0]?.definition || '';
156
156
  }
@@ -125,38 +125,38 @@ class WebViewProvider {
125
125
  const styleUri = webview.asWebviewUri(vscode.Uri.file(stylePath));
126
126
  // 获取数据库类型列表
127
127
  const databaseTypes = this.getDatabaseTypes();
128
- return `<!DOCTYPE html>
129
- <html lang="zh-CN">
130
- <head>
131
- <meta charset="UTF-8">
132
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
133
- <title>Database Tool</title>
134
- <link rel="stylesheet" href="${styleUri}">
135
- <style>
136
- body {
137
- margin: 0;
138
- padding: 0;
139
- font-family: var(--vscode-font-family);
140
- color: var(--vscode-foreground);
141
- background-color: var(--vscode-editor-background);
142
- }
143
- #app {
144
- height: 100vh;
145
- overflow: auto;
146
- }
147
- </style>
148
- </head>
149
- <body>
150
- <div id="app"></div>
151
- <script>
152
- // VSCode API
153
- const vscode = acquireVsCodeApi();
154
-
155
- // 数据库类型配置
156
- window.DATABASE_TYPES = ${JSON.stringify(databaseTypes)};
157
- </script>
158
- <script src="${scriptUri}"></script>
159
- </body>
128
+ return `<!DOCTYPE html>
129
+ <html lang="zh-CN">
130
+ <head>
131
+ <meta charset="UTF-8">
132
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
133
+ <title>Database Tool</title>
134
+ <link rel="stylesheet" href="${styleUri}">
135
+ <style>
136
+ body {
137
+ margin: 0;
138
+ padding: 0;
139
+ font-family: var(--vscode-font-family);
140
+ color: var(--vscode-foreground);
141
+ background-color: var(--vscode-editor-background);
142
+ }
143
+ #app {
144
+ height: 100vh;
145
+ overflow: auto;
146
+ }
147
+ </style>
148
+ </head>
149
+ <body>
150
+ <div id="app"></div>
151
+ <script>
152
+ // VSCode API
153
+ const vscode = acquireVsCodeApi();
154
+
155
+ // 数据库类型配置
156
+ window.DATABASE_TYPES = ${JSON.stringify(databaseTypes)};
157
+ </script>
158
+ <script src="${scriptUri}"></script>
159
+ </body>
160
160
  </html>`;
161
161
  }
162
162
  /**
@@ -1,142 +1,142 @@
1
- {
2
- "name": "fdb2-vscode",
3
- "displayName": "fdb2 - Database Tool",
4
- "description": "强大的数据库管理工具,支持多种数据库类型",
5
- "version": "1.0.0",
6
- "publisher": "fdb2",
7
- "private": true,
8
- "type": "commonjs",
9
- "engines": {
10
- "vscode": "^1.75.0"
11
- },
12
- "categories": [
13
- "Other",
14
- "Data Science"
15
- ],
16
- "activationEvents": [
17
- "onView:databaseExplorer",
18
- "onCommand:fdb2.openQueryPanel"
19
- ],
20
- "main": "./out/extension.js",
21
- "contributes": {
22
- "viewsContainers": {
23
- "activitybar": [
24
- {
25
- "id": "fdb2",
26
- "title": "Database Tool",
27
- "icon": "resources/icon.svg"
28
- }
29
- ]
30
- },
31
- "views": {
32
- "fdb2": [
33
- {
34
- "id": "databaseExplorer",
35
- "name": "数据库连接"
36
- }
37
- ]
38
- },
39
- "commands": [
40
- {
41
- "command": "fdb2.addConnection",
42
- "title": "添加连接",
43
- "icon": "$(add)"
44
- },
45
- {
46
- "command": "fdb2.refreshConnections",
47
- "title": "刷新",
48
- "icon": "$(refresh)"
49
- },
50
- {
51
- "command": "fdb2.openQueryPanel",
52
- "title": "打开查询面板",
53
- "icon": "$(terminal)"
54
- },
55
- {
56
- "command": "fdb2.openDatabasePanel",
57
- "title": "打开数据库管理",
58
- "icon": "$(database)"
59
- },
60
- {
61
- "command": "fdb2.deleteConnection",
62
- "title": "删除连接",
63
- "icon": "$(trash)"
64
- },
65
- {
66
- "command": "fdb2.editConnection",
67
- "title": "编辑连接",
68
- "icon": "$(edit)"
69
- }
70
- ],
71
- "menus": {
72
- "view/title": [
73
- {
74
- "command": "fdb2.addConnection",
75
- "when": "view == databaseExplorer",
76
- "group": "navigation"
77
- },
78
- {
79
- "command": "fdb2.refreshConnections",
80
- "when": "view == databaseExplorer",
81
- "group": "navigation"
82
- }
83
- ],
84
- "view/item/context": [
85
- {
86
- "command": "fdb2.deleteConnection",
87
- "when": "view == databaseExplorer && viewItem == connection",
88
- "group": "edit"
89
- },
90
- {
91
- "command": "fdb2.editConnection",
92
- "when": "view == databaseExplorer && viewItem == connection",
93
- "group": "edit"
94
- }
95
- ]
96
- },
97
- "configuration": {
98
- "title": "fdb2",
99
- "properties": {
100
- "fdb2.defaultPort": {
101
- "type": "number",
102
- "default": 3306,
103
- "description": "默认数据库端口"
104
- },
105
- "fdb2.queryLimit": {
106
- "type": "number",
107
- "default": 100,
108
- "description": "查询结果限制"
109
- },
110
- "fdb2.autoReconnect": {
111
- "type": "boolean",
112
- "default": true,
113
- "description": "自动重连"
114
- }
115
- }
116
- }
117
- },
118
- "scripts": {
119
- "vscode:prepublish": "npm run compile",
120
- "compile": "tsc -p ./",
121
- "watch": "tsc -watch -p ./",
122
- "pretest": "npm run compile && npm run lint",
123
- "lint": "eslint src --ext ts",
124
- "test": "vscode-test"
125
- },
126
- "devDependencies": {
127
- "@types/node": "^18.0.0",
128
- "@types/vscode": "^1.75.0",
129
- "@typescript-eslint/eslint-plugin": "^6.0.0",
130
- "@typescript-eslint/parser": "^6.0.0",
131
- "eslint": "^8.45.0",
132
- "typescript": "^5.0.0",
133
- "@vscode/test-electron": "^2.3.0"
134
- },
135
- "dependencies": {
136
- "mysql2": "^3.16.3",
137
- "pg": "^8.18.0",
138
- "sqlite3": "^5.1.7",
139
- "typeorm": "^0.3.28",
140
- "oracledb": "^6.10.0"
141
- }
142
- }
1
+ {
2
+ "name": "fdb2-vscode",
3
+ "displayName": "fdb2 - Database Tool",
4
+ "description": "强大的数据库管理工具,支持多种数据库类型",
5
+ "version": "1.0.0",
6
+ "publisher": "fdb2",
7
+ "private": true,
8
+ "type": "commonjs",
9
+ "engines": {
10
+ "vscode": "^1.75.0"
11
+ },
12
+ "categories": [
13
+ "Other",
14
+ "Data Science"
15
+ ],
16
+ "activationEvents": [
17
+ "onView:databaseExplorer",
18
+ "onCommand:fdb2.openQueryPanel"
19
+ ],
20
+ "main": "./out/extension.js",
21
+ "contributes": {
22
+ "viewsContainers": {
23
+ "activitybar": [
24
+ {
25
+ "id": "fdb2",
26
+ "title": "Database Tool",
27
+ "icon": "resources/icon.svg"
28
+ }
29
+ ]
30
+ },
31
+ "views": {
32
+ "fdb2": [
33
+ {
34
+ "id": "databaseExplorer",
35
+ "name": "数据库连接"
36
+ }
37
+ ]
38
+ },
39
+ "commands": [
40
+ {
41
+ "command": "fdb2.addConnection",
42
+ "title": "添加连接",
43
+ "icon": "$(add)"
44
+ },
45
+ {
46
+ "command": "fdb2.refreshConnections",
47
+ "title": "刷新",
48
+ "icon": "$(refresh)"
49
+ },
50
+ {
51
+ "command": "fdb2.openQueryPanel",
52
+ "title": "打开查询面板",
53
+ "icon": "$(terminal)"
54
+ },
55
+ {
56
+ "command": "fdb2.openDatabasePanel",
57
+ "title": "打开数据库管理",
58
+ "icon": "$(database)"
59
+ },
60
+ {
61
+ "command": "fdb2.deleteConnection",
62
+ "title": "删除连接",
63
+ "icon": "$(trash)"
64
+ },
65
+ {
66
+ "command": "fdb2.editConnection",
67
+ "title": "编辑连接",
68
+ "icon": "$(edit)"
69
+ }
70
+ ],
71
+ "menus": {
72
+ "view/title": [
73
+ {
74
+ "command": "fdb2.addConnection",
75
+ "when": "view == databaseExplorer",
76
+ "group": "navigation"
77
+ },
78
+ {
79
+ "command": "fdb2.refreshConnections",
80
+ "when": "view == databaseExplorer",
81
+ "group": "navigation"
82
+ }
83
+ ],
84
+ "view/item/context": [
85
+ {
86
+ "command": "fdb2.deleteConnection",
87
+ "when": "view == databaseExplorer && viewItem == connection",
88
+ "group": "edit"
89
+ },
90
+ {
91
+ "command": "fdb2.editConnection",
92
+ "when": "view == databaseExplorer && viewItem == connection",
93
+ "group": "edit"
94
+ }
95
+ ]
96
+ },
97
+ "configuration": {
98
+ "title": "fdb2",
99
+ "properties": {
100
+ "fdb2.defaultPort": {
101
+ "type": "number",
102
+ "default": 3306,
103
+ "description": "默认数据库端口"
104
+ },
105
+ "fdb2.queryLimit": {
106
+ "type": "number",
107
+ "default": 100,
108
+ "description": "查询结果限制"
109
+ },
110
+ "fdb2.autoReconnect": {
111
+ "type": "boolean",
112
+ "default": true,
113
+ "description": "自动重连"
114
+ }
115
+ }
116
+ }
117
+ },
118
+ "scripts": {
119
+ "vscode:prepublish": "npm run compile",
120
+ "compile": "tsc -p ./",
121
+ "watch": "tsc -watch -p ./",
122
+ "pretest": "npm run compile && npm run lint",
123
+ "lint": "eslint src --ext ts",
124
+ "test": "vscode-test"
125
+ },
126
+ "devDependencies": {
127
+ "@types/node": "^18.0.0",
128
+ "@types/vscode": "^1.75.0",
129
+ "@typescript-eslint/eslint-plugin": "^6.0.0",
130
+ "@typescript-eslint/parser": "^6.0.0",
131
+ "eslint": "^8.45.0",
132
+ "typescript": "^5.0.0",
133
+ "@vscode/test-electron": "^2.3.0"
134
+ },
135
+ "dependencies": {
136
+ "mysql2": "^3.16.3",
137
+ "pg": "^8.18.0",
138
+ "sqlite3": "^5.1.7",
139
+ "typeorm": "^0.3.28",
140
+ "oracledb": "^6.10.0"
141
+ }
142
+ }