diff --git a/changelog.d/unreleased/1443.fixed.md b/changelog.d/unreleased/1443.fixed.md new file mode 100644 index 0000000000..bfa642b6df --- /dev/null +++ b/changelog.d/unreleased/1443.fixed.md @@ -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 を参照として拾うことを固定しました。 diff --git a/tests/CodeIndex.Tests/ReferenceExtractorTests.cs b/tests/CodeIndex.Tests/ReferenceExtractorTests.cs index c9c28eed05..45d43cdaf5 100644 --- a/tests/CodeIndex.Tests/ReferenceExtractorTests.cs +++ b/tests/CodeIndex.Tests/ReferenceExtractorTests.cs @@ -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() {