(s *schema.Schema, q sq.SelectBuilder, filter map[string]interface{}, join bool)
| 1239 | ) |
| 1240 | |
| 1241 | func 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 | |
| 1288 | func addOrToQuery(s *schema.Schema, q sq.SelectBuilder, filter interface{}, join bool) (sq.Or, error) { |
| 1289 | return addToFilter(s, q, filter, join, sq.Or{}) |
no test coverage detected