fix: host-type-count sql error (#19801)

Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
This commit is contained in:
Jian Qiu
2024-03-26 18:57:35 +08:00
committed by GitHub
parent 2a7daa62cd
commit 4a3dcb4c37
9 changed files with 16 additions and 7 deletions

2
go.mod
View File

@@ -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
)

4
go.sum
View File

@@ -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=

View File

@@ -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))

View File

@@ -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)

View File

@@ -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)
}

View File

@@ -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

View File

@@ -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"),
)

2
vendor/modules.txt vendored
View File

@@ -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

View File

@@ -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,
}
}