fdb2 1.0.5 → 1.0.7

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 (195) hide show
  1. package/.vscodeignore +45 -0
  2. package/README.md +24 -85
  3. package/bin/fdb2.js +3 -3
  4. package/dist/package.json +115 -0
  5. package/dist/pnpm-lock.yaml +7447 -0
  6. package/dist/public/explorer.css +244 -111
  7. package/dist/public/explorer.js +518 -275
  8. package/dist/scripts/preinstall.js +112 -0
  9. package/dist/server/index.d.ts.map +1 -1
  10. package/dist/server/index.js +4 -9
  11. package/dist/server/index.js.map +1 -1
  12. package/dist/server/index.ts +5 -10
  13. package/dist/server/service/connection.service.d.ts.map +1 -1
  14. package/dist/server/service/connection.service.js +2 -1
  15. package/dist/server/service/connection.service.js.map +1 -1
  16. package/dist/server/service/connection.service.ts +2 -1
  17. package/dist/server/service/database/base.service.d.ts +4 -0
  18. package/dist/server/service/database/base.service.d.ts.map +1 -1
  19. package/dist/server/service/database/base.service.js +3 -3
  20. package/dist/server/service/database/base.service.js.map +1 -1
  21. package/dist/server/service/database/base.service.ts +8 -3
  22. package/dist/server/service/database/cockroachdb.service.d.ts +5 -0
  23. package/dist/server/service/database/cockroachdb.service.d.ts.map +1 -1
  24. package/dist/server/service/database/cockroachdb.service.js +112 -0
  25. package/dist/server/service/database/cockroachdb.service.js.map +1 -1
  26. package/dist/server/service/database/cockroachdb.service.ts +123 -0
  27. package/dist/server/service/database/database.service.d.ts +4 -0
  28. package/dist/server/service/database/database.service.d.ts.map +1 -1
  29. package/dist/server/service/database/database.service.js +8 -0
  30. package/dist/server/service/database/database.service.js.map +1 -1
  31. package/dist/server/service/database/database.service.ts +9 -0
  32. package/dist/server/service/database/mongodb.service.d.ts +6 -0
  33. package/dist/server/service/database/mongodb.service.d.ts.map +1 -1
  34. package/dist/server/service/database/mongodb.service.js +8 -0
  35. package/dist/server/service/database/mongodb.service.js.map +1 -1
  36. package/dist/server/service/database/mongodb.service.ts +9 -0
  37. package/dist/server/service/database/mssql.service.d.ts +4 -0
  38. package/dist/server/service/database/mssql.service.d.ts.map +1 -1
  39. package/dist/server/service/database/mssql.service.js +105 -0
  40. package/dist/server/service/database/mssql.service.js.map +1 -1
  41. package/dist/server/service/database/mssql.service.ts +118 -0
  42. package/dist/server/service/database/mysql.service.d.ts +4 -0
  43. package/dist/server/service/database/mysql.service.d.ts.map +1 -1
  44. package/dist/server/service/database/mysql.service.js +116 -0
  45. package/dist/server/service/database/mysql.service.js.map +1 -1
  46. package/dist/server/service/database/mysql.service.ts +130 -0
  47. package/dist/server/service/database/oracle.service.d.ts +4 -0
  48. package/dist/server/service/database/oracle.service.d.ts.map +1 -1
  49. package/dist/server/service/database/oracle.service.js +114 -0
  50. package/dist/server/service/database/oracle.service.js.map +1 -1
  51. package/dist/server/service/database/oracle.service.ts +128 -0
  52. package/dist/server/service/database/postgres.service.d.ts +4 -0
  53. package/dist/server/service/database/postgres.service.d.ts.map +1 -1
  54. package/dist/server/service/database/postgres.service.js +120 -0
  55. package/dist/server/service/database/postgres.service.js.map +1 -1
  56. package/dist/server/service/database/postgres.service.ts +131 -0
  57. package/dist/server/service/database/sap.service.d.ts +4 -0
  58. package/dist/server/service/database/sap.service.d.ts.map +1 -1
  59. package/dist/server/service/database/sap.service.js +107 -0
  60. package/dist/server/service/database/sap.service.js.map +1 -1
  61. package/dist/server/service/database/sap.service.ts +120 -0
  62. package/dist/server/service/database/sqlite.service.d.ts +5 -0
  63. package/dist/server/service/database/sqlite.service.d.ts.map +1 -1
  64. package/dist/server/service/database/sqlite.service.js +133 -0
  65. package/dist/server/service/database/sqlite.service.js.map +1 -1
  66. package/dist/server/service/database/sqlite.service.ts +150 -0
  67. package/package.json +18 -9
  68. package/packages/vscode/.vscodeignore +44 -0
  69. package/packages/vscode/README.md +62 -0
  70. package/packages/vscode/out/database-services/base.service.js +236 -0
  71. package/packages/vscode/out/database-services/base.service.js.map +1 -0
  72. package/packages/vscode/out/database-services/cockroachdb.service.js +634 -0
  73. package/packages/vscode/out/database-services/cockroachdb.service.js.map +1 -0
  74. package/packages/vscode/out/database-services/connection.service.js +346 -0
  75. package/packages/vscode/out/database-services/connection.service.js.map +1 -0
  76. package/packages/vscode/out/database-services/database.service.js +571 -0
  77. package/packages/vscode/out/database-services/database.service.js.map +1 -0
  78. package/packages/vscode/out/database-services/index.js +18 -0
  79. package/packages/vscode/out/database-services/index.js.map +1 -0
  80. package/packages/vscode/out/database-services/model/connection.entity.js +11 -0
  81. package/packages/vscode/out/database-services/model/connection.entity.js.map +1 -0
  82. package/packages/vscode/out/database-services/model/database.entity.js +35 -0
  83. package/packages/vscode/out/database-services/model/database.entity.js.map +1 -0
  84. package/packages/vscode/out/database-services/mongodb.service.js +458 -0
  85. package/packages/vscode/out/database-services/mongodb.service.js.map +1 -0
  86. package/packages/vscode/out/database-services/mssql.service.js +694 -0
  87. package/packages/vscode/out/database-services/mssql.service.js.map +1 -0
  88. package/packages/vscode/out/database-services/mysql.service.js +735 -0
  89. package/packages/vscode/out/database-services/mysql.service.js.map +1 -0
  90. package/packages/vscode/out/database-services/oracle.service.js +787 -0
  91. package/packages/vscode/out/database-services/oracle.service.js.map +1 -0
  92. package/packages/vscode/out/database-services/postgres.service.js +696 -0
  93. package/packages/vscode/out/database-services/postgres.service.js.map +1 -0
  94. package/packages/vscode/out/database-services/sap.service.js +695 -0
  95. package/packages/vscode/out/database-services/sap.service.js.map +1 -0
  96. package/packages/vscode/out/database-services/sqlite.service.js +532 -0
  97. package/packages/vscode/out/database-services/sqlite.service.js.map +1 -0
  98. package/packages/vscode/out/extension.js +93 -0
  99. package/packages/vscode/out/extension.js.map +1 -0
  100. package/packages/vscode/out/provider/DatabaseTreeProvider.js +159 -0
  101. package/packages/vscode/out/provider/DatabaseTreeProvider.js.map +1 -0
  102. package/packages/vscode/out/provider/WebViewProvider.js +259 -0
  103. package/packages/vscode/out/provider/WebViewProvider.js.map +1 -0
  104. package/packages/vscode/out/service/ConnectionManager.js +105 -0
  105. package/packages/vscode/out/service/ConnectionManager.js.map +1 -0
  106. package/packages/vscode/out/service/DatabaseServiceBridge.js +395 -0
  107. package/packages/vscode/out/service/DatabaseServiceBridge.js.map +1 -0
  108. package/packages/vscode/out/typings/connection.js +3 -0
  109. package/packages/vscode/out/typings/connection.js.map +1 -0
  110. package/packages/vscode/package.json +142 -0
  111. package/packages/vscode/resources/icon.svg +5 -0
  112. package/packages/vscode/resources/webview/_plugin-vue_export-helper.js +6529 -0
  113. package/packages/vscode/resources/webview/_plugin-vue_export-helper.js.map +1 -0
  114. package/packages/vscode/resources/webview/connection.css +69 -0
  115. package/packages/vscode/resources/webview/connection.js +228 -0
  116. package/packages/vscode/resources/webview/connection.js.map +1 -0
  117. package/packages/vscode/resources/webview/database.css +259 -0
  118. package/packages/vscode/resources/webview/database.js +275 -0
  119. package/packages/vscode/resources/webview/database.js.map +1 -0
  120. package/packages/vscode/resources/webview/favicon.ico +0 -0
  121. package/packages/vscode/resources/webview/index.html +9 -0
  122. package/packages/vscode/resources/webview/modules/header.tpl +14 -0
  123. package/packages/vscode/resources/webview/modules/initial_state.tpl +55 -0
  124. package/packages/vscode/resources/webview/query.css +162 -0
  125. package/packages/vscode/resources/webview/query.js +198 -0
  126. package/packages/vscode/resources/webview/query.js.map +1 -0
  127. package/packages/vscode/src/database-services/base.service.js.map +1 -0
  128. package/packages/vscode/src/database-services/base.service.ts +363 -0
  129. package/packages/vscode/src/database-services/cockroachdb.service.js.map +1 -0
  130. package/packages/vscode/src/database-services/cockroachdb.service.ts +659 -0
  131. package/packages/vscode/src/database-services/connection.service.ts +341 -0
  132. package/packages/vscode/src/database-services/database.service.ts +630 -0
  133. package/packages/vscode/src/database-services/index.ts +7 -0
  134. package/packages/vscode/src/database-services/model/connection.entity.js +11 -0
  135. package/packages/vscode/src/database-services/model/connection.entity.js.map +1 -0
  136. package/packages/vscode/src/database-services/model/connection.entity.ts +66 -0
  137. package/packages/vscode/src/database-services/model/database.entity.js +35 -0
  138. package/packages/vscode/src/database-services/model/database.entity.js.map +1 -0
  139. package/packages/vscode/src/database-services/model/database.entity.ts +246 -0
  140. package/packages/vscode/src/database-services/mongodb.service.js.map +1 -0
  141. package/packages/vscode/src/database-services/mongodb.service.ts +454 -0
  142. package/packages/vscode/src/database-services/mssql.service.js.map +1 -0
  143. package/packages/vscode/src/database-services/mssql.service.ts +723 -0
  144. package/packages/vscode/src/database-services/mysql.service.js.map +1 -0
  145. package/packages/vscode/src/database-services/mysql.service.ts +761 -0
  146. package/packages/vscode/src/database-services/oracle.service.js.map +1 -0
  147. package/packages/vscode/src/database-services/oracle.service.ts +832 -0
  148. package/packages/vscode/src/database-services/postgres.service.js.map +1 -0
  149. package/packages/vscode/src/database-services/postgres.service.ts +741 -0
  150. package/packages/vscode/src/database-services/sap.service.js.map +1 -0
  151. package/packages/vscode/src/database-services/sap.service.ts +713 -0
  152. package/packages/vscode/src/database-services/sqlite.service.js.map +1 -0
  153. package/packages/vscode/src/database-services/sqlite.service.ts +559 -0
  154. package/packages/vscode/src/extension.ts +76 -0
  155. package/packages/vscode/src/provider/DatabaseTreeProvider.ts +167 -0
  156. package/packages/vscode/src/provider/WebViewProvider.ts +277 -0
  157. package/packages/vscode/src/service/DatabaseServiceBridge.ts +414 -0
  158. package/packages/vscode/src/typings/connection.ts +90 -0
  159. package/packages/vscode/tsconfig.json +21 -0
  160. package/public/fdb2.png +0 -0
  161. package/scripts/preinstall.js +90 -16
  162. package/server/backups/db_ai_breakout_2026-03-11T08-38-48-677Z.sql +0 -0
  163. package/server/index.ts +5 -10
  164. package/server/model/connection.entity.js +11 -0
  165. package/server/model/connection.entity.js.map +1 -0
  166. package/server/model/database.entity.js +35 -0
  167. package/server/model/database.entity.js.map +1 -0
  168. package/server/service/connection.service.ts +1 -0
  169. package/server/service/database/base.service.ts +8 -3
  170. package/server/service/database/cockroachdb.service.ts +123 -0
  171. package/server/service/database/database.service.ts +9 -0
  172. package/server/service/database/mongodb.service.ts +9 -0
  173. package/server/service/database/mssql.service.ts +118 -0
  174. package/server/service/database/mysql.service.ts +130 -0
  175. package/server/service/database/oracle.service.ts +128 -0
  176. package/server/service/database/postgres.service.ts +131 -0
  177. package/server/service/database/sap.service.ts +120 -0
  178. package/server/service/database/sqlite.service.ts +150 -0
  179. package/server/tsconfig.json +20 -0
  180. package/server.js +1 -1
  181. package/src/components/connection-editor/index.vue +0 -1
  182. package/src/platform/database/components/db-tools.vue +414 -174
  183. package/src/platform/database/components/table-detail.vue +1 -0
  184. package/src/platform/database/components/table-editor.vue +245 -18
  185. package/src/platform/vscode/bridge.ts +121 -0
  186. package/src/platform/vscode/components/ConnectionPanel.vue +272 -0
  187. package/src/platform/vscode/components/DatabasePanel.vue +532 -0
  188. package/src/platform/vscode/components/QueryPanel.vue +371 -0
  189. package/src/platform/vscode/entry/connection.ts +13 -0
  190. package/src/platform/vscode/entry/database.ts +13 -0
  191. package/src/platform/vscode/entry/query.ts +13 -0
  192. package/src/platform/vscode/index.ts +5 -0
  193. package/src/service/database.ts +2 -6
  194. package/vite.config.ts +46 -6
  195. package/vite.config.vscode.ts +47 -0
