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

Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
This commit is contained in:
Jian Qiu
2024-03-26 18:57:40 +08:00
committed by GitHub
co-authored by Qiu Jian
parent 6f73da08b7
commit e918d6d0f1
9 changed files with 16 additions and 7 deletions
+1 -1
View File
@@ -95,7 +95,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
)
+2 -2
View File
@@ -1223,7 +1223,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=
+1
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))
+3
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)
+1 -1
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)
}
+1 -1
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
+4
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"),
)
+1 -1
View File
@@ -1624,7 +1624,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
+2 -1
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,
}
}