From 707c0b8313d74a1bdd1a2e9f3a7a3743b97eee45 Mon Sep 17 00:00:00 2001 From: Qiu Jian Date: Fri, 30 Aug 2019 22:21:02 +0800 Subject: [PATCH] fix: allow column search in array --- pkg/cloudcommon/db/db_dispatcher.go | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/pkg/cloudcommon/db/db_dispatcher.go b/pkg/cloudcommon/db/db_dispatcher.go index 1cb18cbb85..87662ecd1b 100644 --- a/pkg/cloudcommon/db/db_dispatcher.go +++ b/pkg/cloudcommon/db/db_dispatcher.go @@ -123,13 +123,14 @@ func listItemsQueryByColumn(manager IModelManager, q *sqlchemy.SQuery, userCred } listF := searchFields(manager, userCred) - for key, val := range qdata { + for key := range qdata { fn, op := parseSearchFieldkey(key) if listF.Contains(fn) { colSpec := manager.TableSpec().ColumnSpec(fn) if colSpec != nil { - strV, _ := val.GetString() + arrV := jsonutils.GetQueryStringArray(query, key) if len(op) > 0 { + strV := strings.Join(arrV, ",") filter := fmt.Sprintf("%s.%s(%s)", fn, op, strV) fc := filterclause.ParseFilterClause(filter) if fc != nil { @@ -138,8 +139,13 @@ func listItemsQueryByColumn(manager IModelManager, q *sqlchemy.SQuery, userCred q = q.Filter(cond) } } - } else if len(strV) > 0 { - strV := colSpec.ConvertFromString(strV) + } else if len(arrV) > 1 { + for i := range arrV { + arrV[i] = colSpec.ConvertFromString(arrV[i]) + } + q = q.In(fn, arrV) + } else if len(arrV) == 1 { + strV := colSpec.ConvertFromString(arrV[0]) q = q.Equals(fn, strV) } }