@@ -0,0 +1,454 @@
1
+ import { DataSource } from 'typeorm';
2
+ import { BaseDatabaseService } from './base.service';
3
+ import {
4
+ DatabaseEntity,
5
+ TableEntity,
6
+ ColumnEntity,
7
+ IndexEntity,
8
+ ForeignKeyEntity
9
+ } from './model/database.entity';
10
+ import * as fs from 'fs';
11
+ import * as path from 'path';
12
+
13
+ /**
14
+ * MongoDB数据库服务实现
15
+ * MongoDB 是一个 NoSQL 文档数据库,与关系型数据库有很大不同
16
+ */
17
+ export class MongoDBService extends BaseDatabaseService {
18
+
19
+ getDatabaseType() {
20
+ return 'mongodb';
21
+ }
22
+
23
+ /**
24
+ * 获取MongoDB数据库列表
25
+ */
26
+ async getDatabases(dataSource: DataSource): Promise<string[]> {
27
+ try {
28
+ const result = await dataSource.query(`db.adminCommand({ listDatabases: 1 })`);
29
+ return result.databases.map((db: any) => db.name).filter((name: string) => name !== 'admin' && name !== 'local' && name !== 'config');
30
+ } catch (error) {
31
+ console.error('获取MongoDB数据库列表失败:', error);
32
+ return [];
33
+ }
34
+ }
35
+
36
+ /**
37
+ * 获取MongoDB集合列表(相当于关系型数据库的表)
38
+ */
39
+ async getTables(dataSource: DataSource, database: string): Promise<TableEntity[]> {
40
+ try {
41
+ const result = await dataSource.query(`db.getCollectionNames()`);
42
+ return result.map((collectionName: string) => ({
43
+ name: collectionName,
44
+ type: 'collection',
45
+ rowCount: undefined,
46
+ dataSize: undefined,
47
+ indexSize: undefined
48
+ }));
49
+ } catch (error) {
50
+ console.error('获取MongoDB集合列表失败:', error);
51
+ return [];
52
+ }
53
+ }
54
+
55
+ /**
56
+ * 获取MongoDB集合的字段信息(文档结构)
57
+ */
58
+ async getColumns(dataSource: DataSource, database: string, table: string): Promise<ColumnEntity[]> {
59
+ try {
60
+ const result = await dataSource.query(`db.${table}.findOne()`);
61
+ if (!result) {
62
+ return [];
63
+ }
64
+
65
+ const fields = Object.keys(result);
66
+ return fields.map(field => ({
67
+ name: field,
68
+ type: this.inferType(result[field]),
69
+ nullable: true,
70
+ defaultValue: undefined,
71
+ isPrimary: field === '_id',
72
+ isAutoIncrement: field === '_id'
73
+ }));
74
+ } catch (error) {
75
+ console.error('获取MongoDB集合字段信息失败:', error);
76
+ return [];
77
+ }
78
+ }
79
+
80
+ /**
81
+ * 推断字段类型
82
+ */
83
+ private inferType(value: any): string {
84
+ if (value === null || value === undefined) {
85
+ return 'null';
86
+ }
87
+ const type = typeof value;
88
+ if (type === 'string') {
89
+ return 'string';
90
+ } else if (type === 'number') {
91
+ return Number.isInteger(value) ? 'int' : 'double';
92
+ } else if (type === 'boolean') {
93
+ return 'boolean';
94
+ } else if (type === 'object') {
95
+ if (Array.isArray(value)) {
96
+ return 'array';
97
+ } else if (value instanceof Date) {
98
+ return 'date';
99
+ } else if (value instanceof Buffer) {
100
+ return 'binData';
101
+ } else if (value instanceof ObjectId) {
102
+ return 'objectId';
103
+ } else {
104
+ return 'object';
105
+ }
106
+ }
107
+ return 'unknown';
108
+ }
109
+
110
+ /**
111
+ * 获取MongoDB索引信息
112
+ */
113
+ async getIndexes(dataSource: DataSource, database: string, table: string): Promise<IndexEntity[]> {
114
+ try {
115
+ const result = await dataSource.query(`db.${table}.getIndexes()`);
116
+ return result.map((index: any) => ({
117
+ name: index.name,
118
+ type: index.unique ? 'UNIQUE' : 'INDEX',
119
+ columns: Object.keys(index.key),
120
+ unique: index.unique || false
121
+ }));
122
+ } catch (error) {
123
+ console.error('获取MongoDB索引信息失败:', error);
124
+ return [];
125
+ }
126
+ }
127
+
128
+ /**
129
+ * MongoDB不支持外键
130
+ */
131
+ async getForeignKeys(dataSource: DataSource, database: string, table: string): Promise<ForeignKeyEntity[]> {
132
+ return [];
133
+ }
134
+
135
+ /**
136
+ * 获取MongoDB数据库大小
137
+ */
138
+ async getDatabaseSize(dataSource: DataSource, database: string): Promise<number> {
139
+ try {
140
+ const result = await dataSource.query(`db.stats({ scale: 1 })`);
141
+ return result.dataSize || 0;
142
+ } catch (error) {
143
+ console.error('获取MongoDB数据库大小失败:', error);
144
+ return 0;
145
+ }
146
+ }
147
+
148
+ /**
149
+ * MongoDB不支持视图
150
+ */
151
+ async getViews(dataSource: DataSource, database: string): Promise<any[]> {
152
+ return [];
153
+ }
154
+
155
+ /**
156
+ * MongoDB不支持视图
157
+ */
158
+ async getViewDefinition(dataSource: DataSource, database: string, viewName: string): Promise<string> {
159
+ throw new Error('MongoDB不支持视图');
160
+ }
161
+
162
+ /**
163
+ * MongoDB不支持存储过程
164
+ */
165
+ async getProcedures(dataSource: DataSource, database: string): Promise<any[]> {
166
+ return [];
167
+ }
168
+
169
+ /**
170
+ * MongoDB不支持存储过程
171
+ */
172
+ async getProcedureDefinition(dataSource: DataSource, database: string, procedureName: string): Promise<string> {
173
+ throw new Error('MongoDB不支持存储过程');
174
+ }
175
+
176
+ /**
177
+ * 创建MongoDB数据库
178
+ */
179
+ async createDatabase(dataSource: DataSource, databaseName: string, options?: any): Promise<void> {
180
+ try {
181
+ await dataSource.query(`db.getSiblingDB('${databaseName}').createCollection('temp')`);
182
+ await dataSource.query(`db.getSiblingDB('${databaseName}').temp.drop()`);
183
+ } catch (error) {
184
+ console.error('创建MongoDB数据库失败:', error);
185
+ throw new Error(`创建数据库失败: ${error.message}`);
186
+ }
187
+ }
188
+
189
+ /**
190
+ * 删除MongoDB数据库
191
+ */
192
+ async dropDatabase(dataSource: DataSource, databaseName: string): Promise<void> {
193
+ try {
194
+ await dataSource.query(`db.getSiblingDB('${databaseName}').dropDatabase()`);
195
+ } catch (error) {
196
+ console.error('删除MongoDB数据库失败:', error);
197
+ throw new Error(`删除数据库失败: ${error.message}`);
198
+ }
199
+ }
200
+
201
+ /**
202
+ * 导出数据库架构
203
+ */
204
+ async exportSchema(dataSource: DataSource, databaseName: string): Promise<string> {
205
+ const collections = await this.getTables(dataSource, databaseName);
206
+ let schemaSql = `-- MongoDB数据库架构导出 - ${databaseName}\n`;
207
+ schemaSql += `-- 导出时间: ${new Date().toISOString()}\n\n`;
208
+
209
+ for (const collection of collections) {
210
+ const columns = await this.getColumns(dataSource, databaseName, collection.name);
211
+ const indexes = await this.getIndexes(dataSource, databaseName, collection.name);
212
+
213
+ schemaSql += `// 集合: ${collection.name}\n`;
214
+ schemaSql += `// 字段:\n`;
215
+ columns.forEach(column => {
216
+ schemaSql += `// ${column.name}: ${column.type}${column.isPrimary ? ' (主键)' : ''}\n`;
217
+ });
218
+ schemaSql += `\n`;
219
+
220
+ if (indexes.length > 0) {
221
+ schemaSql += `// 索引:\n`;
222
+ indexes.forEach(index => {
223
+ schemaSql += `// ${index.name}: ${index.type} (${index.columns.join(', ')})\n`;
224
+ });
225
+ schemaSql += `\n`;
226
+ }
227
+ }
228
+
229
+ return schemaSql;
230
+ }
231
+
232
+ /**
233
+ * 查看MongoDB日志
234
+ */
235
+ async viewLogs(dataSource: DataSource, database?: string, limit: number = 100): Promise<any[]> {
236
+ try {
237
+ const result = await dataSource.query(`db.getSiblingDB('admin').adminCommand({ getLog: 'global' })`);
238
+ return result.log || [];
239
+ } catch (error) {
240
+ console.error('获取MongoDB日志失败:', error);
241
+ return [{ message: 'MongoDB日志功能需要管理员权限,请检查数据库配置' }];
242
+ }
243
+ }
244
+
245
+ /**
246
+ * 备份MongoDB数据库
247
+ */
248
+ async backupDatabase(dataSource: DataSource, databaseName: string, options?: any): Promise<string> {
249
+ try {
250
+ const backupPath = options?.path || path.join(__dirname, '..', '..', '..', 'data', 'backups');
251
+ if (!fs.existsSync(backupPath)) {
252
+ fs.mkdirSync(backupPath, { recursive: true });
253
+ }
254
+
255
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
256
+ const backupFile = path.join(backupPath, `${databaseName}_${timestamp}.json`);
257
+
258
+ const collections = await this.getTables(dataSource, databaseName);
259
+ const backupData: any = {
260
+ database: databaseName,
261
+ exportedAt: new Date().toISOString(),
262
+ collections: {}
263
+ };
264
+
265
+ for (const collection of collections) {
266
+ const result = await dataSource.query(`db.${collection.name}.find().toArray()`);
267
+ backupData.collections[collection.name] = result;
268
+ }
269
+
270
+ fs.writeFileSync(backupFile, JSON.stringify(backupData, null, 2), 'utf8');
271
+ return `备份成功:${backupFile}`;
272
+ } catch (error) {
273
+ console.error('MongoDB备份失败:', error);
274
+ throw new Error(`备份失败: ${error.message}`);
275
+ }
276
+ }
277
+
278
+ /**
279
+ * 恢复MongoDB数据库
280
+ */
281
+ async restoreDatabase(dataSource: DataSource, databaseName: string, filePath: string, options?: any): Promise<void> {
282
+ try {
283
+ const backupData = JSON.parse(fs.readFileSync(filePath, 'utf8'));
284
+
285
+ for (const collectionName in backupData.collections) {
286
+ const documents = backupData.collections[collectionName];
287
+ if (documents.length > 0) {
288
+ await dataSource.query(`db.${collectionName}.insertMany(${JSON.stringify(documents)})`);
289
+ }
290
+ }
291
+ } catch (error) {
292
+ console.error('MongoDB恢复失败:', error);
293
+ throw new Error(`恢复失败: ${error.message}`);
294
+ }
295
+ }
296
+
297
+ /**
298
+ * 导出表数据到 SQL 文件(MongoDB不支持SQL)
299
+ */
300
+ async exportTableDataToSQL(dataSource: DataSource, databaseName: string, tableName: string, options?: any): Promise<string> {
301
+ throw new Error('MongoDB不支持导出为SQL格式,请使用JSON格式');
302
+ }
303
+
304
+ /**
305
+ * 导出表数据到 CSV 文件
306
+ */
307
+ async exportTableDataToCSV(dataSource: DataSource, databaseName: string, tableName: string, options?: any): Promise<string> {
308
+ try {
309
+ const exportPath = options?.path || path.join(__dirname, '..', '..', '..', 'data', 'exports');
310
+ if (!fs.existsSync(exportPath)) {
311
+ fs.mkdirSync(exportPath, { recursive: true });
312
+ }
313
+
314
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
315
+ const exportFile = path.join(exportPath, `${tableName}_data_${timestamp}.csv`);
316
+
317
+ const result = await dataSource.query(`db.${tableName}.find().toArray()`);
318
+
319
+ if (result.length === 0) {
320
+ fs.writeFileSync(exportFile, '', 'utf8');
321
+ return exportFile;
322
+ }
323
+
324
+ const columns = await this.getColumns(dataSource, databaseName, tableName);
325
+ const columnNames = columns.map(column => column.name);
326
+
327
+ const bom = Buffer.from([0xEF, 0xBB, 0xBF]);
328
+ fs.writeFileSync(exportFile, bom);
329
+ fs.appendFileSync(exportFile, columnNames.map(name => `"${name}"`).join(',') + '\n', 'utf8');
330
+
331
+ let csv = '';
332
+ result.forEach((doc) => {
333
+ const values = columnNames.map(column => {
334
+ const value = doc[column];
335
+ if (value === null || value === undefined) {
336
+ return '';
337
+ } else if (typeof value === 'string') {
338
+ return `"${value.replace(/"/g, '""')}"`;
339
+ } else if (value instanceof Date) {
340
+ return `"${value.toISOString()}"`;
341
+ } else if (typeof value === 'object' && value !== null) {
342
+ try {
343
+ return `"${JSON.stringify(value).replace(/"/g, '""')}"`;
344
+ } catch {
345
+ return `"${String(value).replace(/"/g, '""')}"`;
346
+ }
347
+ } else {
348
+ return String(value);
349
+ }
350
+ });
351
+ csv += values.join(',') + '\n';
352
+ });
353
+
354
+ fs.appendFileSync(exportFile, csv, 'utf8');
355
+ return exportFile;
356
+ } catch (error) {
357
+ console.error('MongoDB导出表数据到CSV失败:', error);
358
+ throw new Error(`导出表数据到CSV失败: ${error.message}`);
359
+ }
360
+ }
361
+
362
+ /**
363
+ * 导出表数据到 JSON 文件
364
+ */
365
+ async exportTableDataToJSON(dataSource: DataSource, databaseName: string, tableName: string, options?: any): Promise<string> {
366
+ try {
367
+ const exportPath = options?.path || path.join(__dirname, '..', '..', '..', 'data', 'exports');
368
+ if (!fs.existsSync(exportPath)) {
369
+ fs.mkdirSync(exportPath, { recursive: true });
370
+ }
371
+
372
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
373
+ const exportFile = path.join(exportPath, `${tableName}_data_${timestamp}.json`);
374
+
375
+ const result = await dataSource.query(`db.${tableName}.find().toArray()`);
376
+ fs.writeFileSync(exportFile, JSON.stringify(result, null, 2), 'utf8');
377
+ return exportFile;
378
+ } catch (error) {
379
+ console.error('MongoDB导出表数据到JSON失败:', error);
380
+ throw new Error(`导出表数据到JSON失败: ${error.message}`);
381
+ }
382
+ }
383
+
384
+ /**
385
+ * 导出表数据到 Excel 文件
386
+ */
387
+ async exportTableDataToExcel(dataSource: DataSource, databaseName: string, tableName: string, options?: any): Promise<string> {
388
+ try {
389
+ const exportPath = options?.path || path.join(__dirname, '..', '..', '..', 'data', 'exports');
390
+ if (!fs.existsSync(exportPath)) {
391
+ fs.mkdirSync(exportPath, { recursive: true });
392
+ }
393
+
394
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
395
+ const exportFile = path.join(exportPath, `${tableName}_data_${timestamp}.xlsx`);
396
+
397
+ const result = await dataSource.query(`db.${tableName}.find().toArray()`);
398
+ const columns = await this.getColumns(dataSource, databaseName, tableName);
399
+ const columnNames = columns.map(column => column.name);
400
+
401
+ const ExcelJS = require('exceljs');
402
+ const workbook = new ExcelJS.Workbook();
403
+ const worksheet = workbook.addWorksheet(tableName);
404
+
405
+ worksheet.columns = columnNames.map(name => ({
406
+ header: name,
407
+ key: name
408
+ }));
409
+
410
+ const flatData = result.map(doc => {
411
+ const flatDoc: any = {};
412
+ columnNames.forEach(column => {
413
+ const value = doc[column];
414
+ if (value !== null && value !== undefined && typeof value === 'object' && !Array.isArray(value) && !(value instanceof Date)) {
415
+ flatDoc[column] = JSON.stringify(value);
416
+ } else {
417
+ flatDoc[column] = value;
418
+ }
419
+ });
420
+ return flatDoc;
421
+ });
422
+
423
+ worksheet.addRows(flatData);
424
+
425
+ await workbook.xlsx.writeFile(exportFile);
426
+ return exportFile;
427
+ } catch (error) {
428
+ console.error('MongoDB导出表数据到Excel失败:', error);
429
+ throw new Error(`导出表数据到Excel失败: ${error.message}`);
430
+ }
431
+ }
432
+
433
+ /**
434
+ * MongoDB使用反引号作为标识符
435
+ */
436
+ public quoteIdentifier(identifier: string): string {
437
+ return `\`${identifier}\``;
438
+ }
439
+ }
440
+
441
+ /**
442
+ * ObjectId 类型定义
443
+ */
444
+ class ObjectId {
445
+ constructor(id?: string) {
446
+ if (id) {
447
+ this.id = id;
448
+ }
449
+ }
450
+ id?: string;
451
+ toString() {
452
+ return this.id || '';
453
+ }
454
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mssql.service.js","sourceRoot":"","sources":["mssql.service.ts"],"names":[],"mappings":"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"}