fix(elasticsearch): complete mapping fields in Query DSL field slots

This commit is contained in:
onenewcode authored and GitHub committed 2026-09-17 11:48:34 +08:00
1 parent dd84e6c06a
commit c0d6965b5f
5 files changed
+628 -58

No files matched your search

@@ -88,7 +88,15 @@ import { driverProfileHasCompletionCandidates } from "@/lib/database/driverProfi
import { sqlCompletionContextFromSemantic, sqlSemanticSelectStarIsOnlyProjection, sqlSemanticSelectStarQualifierSql, sqlSemanticSelectStarTableSources } from "@/lib/sql/semantic/completion";
import { buildSqlSemanticModel } from "@/lib/sql/semantic/model";
import { mergeSqlSemanticReferenceAnalysis, resolveSqlSemanticNavigationTarget } from "@/lib/sql/semantic/references";
import { buildElasticsearchCompletionItemsFromContext, getElasticsearchCompletionContext, getElasticsearchCompletionResultValidFor, shouldAutoOpenElasticsearchCompletion, type ElasticsearchCompletionItem } from "@/lib/elasticsearch/elasticsearchCompletion";
import {
buildElasticsearchCompletionItemsFromContext,
elasticsearchCompletionNeedsFields,
getElasticsearchCompletionContext,
getElasticsearchCompletionResultValidFor,
shouldAutoOpenElasticsearchCompletion,
type ElasticsearchCompletionField,
type ElasticsearchCompletionItem,
} from "@/lib/elasticsearch/elasticsearchCompletion";
import { buildMongoCompletionItemsFromContext, getMongoCompletionContext, getMongoCompletionResultValidFor, mongoCompletionNeedsCollections, mongoCompletionNeedsFields, shouldAutoOpenMongoCompletion, type MongoCompletionItem } from "@/lib/mongo/mongoCompletion";
import {
buildSqlServerUseDatabaseCompletionItems,
@@ -4526,9 +4534,11 @@ function shouldApplyCompletionAsSnippet(item: QueryCompletionItem): boolean {
function completionOptionForItem(item: QueryCompletionItem | BatchColumnSelectionActionItem) {
const filterText = "filterText" in item && typeof item.filterText === "string" ? item.filterText : undefined;
const labelPresentation = completionLabelPresentation(item.label, filterText);
const sortText = "sortText" in item && typeof item.sortText === "string" ? item.sortText : labelPresentation.sortText;
if (isBatchColumnSelectionAction(item)) {
return {
...labelPresentation,
...(sortText ? { sortText } : {}),
dbxBatchColumnSelectionAction: { sessionKey: item.sessionKey },
type: item.type,
detail: item.detail,
@@ -4545,6 +4555,7 @@ function completionOptionForItem(item: QueryCompletionItem | BatchColumnSelectio
if (shouldApplyCompletionAsSnippet(item) && item.apply) {
const completion = codeMirrorSnippetCompletion(item.apply, {
...labelPresentation,
...(sortText ? { sortText } : {}),
type: item.type,
detail: item.detail,
info: item.info,
@@ -4578,6 +4589,7 @@ function completionOptionForItem(item: QueryCompletionItem | BatchColumnSelectio
}
return cacheBatchColumnSelectionOption(batchColumnSelection, {
...labelPresentation,
...(sortText ? { sortText } : {}),
...(batchColumnSelection ? { dbxBatchColumnSelection: batchColumnSelection } : {}),
type: item.type,
detail: item.detail,
@@ -4612,6 +4624,7 @@ async function provideElasticsearchCompletions(currentState: import("@codemirror
const completionContext = getElasticsearchCompletionContext(fullDoc, position);
let indices: string[] = [];
let fields: ElasticsearchCompletionField[] = [];
if (props.database != null && completionContext.mode === "path") {
try {
indices = await connectionStore.listElasticsearchCompletionIndices(props.connectionId, props.database);
@@ -4619,9 +4632,16 @@ async function provideElasticsearchCompletions(currentState: import("@codemirror
indices = [];
}
}
if (elasticsearchCompletionNeedsFields(completionContext) && completionContext.index) {
try {
fields = await connectionStore.listElasticsearchCompletionFields(props.connectionId, completionContext.index);
} catch {
fields = [];
}
}
if (epoch !== completionEpoch) return null;
const items = buildElasticsearchCompletionItemsFromContext(completionContext, { indices });
const items = buildElasticsearchCompletionItemsFromContext(completionContext, { indices, fields });
return buildCompletionResult(items, completionContext.from, getElasticsearchCompletionResultValidFor());
}