diff --git a/pkg/cloudcommon/db/standalone.go b/pkg/cloudcommon/db/standalone.go index ae9e772678..7acc0630f0 100644 --- a/pkg/cloudcommon/db/standalone.go +++ b/pkg/cloudcommon/db/standalone.go @@ -97,6 +97,31 @@ func (manager *SStandaloneResourceBaseManager) ListItemFilter( return q, nil } +func (manager *SStandaloneResourceBaseManager) ListItemExportKeys(ctx context.Context, q *sqlchemy.SQuery, userCred mcclient.TokenCredential, keys stringutils2.SSortedStrings) (*sqlchemy.SQuery, error) { + var err error + q, err = manager.SResourceBaseManager.ListItemExportKeys(ctx, q, userCred, keys) + if err != nil { + return nil, errors.Wrap(err, "SResourceBaseManager.ListItemExportKeys") + } + + if keys.Contains("user_tags") { + userTagsQuery := Metadata.Query().Startswith("id", manager.keyword+"::"). + Startswith("key", USER_TAG_PREFIX).GroupBy("id") + userTagsQuery.AppendField(sqlchemy.SubStr("resource_id", userTagsQuery.Field("id"), len(manager.keyword)+3, 0)) + userTagsQuery.AppendField( + sqlchemy.GROUP_CONCAT("user_tags", sqlchemy.CONCAT("", + sqlchemy.SubStr("", userTagsQuery.Field("key"), len(USER_TAG_PREFIX)+1, 0), + sqlchemy.NewStringField(":"), + userTagsQuery.Field("value"), + ))) + subQ := userTagsQuery.SubQuery() + q.LeftJoin(subQ, sqlchemy.Equals(q.Field("id"), subQ.Field("resource_id"))) + q.AppendField(subQ.Field("user_tags")) + } + + return q, nil +} + func (manager *SStandaloneResourceBaseManager) OrderByExtraFields( ctx context.Context, q *sqlchemy.SQuery, diff --git a/pkg/cloudcommon/db/virtualresource.go b/pkg/cloudcommon/db/virtualresource.go index b009ff17cb..32128c5667 100644 --- a/pkg/cloudcommon/db/virtualresource.go +++ b/pkg/cloudcommon/db/virtualresource.go @@ -732,21 +732,6 @@ func (manager *SVirtualResourceBaseManager) ListItemExportKeys(ctx context.Conte return nil, errors.Wrap(err, "SProjectizedResourceBaseManager.ListItemExportKeys") } - if keys.Contains("user_tags") { - guestUserTagsQuery := Metadata.Query().Startswith("id", manager.keyword+"::"). - Startswith("key", USER_TAG_PREFIX).GroupBy("id") - guestUserTagsQuery.AppendField(sqlchemy.SubStr("resource_id", guestUserTagsQuery.Field("id"), len(manager.keyword)+3, 0)) - guestUserTagsQuery.AppendField( - sqlchemy.GROUP_CONCAT("user_tags", sqlchemy.CONCAT("", - sqlchemy.SubStr("", guestUserTagsQuery.Field("key"), len(USER_TAG_PREFIX)+1, 0), - sqlchemy.NewStringField(":"), - guestUserTagsQuery.Field("value"), - ))) - subQ := guestUserTagsQuery.SubQuery() - q.LeftJoin(subQ, sqlchemy.Equals(q.Field("id"), subQ.Field("resource_id"))) - q.AppendField(subQ.Field("user_tags")) - } - return q, nil } diff --git a/pkg/notify/models/config.go b/pkg/notify/models/config.go index ea5fe673dc..917f37d751 100644 --- a/pkg/notify/models/config.go +++ b/pkg/notify/models/config.go @@ -315,6 +315,10 @@ func (self *SConfigManager) ListItemFilter(ctx context.Context, q *sqlchemy.SQue return q, nil } +func (manager *SConfigManager) ListItemExportKeys(ctx context.Context, q *sqlchemy.SQuery, userCred mcclient.TokenCredential, keys stringutils2.SSortedStrings) (*sqlchemy.SQuery, error) { + return manager.SStandaloneResourceBaseManager.ListItemExportKeys(ctx, q, userCred, keys) +} + func (cm *SConfigManager) FetchCustomizeColumns( ctx context.Context, userCred mcclient.TokenCredential,