From 86383b5a5dc6d9417caa37e3cb1aad422564dbb6 Mon Sep 17 00:00:00 2001 From: Qu Xuan Date: Wed, 8 Apr 2020 16:28:16 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=B8=8D=E5=86=8D=E7=BB=9F=E8=AE=A1?= =?UTF-8?q?=E5=B7=B2=E5=88=A0=E9=99=A4=E8=B5=84=E6=BA=90=E7=9A=84=E6=A0=87?= =?UTF-8?q?=E7=AD=BE=E6=95=B0=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/cloudcommon/db/metadata.go | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/pkg/cloudcommon/db/metadata.go b/pkg/cloudcommon/db/metadata.go index 323d4b9098..1ad8eac7f3 100644 --- a/pkg/cloudcommon/db/metadata.go +++ b/pkg/cloudcommon/db/metadata.go @@ -222,7 +222,7 @@ func (manager *SMetadataManager) GetPropertyTagValuePairs( q = q.Offset(int(offset)) } - data, err := manager.metaDataQuery2List(q, input.Details) + data, err := manager.metaDataQuery2List(ctx, q, userCred, input) if err != nil { return nil, errors.Wrap(err, "metadataQuery2List") } @@ -235,7 +235,7 @@ func (manager *SMetadataManager) GetPropertyTagValuePairs( return &emptyList, nil } -func (manager *SMetadataManager) metaDataQuery2List(q *sqlchemy.SQuery, details *bool) ([]jsonutils.JSONObject, error) { +func (manager *SMetadataManager) metaDataQuery2List(ctx context.Context, q *sqlchemy.SQuery, userCred mcclient.TokenCredential, input apis.MetadataListInput) ([]jsonutils.JSONObject, error) { metadatas := make([]struct { Key string Value string @@ -248,8 +248,8 @@ func (manager *SMetadataManager) metaDataQuery2List(q *sqlchemy.SQuery, details ret := make([]jsonutils.JSONObject, len(metadatas)) for i := range metadatas { - if details != nil && *details { - ret[i], err = manager.getKeyValueObjectCount(metadatas[i].Key, metadatas[i].Value, metadatas[i].Count) + if input.Details != nil && *input.Details { + ret[i], err = manager.getKeyValueObjectCount(ctx, userCred, input, metadatas[i].Key, metadatas[i].Value, metadatas[i].Count) if err != nil { return nil, errors.Wrap(err, "getKeyValueObjectCount") } @@ -261,17 +261,26 @@ func (manager *SMetadataManager) metaDataQuery2List(q *sqlchemy.SQuery, details return ret, nil } -func (manager *SMetadataManager) getKeyValueObjectCount(key string, value string, count int64) (jsonutils.JSONObject, error) { +func (manager *SMetadataManager) getKeyValueObjectCount(ctx context.Context, userCred mcclient.TokenCredential, input apis.MetadataListInput, key string, value string, count int64) (jsonutils.JSONObject, error) { metadatas := manager.Query().SubQuery() q := metadatas.Query(metadatas.Field("obj_type"), sqlchemy.COUNT("obj_count")) - q = q.Equals("key", key).Equals("value", value) + q, err := manager.ListItemFilter(ctx, q, userCred, input) + if err != nil { + return nil, errors.Wrap(err, "ListItemFilter") + } + q = q.Equals("key", key) + if len(value) > 0 { + q = q.Equals("value", value) + } else { + q = q.IsNullOrEmpty("value") + } q = q.GroupBy("key", "value", "obj_type") objectCount := make([]struct { ObjType string ObjCount int64 }, 0) - err := q.All(&objectCount) + err = q.All(&objectCount) if err != nil { return nil, errors.Wrap(err, "query.All") }