fix(mysql): improve create database permission hint

This commit is contained in:
zipg authored and GitHub committed 2026-07-21 11:22:51 +08:00
1 parent 5847f242de
commit 7d41e4123f
10 files changed
+63 -5

No files matched your search

@@ -91,6 +91,7 @@ import { dataTabOpenModeFromTreeClick, type DataTabOpenMode } from "@/lib/sideba
import { isCopySidebarSelectionShortcut, isEditSidebarConnectionShortcut, isPasteSidebarSelectionShortcut } from "@/lib/editor/keyboardShortcuts";
import { canRefreshDataTableFromSingleActivationDoubleClick, dataTableDoubleClickAction } from "@/lib/tabs/dataTabActivation";
import { attachedDatabaseNameFromPath, buildCreateDatabaseSql, buildDuckDbAttachDatabaseSql, buildSqliteAttachDatabaseSql, supportsCreateDatabaseCharset, uniqueAttachedDatabaseName } from "@/lib/database/createDatabaseSql";
import { appendCreateDatabaseErrorHint } from "@/lib/database/createDatabaseErrorHints";
import { SQLITE_DATABASE_FILE_EXTENSIONS } from "@/lib/database/databaseFileDetection";
import {
buildCreateSchemaSql,
@@ -2572,24 +2573,30 @@ async function applyCreateDatabaseAuthorizationPlan() {
if (!node.connectionId || !plan || createDatabaseAuthorizationApplying.value) return;
createDatabaseAuthorizationApplying.value = true;
try {
const config = connectionStore.getConfig(node.connectionId);
const results = await executeWithProductionSqlGuard({
connection: connectionStore.getConfig(node.connectionId),
connection: config,
database: "",
sql: createDatabasePreviewSql.value,
source: t("production.sourceSidebar"),
execute: () => executeAuthorizationPlan(plan, (step) => api.executeMulti(node.connectionId!, step.database, step.sql, undefined, undefined, { maxRows: 1000, continueOnError: true })),
});
if (!results) return;
createDatabaseAuthorizationResults.value = results;
const created = results.some((result) => result.step.id === "create-database" && result.status === "success");
const status = authorizationPlanStatus(results);
const displayResults = results.map((result) => ({
...result,
message: result.message && result.step.operation === "createDatabase" ? appendCreateDatabaseErrorHint(config?.db_type, result.message, t) : result.message,
}));
createDatabaseAuthorizationResults.value = displayResults;
const created = displayResults.some((result) => result.step.id === "create-database" && result.status === "success");
const status = authorizationPlanStatus(displayResults);
if (created) {
await connectionStore.ensureVisibleDatabase(node.connectionId, name);
await connectionStore.loadDatabases(node.connectionId, { force: true });
}
toast(t(status === "success" ? "contextMenu.createDatabaseSuccess" : status === "partial" ? "contextMenu.createDatabasePartial" : "contextMenu.createDatabaseFailed", { name }), status === "success" ? 3000 : 5000);
} catch (error: any) {
toast(t("contextMenu.tableOperationFailed", { message: error?.message || String(error) }), 5000);
const message = appendCreateDatabaseErrorHint(connectionStore.getConfig(node.connectionId)?.db_type, error?.message || String(error), t);
toast(t("contextMenu.tableOperationFailed", { message }), 8000);
} finally {
createDatabaseAuthorizationApplying.value = false;
}