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

@@ -0,0 +1,20 @@
import { describe, expect, it } from "vitest";
import { ensureSqlExtension, stripSqlExtension } from "@/lib/savedSql/savedSqlFileName";
describe("savedSqlFileName", () => {
it("appends .sql when missing", () => {
expect(ensureSqlExtension("report")).toBe("report.sql");
});
it("preserves lowercase .sql extension", () => {
expect(ensureSqlExtension("report.sql")).toBe("report.sql");
});
it("preserves uppercase .SQL extension without double-appending", () => {
expect(ensureSqlExtension("report.SQL")).toBe("report.SQL");
});
it("strips .sql extension case-insensitively", () => {
expect(stripSqlExtension("report.SQL")).toBe("report");
});
});
@@ -0,0 +1,9 @@
export function ensureSqlExtension(name: string): string {
const trimmed = name.trim();
if (!trimmed) return trimmed;
return /\.sql$/i.test(trimmed) ? trimmed : `${trimmed}.sql`;
}
export function stripSqlExtension(name: string): string {
return name.replace(/\.sql$/i, "");
}