fix(sqlserver): avoid false unknown column diagnostics

This commit is contained in:
t8y2
2026-05-27 23:07:47 +08:00
parent 9b702b86bf
commit ac4313afee
5 changed files with 132 additions and 5 deletions
@@ -393,6 +393,7 @@ async function ensureColumnsForTable(table: { name: string; schema?: string | nu
table.name,
table.schema ?? undefined,
);
if (columns.length === 0) return;
cachedColumnsByTable.set(cacheKey, columns);
}
@@ -754,10 +755,12 @@ async function provideSqlCompletions(
completionContext.insertSchema,
);
if (epoch !== completionEpoch) return null;
const insertKey = completionContext.insertSchema
? `${completionContext.insertSchema}.${completionContext.insertTable}`
: completionContext.insertTable;
insertColumnsByTable.set(insertKey, insertCols);
if (insertCols.length > 0) {
const insertKey = completionContext.insertSchema
? `${completionContext.insertSchema}.${completionContext.insertTable}`
: completionContext.insertTable;
insertColumnsByTable.set(insertKey, insertCols);
}
} catch {
// ignore
}
@@ -865,6 +868,7 @@ async function provideSqlCompletions(
refTable.schema,
);
if (epoch !== completionEpoch) return;
if (columns.length === 0) return;
cachedColumnsByTable.set(cacheKey, columns);
} catch (e) {
console.error(`[DBX] Failed to load columns for ${cacheKey}:`, e);
@@ -119,7 +119,9 @@ function columnsForTable(
const keys = table.schema ? [`${table.schema}.${table.name}`, table.name] : [table.name];
for (const key of keys) {
const columns = columnsByTable.get(key) ?? columnsByTable.get(normalizeName(key));
if (columns) return columns;
// Empty metadata usually means the upstream schema lookup was inconclusive,
// so avoid surfacing a false "unknown column" warning.
if (columns && columns.length > 0) return columns;
}
return null;
}
@@ -1419,6 +1419,9 @@ export const useConnectionStore = defineStore("connection", () => {
table: string,
schema?: string,
): Promise<SqlCompletionColumn[]> {
if (isSchemaAwareDatabase(connectionId) && !schema) {
return [];
}
const cacheKey = `${connectionId}:${database}:${schema || ""}:${table}`;
if (!completionColumnsCache.value[cacheKey]) {
await ensureConnected(connectionId);