Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions changelog.d/unreleased/2101.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
category: fixed
issues:
- 2101
affected:
- src/CodeIndex/Database/DbContext.cs
- src/CodeIndex/Database/DbSymbolReader.cs
- src/CodeIndex/Indexer/References/Support/SqlNameResolver.cs
- tests/CodeIndex.Tests/ReferenceExtractorTests.cs
---

## English

- **SQL quoted qualified names now respect dialect matching rules (#2101)** — schema-qualified SQL references keep MySQL backtick and T-SQL bracket matching case-insensitive while preserving PostgreSQL double-quoted identifier case sensitivity.

## 日本語

- **SQL の引用付き qualified name が dialect ごとの照合規則を尊重するようになりました (#2101)** — schema 修飾された SQL 参照では MySQL のバッククォートと T-SQL のブラケットは大文字小文字を区別しない照合を維持しつつ、PostgreSQL の二重引用符付き識別子は大文字小文字を区別します。
4 changes: 4 additions & 0 deletions src/CodeIndex/Database/DbContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -647,6 +647,10 @@ internal static void RegisterConnectionFunctions(SqliteConnection connection)
&& segmentCount > 0
? segmentCount
: null));
connection.CreateFunction(
"sql_reference_matches_target_at",
(string? symbolName, string? context, string? containerName, long? columnNumber, string? targetName) =>
SqlNameResolver.ReferenceMatchesTargetAtColumn(symbolName, context, containerName, ToNullableInt(columnNumber), targetName) ? 1 : 0);
connection.CreateFunction(
"sql_allow_leaf_fallback_at",
(string? symbolName, string? context, string? containerName, long? columnNumber) =>
Expand Down
8 changes: 4 additions & 4 deletions src/CodeIndex/Database/DbSymbolReader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2570,7 +2570,7 @@ FROM symbol_references sr
WHERE sr.symbol_name = s.name
OR (f.lang = 'sql' AND rf.lang = 'sql' AND (
(sql_resolve_reference_segment_count_at(sr.symbol_name, " + ReferenceContextSql("sr") + @", sr.container_name, sr.column_number) = sql_segment_count(s.name)
AND sql_resolve_reference_name_at(sr.symbol_name, " + ReferenceContextSql("sr") + @", sr.container_name, sr.column_number) = sql_normalize_name(s.name) COLLATE NOCASE)
AND sql_reference_matches_target_at(sr.symbol_name, " + ReferenceContextSql("sr") + @", sr.container_name, sr.column_number, s.name) = 1)
OR (sql_segment_count(sr.symbol_name) = 1
AND sql_allow_leaf_fallback_at(sr.symbol_name, " + ReferenceContextSql("sr") + @", sr.container_name, sr.column_number) = 1
AND sr.symbol_name = sql_leaf_name(s.name) COLLATE NOCASE
Expand All @@ -2580,7 +2580,7 @@ FROM symbols s_exact
JOIN files f_exact ON f_exact.id = s_exact.file_id
WHERE f_exact.lang = 'sql'
AND sql_segment_count(s_exact.name) = sql_resolve_reference_segment_count_at(sr.symbol_name, " + ReferenceContextSql("sr") + @", sr.container_name, sr.column_number)
AND sql_normalize_name(s_exact.name) = sql_resolve_reference_name_at(sr.symbol_name, " + ReferenceContextSql("sr") + @", sr.container_name, sr.column_number) COLLATE NOCASE
AND sql_reference_matches_target_at(sr.symbol_name, " + ReferenceContextSql("sr") + @", sr.container_name, sr.column_number, s_exact.name) = 1
))
))
)";
Expand Down Expand Up @@ -2726,7 +2726,7 @@ FROM symbol_references sr
WHERE sr.symbol_name = s.name
OR (f.lang = 'sql' AND rf.lang = 'sql' AND (
(sql_resolve_reference_segment_count_at(sr.symbol_name, " + contextSql + @", sr.container_name, sr.column_number) = sql_segment_count(s.name)
AND sql_resolve_reference_name_at(sr.symbol_name, " + contextSql + @", sr.container_name, sr.column_number) = sql_normalize_name(s.name) COLLATE NOCASE)
AND sql_reference_matches_target_at(sr.symbol_name, " + contextSql + @", sr.container_name, sr.column_number, s.name) = 1)
OR (sql_segment_count(sr.symbol_name) = 1
AND sql_allow_leaf_fallback_at(sr.symbol_name, " + contextSql + @", sr.container_name, sr.column_number) = 1
AND sr.symbol_name = sql_leaf_name(s.name) COLLATE NOCASE
Expand All @@ -2736,7 +2736,7 @@ FROM symbols s_exact
JOIN files f_exact ON f_exact.id = s_exact.file_id
WHERE f_exact.lang = 'sql'
AND sql_segment_count(s_exact.name) = sql_resolve_reference_segment_count_at(sr.symbol_name, " + contextSql + @", sr.container_name, sr.column_number)
AND sql_normalize_name(s_exact.name) = sql_resolve_reference_name_at(sr.symbol_name, " + contextSql + @", sr.container_name, sr.column_number) COLLATE NOCASE
AND sql_reference_matches_target_at(sr.symbol_name, " + contextSql + @", sr.container_name, sr.column_number, s_exact.name) = 1
))
))
)";
Expand Down
Loading
Loading