fix(sqlserver): suggest database names in query completion
This commit is contained in:
1 parent
3285cb21a4
commit
79873443e4
9 files changed
+284
-45
No files matched your search
@@ -1,6 +1,6 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { getSqlCompletionContext } from "@/lib/sql/sqlCompletion";
|
||||
import { resolveSqlCompletionRoutineLookupTarget, resolveSqlCompletionTableLookupTarget } from "@/lib/sql/sqlCompletionLookupTarget";
|
||||
import { mergeSqlCompletionQualifierNames, resolveSqlCompletionRoutineLookupTarget, resolveSqlCompletionSchemaLookupDatabase, resolveSqlCompletionTableLookupTarget } from "@/lib/sql/sqlCompletionLookupTarget";
|
||||
|
||||
describe("sqlCompletionLookupTarget", () => {
|
||||
it("treats qualified table completion as a database lookup for MySQL-compatible engines", () => {
|
||||
@@ -99,6 +99,72 @@ describe("sqlCompletionLookupTarget", () => {
|
||||
expect(target).toEqual({ database: "app", schema: "sales", filter: "ord" });
|
||||
});
|
||||
|
||||
it("routes a SQL Server database qualifier to schema completion", () => {
|
||||
const completionContext = getSqlCompletionContext("select * from Reporting.d", "select * from Reporting.d".length);
|
||||
|
||||
expect(
|
||||
resolveSqlCompletionSchemaLookupDatabase({
|
||||
supportsDatabaseSchemaQualifier: true,
|
||||
knownDatabases: ["Default_DB", "Reporting"],
|
||||
completionContext,
|
||||
}),
|
||||
).toBe("Reporting");
|
||||
});
|
||||
|
||||
it("does not case-fold database qualifiers while choosing a schema scope", () => {
|
||||
const completionContext = getSqlCompletionContext("select * from reporting.d", "select * from reporting.d".length);
|
||||
|
||||
expect(
|
||||
resolveSqlCompletionSchemaLookupDatabase({
|
||||
supportsDatabaseSchemaQualifier: true,
|
||||
knownDatabases: ["Reporting"],
|
||||
completionContext,
|
||||
}),
|
||||
).toBeUndefined();
|
||||
});
|
||||
|
||||
it("does not let a case-distinct schema hide an exact database qualifier", () => {
|
||||
const completionContext = getSqlCompletionContext("select * from reporting.d", "select * from reporting.d".length);
|
||||
|
||||
expect(
|
||||
resolveSqlCompletionSchemaLookupDatabase({
|
||||
supportsDatabaseSchemaQualifier: true,
|
||||
knownDatabases: ["reporting"],
|
||||
knownSchemas: ["Reporting"],
|
||||
completionContext,
|
||||
}),
|
||||
).toBe("reporting");
|
||||
});
|
||||
|
||||
it("does not mistake a current-database schema for a database", () => {
|
||||
const completionContext = getSqlCompletionContext("select * from dbo.", "select * from dbo.".length);
|
||||
|
||||
expect(
|
||||
resolveSqlCompletionSchemaLookupDatabase({
|
||||
supportsDatabaseSchemaQualifier: true,
|
||||
knownDatabases: ["Default_DB", "Reporting"],
|
||||
completionContext,
|
||||
}),
|
||||
).toBeUndefined();
|
||||
});
|
||||
|
||||
it("prefers a current-database schema when a database has the same name", () => {
|
||||
const completionContext = getSqlCompletionContext("select * from dbo.", "select * from dbo.".length);
|
||||
|
||||
expect(
|
||||
resolveSqlCompletionSchemaLookupDatabase({
|
||||
supportsDatabaseSchemaQualifier: true,
|
||||
knownDatabases: ["dbo", "Reporting"],
|
||||
knownSchemas: ["dbo", "sales"],
|
||||
completionContext,
|
||||
}),
|
||||
).toBeUndefined();
|
||||
});
|
||||
|
||||
it("keeps case-distinct database and schema completion names", () => {
|
||||
expect(mergeSqlCompletionQualifierNames(["Reporting", "dbo"], ["reporting", "dbo"])).toEqual(["Reporting", "dbo", "reporting"]);
|
||||
});
|
||||
|
||||
it("uses the current schema for unqualified table completion", () => {
|
||||
const target = resolveSqlCompletionTableLookupTarget({
|
||||
currentDatabase: "app",
|
||||
|
||||
Reference in new issue
Block a user