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.
- package/.dockerignore +21 -21
- package/.editorconfig +11 -11
- package/.eslintrc.cjs +14 -14
- package/.eslintrc.json +7 -7
- package/.prettierrc.js +3 -3
- package/.tpl.env +21 -21
- package/.vscodeignore +45 -45
- package/README.md +312 -312
- package/bin/build.sh +28 -28
- package/bin/deploy.sh +8 -8
- package/bin/dev.sh +10 -10
- package/bin/docker/dev-docker-compose.yml +43 -43
- package/bin/docker/dev.Dockerfile +24 -24
- package/bin/docker/prod-docker-compose.yml +17 -17
- package/bin/docker/prod.Dockerfile +29 -29
- package/bin/fdb2.js +220 -220
- package/dist/package.json +29 -29
- package/dist/pnpm-lock.yaml +1042 -354
- package/dist/public/explorer.css +1464 -1437
- package/dist/public/explorer.js +759 -223
- package/dist/public/index.css +1026 -1026
- package/dist/public/index.js +15 -9
- package/dist/public/layout.css +221 -221
- package/dist/public/layout.js +1 -1
- package/dist/public/vue.js +8 -2
- package/dist/scripts/preinstall.js +112 -112
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +8 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.ts +680 -671
- package/dist/server/model/connection.entity.ts +65 -65
- package/dist/server/model/database.entity.ts +245 -245
- package/dist/server/service/connection.service.d.ts +6 -1
- package/dist/server/service/connection.service.d.ts.map +1 -1
- package/dist/server/service/connection.service.js +15 -0
- package/dist/server/service/connection.service.js.map +1 -1
- package/dist/server/service/connection.service.ts +356 -341
- package/dist/server/service/database/base.service.d.ts +27 -0
- package/dist/server/service/database/base.service.d.ts.map +1 -1
- package/dist/server/service/database/base.service.js +17 -0
- package/dist/server/service/database/base.service.js.map +1 -1
- package/dist/server/service/database/base.service.ts +406 -367
- package/dist/server/service/database/cockroachdb.service.d.ts +16 -0
- package/dist/server/service/database/cockroachdb.service.d.ts.map +1 -1
- package/dist/server/service/database/cockroachdb.service.js +220 -154
- package/dist/server/service/database/cockroachdb.service.js.map +1 -1
- package/dist/server/service/database/cockroachdb.service.ts +871 -782
- package/dist/server/service/database/database.service.d.ts +4 -0
- package/dist/server/service/database/database.service.d.ts.map +1 -1
- package/dist/server/service/database/database.service.js +123 -0
- package/dist/server/service/database/database.service.js.map +1 -1
- package/dist/server/service/database/database.service.ts +775 -638
- package/dist/server/service/database/index.ts +6 -6
- package/dist/server/service/database/mongodb.service.d.ts +16 -0
- package/dist/server/service/database/mongodb.service.d.ts.map +1 -1
- package/dist/server/service/database/mongodb.service.js +35 -0
- package/dist/server/service/database/mongodb.service.js.map +1 -1
- package/dist/server/service/database/mongodb.service.ts +39 -1
- package/dist/server/service/database/mssql.service.d.ts +16 -0
- package/dist/server/service/database/mssql.service.d.ts.map +1 -1
- package/dist/server/service/database/mssql.service.js +168 -96
- package/dist/server/service/database/mssql.service.js.map +1 -1
- package/dist/server/service/database/mssql.service.ts +931 -840
- package/dist/server/service/database/mysql.service.d.ts +16 -0
- package/dist/server/service/database/mysql.service.d.ts.map +1 -1
- package/dist/server/service/database/mysql.service.js +189 -80
- package/dist/server/service/database/mysql.service.js.map +1 -1
- package/dist/server/service/database/mysql.service.ts +1025 -890
- package/dist/server/service/database/oracle.service.d.ts +16 -0
- package/dist/server/service/database/oracle.service.d.ts.map +1 -1
- package/dist/server/service/database/oracle.service.js +182 -120
- package/dist/server/service/database/oracle.service.js.map +1 -1
- package/dist/server/service/database/oracle.service.ts +1035 -959
- package/dist/server/service/database/postgres.service.d.ts +16 -0
- package/dist/server/service/database/postgres.service.d.ts.map +1 -1
- package/dist/server/service/database/postgres.service.js +154 -88
- package/dist/server/service/database/postgres.service.js.map +1 -1
- package/dist/server/service/database/postgres.service.ts +960 -871
- package/dist/server/service/database/sap.service.d.ts +16 -0
- package/dist/server/service/database/sap.service.d.ts.map +1 -1
- package/dist/server/service/database/sap.service.js +66 -0
- package/dist/server/service/database/sap.service.js.map +1 -1
- package/dist/server/service/database/sap.service.ts +89 -0
- package/dist/server/service/database/sqlite.service.d.ts +16 -0
- package/dist/server/service/database/sqlite.service.d.ts.map +1 -1
- package/dist/server/service/database/sqlite.service.js +77 -18
- package/dist/server/service/database/sqlite.service.js.map +1 -1
- package/dist/server/service/database/sqlite.service.ts +787 -708
- package/dist/server/service/session.service.ts +158 -158
- package/dist/view/index.html +38 -38
- package/env.d.ts +1 -1
- package/package.json +1 -1
- package/packages/vscode/.vscodeignore +44 -44
- package/packages/vscode/README.md +62 -62
- package/packages/vscode/out/database-services/cockroachdb.service.js +154 -154
- package/packages/vscode/out/database-services/mssql.service.js +96 -96
- package/packages/vscode/out/database-services/mysql.service.js +80 -80
- package/packages/vscode/out/database-services/oracle.service.js +120 -120
- package/packages/vscode/out/database-services/postgres.service.js +88 -88
- package/packages/vscode/out/database-services/sqlite.service.js +18 -18
- package/packages/vscode/out/provider/WebViewProvider.js +32 -32
- package/packages/vscode/package.json +142 -142
- package/packages/vscode/resources/icon.svg +5 -5
- package/packages/vscode/resources/webview/connection.css +41 -41
- package/packages/vscode/resources/webview/database.css +163 -163
- package/packages/vscode/resources/webview/index.html +9 -9
- package/packages/vscode/resources/webview/modules/header.tpl +13 -13
- package/packages/vscode/resources/webview/modules/initial_state.tpl +54 -54
- package/packages/vscode/resources/webview/query.css +104 -104
- package/packages/vscode/src/database-services/base.service.ts +362 -362
- package/packages/vscode/src/database-services/cockroachdb.service.ts +659 -659
- package/packages/vscode/src/database-services/connection.service.ts +340 -340
- package/packages/vscode/src/database-services/database.service.ts +629 -629
- package/packages/vscode/src/database-services/index.ts +6 -6
- package/packages/vscode/src/database-services/model/connection.entity.ts +65 -65
- package/packages/vscode/src/database-services/model/database.entity.ts +245 -245
- package/packages/vscode/src/database-services/mssql.service.ts +722 -722
- package/packages/vscode/src/database-services/mysql.service.ts +760 -760
- package/packages/vscode/src/database-services/oracle.service.ts +831 -831
- package/packages/vscode/src/database-services/postgres.service.ts +740 -740
- package/packages/vscode/src/database-services/sqlite.service.ts +558 -558
- package/packages/vscode/src/extension.ts +76 -76
- package/packages/vscode/src/provider/DatabaseTreeProvider.ts +167 -167
- package/packages/vscode/src/provider/WebViewProvider.ts +277 -277
- package/packages/vscode/src/service/DatabaseServiceBridge.ts +414 -414
- package/packages/vscode/src/typings/connection.ts +90 -90
- package/packages/vscode/tsconfig.json +21 -21
- package/public/index.html +9 -9
- package/public/modules/header.tpl +13 -13
- package/public/modules/initial_state.tpl +54 -54
- package/scripts/preinstall.js +112 -112
- package/server/index.ts +680 -671
- package/server/model/connection.entity.ts +65 -65
- package/server/model/database.entity.ts +245 -245
- package/server/service/connection.service.ts +356 -341
- package/server/service/database/base.service.ts +406 -367
- package/server/service/database/cockroachdb.service.ts +871 -782
- package/server/service/database/database.service.ts +775 -638
- package/server/service/database/index.ts +6 -6
- package/server/service/database/mongodb.service.ts +39 -1
- package/server/service/database/mssql.service.ts +931 -840
- package/server/service/database/mysql.service.ts +1025 -890
- package/server/service/database/oracle.service.ts +1035 -959
- package/server/service/database/postgres.service.ts +960 -871
- package/server/service/database/sap.service.ts +89 -0
- package/server/service/database/sqlite.service.ts +787 -708
- package/server/service/session.service.ts +158 -158
- package/server/tsconfig.json +20 -20
- package/server.js +149 -149
- package/server.pid +1 -0
- package/src/adapter/ajax.ts +135 -135
- package/src/assets/base.css +1 -1
- package/src/assets/database.css +949 -949
- package/src/assets/images/svg/illustrations/illustration-1.svg +1 -1
- package/src/assets/images/svg/illustrations/illustration-2.svg +2 -2
- package/src/assets/images/svg/illustrations/illustration-3.svg +50 -50
- package/src/assets/images/svg/illustrations/illustration-4.svg +1 -1
- package/src/assets/images/svg/illustrations/illustration-5.svg +73 -73
- package/src/assets/images/svg/illustrations/illustration-6.svg +89 -89
- package/src/assets/images/svg/illustrations/illustration-7.svg +39 -39
- package/src/assets/images/svg/separators/curve-2.svg +3 -3
- package/src/assets/images/svg/separators/curve.svg +3 -3
- package/src/assets/images/svg/separators/line.svg +3 -3
- package/src/assets/logo.svg +73 -73
- package/src/assets/main.css +1 -1
- package/src/base/config.ts +20 -20
- package/src/base/detect.ts +134 -134
- package/src/base/entity.ts +92 -92
- package/src/base/eventBus.ts +36 -36
- package/src/components/connection-editor/index.vue +588 -588
- package/src/components/dataGrid/index.vue +104 -104
- package/src/components/dataGrid/pagination.vue +105 -105
- package/src/components/loading/index.vue +42 -42
- package/src/components/modal/index.ts +180 -180
- package/src/components/modal/index.vue +560 -560
- package/src/components/toast/index.ts +43 -43
- package/src/components/toast/toast.vue +57 -57
- package/src/components/user/name.vue +103 -103
- package/src/components/user/selector.vue +416 -416
- package/src/domain/SysConfig.ts +74 -74
- package/src/platform/App.vue +7 -7
- package/src/platform/database/components/connection-detail.vue +1153 -1154
- package/src/platform/database/components/data-editor.vue +477 -477
- package/src/platform/database/components/database-detail.vue +1173 -1172
- package/src/platform/database/components/database-monitor.vue +1085 -1085
- package/src/platform/database/components/db-tools.vue +1264 -816
- package/src/platform/database/components/query-history.vue +1348 -1348
- package/src/platform/database/components/sql-executor.vue +737 -737
- package/src/platform/database/components/sql-query-editor.vue +1045 -1045
- package/src/platform/database/components/table-detail.vue +1375 -1376
- package/src/platform/database/components/table-editor.vue +916 -916
- package/src/platform/database/explorer.vue +1839 -1839
- package/src/platform/database/index.vue +1192 -1192
- package/src/platform/database/layout.vue +366 -366
- package/src/platform/database/router.ts +36 -36
- package/src/platform/database/styles/common.scss +601 -601
- package/src/platform/database/types/common.ts +444 -444
- package/src/platform/database/utils/export.ts +231 -231
- package/src/platform/database/utils/helpers.ts +436 -436
- package/src/platform/index.ts +32 -32
- package/src/platform/router.ts +40 -40
- package/src/platform/vscode/bridge.ts +121 -121
- package/src/platform/vscode/components/ConnectionPanel.vue +272 -272
- package/src/platform/vscode/components/DatabasePanel.vue +532 -532
- package/src/platform/vscode/components/QueryPanel.vue +371 -371
- package/src/platform/vscode/entry/connection.ts +13 -13
- package/src/platform/vscode/entry/database.ts +13 -13
- package/src/platform/vscode/entry/query.ts +13 -13
- package/src/platform/vscode/index.ts +5 -5
- package/src/service/base.ts +133 -127
- package/src/service/database.ts +505 -495
- package/src/service/login.ts +120 -120
- package/src/shims-vue.d.ts +6 -6
- package/src/stores/connection.ts +266 -266
- package/src/stores/session.ts +87 -87
- package/src/typings/database-types.ts +412 -412
- package/src/typings/database.ts +363 -363
- package/src/typings/global.d.ts +58 -58
- package/src/typings/pinia.d.ts +7 -7
- package/src/utils/clipboard.ts +29 -29
- package/src/utils/database-types.ts +242 -242
- package/src/utils/modal.ts +123 -123
- package/src/utils/request.ts +55 -55
- package/src/utils/sleep.ts +3 -3
- package/src/utils/toast.ts +73 -73
- package/src/utils/util.ts +171 -171
- package/src/utils/xlsx.ts +228 -228
- package/tsconfig.json +33 -33
- package/view/index.html +9 -9
- package/view/modules/header.tpl +13 -13
- package/view/modules/initial_state.tpl +19 -19
- package/vite.config.ts +424 -424
- package/vite.config.vscode.ts +47 -47
- package/fdb2.server.pid +0 -1
- 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
|
+
}
|