From 4a3dcb4c377e387e01b098a3415e68f4e6f7402e Mon Sep 17 00:00:00 2001 From: Jian Qiu Date: Tue, 26 Mar 2024 18:57:35 +0800 Subject: [PATCH] fix: host-type-count sql error (#19801) Co-authored-by: Qiu Jian --- go.mod | 2 +- go.sum | 4 ++-- pkg/cloudcommon/db/standalone_anon.go | 1 + pkg/compute/models/buckets.go | 3 +++ pkg/compute/models/hosts.go | 2 +- pkg/compute/models/networkaddresses.go | 2 +- pkg/keystone/models/assignments.go | 4 ++++ vendor/modules.txt | 2 +- vendor/yunion.io/x/sqlchemy/functions.go | 3 ++- 9 files changed, 16 insertions(+), 7 deletions(-) diff --git a/go.mod b/go.mod index d4cc973bf8..54464bd6a9 100644 --- a/go.mod +++ b/go.mod @@ -97,7 +97,7 @@ require ( yunion.io/x/ovsdb v0.0.0-20230306173834-f164f413a900 yunion.io/x/pkg v1.10.1-0.20240324150220-11d9be90fa6c yunion.io/x/s3cli v0.0.0-20190917004522-13ac36d8687e - yunion.io/x/sqlchemy v1.1.3-0.20240315065533-9ede1267a826 + yunion.io/x/sqlchemy v1.1.3-0.20240326090913-96da8bf92408 yunion.io/x/structarg v0.0.0-20231017124457-df4d5009457c ) diff --git a/go.sum b/go.sum index 2ac37891d5..54f78ac86a 100644 --- a/go.sum +++ b/go.sum @@ -1231,7 +1231,7 @@ yunion.io/x/pkg v1.10.1-0.20240324150220-11d9be90fa6c h1:c71AlEenWHcA6xJQN8dbtwX yunion.io/x/pkg v1.10.1-0.20240324150220-11d9be90fa6c/go.mod h1:ksCJVQ+DwKrJ5QBEoU8pzrDFfDaZVAFH/iJ6yQCYxJk= yunion.io/x/s3cli v0.0.0-20190917004522-13ac36d8687e h1:v+EzIadodSwkdZ/7bremd7J8J50Cise/HCylsOJngmo= yunion.io/x/s3cli v0.0.0-20190917004522-13ac36d8687e/go.mod h1:0iFKpOs1y4lbCxeOmq3Xx/0AcQoewVPwj62eRluioEo= -yunion.io/x/sqlchemy v1.1.3-0.20240315065533-9ede1267a826 h1:RLPGmjYWGXmxL1rq9a/bs3VSp2tAwtVMxsa/uXOV2xI= -yunion.io/x/sqlchemy v1.1.3-0.20240315065533-9ede1267a826/go.mod h1:5W8ghvJ4TNt/r2yDjjD3i4QsZgIiJX45dhRQBGWPHsQ= +yunion.io/x/sqlchemy v1.1.3-0.20240326090913-96da8bf92408 h1:TmkgsnVG/KsUfxaFxaYEhQs0o4nXc9fFFlqZv6mwZ/E= +yunion.io/x/sqlchemy v1.1.3-0.20240326090913-96da8bf92408/go.mod h1:5W8ghvJ4TNt/r2yDjjD3i4QsZgIiJX45dhRQBGWPHsQ= yunion.io/x/structarg v0.0.0-20231017124457-df4d5009457c h1:QuLab2kSRECZRxo4Lo2KcYn6XjQFDGaZ1+x0pYDVVwQ= yunion.io/x/structarg v0.0.0-20231017124457-df4d5009457c/go.mod h1:EP6NSv2C0zzqBDTKumv8hPWLb3XvgMZDHQRfyuOrQng= diff --git a/pkg/cloudcommon/db/standalone_anon.go b/pkg/cloudcommon/db/standalone_anon.go index 9a9f018a8c..b5506e2d68 100644 --- a/pkg/cloudcommon/db/standalone_anon.go +++ b/pkg/cloudcommon/db/standalone_anon.go @@ -1022,6 +1022,7 @@ func GetTagValueCountMap( sqlchemy.NewFunction( sqlchemy.NewCase().When(sqlchemy.IsNull(subq.Field("value")), sqlchemy.NewStringField(tagutils.NoValue)).Else(subq.Field("value")), valueFieldName, + false, ), ) groupBy = append(groupBy, q.Field(valueFieldName)) diff --git a/pkg/compute/models/buckets.go b/pkg/compute/models/buckets.go index e3beb7f044..668f249776 100644 --- a/pkg/compute/models/buckets.go +++ b/pkg/compute/models/buckets.go @@ -1554,6 +1554,7 @@ func (manager *SBucketManager) TotalCount(ctx context.Context, scope rbacscope.T buckets.Field("object_cnt"), ).Else(sqlchemy.NewConstField(0)), "object_cnt1", + false, ), sqlchemy.NewFunction( sqlchemy.NewCase().When( @@ -1561,6 +1562,7 @@ func (manager *SBucketManager) TotalCount(ctx context.Context, scope rbacscope.T buckets.Field("size_bytes"), ).Else(sqlchemy.NewConstField(0)), "size_bytes1", + false, ), sqlchemy.NewFunction( sqlchemy.NewCase().When( @@ -1569,6 +1571,7 @@ func (manager *SBucketManager) TotalCount(ctx context.Context, scope rbacscope.T ).Else( buckets.Field("size_bytes")), "size_bytes_limit", + false, ), ) bucketsQ = manager.usageQ(bucketsQ, rangeObjs, providers, brands, cloudEnv) diff --git a/pkg/compute/models/hosts.go b/pkg/compute/models/hosts.go index c813e22107..3e1177a92c 100644 --- a/pkg/compute/models/hosts.go +++ b/pkg/compute/models/hosts.go @@ -1196,7 +1196,7 @@ func (hh *SHostManager) GetPropertyHostTypeCount(ctx context.Context, userCred m hcso := sqlchemy.Equals(hosts.Field("host_type"), api.HOST_TYPE_HCSO) cs.When(hcso, sqlchemy.COUNT("", sqlchemy.DISTINCT("", hosts.Field("external_id")))) cs.Else(sqlchemy.COUNT("", hosts.Field("id"))) - q := hosts.Query(hosts.Field("host_type"), sqlchemy.NewFunction(cs, "count")) + q := hosts.Query(hosts.Field("host_type"), sqlchemy.NewFunction(cs, "count", true)) return hh.getCount(ctx, userCred, q, query) } diff --git a/pkg/compute/models/networkaddresses.go b/pkg/compute/models/networkaddresses.go index b417b82034..76bf51ca6f 100644 --- a/pkg/compute/models/networkaddresses.go +++ b/pkg/compute/models/networkaddresses.go @@ -523,7 +523,7 @@ func (man *SNetworkAddressManager) ListItemFilter(ctx context.Context, q *sqlche networks = networks.Join(wires, sqlchemy.Equals(wires.Field("id"), networks.Field("wire_id"))) networks = networks.Join(vpcs, sqlchemy.Equals(vpcs.Field("id"), wires.Field("vpc_id"))) networks = networks.AppendField(networks.Field("id")) - networks = networks.AppendField(sqlchemy.NewFunction(sqlchemy.NewCase().When(sqlchemy.IsNullOrEmpty(wires.Field("manager_id")), vpcs.Field("manager_id")).Else(wires.Field("manager_id")), "manager_id")) + networks = networks.AppendField(sqlchemy.NewFunction(sqlchemy.NewCase().When(sqlchemy.IsNullOrEmpty(wires.Field("manager_id")), vpcs.Field("manager_id")).Else(wires.Field("manager_id")), "manager_id", false)) subq := networks.SubQuery().Query() subq = subq.AppendField(subq.Field("id")) return subq diff --git a/pkg/keystone/models/assignments.go b/pkg/keystone/models/assignments.go index 94e486d377..7e04a14c71 100644 --- a/pkg/keystone/models/assignments.go +++ b/pkg/keystone/models/assignments.go @@ -648,6 +648,7 @@ func (manager *SAssignmentManager) queryAll( sqlchemy.Equals(assigments.Field("type"), sqlchemy.NewStringField(api.AssignmentUserDomain)), ), assigments.Field("actor_id")).Else(sqlchemy.NewStringField("")), "user_id", + false, ), sqlchemy.NewFunction( sqlchemy.NewCase().When(sqlchemy.OR( @@ -655,6 +656,7 @@ func (manager *SAssignmentManager) queryAll( sqlchemy.Equals(assigments.Field("type"), sqlchemy.NewStringField(api.AssignmentGroupDomain)), ), assigments.Field("actor_id")).Else(sqlchemy.NewStringField("")), "group_id", + false, ), sqlchemy.NewFunction( sqlchemy.NewCase().When(sqlchemy.OR( @@ -662,6 +664,7 @@ func (manager *SAssignmentManager) queryAll( sqlchemy.Equals(assigments.Field("type"), sqlchemy.NewStringField(api.AssignmentGroupDomain)), ), assigments.Field("target_id")).Else(sqlchemy.NewStringField("")), "domain_id", + false, ), sqlchemy.NewFunction( sqlchemy.NewCase().When(sqlchemy.OR( @@ -669,6 +672,7 @@ func (manager *SAssignmentManager) queryAll( sqlchemy.Equals(assigments.Field("type"), sqlchemy.NewStringField(api.AssignmentGroupProject)), ), assigments.Field("target_id")).Else(sqlchemy.NewStringField("")), "project_id", + false, ), assigments.Field("role_id"), ) diff --git a/vendor/modules.txt b/vendor/modules.txt index 0b88681350..32cdd9c92c 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -1633,7 +1633,7 @@ yunion.io/x/pkg/utils # yunion.io/x/s3cli v0.0.0-20190917004522-13ac36d8687e ## explicit; go 1.12 yunion.io/x/s3cli -# yunion.io/x/sqlchemy v1.1.3-0.20240315065533-9ede1267a826 +# yunion.io/x/sqlchemy v1.1.3-0.20240326090913-96da8bf92408 ## explicit; go 1.17 yunion.io/x/sqlchemy yunion.io/x/sqlchemy/backends diff --git a/vendor/yunion.io/x/sqlchemy/functions.go b/vendor/yunion.io/x/sqlchemy/functions.go index 812e93b938..0cfc095f33 100644 --- a/vendor/yunion.io/x/sqlchemy/functions.go +++ b/vendor/yunion.io/x/sqlchemy/functions.go @@ -37,10 +37,11 @@ type IFunction interface { // NewFunction creates a field with SQL function // for example: SUM(count) as total -func NewFunction(ifunc IFunction, name string) IQueryField { +func NewFunction(ifunc IFunction, name string, isAggre bool) IQueryField { return &SFunctionFieldBase{ IFunction: ifunc, alias: name, + aggregate: isAggre, } }