feat: synchronize tab titles with saved SQL file renaming (#2739)

- Bidirectional sync between SQL library and tab titles
- Case-insensitive .sql extension via shared ensureSqlExtension
- Revert tab title when rename persistence fails

Close #2648

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
一颗红心andCursor authored and GitHub committed 2026-07-07 18:09:01 +08:00
1 parent b49638ff1e
commit 184e235999
6 files changed
+166 -11

No files matched your search

@@ -16,6 +16,7 @@ import { useQueryStore } from "@/stores/queryStore";
import { useSettingsStore } from "@/stores/settingsStore";
import { focusSidebarRenameInput } from "@/lib/sidebar/sidebarRenameFocus";
import { savedSqlFolderBranchFileCount } from "@/lib/savedSql/savedSqlFolderCounts";
import { ensureSqlExtension, stripSqlExtension } from "@/lib/savedSql/savedSqlFileName";
import type { SavedSqlFile, SavedSqlFolder } from "@/types/database";
const { t } = useI18n();
@@ -73,18 +74,10 @@ function importConnectionIdForFolder(folder?: SavedSqlFolder) {
return folder?.connectionId || activeImportConnectionId();
}
function ensureSqlExtension(name: string) {
return /\.sql$/i.test(name) ? name : `${name}.sql`;
}
function sanitizeFileSystemSegment(name: string) {
return name.replace(/[<>:"/\\|?*\u0000-\u001F]/g, "_").trim() || "untitled";
}
function stripSqlExtension(name: string) {
return name.replace(/\.sql$/i, "");
}
function relativeImportName(baseDir: string, filePath: string) {
const normalizedBase = baseDir.replace(/\\/g, "/").replace(/\/+$/, "");
const normalizedFile = filePath.replace(/\\/g, "/");
@@ -596,7 +589,7 @@ async function confirmRename() {
if (type === "folder") {
await savedSqlStore.renameFolder(id, name);
} else {
await savedSqlStore.renameFile(id, name.endsWith(".sql") ? name : `${name}.sql`);
await savedSqlStore.renameFile(id, ensureSqlExtension(name));
}
}