Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
2bf45e6
fix(spi): preserve JDBC transaction ownership in batch imports
liushikuan63 Sep 4, 2026
7dbc783
Merge pull request #1 from liushikuan63/codex/import-export-01-jdbc-t…
liushikuan63 Sep 5, 2026
bb08777
fix(spi): preserve JDBC transaction ownership in batch imports
liushikuan63 Sep 4, 2026
58e40c6
feat(tasks): persist resumable task state and expose recovery controls
liushikuan63 Sep 8, 2026
04696d5
feat(import): add resumable parallel pipelines with guarded wizard co…
liushikuan63 Sep 8, 2026
0289c2b
feat(export): add streaming formats and activate the scoped export wi…
liushikuan63 Sep 8, 2026
73d178e
feat(h2): enable keyset export capability
liushikuan63 Sep 4, 2026
81cd31e
feat(mysql): add consistent snapshot keyset exports
liushikuan63 Sep 4, 2026
7eb72ee
Merge branch 'main' into qoder/import-export-batch1-fast-mode
liushikuan63 Sep 11, 2026
a2befb6
feat(import): raise the staged import file size limit to 2GB
liushikuan63 Sep 11, 2026
1b861ab
fix(import): execute every row batch as one transaction
liushikuan63 Sep 11, 2026
74ba6ca
feat(import): apply the fast-mode tuning contract to import and export
liushikuan63 Sep 11, 2026
1ca289b
fix(import): bound the resume window by rows and honor the parallelis…
liushikuan63 Sep 11, 2026
b483984
fix(import): cap the fast-mode fan-out at the machine's available par…
liushikuan63 Sep 11, 2026
1368e68
fix(export): bound the sink batch by one shard page
liushikuan63 Sep 11, 2026
6e39c0d
feat(import): bisect failed batches and reconcile already-applied rows
liushikuan63 Sep 11, 2026
b5a3cd2
feat(import): expose the resume duplicate policy in the import wizard
liushikuan63 Sep 11, 2026
d25decc
Merge remote-tracking branch 'origin/main' into qoder/import-export-b…
liushikuan63 Sep 11, 2026
a8e78dd
Merge upstream main into main (sync the fork before the fast-mode PR)
liushikuan63 Sep 11, 2026
73880be
Merge remote-tracking branch 'origin/main' into qoder/import-export-b…
liushikuan63 Sep 11, 2026
8482b5e
fix(import,export): keep the standard path on the pre-fast-mode behav…
liushikuan63 Sep 11, 2026
f26b17c
feat(export): enable the consistent export snapshot by default
liushikuan63 Sep 11, 2026
fd1e954
Merge remote-tracking branch 'upstream/main' into qoder/import-export…
liushikuan63 Sep 13, 2026
dc3c1f8
fix(import): guard staged paths and document execution boundaries
liushikuan63 Sep 13, 2026
dc13856
refactor(import-export): restore existing wizard and remove task reco…
openai0229 Sep 14, 2026
cd614c6
Merge remote-tracking branch 'origin/main' into fix/pr-2908-simplify
openai0229 Sep 14, 2026
b280ae6
refactor(import): remove error tolerance and reject artifacts
openai0229 Sep 14, 2026
dcadb6b
refactor(export): remove additional formats and gzip compression
openai0229 Sep 14, 2026
d9c37fb
refactor(import): scope fast mode to imports and reuse existing options
openai0229 Sep 14, 2026
22d9f62
refactor(import): remove preflight diagnosis and reports
openai0229 Sep 14, 2026
3d6f620
fix(import): preserve standard execution and isolate fast batches
openai0229 Sep 14, 2026
30ac9bf
refactor(import): use connection transaction settings for JDBC batches
openai0229 Sep 14, 2026
447aa59
refactor(import): remove peripheral changes and enforce concurrency p…
openai0229 Sep 14, 2026
d8ad375
refactor(import): restore baseline SQL import submission
openai0229 Sep 14, 2026
f7f3b06
fix(import): bound batches and preserve worker lifecycle and context
openai0229 Sep 15, 2026
4543d8c
refactor(import): define STANDARD and FAST enum names
openai0229 Sep 15, 2026
4152c30
fix(import): synchronize tuning samples and ignore failed batches
openai0229 Sep 15, 2026
c332361
refactor(import): remove parallelism system property override
openai0229 Sep 15, 2026
2effb68
refactor(import): share existing row-to-SQL conversion between modes
openai0229 Sep 15, 2026
680176a
refactor(import): use existing mapping behavior in fast mode
openai0229 Sep 15, 2026
47b8f2f
refactor(import): restore existing target table display
openai0229 Sep 15, 2026
95a4b77
fix(import): localize batch counts and elapsed time in task logs
openai0229 Sep 15, 2026
b68a808
fix(import): clean up partial worker startup failures
openai0229 Sep 15, 2026
1a2697c
feat(import): mark fast mode as beta and clarify risks
openai0229 Sep 15, 2026
68cb615
Merge remote-tracking branch 'origin/main' into fix/pr-2908-simplify
openai0229 Sep 16, 2026
d202b64
fix(import): clean up fast import workers on fatal errors
openai0229 Sep 16, 2026
d6b7e20
Merge latest main into CSV fast import branch
openai0229 Sep 16, 2026
8de6dac
Merge remote-tracking branch 'origin/main' into fix/pr-2908-simplify
openai0229 Sep 16, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions chat2db-community-client/scripts/i18n-source-hashes.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
"spaceSetting.ts": "defdf3138e5e1782f0282760bcef4ce1b8550cc80b03052fea468d97165cb980",
"sqlEditor.ts": "5c41e5f24d5ba78909795bcc681cabb8460cca075233b665dc4940afe82ce0c9",
"stream.ts": "2e2fca0b1ba1ecd5a1501b767be8857cf0b72d800d69a4acf9cd62a61d5ceaf5",
"workspace.ts": "3971cfd7ceacf7fc8fe6acf77a627b1f786720c55049fce04b020ac8f409a6b7"
"workspace.ts": "60a8f556eebc9ec01e78769694481233d2cc1bf27df234ca065a847c6fc0bb94"
},
"ko-KR": {
"ai.ts": "e7a2fcbfb3ed647bd14f63aca4b6c35c8fb402c49a6a1f36bb04f76f4e8415af",
Expand All @@ -42,7 +42,7 @@
"spaceSetting.ts": "defdf3138e5e1782f0282760bcef4ce1b8550cc80b03052fea468d97165cb980",
"sqlEditor.ts": "5c41e5f24d5ba78909795bcc681cabb8460cca075233b665dc4940afe82ce0c9",
"stream.ts": "2e2fca0b1ba1ecd5a1501b767be8857cf0b72d800d69a4acf9cd62a61d5ceaf5",
"workspace.ts": "3971cfd7ceacf7fc8fe6acf77a627b1f786720c55049fce04b020ac8f409a6b7"
"workspace.ts": "60a8f556eebc9ec01e78769694481233d2cc1bf27df234ca065a847c6fc0bb94"
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import {
} from '@/constants/importExport';
import i18n from '@/i18n';
import sqlService, { IImportPreview } from '@/service/sql';
import type { ICsvOptions } from '@/typings/importExport';
import type { ICsvOptions, ImportExecutionMode } from '@/typings/importExport';
import {
buildInitialImportMapping,
getDuplicateImportMappings,
Expand All @@ -19,6 +19,7 @@ import { useStyles } from './style';
import type { FileUrl } from '@/components/UploadLocalFile';
import { stageSelectedImportFile } from './fileStaging';
import CsvOptionsSections from './CsvOptionsSections';
import ImportModeControl from '../ImportModeControl';
import useImportDataSections from './ImportDataSections';
import {
buildCsvOptionsForTaskSubmit,
Expand Down Expand Up @@ -51,6 +52,7 @@ const ImportMappingContent = ({ dataSourceId, databaseName, schemaName, tableNam
const [mapping, setMapping] = useState<Record<string, string>>({});
const [unmappedTarget, setUnmappedTarget] = useState(ImportUnmappedTarget.DEFAULT);
const [executing, setExecuting] = useState(false);
const [mode, setMode] = useState<ImportExecutionMode>('STANDARD');
const [activeSections, setActiveSections] = useState<string[]>(['mapping', 'preview']);
const [csvOptions, setCsvOptions] = useState<ICsvOptions>(DEFAULT_CSV_OPTIONS);
const selectedFileName = file.fileName || file.file?.name || file.filePath || '';
Expand All @@ -76,6 +78,7 @@ const ImportMappingContent = ({ dataSourceId, databaseName, schemaName, tableNam
useEffect(() => {
let active = true;
setFileId(undefined);
setMode('STANDARD');
setLoading(true);
setError(null);
stageSelectedImportFile(file, sqlService.uploadImportFile, sqlService.stageDesktopImportFile)
Expand Down Expand Up @@ -227,6 +230,7 @@ const ImportMappingContent = ({ dataSourceId, databaseName, schemaName, tableNam
.map(([source, target]) => ({ sourceColumn: source, targetColumn: target })),
unmappedTarget,
csvOptions: taskCsvOptions,
mode,
})
.then((result) => onSubmitted(result.taskId))
.catch((e) => setError(resolveErrorMessage(e)))
Expand Down Expand Up @@ -275,6 +279,13 @@ const ImportMappingContent = ({ dataSourceId, databaseName, schemaName, tableNam
</div>
{preview && (
<div className={styles.actions}>
{isCsv && (
<ImportModeControl
value={mode}
onChange={setMode}
disabled={executing || loading || loadedPreviewKey !== currentPreviewKey}
/>
)}
<Button
type="primary"
loading={executing}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,10 @@ export const useStyles = createStyles(({ css, token }) => ({
`,
actions: css`
z-index: 2;
display: flex;
align-items: center;
justify-content: flex-end;
gap: 16px;
flex: none;
padding-top: 6px;
background: ${token.colorBgElevated};
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import { Modal, Space, Switch, Tag, Tooltip } from 'antd';
import i18n from '@/i18n';
import type { ImportExecutionMode } from '@/typings/importExport';

interface Props {
value: ImportExecutionMode;
onChange: (value: ImportExecutionMode) => void;
disabled?: boolean;
}

export default function ImportModeControl({ value, onChange, disabled }: Props) {
const [modal, contextHolder] = Modal.useModal();

const toggle = (checked: boolean) => {
if (checked) {
modal.confirm({
title: i18n('workspace.importExport.ultraModeConfirmTitle'),
content: i18n('workspace.importExport.ultraModeAcknowledge'),
okText: i18n('workspace.importExport.ultraModeConfirm'),
cancelText: i18n('common.button.cancel'),
onOk: () => onChange('FAST'),
});
return;
}
onChange('STANDARD');
};

return (
<Space>
{contextHolder}
<Tooltip title={i18n('workspace.importExport.ultraModeHint')}>
<Space size={4}><span>{i18n('workspace.importExport.ultraMode')}</span><Tag color="gold">{i18n('workspace.importExport.beta')}</Tag></Space>
</Tooltip>
<Switch
aria-label={i18n('workspace.importExport.ultraMode')}
checked={value === 'FAST'}
disabled={disabled}
onChange={toggle}
/>
</Space>
);
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
import { ImportExportTaskType } from '@/constants/importExport';
import zhCN from '@/i18n/zh-CN/workspace';
import enUS from '@/i18n/en-US/workspace';
import jaJP from '@/i18n/ja-JP/workspace';
import koKR from '@/i18n/ko-KR/workspace';
import esES from '@/i18n/es-ES/workspace';
import assert from 'node:assert/strict';
import { formatTaskEventMessage, type TaskEventMessageKey } from './eventMessage';
import type { ImportExportTaskEvent } from '@/typings/importExport';
Expand Down Expand Up @@ -46,3 +52,33 @@ assert.equal(
formatTaskEventMessage(event('TASK_FAILED', 'CSV 存在从第 123 行开始未闭合的引号'), translate('en')),
'CSV 存在从第 123 行开始未闭合的引号',
);

// Format the same stored events using each locale, including switching languages.
const csvSummary = event('IMPORT_SUMMARY', 'CSV import finished');
const completedBatch = {
...event('BATCH_EXECUTED', 'SQL batch executed'),
details: { batch: 1, statementCount: 20_000 },
};
for (const messages of [zhCN, enUS, jaJP, koKR, esES, zhCN]) {
const localize = (key: TaskEventMessageKey, ...args: Array<string | number>) =>
args.reduce((message, value, index) => message.replace(`{${index + 1}}`, String(value)), messages[key]);
const format = (entry: ImportExportTaskEvent) =>
formatTaskEventMessage(entry, localize, ImportExportTaskType.DATA_FILE_IMPORT);
assert.equal(format(csvSummary), messages['workspace.task.event.csvImportFinished']);
assert.equal(format(completedBatch), messages['workspace.task.event.batchCompletedRows'].replace('{1}', '20000'));
assert.equal(format({ ...completedBatch, details: { statementCount: 20000, importedRows: 40000 } }),
messages['workspace.task.event.batchCompletedTotal'].replace('{1}', '20000').replace('{2}', '40000'));
assert.equal(format({ ...csvSummary, details: { importedRows: 100000, elapsedMillis: 14321 } }),
messages['workspace.task.event.csvImportSummary'].replace('{1}', '100000').replace('{2}', '14.32'));
assert.equal(format({ ...csvSummary, details: { importedRows: 0, elapsedMillis: 0 } }),
messages['workspace.task.event.csvImportSummary'].replace('{1}', '0').replace('{2}', '0.00'));
for (const count of [undefined, '20000', -1, NaN]) {
assert.equal(format({ ...completedBatch, details: { statementCount: count } }),
messages['workspace.task.event.sqlBatchExecuted']);
assert.equal(format({ ...csvSummary, details: { importedRows: 100, elapsedMillis: count } }),
messages['workspace.task.event.csvImportFinished']);
}
assert.equal(formatTaskEventMessage(completedBatch, localize, ImportExportTaskType.SQL_FILE_IMPORT),
messages['workspace.task.event.sqlBatchExecuted']);
assert.equal(format(event('CUSTOM_EVENT', 'driver message')), 'driver message');
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { ImportExportTaskType } from '@/constants/importExport';
import type { ImportExportTaskEvent } from '@/typings/importExport';

const LEGACY_EVENT_TIMESTAMP = /^\d{4}-\d{2}-\d{2}[ T]\d{2}:\d{2}:\d{2}:?\s*/;
Expand All @@ -24,18 +25,45 @@ const fixedMessageKeys = {
export type TaskEventMessageKey =
| (typeof lifecycleMessageKeys)[keyof typeof lifecycleMessageKeys]
| (typeof fixedMessageKeys)[keyof typeof fixedMessageKeys]
| 'workspace.task.event.csvImportFinished'
| 'workspace.task.event.csvImportSummary'
| 'workspace.task.event.batchCompletedTotal'
| 'workspace.task.event.batchCompletedRows'
| 'workspace.task.event.batchExecuted'
| 'workspace.task.event.importingRecords';

type Translate = (key: TaskEventMessageKey, ...args: Array<string | number>) => string;

export const formatTaskEventMessage = (event: ImportExportTaskEvent, translate: Translate) => {
export const formatTaskEventMessage = (
event: ImportExportTaskEvent,
translate: Translate,
taskType?: ImportExportTaskType,
) => {
const message = event.message?.replace(LEGACY_EVENT_TIMESTAMP, '').trim() || '-';
const importedRows = event.details?.importedRows;
const elapsedMillis = event.details?.elapsedMillis;
if (event.code === 'IMPORT_SUMMARY') {
if (typeof importedRows === 'number' && Number.isSafeInteger(importedRows) && importedRows >= 0 &&
typeof elapsedMillis === 'number' && Number.isFinite(elapsedMillis) && elapsedMillis >= 0) {
return translate('workspace.task.event.csvImportSummary', importedRows, (elapsedMillis / 1000).toFixed(2));
}
return translate('workspace.task.event.csvImportFinished');
}
const lifecycleKey = lifecycleMessageKeys[event.code as keyof typeof lifecycleMessageKeys];
if (lifecycleKey) {
return translate(lifecycleKey);
}

const statementCount = event.details?.statementCount;
if (taskType === ImportExportTaskType.DATA_FILE_IMPORT &&
event.code === 'BATCH_EXECUTED' && message === 'SQL batch executed' &&
typeof statementCount === 'number' && Number.isSafeInteger(statementCount) && statementCount >= 0) {
if (typeof importedRows === 'number' && Number.isSafeInteger(importedRows) && importedRows >= statementCount) {
return translate('workspace.task.event.batchCompletedTotal', statementCount, importedRows);
}
return translate('workspace.task.event.batchCompletedRows', statementCount);
}

const fixedMessageKey = fixedMessageKeys[message as keyof typeof fixedMessageKeys];
if (fixedMessageKey) {
return translate(fixedMessageKey);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -309,7 +309,7 @@ const Log = (props: IProps) => {
className={styles.virtualListItem}
timestamp={event.createdAt}
level={event.level}
message={formatTaskEventMessage(event, i18n)}
message={formatTaskEventMessage(event, i18n, taskDetails.type)}
/>
)}
</VirtualList>
Expand Down
10 changes: 10 additions & 0 deletions chat2db-community-client/src/i18n/en-US/workspace.ts
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,12 @@ export default {
'workspace.menu.exportStructureData': 'Export structure and data',
'workspace.menu.copyStructure': 'Copy structure',
'workspace.menu.copyStructureData': 'Copy structure and data',
'workspace.importExport.ultraMode': 'Ultra-Fast Mode',
'workspace.importExport.beta': 'Beta',
'workspace.importExport.ultraModeHint': 'Uses multi-threaded parallel processing: faster, but higher resource usage',
'workspace.importExport.ultraModeConfirmTitle': 'Enable Ultra-Fast Mode',
'workspace.importExport.ultraModeAcknowledge': "Uses more local CPU and database connections, increasing database concurrency pressure. SQL ordering dependencies may cause failure; written data is not rolled back automatically.",
'workspace.importExport.ultraModeConfirm': 'Enable',
'workspace.importExport.targetTable': 'Target table',
'workspace.importExport.fileType': 'File type',
'workspace.importExport.exportLocation': 'Export location',
Expand Down Expand Up @@ -173,6 +179,10 @@ export default {
'workspace.task.event.importingRecords': 'Importing {1} records',
'workspace.task.event.sqlFileReadStarted': 'Reading SQL import file',
'workspace.task.event.sqlFileParsed': 'SQL file parsed',
'workspace.task.event.batchCompletedTotal': 'Batch completed: {1} rows imported, {2} rows imported in total',
'workspace.task.event.csvImportSummary': 'CSV import completed: {1} rows imported in {2} seconds',
'workspace.task.event.csvImportFinished': 'CSV import completed',
'workspace.task.event.batchCompletedRows': 'Batch completed: {1} rows imported',
'workspace.task.event.sqlBatchExecuted': 'SQL batch executed',
'workspace.task.event.sqlStatementExecuted': 'SQL statement executed',
'workspace.task.delete.confirm': 'Delete task "{1}", all execution logs, and exported files?',
Expand Down
10 changes: 10 additions & 0 deletions chat2db-community-client/src/i18n/es-ES/workspace.ts
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,10 @@ export default {
'workspace.task.event.importingRecords': 'Importando {1} registros',
'workspace.task.event.sqlFileReadStarted': 'Leyendo el archivo SQL de importación',
'workspace.task.event.sqlFileParsed': 'Archivo SQL analizado',
'workspace.task.event.batchCompletedTotal': 'Lote completado: {1} filas importadas, {2} filas importadas en total',
'workspace.task.event.csvImportSummary': 'Importación CSV completada: {1} filas importadas en {2} segundos',
'workspace.task.event.csvImportFinished': 'Importación CSV completada',
'workspace.task.event.batchCompletedRows': 'Lote completado: {1} filas importadas',
'workspace.task.event.sqlBatchExecuted': 'Lote SQL ejecutado',
'workspace.task.event.sqlStatementExecuted': 'Sentencia SQL ejecutada',
'workspace.task.delete.confirm':
Expand Down Expand Up @@ -423,4 +427,10 @@ export default {
'workspace.routine.tips.onlyMysqlRoutine': 'Por ahora solo se admiten funciones y procedimientos de MySQL',
'workspace.routine.tips.refreshSuccess': 'Se volvió a cargar el DDL del servidor',
'workspace.routine.tips.revertSuccess': 'Se revirtió a la versión cargada',
'workspace.importExport.ultraMode': 'Modo ultrarrápido',
'workspace.importExport.beta': 'Beta',
'workspace.importExport.ultraModeHint': 'Usa procesamiento paralelo multi-hilo: más rápido, pero con mayor consumo de recursos',
'workspace.importExport.ultraModeConfirmTitle': 'Habilitar modo ultrarrápido',
'workspace.importExport.ultraModeAcknowledge': "Usa más CPU local y conexiones de base de datos, aumentando la presión de concurrencia. Las dependencias de orden SQL pueden causar fallos; los datos escritos no se revierten automáticamente.",
'workspace.importExport.ultraModeConfirm': 'Habilitar',
};
10 changes: 10 additions & 0 deletions chat2db-community-client/src/i18n/ja-JP/workspace.ts
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,12 @@ export default {
'workspace.menu.copyStructure': '構造をコピー',
'workspace.menu.copyStructureData': '構造とデータをコピー',
'workspace.importExport.targetTable': 'ターゲットテーブル',
'workspace.importExport.ultraMode': '超高速モード',
'workspace.importExport.beta': 'Beta',
'workspace.importExport.ultraModeHint': 'マルチスレッド並列処理を使用します:より高速ですが、リソース使用量が増加します',
'workspace.importExport.ultraModeConfirmTitle': '超高速モードを有効化',
'workspace.importExport.ultraModeAcknowledge': "ローカル CPU とデータベース接続を多く使用し、データベースの同時実行負荷が増加します。SQL に順序依存がある場合は失敗する可能性があり、書き込み済みデータは自動ロールバックされません。",
'workspace.importExport.ultraModeConfirm': '有効にする',
'workspace.importExport.fileType': 'ファイルタイプ',
'workspace.importExport.exportLocation': 'エクスポート位置',
'workspace.importExport.executionEnvironment': '実行環境',
Expand Down Expand Up @@ -171,6 +177,10 @@ export default {
'workspace.task.event.importingRecords': '{1} 件のレコードをインポートしています',
'workspace.task.event.sqlFileReadStarted': 'SQL インポートファイルを読み込んでいます',
'workspace.task.event.sqlFileParsed': 'SQL ファイルの解析が完了しました',
'workspace.task.event.batchCompletedTotal': 'バッチ完了:{1} 行をインポート、累計 {2} 行',
'workspace.task.event.csvImportSummary': 'CSV インポート完了:合計 {1} 行、所要時間 {2} 秒',
'workspace.task.event.csvImportFinished': 'CSV のインポートが完了しました',
'workspace.task.event.batchCompletedRows': 'バッチ完了:{1} 行をインポートしました',
'workspace.task.event.sqlBatchExecuted': 'SQL バッチを実行しました',
'workspace.task.event.sqlStatementExecuted': 'SQL ステートメントを実行しました',
'workspace.task.delete.confirm': 'タスク「{1}」、すべての実行ログ、エクスポートファイルを削除しますか?',
Expand Down
10 changes: 10 additions & 0 deletions chat2db-community-client/src/i18n/ko-KR/workspace.ts
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,10 @@ export default {
'workspace.task.event.importingRecords': '{1}개 레코드를 가져오는 중입니다',
'workspace.task.event.sqlFileReadStarted': 'SQL 가져오기 파일을 읽는 중입니다',
'workspace.task.event.sqlFileParsed': 'SQL 파일 구문 분석이 완료되었습니다',
'workspace.task.event.batchCompletedTotal': '배치 완료: {1}개 행 가져옴, 누적 {2}개 행',
'workspace.task.event.csvImportSummary': 'CSV 가져오기 완료: 총 {1}개 행, 총 소요 시간 {2}초',
'workspace.task.event.csvImportFinished': 'CSV 가져오기 완료',
'workspace.task.event.batchCompletedRows': '배치 완료: {1}개 행 가져옴',
'workspace.task.event.sqlBatchExecuted': 'SQL 배치가 실행되었습니다',
'workspace.task.event.sqlStatementExecuted': 'SQL 문이 실행되었습니다',
'workspace.task.delete.confirm': '작업 "{1}", 모든 실행 로그 및 내보낸 파일을 삭제하시겠습니까?',
Expand Down Expand Up @@ -419,4 +423,10 @@ export default {
'workspace.routine.tips.onlyMysqlRoutine': '현재 MySQL 함수와 프로시저만 지원합니다',
'workspace.routine.tips.refreshSuccess': '서버 DDL을 다시 불러왔습니다',
'workspace.routine.tips.revertSuccess': '불러온 버전으로 되돌렸습니다',
'workspace.importExport.ultraMode': '초고속 모드',
'workspace.importExport.beta': 'Beta',
'workspace.importExport.ultraModeHint': '멀티스레드 병렬 처리를 사용하여 더 빠르지만 리소스 사용량이 증가합니다',
'workspace.importExport.ultraModeConfirmTitle': '초고속 모드 활성화',
'workspace.importExport.ultraModeAcknowledge': "로컬 CPU와 데이터베이스 연결을 더 사용하여 데이터베이스 동시성 부하가 증가합니다. SQL 순서 의존성이 있으면 실패할 수 있으며, 이미 기록된 데이터는 자동으로 롤백되지 않습니다.",
'workspace.importExport.ultraModeConfirm': '활성화',
};
Loading
Loading