Using AND and OR logic with standard query filter predicates
You can use AND
and OR logic with standard
query filter predicates in the same way that you use AND and OR logic with predicates on a
query builder query.
- For
ANDlogic – Add multiple standard query filters, each with a single comparison predicate, to a result. - For
ORlogic – Add a single standard query filter with an or method in its filter predicate to a result.
Using AND logic with standard query filter predicates
With standard query filters, you combine filter predicates that all must be true by adding standard query filters to a result one after the other. The following Gosu code adds two standard query filters to a result object. The first filter restricts the iteration to addresses in the city of Chicago. The second filter further restricts the iteration to addresses that were added to the database during 2017 or later.
uses gw.api.database.Query
uses gw.api.filters.StandardQueryFilter
uses gw.api.util.DateUtil
// Create a query of addresses.
var result = Query.make(Address).select()
// Create a standard query filter for addresses in the city of Chicago.
var queryFilterChicago = new StandardQueryFilter("Chicago Addresses",
\ query -> {query.compare(Address#City, Equals, "Chicago")})
// Create a standard query filter for addresses added during 2017 or later.
var queryFilter2017Address = new StandardQueryFilter("2017 Addresses",
\ query -> {query.compare(Address#CreateTime, GreaterThanOrEquals,
DateUtil.createDateInstance(1, 1, 2017))})
// Add the Chicago and 2017 address filters to the result.
result.addFilter(queryFilterChicago)
result.addFilter(queryFilter2017Address)
// Iterate the addresses in Chicago added during 2016 or later.
for (address in result) {
print(address.City + ", " + address.State + " " + address.PostalCode + " " + address.CreateTime)
}
If you add more than one standard query filter to a result, make sure that each filter predicate applies to a different field in the result. If you add two or more standard query filters with predicates on the same field, Boolean logic ensures that no item in the result satisfies them all.
Using OR logic with standard query filter predicates
With standard query filters, you combine predicates only one of which must be true by using the or method in the filter predicate of a single standard query filter. The following Gosu code adds two predicates to a standard query filter to restrict the iteration of addresses to the cities of Bloomington or Chicago.
uses gw.api.database.Query
uses gw.api.filters.StandardQueryFilter
uses gw.api.database.QuerySelectColumns
uses gw.api.path.Paths
// Create a query of addresses.
var result = Query.make(Address).select()
// Create a standard query filter for addresses in the cities of Bloomington or Chicago.
var queryFilterBloomingtonOrChicago = new StandardQueryFilter("Bloomington and Chicago Addresses",
\ query -> {query.or( \ orCriteria -> {
orCriteria.compare(Address#City, Equals, "Bloomington")
orCriteria.compare(Address#City, Equals, "Chicago")
})
})
// Add the Bloomington or Chicago filter to the result.
result.addFilter(queryFilterBloomingtonOrChicago)
// Iterate the addresses in Bloomington or Chicago, in order by city.
for (address in result.orderBy(QuerySelectColumns.path(Paths.make(Address#City)))) {
print(address.City + ", " + address.State + " " + address.PostalCode)
}
See also
