use not exists to get expired decisions
This commit is contained in:
parent
496dacb7ff
commit
aabd258f2b
1 changed files with 23 additions and 13 deletions
|
@ -201,28 +201,24 @@ func (c *Client) QueryExpiredDecisionsWithFilters(filters map[string][]string) (
|
||||||
query := c.Ent.Decision.Query().Where(
|
query := c.Ent.Decision.Query().Where(
|
||||||
decision.UntilLT(time.Now().UTC()),
|
decision.UntilLT(time.Now().UTC()),
|
||||||
)
|
)
|
||||||
query, predicates, err := BuildDecisionRequestWithFilter(query, filters)
|
query, _, err := BuildDecisionRequestWithFilter(query, filters)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.Log.Warningf("QueryExpiredDecisionsWithFilters : %s", err)
|
c.Log.Warningf("QueryExpiredDecisionsWithFilters : %s", err)
|
||||||
return []*ent.Decision{}, errors.Wrap(QueryFail, "get expired decisions with filters")
|
return []*ent.Decision{}, errors.Wrap(QueryFail, "get expired decisions with filters")
|
||||||
}
|
}
|
||||||
|
|
||||||
query = query.Where(func(s *sql.Selector) {
|
query = query.Where(func(s *sql.Selector) {
|
||||||
t := sql.Table(decision.Table).As("t1")
|
t := sql.Table(decision.Table).As("t1")
|
||||||
|
|
||||||
subQuery := sql.Select(t.C(decision.FieldValue)).From(t).Where(sql.GT(t.C(decision.FieldUntil), now))
|
subquery := sql.Select().From(t).Where(
|
||||||
for _, predicate := range predicates {
|
sql.And(
|
||||||
subQuery.Where(predicate)
|
sql.EQ(s.C(decision.FieldScope), t.C(decision.FieldScope)),
|
||||||
}
|
sql.EQ(s.C(decision.FieldType), t.C(decision.FieldType)),
|
||||||
subQuery.Where(sql.And(
|
sql.EQ(s.C(decision.FieldValue), t.C(decision.FieldValue)),
|
||||||
sql.ColumnsEQ(t.C(decision.FieldType), s.C(decision.FieldType)),
|
sql.GT(s.C(decision.FieldUntil), now),
|
||||||
sql.ColumnsEQ(t.C(decision.FieldScope), s.C(decision.FieldScope)),
|
|
||||||
))
|
|
||||||
s.Where(
|
|
||||||
sql.NotIn(
|
|
||||||
s.C(decision.FieldValue),
|
|
||||||
subQuery,
|
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
s.Where(sql.NotExists(subquery))
|
||||||
})
|
})
|
||||||
|
|
||||||
data, err := query.Order(ent.Asc(decision.FieldValue), ent.Desc(decision.FieldUntil)).All(c.CTX)
|
data, err := query.Order(ent.Asc(decision.FieldValue), ent.Desc(decision.FieldUntil)).All(c.CTX)
|
||||||
|
@ -250,6 +246,20 @@ func (c *Client) QueryExpiredDecisionsSinceWithFilters(since time.Time, filters
|
||||||
return []*ent.Decision{}, errors.Wrap(QueryFail, "expired decisions with filters")
|
return []*ent.Decision{}, errors.Wrap(QueryFail, "expired decisions with filters")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
query = query.Where(func(s *sql.Selector) {
|
||||||
|
t := sql.Table(decision.Table).As("t1")
|
||||||
|
|
||||||
|
subquery := sql.Select().From(t).Where(
|
||||||
|
sql.And(
|
||||||
|
sql.EQ(s.C(decision.FieldScope), t.C(decision.FieldScope)),
|
||||||
|
sql.EQ(s.C(decision.FieldType), t.C(decision.FieldType)),
|
||||||
|
sql.EQ(s.C(decision.FieldValue), t.C(decision.FieldValue)),
|
||||||
|
sql.GT(s.C(decision.FieldUntil), now),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
s.Where(sql.NotExists(subquery))
|
||||||
|
})
|
||||||
|
|
||||||
data, err := query.Order(ent.Asc(decision.FieldValue), ent.Asc(decision.FieldUntil)).All(c.CTX)
|
data, err := query.Order(ent.Asc(decision.FieldValue), ent.Asc(decision.FieldUntil)).All(c.CTX)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.Log.Warningf("QueryExpiredDecisionsSinceWithFilters : %s", err)
|
c.Log.Warningf("QueryExpiredDecisionsSinceWithFilters : %s", err)
|
||||||
|
|
Loading…
Add table
Reference in a new issue