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
15 changes: 15 additions & 0 deletions changelog.d/unreleased/1443.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
---
category: fixed
issues:
- 1443
affected:
- tests/CodeIndex.Tests/ReferenceExtractorTests.cs
---

## English

- **SQL foreign-key reference coverage is now regression-tested for ALTER TABLE ADD CONSTRAINT (#1443)** — the SQL reference extractor test suite now locks inline and ALTER-style foreign-key references to the referenced table.

## 日本語

- **SQL foreign key reference の ALTER TABLE ADD CONSTRAINT 対応を回帰テストで固定しました (#1443)** — SQL reference extractor のテストで、inline と ALTER 形式の foreign key が参照先 table を参照として拾うことを固定しました。
20 changes: 20 additions & 0 deletions tests/CodeIndex.Tests/ReferenceExtractorTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14718,6 +14718,26 @@ public void Extract_SQL_AlterTableCapturesTargetReference()
Assert.DoesNotContain(references, r => r.SymbolName == "sales" && r.ReferenceKind == "reference");
}

[Fact]
public void Extract_SQL_AlterTableAddConstraintForeignKeyCapturesReferencedTable()
{
const string content = """
CREATE TABLE orders (id int PRIMARY KEY);
CREATE TABLE order_items (order_id int REFERENCES orders(id));
ALTER TABLE order_items ADD CONSTRAINT fk_order
FOREIGN KEY (order_id) REFERENCES orders(id);
""";

var symbols = SymbolExtractor.Extract(1, "sql", content);
var references = ReferenceExtractor.Extract(1, "sql", content, symbols);

Assert.Contains(references, r => r.SymbolName == "order_items" && r.ReferenceKind == "reference" && r.Line == 3);
Assert.Equal(2, references.Count(r => r.SymbolName == "orders" && r.ReferenceKind == "reference"));
Assert.Contains(references, r => r.SymbolName == "orders" && r.ReferenceKind == "reference" && r.Line == 2);
Assert.Contains(references, r => r.SymbolName == "orders" && r.ReferenceKind == "reference" && r.Line == 4);
Assert.DoesNotContain(references, r => r.SymbolName == "fk_order" && r.ReferenceKind == "reference");
}

[Fact]
public void Extract_SQL_GeneratedColumnsCaptureExpressionDependencies()
{
Expand Down
Loading