feat(export): honor exclude-primary-keys in SQL script exports
This commit is contained in:
16 files changed
+464
-68
No files matched your search
@@ -35,6 +35,7 @@ vi.mock("vue-i18n", () => ({
|
||||
}));
|
||||
|
||||
import { useSidebarTreeExportRuntime } from "@/composables/useSidebarTreeExportRuntime";
|
||||
import { DEFAULT_DATA_GRID_EXTRACTOR_OPTIONS } from "@/lib/dataGrid/dataGridCopyExtractor";
|
||||
import { showStructurePreviewDialog, structurePreviewSql, structurePreviewTitle } from "@/components/sidebar/sidebarTreeDialogState";
|
||||
|
||||
function functionBody(name: string): string {
|
||||
@@ -78,6 +79,7 @@ function exportSettings() {
|
||||
exportBatchSize: 128,
|
||||
exportRowLimit: 500,
|
||||
exportRowLimitEnabled: true,
|
||||
dataGridExtractorOptions: DEFAULT_DATA_GRID_EXTRACTOR_OPTIONS,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1170,6 +1170,24 @@ export function useDataGridExport(options: UseDataGridExportOptions) {
|
||||
await exportAllResultsXlsxResult(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* SQL 导出需要排除的主键列:跟随数据提取设置里的“排除主键”,与
|
||||
* copy-as-INSERT (e3d5d1418) 一致只剔除自增/identity 主键,手动赋值的
|
||||
* 主键保留,否则回放 INSERT 会缺值;只有拿得到表元数据时才生效。
|
||||
*/
|
||||
function sqlExportExcludedColumns(): string[] | undefined {
|
||||
if (!extractorOptionsOption?.value?.sql.excludePrimaryKeysFromInsert) return undefined;
|
||||
const primaryKeys = tableMeta.value?.primaryKeys ?? [];
|
||||
const autoGenerated = primaryKeys.filter((column) => isAutoGeneratedColumn(column, tableMeta.value));
|
||||
return autoGenerated.length > 0 ? autoGenerated : undefined;
|
||||
}
|
||||
|
||||
/** 供导出请求使用:把“不含主键”设置转换成后端请求字段。 */
|
||||
function sqlExportPrimaryKeyOptions(): { excludePrimaryKeys?: boolean; primaryKeys?: string[] } {
|
||||
const excludeColumns = sqlExportExcludedColumns();
|
||||
return excludeColumns ? { excludePrimaryKeys: true, primaryKeys: excludeColumns } : {};
|
||||
}
|
||||
|
||||
async function exportFullTableDataViaBackend(format: "csv" | "xlsx" | "json" | "markdown" | "sql" | "txt", rowIds?: number[], headerMode: XlsxHeaderMode = "name", autoFilter = true, sqlExportOptions?: SqlExportOptions): Promise<boolean> {
|
||||
const meta = tableMeta.value;
|
||||
// The backend table exporter currently builds two-part table names. External
|
||||
@@ -1236,6 +1254,7 @@ export function useDataGridExport(options: UseDataGridExportOptions) {
|
||||
columnTypes: columnTypes.value,
|
||||
columnComments: format === "xlsx" ? buildXlsxHeaderOverrides(columns.value, visibleXlsxColumnComments.value, headerMode) : undefined,
|
||||
primaryKeys: meta.primaryKeys,
|
||||
...sqlExportPrimaryKeyOptions(),
|
||||
whereInput: whereInput.value,
|
||||
orderBy: orderBy.value,
|
||||
skipCount: false,
|
||||
@@ -1309,6 +1328,7 @@ export function useDataGridExport(options: UseDataGridExportOptions) {
|
||||
? {
|
||||
...baseRequest,
|
||||
csvQuoteMode: useSettingsStore().editorSettings.csvQuoteMode,
|
||||
...sqlExportPrimaryKeyOptions(),
|
||||
dateTimeFormat: useSettingsStore().editorSettings.globalDateTimeExportFormat || undefined,
|
||||
numericColumnRightAlign: useSettingsStore().editorSettings.numericColumnRightAlign ?? true,
|
||||
columnComments,
|
||||
@@ -1475,6 +1495,7 @@ export function useDataGridExport(options: UseDataGridExportOptions) {
|
||||
spatialValues: exportData.spatialValues,
|
||||
rows: exportData.rows,
|
||||
insertMode,
|
||||
excludeColumns: sqlExportExcludedColumns(),
|
||||
});
|
||||
logExportStage(
|
||||
"sql-build-done",
|
||||
@@ -1516,6 +1537,7 @@ export function useDataGridExport(options: UseDataGridExportOptions) {
|
||||
spatialValues: exportData.spatialValues,
|
||||
rows: exportData.rows,
|
||||
insertMode,
|
||||
excludeColumns: sqlExportExcludedColumns(),
|
||||
});
|
||||
await saveTextFile(content, exportFileName("export-page", "sql", { page: true }), "SQL", "sql");
|
||||
toast(t("grid.exported"));
|
||||
|
||||
@@ -445,6 +445,7 @@ export function useSidebarTreeExportRuntime(options: SidebarTreeExportRuntimeOpt
|
||||
columnComments,
|
||||
autoFilter: format === "xlsx" ? autoFilter : undefined,
|
||||
primaryKeys,
|
||||
excludePrimaryKeys: settingsStore.editorSettings.dataGridExtractorOptions.sql.excludePrimaryKeysFromInsert === true,
|
||||
batchSize: target.batchSize,
|
||||
skipCount: format === "sql",
|
||||
rowLimit: target.rowLimit,
|
||||
|
||||
Reference in new issue
Block a user