fdb2 1.0.6 → 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.
- package/.vscodeignore +45 -0
- package/README.md +24 -85
- package/dist/package.json +115 -0
- package/dist/pnpm-lock.yaml +7447 -0
- package/dist/public/explorer.css +244 -111
- package/dist/public/explorer.js +518 -275
- package/dist/scripts/preinstall.js +112 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +4 -9
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.ts +5 -10
- package/dist/server/service/connection.service.d.ts.map +1 -1
- package/dist/server/service/connection.service.js +1 -0
- package/dist/server/service/connection.service.js.map +1 -1
- package/dist/server/service/connection.service.ts +1 -0
- package/dist/server/service/database/base.service.d.ts +4 -0
- package/dist/server/service/database/base.service.d.ts.map +1 -1
- package/dist/server/service/database/base.service.js +3 -3
- package/dist/server/service/database/base.service.js.map +1 -1
- package/dist/server/service/database/base.service.ts +8 -3
- package/dist/server/service/database/cockroachdb.service.d.ts +5 -0
- package/dist/server/service/database/cockroachdb.service.d.ts.map +1 -1
- package/dist/server/service/database/cockroachdb.service.js +112 -0
- package/dist/server/service/database/cockroachdb.service.js.map +1 -1
- package/dist/server/service/database/cockroachdb.service.ts +123 -0
- 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 +8 -0
- package/dist/server/service/database/database.service.js.map +1 -1
- package/dist/server/service/database/database.service.ts +9 -0
- package/dist/server/service/database/mongodb.service.d.ts +6 -0
- package/dist/server/service/database/mongodb.service.d.ts.map +1 -1
- package/dist/server/service/database/mongodb.service.js +8 -0
- package/dist/server/service/database/mongodb.service.js.map +1 -1
- package/dist/server/service/database/mongodb.service.ts +9 -0
- package/dist/server/service/database/mssql.service.d.ts +4 -0
- package/dist/server/service/database/mssql.service.d.ts.map +1 -1
- package/dist/server/service/database/mssql.service.js +105 -0
- package/dist/server/service/database/mssql.service.js.map +1 -1
- package/dist/server/service/database/mssql.service.ts +118 -0
- package/dist/server/service/database/mysql.service.d.ts +4 -0
- package/dist/server/service/database/mysql.service.d.ts.map +1 -1
- package/dist/server/service/database/mysql.service.js +116 -0
- package/dist/server/service/database/mysql.service.js.map +1 -1
- package/dist/server/service/database/mysql.service.ts +130 -0
- package/dist/server/service/database/oracle.service.d.ts +4 -0
- package/dist/server/service/database/oracle.service.d.ts.map +1 -1
- package/dist/server/service/database/oracle.service.js +114 -0
- package/dist/server/service/database/oracle.service.js.map +1 -1
- package/dist/server/service/database/oracle.service.ts +128 -0
- package/dist/server/service/database/postgres.service.d.ts +4 -0
- package/dist/server/service/database/postgres.service.d.ts.map +1 -1
- package/dist/server/service/database/postgres.service.js +120 -0
- package/dist/server/service/database/postgres.service.js.map +1 -1
- package/dist/server/service/database/postgres.service.ts +131 -0
- package/dist/server/service/database/sap.service.d.ts +4 -0
- package/dist/server/service/database/sap.service.d.ts.map +1 -1
- package/dist/server/service/database/sap.service.js +107 -0
- package/dist/server/service/database/sap.service.js.map +1 -1
- package/dist/server/service/database/sap.service.ts +120 -0
- package/dist/server/service/database/sqlite.service.d.ts +5 -0
- package/dist/server/service/database/sqlite.service.d.ts.map +1 -1
- package/dist/server/service/database/sqlite.service.js +133 -0
- package/dist/server/service/database/sqlite.service.js.map +1 -1
- package/dist/server/service/database/sqlite.service.ts +150 -0
- package/package.json +18 -9
- package/packages/vscode/.vscodeignore +44 -0
- package/packages/vscode/README.md +62 -0
- package/packages/vscode/out/database-services/base.service.js +236 -0
- package/packages/vscode/out/database-services/base.service.js.map +1 -0
- package/packages/vscode/out/database-services/cockroachdb.service.js +634 -0
- package/packages/vscode/out/database-services/cockroachdb.service.js.map +1 -0
- package/packages/vscode/out/database-services/connection.service.js +346 -0
- package/packages/vscode/out/database-services/connection.service.js.map +1 -0
- package/packages/vscode/out/database-services/database.service.js +571 -0
- package/packages/vscode/out/database-services/database.service.js.map +1 -0
- package/packages/vscode/out/database-services/index.js +18 -0
- package/packages/vscode/out/database-services/index.js.map +1 -0
- package/packages/vscode/out/database-services/model/connection.entity.js +11 -0
- package/packages/vscode/out/database-services/model/connection.entity.js.map +1 -0
- package/packages/vscode/out/database-services/model/database.entity.js +35 -0
- package/packages/vscode/out/database-services/model/database.entity.js.map +1 -0
- package/packages/vscode/out/database-services/mongodb.service.js +458 -0
- package/packages/vscode/out/database-services/mongodb.service.js.map +1 -0
- package/packages/vscode/out/database-services/mssql.service.js +694 -0
- package/packages/vscode/out/database-services/mssql.service.js.map +1 -0
- package/packages/vscode/out/database-services/mysql.service.js +735 -0
- package/packages/vscode/out/database-services/mysql.service.js.map +1 -0
- package/packages/vscode/out/database-services/oracle.service.js +787 -0
- package/packages/vscode/out/database-services/oracle.service.js.map +1 -0
- package/packages/vscode/out/database-services/postgres.service.js +696 -0
- package/packages/vscode/out/database-services/postgres.service.js.map +1 -0
- package/packages/vscode/out/database-services/sap.service.js +695 -0
- package/packages/vscode/out/database-services/sap.service.js.map +1 -0
- package/packages/vscode/out/database-services/sqlite.service.js +532 -0
- package/packages/vscode/out/database-services/sqlite.service.js.map +1 -0
- package/packages/vscode/out/extension.js +93 -0
- package/packages/vscode/out/extension.js.map +1 -0
- package/packages/vscode/out/provider/DatabaseTreeProvider.js +159 -0
- package/packages/vscode/out/provider/DatabaseTreeProvider.js.map +1 -0
- package/packages/vscode/out/provider/WebViewProvider.js +259 -0
- package/packages/vscode/out/provider/WebViewProvider.js.map +1 -0
- package/packages/vscode/out/service/ConnectionManager.js +105 -0
- package/packages/vscode/out/service/ConnectionManager.js.map +1 -0
- package/packages/vscode/out/service/DatabaseServiceBridge.js +395 -0
- package/packages/vscode/out/service/DatabaseServiceBridge.js.map +1 -0
- package/packages/vscode/out/typings/connection.js +3 -0
- package/packages/vscode/out/typings/connection.js.map +1 -0
- package/packages/vscode/package.json +142 -0
- package/packages/vscode/resources/icon.svg +5 -0
- package/packages/vscode/resources/webview/_plugin-vue_export-helper.js +6529 -0
- package/packages/vscode/resources/webview/_plugin-vue_export-helper.js.map +1 -0
- package/packages/vscode/resources/webview/connection.css +69 -0
- package/packages/vscode/resources/webview/connection.js +228 -0
- package/packages/vscode/resources/webview/connection.js.map +1 -0
- package/packages/vscode/resources/webview/database.css +259 -0
- package/packages/vscode/resources/webview/database.js +275 -0
- package/packages/vscode/resources/webview/database.js.map +1 -0
- package/packages/vscode/resources/webview/favicon.ico +0 -0
- package/packages/vscode/resources/webview/index.html +9 -0
- package/packages/vscode/resources/webview/modules/header.tpl +14 -0
- package/packages/vscode/resources/webview/modules/initial_state.tpl +55 -0
- package/packages/vscode/resources/webview/query.css +162 -0
- package/packages/vscode/resources/webview/query.js +198 -0
- package/packages/vscode/resources/webview/query.js.map +1 -0
- package/packages/vscode/src/database-services/base.service.js.map +1 -0
- package/packages/vscode/src/database-services/base.service.ts +363 -0
- package/packages/vscode/src/database-services/cockroachdb.service.js.map +1 -0
- package/packages/vscode/src/database-services/cockroachdb.service.ts +659 -0
- package/packages/vscode/src/database-services/connection.service.ts +341 -0
- package/packages/vscode/src/database-services/database.service.ts +630 -0
- package/packages/vscode/src/database-services/index.ts +7 -0
- package/packages/vscode/src/database-services/model/connection.entity.js +11 -0
- package/packages/vscode/src/database-services/model/connection.entity.js.map +1 -0
- package/packages/vscode/src/database-services/model/connection.entity.ts +66 -0
- package/packages/vscode/src/database-services/model/database.entity.js +35 -0
- package/packages/vscode/src/database-services/model/database.entity.js.map +1 -0
- package/packages/vscode/src/database-services/model/database.entity.ts +246 -0
- package/packages/vscode/src/database-services/mongodb.service.js.map +1 -0
- package/packages/vscode/src/database-services/mongodb.service.ts +454 -0
- package/packages/vscode/src/database-services/mssql.service.js.map +1 -0
- package/packages/vscode/src/database-services/mssql.service.ts +723 -0
- package/packages/vscode/src/database-services/mysql.service.js.map +1 -0
- package/packages/vscode/src/database-services/mysql.service.ts +761 -0
- package/packages/vscode/src/database-services/oracle.service.js.map +1 -0
- package/packages/vscode/src/database-services/oracle.service.ts +832 -0
- package/packages/vscode/src/database-services/postgres.service.js.map +1 -0
- package/packages/vscode/src/database-services/postgres.service.ts +741 -0
- package/packages/vscode/src/database-services/sap.service.js.map +1 -0
- package/packages/vscode/src/database-services/sap.service.ts +713 -0
- package/packages/vscode/src/database-services/sqlite.service.js.map +1 -0
- package/packages/vscode/src/database-services/sqlite.service.ts +559 -0
- package/packages/vscode/src/extension.ts +76 -0
- package/packages/vscode/src/provider/DatabaseTreeProvider.ts +167 -0
- package/packages/vscode/src/provider/WebViewProvider.ts +277 -0
- package/packages/vscode/src/service/DatabaseServiceBridge.ts +414 -0
- package/packages/vscode/src/typings/connection.ts +90 -0
- package/packages/vscode/tsconfig.json +21 -0
- package/public/fdb2.png +0 -0
- package/server/backups/db_ai_breakout_2026-03-11T08-38-48-677Z.sql +0 -0
- package/server/index.ts +5 -10
- package/server/model/connection.entity.js +11 -0
- package/server/model/connection.entity.js.map +1 -0
- package/server/model/database.entity.js +35 -0
- package/server/model/database.entity.js.map +1 -0
- package/server/service/connection.service.ts +1 -0
- package/server/service/database/base.service.ts +8 -3
- package/server/service/database/cockroachdb.service.ts +123 -0
- package/server/service/database/database.service.ts +9 -0
- package/server/service/database/mongodb.service.ts +9 -0
- package/server/service/database/mssql.service.ts +118 -0
- package/server/service/database/mysql.service.ts +130 -0
- package/server/service/database/oracle.service.ts +128 -0
- package/server/service/database/postgres.service.ts +131 -0
- package/server/service/database/sap.service.ts +120 -0
- package/server/service/database/sqlite.service.ts +150 -0
- package/server/tsconfig.json +20 -0
- package/src/components/connection-editor/index.vue +0 -1
- package/src/platform/database/components/db-tools.vue +414 -174
- package/src/platform/database/components/table-detail.vue +1 -0
- package/src/platform/database/components/table-editor.vue +245 -18
- package/src/platform/vscode/bridge.ts +121 -0
- package/src/platform/vscode/components/ConnectionPanel.vue +272 -0
- package/src/platform/vscode/components/DatabasePanel.vue +532 -0
- package/src/platform/vscode/components/QueryPanel.vue +371 -0
- package/src/platform/vscode/entry/connection.ts +13 -0
- package/src/platform/vscode/entry/database.ts +13 -0
- package/src/platform/vscode/entry/query.ts +13 -0
- package/src/platform/vscode/index.ts +5 -0
- package/src/service/database.ts +2 -6
- package/vite.config.ts +46 -6
- package/vite.config.vscode.ts +47 -0
|
@@ -710,4 +710,124 @@ export class SAPHANADatabaseService extends BaseDatabaseService {
|
|
|
710
710
|
public quoteIdentifier(identifier: string): string {
|
|
711
711
|
return `"${identifier}"`;
|
|
712
712
|
}
|
|
713
|
+
|
|
714
|
+
/**
|
|
715
|
+
* 修改表结构
|
|
716
|
+
*/
|
|
717
|
+
async alterTable(dataSource: DataSource, databaseName: string, tableDiff: any): Promise<any> {
|
|
718
|
+
try {
|
|
719
|
+
const tableName = tableDiff.tableName;
|
|
720
|
+
const sqlStatements: string[] = [];
|
|
721
|
+
|
|
722
|
+
// 修改表注释
|
|
723
|
+
if (tableDiff.tableCommentChanged) {
|
|
724
|
+
sqlStatements.push(`ALTER TABLE "${tableName}" COMMENT '${tableDiff.tableComment}'`);
|
|
725
|
+
}
|
|
726
|
+
|
|
727
|
+
// 添加新列
|
|
728
|
+
tableDiff.addedColumns.forEach((column: any) => {
|
|
729
|
+
// 检查type是否已经包含长度信息(括号)
|
|
730
|
+
const typeHasLength = /\(\d+\)/.test(column.type);
|
|
731
|
+
|
|
732
|
+
let columnSQL = `ALTER TABLE "${tableName}" ADD ("${column.name}" ${column.type}`;
|
|
733
|
+
|
|
734
|
+
// 处理长度和精度(仅当type中没有指定长度时才添加)
|
|
735
|
+
if (!typeHasLength) {
|
|
736
|
+
if (column.length) {
|
|
737
|
+
columnSQL += `(${column.length})`;
|
|
738
|
+
} else if (column.precision) {
|
|
739
|
+
if (column.scale) {
|
|
740
|
+
columnSQL += `(${column.precision},${column.scale})`;
|
|
741
|
+
} else {
|
|
742
|
+
columnSQL += `(${column.precision})`;
|
|
743
|
+
}
|
|
744
|
+
}
|
|
745
|
+
}
|
|
746
|
+
|
|
747
|
+
// 处理NULL约束
|
|
748
|
+
if (!column.nullable) {
|
|
749
|
+
columnSQL += ' NOT NULL';
|
|
750
|
+
}
|
|
751
|
+
|
|
752
|
+
// 处理默认值
|
|
753
|
+
if (column.defaultValue) {
|
|
754
|
+
const upperDefault = column.defaultValue.toString().toUpperCase();
|
|
755
|
+
if (['CURRENT_TIMESTAMP', 'CURRENT_DATE', 'CURRENT_TIME'].includes(upperDefault)) {
|
|
756
|
+
columnSQL += ` DEFAULT ${upperDefault}`;
|
|
757
|
+
} else {
|
|
758
|
+
columnSQL += ` DEFAULT '${column.defaultValue}'`;
|
|
759
|
+
}
|
|
760
|
+
}
|
|
761
|
+
|
|
762
|
+
columnSQL += ')';
|
|
763
|
+
sqlStatements.push(columnSQL + ';');
|
|
764
|
+
|
|
765
|
+
// 添加列注释
|
|
766
|
+
if (column.comment) {
|
|
767
|
+
sqlStatements.push(`ALTER TABLE "${tableName}" ("${column.name}" COMMENT '${column.comment}')`);
|
|
768
|
+
}
|
|
769
|
+
});
|
|
770
|
+
|
|
771
|
+
// 修改列
|
|
772
|
+
tableDiff.modifiedColumns.forEach((modification: any) => {
|
|
773
|
+
const { oldColumn, newColumn } = modification;
|
|
774
|
+
|
|
775
|
+
// 检查type是否已经包含长度信息(括号)
|
|
776
|
+
const typeHasLength = /\(\d+\)/.test(newColumn.type);
|
|
777
|
+
|
|
778
|
+
let columnSQL = `ALTER TABLE "${tableName}" ("${newColumn.name}" ${newColumn.type}`;
|
|
779
|
+
|
|
780
|
+
// 处理长度和精度(仅当type中没有指定长度时才添加)
|
|
781
|
+
if (!typeHasLength) {
|
|
782
|
+
if (newColumn.length) {
|
|
783
|
+
columnSQL += `(${newColumn.length})`;
|
|
784
|
+
} else if (newColumn.precision) {
|
|
785
|
+
if (newColumn.scale) {
|
|
786
|
+
columnSQL += `(${newColumn.precision},${newColumn.scale})`;
|
|
787
|
+
} else {
|
|
788
|
+
columnSQL += `(${newColumn.precision})`;
|
|
789
|
+
}
|
|
790
|
+
}
|
|
791
|
+
}
|
|
792
|
+
|
|
793
|
+
// 处理NULL约束
|
|
794
|
+
if (!newColumn.nullable) {
|
|
795
|
+
columnSQL += ' NOT NULL';
|
|
796
|
+
}
|
|
797
|
+
|
|
798
|
+
// 处理默认值
|
|
799
|
+
if (newColumn.defaultValue) {
|
|
800
|
+
const upperDefault = newColumn.defaultValue.toString().toUpperCase();
|
|
801
|
+
if (['CURRENT_TIMESTAMP', 'CURRENT_DATE', 'CURRENT_TIME'].includes(upperDefault)) {
|
|
802
|
+
columnSQL += ` DEFAULT ${upperDefault}`;
|
|
803
|
+
} else {
|
|
804
|
+
columnSQL += ` DEFAULT '${newColumn.defaultValue}'`;
|
|
805
|
+
}
|
|
806
|
+
}
|
|
807
|
+
|
|
808
|
+
columnSQL += ')';
|
|
809
|
+
sqlStatements.push(columnSQL + ';');
|
|
810
|
+
|
|
811
|
+
// 修改列注释
|
|
812
|
+
if (newColumn.comment) {
|
|
813
|
+
sqlStatements.push(`ALTER TABLE "${tableName}" ("${newColumn.name}" COMMENT '${newColumn.comment}')`);
|
|
814
|
+
}
|
|
815
|
+
});
|
|
816
|
+
|
|
817
|
+
// 删除列
|
|
818
|
+
tableDiff.deletedColumns.forEach((column: any) => {
|
|
819
|
+
sqlStatements.push(`ALTER TABLE "${tableName}" DROP ("${column.name}")`);
|
|
820
|
+
});
|
|
821
|
+
|
|
822
|
+
// 执行SQL语句
|
|
823
|
+
if (sqlStatements.length > 0) {
|
|
824
|
+
await this.executeBatchQuery(dataSource, sqlStatements, { useTransaction: true });
|
|
825
|
+
}
|
|
826
|
+
|
|
827
|
+
return { ret: 0, message: '表结构修改成功' };
|
|
828
|
+
} catch (error) {
|
|
829
|
+
console.error('SAP HANA修改表结构失败:', error);
|
|
830
|
+
return { ret: 1, message: `修改表结构失败: ${error instanceof Error ? error.message : String(error)}` };
|
|
831
|
+
}
|
|
832
|
+
}
|
|
713
833
|
}
|
|
@@ -556,4 +556,154 @@ export class SQLiteService extends BaseDatabaseService {
|
|
|
556
556
|
throw new Error(`导出表数据到Excel失败: ${error.message}`);
|
|
557
557
|
}
|
|
558
558
|
}
|
|
559
|
+
|
|
560
|
+
/**
|
|
561
|
+
* 修改表结构
|
|
562
|
+
* SQLite的ALTER TABLE操作非常有限,需要通过重建表来实现复杂的表结构修改
|
|
563
|
+
*/
|
|
564
|
+
async alterTable(dataSource: DataSource, databaseName: string, tableDiff: any): Promise<any> {
|
|
565
|
+
try {
|
|
566
|
+
const tableName = tableDiff.tableName;
|
|
567
|
+
const sqlStatements: string[] = [];
|
|
568
|
+
|
|
569
|
+
// SQLite不支持直接修改表注释,只能忽略
|
|
570
|
+
|
|
571
|
+
// 如果有修改或删除列,需要重建表
|
|
572
|
+
if (tableDiff.modifiedColumns.length > 0 || tableDiff.deletedColumns.length > 0) {
|
|
573
|
+
const tempTableName = `_temp_${tableName}_${Date.now()}`;
|
|
574
|
+
|
|
575
|
+
// 获取所有列(包括新增的和未修改的)
|
|
576
|
+
const allColumns = [...tableDiff.addedColumns];
|
|
577
|
+
const existingColumns = await this.getColumns(dataSource, databaseName, tableName);
|
|
578
|
+
|
|
579
|
+
// 添加未修改的现有列
|
|
580
|
+
existingColumns.forEach(col => {
|
|
581
|
+
const isDeleted = tableDiff.deletedColumns.some((dc: any) => dc.name === col.name);
|
|
582
|
+
const isModified = tableDiff.modifiedColumns.some((mc: any) => mc.oldColumn.name === col.name);
|
|
583
|
+
if (!isDeleted && !isModified) {
|
|
584
|
+
allColumns.push(col);
|
|
585
|
+
}
|
|
586
|
+
});
|
|
587
|
+
|
|
588
|
+
// 添加修改后的列
|
|
589
|
+
tableDiff.modifiedColumns.forEach((modification: any) => {
|
|
590
|
+
allColumns.push(modification.newColumn);
|
|
591
|
+
});
|
|
592
|
+
|
|
593
|
+
// 创建临时表
|
|
594
|
+
let createTableSQL = `CREATE TABLE "${tempTableName}" (`;
|
|
595
|
+
const columnDefinitions: string[] = [];
|
|
596
|
+
|
|
597
|
+
allColumns.forEach(column => {
|
|
598
|
+
// 检查type是否已经包含长度信息(括号)
|
|
599
|
+
const typeHasLength = /\(\d+\)/.test(column.type);
|
|
600
|
+
|
|
601
|
+
let definition = `"${column.name}" ${column.type}`;
|
|
602
|
+
|
|
603
|
+
// 处理长度和精度(仅当type中没有指定长度时才添加)
|
|
604
|
+
if (!typeHasLength) {
|
|
605
|
+
if (column.length) {
|
|
606
|
+
definition += `(${column.length})`;
|
|
607
|
+
} else if (column.precision) {
|
|
608
|
+
if (column.scale) {
|
|
609
|
+
definition += `(${column.precision},${column.scale})`;
|
|
610
|
+
} else {
|
|
611
|
+
definition += `(${column.precision})`;
|
|
612
|
+
}
|
|
613
|
+
}
|
|
614
|
+
}
|
|
615
|
+
|
|
616
|
+
// 处理NULL约束
|
|
617
|
+
if (!column.nullable) {
|
|
618
|
+
definition += ' NOT NULL';
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
// 处理默认值
|
|
622
|
+
if (column.defaultValue) {
|
|
623
|
+
const upperDefault = column.defaultValue.toString().toUpperCase();
|
|
624
|
+
if (['CURRENT_TIMESTAMP', 'NOW()', 'CURRENT_DATE', 'CURRENT_TIME'].includes(upperDefault)) {
|
|
625
|
+
definition += ` DEFAULT ${upperDefault}`;
|
|
626
|
+
} else {
|
|
627
|
+
definition += ` DEFAULT '${column.defaultValue}'`;
|
|
628
|
+
}
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
// 处理主键和自增
|
|
632
|
+
if (column.isPrimary) {
|
|
633
|
+
if (column.isAutoIncrement) {
|
|
634
|
+
definition += ' PRIMARY KEY AUTOINCREMENT';
|
|
635
|
+
} else {
|
|
636
|
+
definition += ' PRIMARY KEY';
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
columnDefinitions.push(definition);
|
|
641
|
+
});
|
|
642
|
+
|
|
643
|
+
createTableSQL += columnDefinitions.join(',\n');
|
|
644
|
+
createTableSQL += ')';
|
|
645
|
+
sqlStatements.push(createTableSQL + ';');
|
|
646
|
+
|
|
647
|
+
// 复制数据到临时表
|
|
648
|
+
const existingColumnNames = existingColumns.map(col => `"${col.name}"`).join(', ');
|
|
649
|
+
const newColumnNames = allColumns.map(col => `"${col.name}"`).join(', ');
|
|
650
|
+
sqlStatements.push(`INSERT INTO "${tempTableName}" (${newColumnNames}) SELECT ${existingColumnNames} FROM "${tableName}";`);
|
|
651
|
+
|
|
652
|
+
// 删除旧表
|
|
653
|
+
sqlStatements.push(`DROP TABLE "${tableName}";`);
|
|
654
|
+
|
|
655
|
+
// 重命名临时表
|
|
656
|
+
sqlStatements.push(`ALTER TABLE "${tempTableName}" RENAME TO "${tableName}";`);
|
|
657
|
+
|
|
658
|
+
} else if (tableDiff.addedColumns.length > 0) {
|
|
659
|
+
// 只有添加列,可以直接使用ALTER TABLE ADD COLUMN
|
|
660
|
+
tableDiff.addedColumns.forEach((column: any) => {
|
|
661
|
+
// 检查type是否已经包含长度信息(括号)
|
|
662
|
+
const typeHasLength = /\(\d+\)/.test(column.type);
|
|
663
|
+
|
|
664
|
+
let columnSQL = `ALTER TABLE "${tableName}" ADD COLUMN "${column.name}" ${column.type}`;
|
|
665
|
+
|
|
666
|
+
// 处理长度和精度(仅当type中没有指定长度时才添加)
|
|
667
|
+
if (!typeHasLength) {
|
|
668
|
+
if (column.length) {
|
|
669
|
+
columnSQL += `(${column.length})`;
|
|
670
|
+
} else if (column.precision) {
|
|
671
|
+
if (column.scale) {
|
|
672
|
+
columnSQL += `(${column.precision},${column.scale})`;
|
|
673
|
+
} else {
|
|
674
|
+
columnSQL += `(${column.precision})`;
|
|
675
|
+
}
|
|
676
|
+
}
|
|
677
|
+
}
|
|
678
|
+
|
|
679
|
+
// 处理NULL约束
|
|
680
|
+
if (!column.nullable) {
|
|
681
|
+
columnSQL += ' NOT NULL';
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
// 处理默认值
|
|
685
|
+
if (column.defaultValue) {
|
|
686
|
+
const upperDefault = column.defaultValue.toString().toUpperCase();
|
|
687
|
+
if (['CURRENT_TIMESTAMP', 'NOW()', 'CURRENT_DATE', 'CURRENT_TIME'].includes(upperDefault)) {
|
|
688
|
+
columnSQL += ` DEFAULT ${upperDefault}`;
|
|
689
|
+
} else {
|
|
690
|
+
columnSQL += ` DEFAULT '${column.defaultValue}'`;
|
|
691
|
+
}
|
|
692
|
+
}
|
|
693
|
+
|
|
694
|
+
sqlStatements.push(columnSQL + ';');
|
|
695
|
+
});
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
// 执行SQL语句
|
|
699
|
+
if (sqlStatements.length > 0) {
|
|
700
|
+
await this.executeBatchQuery(dataSource, sqlStatements, { useTransaction: true });
|
|
701
|
+
}
|
|
702
|
+
|
|
703
|
+
return { ret: 0, message: '表结构修改成功' };
|
|
704
|
+
} catch (error) {
|
|
705
|
+
console.error('SQLite修改表结构失败:', error);
|
|
706
|
+
return { ret: 1, message: `修改表结构失败: ${error instanceof Error ? error.message : String(error)}` };
|
|
707
|
+
}
|
|
708
|
+
}
|
|
559
709
|
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2020",
|
|
4
|
+
"module": "CommonJS",
|
|
5
|
+
"moduleResolution": "Node",
|
|
6
|
+
"outDir": "./dist/server",
|
|
7
|
+
"rootDir": "./",
|
|
8
|
+
"strict": false,
|
|
9
|
+
"esModuleInterop": true,
|
|
10
|
+
"skipLibCheck": true,
|
|
11
|
+
"forceConsistentCasingInFileNames": true,
|
|
12
|
+
"declaration": true,
|
|
13
|
+
"declarationMap": true,
|
|
14
|
+
"sourceMap": true,
|
|
15
|
+
"noEmit": false,
|
|
16
|
+
"resolveJsonModule": true
|
|
17
|
+
},
|
|
18
|
+
"include": ["**/*"],
|
|
19
|
+
"exclude": ["**/__tests__/*", "**/*.spec.ts", "node_modules", "dist"]
|
|
20
|
+
}
|
|
@@ -317,7 +317,6 @@ function showEditModal(connection: ConnectionEntity) {
|
|
|
317
317
|
// 保存连接配置(不测试连接)
|
|
318
318
|
async function saveConnection(closeModal = true) {
|
|
319
319
|
try {
|
|
320
|
-
debugger
|
|
321
320
|
// 先进行前端验证
|
|
322
321
|
const validation = validateConnection(connectionForm.value);
|
|
323
322
|
if (!validation.isValid) {
|