Skip to content

Commit 7a9820c

Browse files
committed
C#: Convert Entity Framework summaries for DbSet into MaD models.
1 parent 3647b9c commit 7a9820c

File tree

3 files changed

+26
-25
lines changed

3 files changed

+26
-25
lines changed

csharp/ql/lib/ext/Microsoft.EntityFrameworkCore.model.yml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,17 @@
11
extensions:
2+
- addsTo:
3+
pack: codeql/csharp-all
4+
extensible: summaryModel
5+
data:
6+
- ["Microsoft.EntityFrameworkCore", "DbSet<>", False, "Add", "(T)", "", "Argument[0]", "Argument[this].Element", "value", "manual"]
7+
- ["Microsoft.EntityFrameworkCore", "DbSet<>", False, "AddAsync", "(T)", "", "Argument[0]", "Argument[this].Element", "value", "manual"]
8+
- ["Microsoft.EntityFrameworkCore", "DbSet<>", False, "AddRange", "(System.Collections.Generic.IEnumerable<T>)", "", "Argument[0].Element", "Argument[this].Element", "value", "manual"]
9+
- ["Microsoft.EntityFrameworkCore", "DbSet<>", False, "AddRangeAsync", "(System.Collections.Generic.IEnumerable<T>)", "", "Argument[0].Element", "Argument[this].Element", "value", "manual"]
10+
- ["Microsoft.EntityFrameworkCore", "DbSet<>", False, "Attach", "(T)", "", "Argument[0]", "Argument[this].Element", "value", "manual"]
11+
- ["Microsoft.EntityFrameworkCore", "DbSet<>", False, "AttachRange", "(System.Collections.Generic.IEnumerable<T>)", "", "Argument[0].Element", "Argument[this].Element", "value", "manual"]
12+
- ["Microsoft.EntityFrameworkCore", "DbSet<>", False, "Update", "(T)", "", "Argument[0]", "Argument[this].Element", "value", "manual"]
13+
- ["Microsoft.EntityFrameworkCore", "DbSet<>", False, "UpdateRange", "(System.Collections.Generic.IEnumerable<T>)", "", "Argument[0].Element", "Argument[this].Element", "value", "manual"]
14+
215
- addsTo:
316
pack: codeql/csharp-all
417
extensible: sinkModel

csharp/ql/lib/ext/System.Data.Entity.model.yml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,17 @@
11
extensions:
2+
- addsTo:
3+
pack: codeql/csharp-all
4+
extensible: summaryModel
5+
data:
6+
- ["System.Data.Entity", "DbSet<>", False, "Add", "(T)", "", "Argument[0]", "Argument[this].Element", "value", "manual"]
7+
- ["System.Data.Entity", "DbSet<>", False, "AddAsync", "(T)", "", "Argument[0]", "Argument[this].Element", "value", "manual"]
8+
- ["System.Data.Entity", "DbSet<>", False, "AddRange", "(System.Collections.Generic.IEnumerable<T>)", "", "Argument[0].Element", "Argument[this].Element", "value", "manual"]
9+
- ["System.Data.Entity", "DbSet<>", False, "AddRangeAsync", "(System.Collections.Generic.IEnumerable<T>)", "", "Argument[0].Element", "Argument[this].Element", "value", "manual"]
10+
- ["System.Data.Entity", "DbSet<>", False, "Attach", "(T)", "", "Argument[0]", "Argument[this].Element", "value", "manual"]
11+
- ["System.Data.Entity", "DbSet<>", False, "AttachRange", "(System.Collections.Generic.IEnumerable<T>)", "", "Argument[0].Element", "Argument[this].Element", "value", "manual"]
12+
- ["System.Data.Entity", "DbSet<>", False, "Update", "(T)", "", "Argument[0]", "Argument[this].Element", "value", "manual"]
13+
- ["System.Data.Entity", "DbSet<>", False, "UpdateRange", "(System.Collections.Generic.IEnumerable<T>)", "", "Argument[0].Element", "Argument[this].Element", "value", "manual"]
14+
215
- addsTo:
316
pack: codeql/csharp-all
417
extensible: sinkModel

csharp/ql/lib/semmle/code/csharp/frameworks/EntityFramework.qll

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -88,31 +88,6 @@ module EntityFramework {
8888
EFSummarizedCallable() { any() }
8989
}
9090

91-
private class DbSetAddOrUpdateRequiredSummaryComponentStack extends RequiredSummaryComponentStack {
92-
override predicate required(SummaryComponent head, SummaryComponentStack tail) {
93-
head = SummaryComponent::element() and
94-
tail = SummaryComponentStack::argument([-1, 0])
95-
}
96-
}
97-
98-
private class DbSetAddOrUpdate extends EFSummarizedCallable {
99-
private boolean range;
100-
101-
DbSetAddOrUpdate() { this = any(DbSet c).getAnAddOrUpdateMethod(range) }
102-
103-
override predicate propagatesFlow(
104-
SummaryComponentStack input, SummaryComponentStack output, boolean preservesValue
105-
) {
106-
(
107-
if range = true
108-
then input = SummaryComponentStack::elementOf(SummaryComponentStack::argument(0))
109-
else input = SummaryComponentStack::argument(0)
110-
) and
111-
output = SummaryComponentStack::elementOf(SummaryComponentStack::qualifier()) and
112-
preservesValue = true
113-
}
114-
}
115-
11691
/** The class `Microsoft.EntityFrameworkCore.DbQuery<>` or `System.Data.Entity.DbQuery<>`. */
11792
class DbQuery extends EFClass, UnboundGenericClass {
11893
DbQuery() { this.hasName("DbQuery<>") }

0 commit comments

Comments
 (0)