MCPcopy Create free account
hub / github.com/cloudwan/gohan / AddFilterToQuery

Function AddFilterToQuery

db/sql/sql.go:1241–1286  ·  view source on GitHub ↗
(s *schema.Schema, q sq.SelectBuilder, filter map[string]interface{}, join bool)

Source from the content-addressed store, hash-verified

1239)
1240
1241func AddFilterToQuery(s *schema.Schema, q sq.SelectBuilder, filter map[string]interface{}, join bool) (sq.SelectBuilder, error) {
1242 if filter == nil {
1243 return q, nil
1244 }
1245 for key, value := range filter {
1246 if key == OrCondition {
1247 orFilter, err := addOrToQuery(s, q, value, join)
1248 if err != nil {
1249 return q, err
1250 }
1251 q = q.Where(orFilter)
1252 continue
1253 } else if key == AndCondition {
1254 andFilter, err := addAndToQuery(s, q, value, join)
1255 if err != nil {
1256 return q, err
1257 }
1258 q = q.Where(andFilter)
1259 continue
1260 }
1261 property, err := s.GetPropertyByID(key)
1262
1263 if err != nil {
1264 return q, err
1265 }
1266
1267 var column string
1268 if join {
1269 column = makeColumn(s.GetDbTableName(), *property)
1270 } else {
1271 column = quote(key)
1272 }
1273
1274 queryValues, ok := value.([]string)
1275 if ok && property.Type == "boolean" {
1276 v := make([]bool, len(queryValues))
1277 for i, j := range queryValues {
1278 v[i], _ = strconv.ParseBool(j)
1279 }
1280 q = q.Where(sq.Eq{column: v})
1281 } else {
1282 q = q.Where(sq.Eq{column: value})
1283 }
1284 }
1285 return q, nil
1286}
1287
1288func addOrToQuery(s *schema.Schema, q sq.SelectBuilder, filter interface{}, join bool) (sq.Or, error) {
1289 return addToFilter(s, q, filter, join, sq.Or{})

Callers 4

buildSelectFunction · 0.85
CountContextMethod · 0.85
StateFetchContextMethod · 0.85
sql_test.goFile · 0.85

Calls 6

addOrToQueryFunction · 0.85
addAndToQueryFunction · 0.85
makeColumnFunction · 0.85
GetPropertyByIDMethod · 0.80
GetDbTableNameMethod · 0.80
quoteFunction · 0.70

Tested by

no test coverage detected