diff --git a/appview/db/db.go b/appview/db/db.go index 0a33de2..a501f14 100644 --- a/appview/db/db.go +++ b/appview/db/db.go @@ -504,15 +504,25 @@ func runMigration(d *sql.DB, name string, migrationFn migrationFn) error { type filter struct { key string arg any + cmp string } -func Filter(key string, arg any) filter { +func FilterEq(key string, arg any) filter { return filter{ key: key, arg: arg, + cmp: "=", + } +} + +func FilterNotEq(key string, arg any) filter { + return filter{ + key: key, + arg: arg, + cmp: "<>", } } func (f filter) Condition() string { - return fmt.Sprintf("%s = ?", f.key) + return fmt.Sprintf("%s %s ?", f.key, f.cmp) } diff --git a/appview/db/pulls.go b/appview/db/pulls.go index c25841d..637b42f 100644 --- a/appview/db/pulls.go +++ b/appview/db/pulls.go @@ -988,7 +988,11 @@ type Stack []*Pull // // `w` is parent of none, so it is the top of the stack func GetStack(e Execer, stackId string) (Stack, error) { - unorderedPulls, err := GetPulls(e, Filter("stack_id", stackId)) + unorderedPulls, err := GetPulls( + e, + FilterEq("stack_id", stackId), + FilterNotEq("state", PullDeleted), + ) if err != nil { return nil, err } diff --git a/appview/ingester.go b/appview/ingester.go index 6537d2d..38dbfcb 100644 --- a/appview/ingester.go +++ b/appview/ingester.go @@ -188,7 +188,7 @@ func ingestArtifact(d *db.DbWrapper, e *models.Event, enforcer *rbac.Enforcer) e err = db.AddArtifact(d, artifact) case models.CommitOperationDelete: - err = db.DeleteArtifact(d, db.Filter("did", did), db.Filter("rkey", e.Commit.RKey)) + err = db.DeleteArtifact(d, db.FilterEq("did", did), db.FilterEq("rkey", e.Commit.RKey)) } if err != nil { @@ -276,7 +276,7 @@ func ingestProfile(d *db.DbWrapper, e *models.Event) error { err = db.UpsertProfile(tx, &profile) case models.CommitOperationDelete: - err = db.DeleteArtifact(d, db.Filter("did", did), db.Filter("rkey", e.Commit.RKey)) + err = db.DeleteArtifact(d, db.FilterEq("did", did), db.FilterEq("rkey", e.Commit.RKey)) } if err != nil { diff --git a/appview/state/artifact.go b/appview/state/artifact.go index 0ffe5dc..471a155 100644 --- a/appview/state/artifact.go +++ b/appview/state/artifact.go @@ -154,9 +154,9 @@ func (s *State) DownloadArtifact(w http.ResponseWriter, r *http.Request) { artifacts, err := db.GetArtifact( s.db, - db.Filter("repo_at", f.RepoAt), - db.Filter("tag", tag.Tag.Hash[:]), - db.Filter("name", filename), + db.FilterEq("repo_at", f.RepoAt), + db.FilterEq("tag", tag.Tag.Hash[:]), + db.FilterEq("name", filename), ) if err != nil { log.Println("failed to get artifacts", err) @@ -196,9 +196,9 @@ func (s *State) DeleteArtifact(w http.ResponseWriter, r *http.Request) { artifacts, err := db.GetArtifact( s.db, - db.Filter("repo_at", f.RepoAt), - db.Filter("tag", tag[:]), - db.Filter("name", filename), + db.FilterEq("repo_at", f.RepoAt), + db.FilterEq("tag", tag[:]), + db.FilterEq("name", filename), ) if err != nil { log.Println("failed to get artifacts", err) @@ -238,9 +238,9 @@ func (s *State) DeleteArtifact(w http.ResponseWriter, r *http.Request) { defer tx.Rollback() err = db.DeleteArtifact(tx, - db.Filter("repo_at", f.RepoAt), - db.Filter("tag", artifact.Tag[:]), - db.Filter("name", filename), + db.FilterEq("repo_at", f.RepoAt), + db.FilterEq("tag", artifact.Tag[:]), + db.FilterEq("name", filename), ) if err != nil { log.Println("failed to remove artifact record from db", err) diff --git a/appview/state/pull.go b/appview/state/pull.go index 87b2053..037af84 100644 --- a/appview/state/pull.go +++ b/appview/state/pull.go @@ -455,8 +455,8 @@ func (s *State) RepoPulls(w http.ResponseWriter, r *http.Request) { pulls, err := db.GetPulls( s.db, - db.Filter("repo_at", f.RepoAt), - db.Filter("state", state), + db.FilterEq("repo_at", f.RepoAt), + db.FilterEq("state", state), ) if err != nil { log.Println("failed to get pulls", err) @@ -1745,9 +1745,9 @@ func (s *State) resubmitStackedPullHelper( tx, p.ParentChangeId, // these should be enough filters to be unique per-stack - db.Filter("repo_at", p.RepoAt.String()), - db.Filter("owner_did", p.OwnerDid), - db.Filter("change_id", p.ChangeId), + db.FilterEq("repo_at", p.RepoAt.String()), + db.FilterEq("owner_did", p.OwnerDid), + db.FilterEq("change_id", p.ChangeId), ) if err != nil { diff --git a/appview/state/repo.go b/appview/state/repo.go index f2a78dd..5db1828 100644 --- a/appview/state/repo.go +++ b/appview/state/repo.go @@ -518,7 +518,7 @@ func (s *State) RepoTags(w http.ResponseWriter, r *http.Request) { return } - artifacts, err := db.GetArtifact(s.db, db.Filter("repo_at", f.RepoAt)) + artifacts, err := db.GetArtifact(s.db, db.FilterEq("repo_at", f.RepoAt)) if err != nil { log.Println("failed grab artifacts", err) return