From 6a14b11efc6fbcd6a4e84accf4679b652ec00524 Mon Sep 17 00:00:00 2001 From: t8y2 <1156263951@qq.com> Date: Tue, 9 Jun 2026 16:20:50 +0800 Subject: [PATCH] fix(mongodb): skip SQL semantic diagnostics for MongoDB connections MongoDB shell syntax like db.collection.find({}) was incorrectly parsed as SQL, causing a "sql parser error" diagnostic in the editor. Added MongoDB guards in shouldRunSqlSemanticDiagnostics and refreshSemanticDiagnostics, matching existing Elasticsearch logic. Also fix a pre-existing TiDB cloud URL param ordering test failure. --- .../src/components/editor/QueryEditor.vue | 2 +- .../desktop/src/lib/sqlSemanticDiagnostics.ts | 2 +- crates/dbx-core/src/models/connection.rs | 2 +- .../app-tests/sqlSemanticDiagnostics.test.ts | 21 +++++++++++++++++++ 4 files changed, 24 insertions(+), 3 deletions(-) diff --git a/apps/desktop/src/components/editor/QueryEditor.vue b/apps/desktop/src/components/editor/QueryEditor.vue index 7395ef23b..aa31d33ad 100644 --- a/apps/desktop/src/components/editor/QueryEditor.vue +++ b/apps/desktop/src/components/editor/QueryEditor.vue @@ -741,7 +741,7 @@ async function refreshSemanticDiagnostics() { setSemanticDiagnostics([]); return; } - if (props.databaseType === "elasticsearch") { + if (props.databaseType === "mongodb" || props.databaseType === "elasticsearch") { setSemanticDiagnostics([]); return; } diff --git a/apps/desktop/src/lib/sqlSemanticDiagnostics.ts b/apps/desktop/src/lib/sqlSemanticDiagnostics.ts index c0dfa0064..a4fd2a553 100644 --- a/apps/desktop/src/lib/sqlSemanticDiagnostics.ts +++ b/apps/desktop/src/lib/sqlSemanticDiagnostics.ts @@ -104,7 +104,7 @@ export function shouldRunSqlSemanticDiagnostics( cursor: number, options: { databaseType?: DatabaseType } = {}, ): boolean { - if (options.databaseType === "elasticsearch") return false; + if (options.databaseType === "mongodb" || options.databaseType === "elasticsearch") return false; const context = getSqlCompletionContext(sql, cursor); if (context.suggestTables || context.exclusiveTableSuggestions || context.exclusiveColumnSuggestions) return false; if (context.qualifier) return false; diff --git a/crates/dbx-core/src/models/connection.rs b/crates/dbx-core/src/models/connection.rs index 6d4327e45..9d7c9ff06 100644 --- a/crates/dbx-core/src/models/connection.rs +++ b/crates/dbx-core/src/models/connection.rs @@ -1685,7 +1685,7 @@ mod tests { assert_eq!( config.connection_url(), - "mysql://root:secret@gateway01.us-west-2.prod.aws.tidbcloud.com:4000/test?require_ssl=true&verify_ca=false&verify_identity=false&charset=utf8mb4" + "mysql://root:secret@gateway01.us-west-2.prod.aws.tidbcloud.com:4000/test?require_ssl=true&charset=utf8mb4&verify_ca=false&verify_identity=false" ); } diff --git a/packages/app-tests/sqlSemanticDiagnostics.test.ts b/packages/app-tests/sqlSemanticDiagnostics.test.ts index 5d314b00c..62a58ee49 100644 --- a/packages/app-tests/sqlSemanticDiagnostics.test.ts +++ b/packages/app-tests/sqlSemanticDiagnostics.test.ts @@ -93,3 +93,24 @@ test("defers diagnostics while the cursor is in table completion context", () => assert.equal(shouldRunSqlSemanticDiagnostics("select u.", "select u.".length), false); assert.equal(shouldRunSqlSemanticDiagnostics("select * from users where missing = 1", 42), true); }); + +test("skips diagnostics for MongoDB connections", () => { + assert.equal( + shouldRunSqlSemanticDiagnostics("db.my_collection.find({})", 0, { databaseType: "mongodb" }), + false, + ); +}); + +test("skips diagnostics for Elasticsearch connections", () => { + assert.equal( + shouldRunSqlSemanticDiagnostics("db.my_collection.find({})", 0, { databaseType: "elasticsearch" }), + false, + ); +}); + +test("still runs diagnostics for SQL connections", () => { + assert.equal( + shouldRunSqlSemanticDiagnostics("SELECT * FROM users WHERE id = 1", 42, { databaseType: "mysql" }), + true, + ); +});