diff --git a/apps/desktop/src/lib/__tests__/sql/sqlStatementRanges.spec.ts b/apps/desktop/src/lib/__tests__/sql/sqlStatementRanges.spec.ts index 2ecfafa40..8c80424d9 100644 --- a/apps/desktop/src/lib/__tests__/sql/sqlStatementRanges.spec.ts +++ b/apps/desktop/src/lib/__tests__/sql/sqlStatementRanges.spec.ts @@ -1104,6 +1104,15 @@ describe("buildExecutionCandidates", () => { expect(splitSqlStatementRanges("/*@global:true*/", "mysql")).toEqual([]); }); + it("preserves leading ampersand tenant routing hints in current statement candidates", () => { + const hintedSql = "/*&tenant:mctest*/\nSELECT count(*) FROM tenant_table"; + const sql = `SELECT 1;\n${hintedSql};`; + const candidates = buildExecutionCandidates(sql, indexOf(sql, "tenant_table"), "mysql"); + + expect(candidates[0].sql).toBe(hintedSql); + expect(splitSqlStatementRanges("/*&tenant:mctest*/", "mysql")).toEqual([]); + }); + it("uses the cursor statement for the first candidate when there is no selection", () => { const sql = "SELECT *\nFROM users\nWHERE active = 1"; const candidates = buildExecutionCandidates(sql, indexOf(sql, "users")); diff --git a/apps/desktop/src/lib/sql/sqlStatementRanges.ts b/apps/desktop/src/lib/sql/sqlStatementRanges.ts index c2c5b53ce..c53e3c697 100644 --- a/apps/desktop/src/lib/sql/sqlStatementRanges.ts +++ b/apps/desktop/src/lib/sql/sqlStatementRanges.ts @@ -445,7 +445,7 @@ export function splitSqlStatementRanges(sql: string, databaseType?: DatabaseType // Block comments consume until the closing */. if (ch === "/" && next === "*") { const hintMarker = sql[i + 2]; - if (statementStart === -1 && pendingHintStart === -1 && (hintMarker === "+" || hintMarker === "@")) pendingHintStart = i; + if (statementStart === -1 && pendingHintStart === -1 && (hintMarker === "+" || hintMarker === "@" || hintMarker === "&")) pendingHintStart = i; const close = sql.indexOf("*/", i + 2); i = close === -1 ? len : close + 2; continue;