Merge pull request #9899 from yousong/feature/yousong-vpc-order-count

feat(vpcs): list: add order_by_network_count
This commit is contained in:
Zexi Li
2021-01-14 23:47:05 +08:00
committed by GitHub
2 changed files with 39 additions and 0 deletions
+2
View File
@@ -70,6 +70,8 @@ type VpcListInput struct {
// CIDR地址段
// example: 192.168.222.0/24
CidrBlock []string `json:"cidr_block"`
OrderByNetworkCount string `json:"order_by_network_count"`
}
const (
+37
View File
@@ -1225,6 +1225,43 @@ func (manager *SVpcManager) OrderByExtraFields(
if err != nil {
return nil, errors.Wrap(err, "SGlobalVpcResourceBaseManager.OrderByExtraFields")
}
if db.NeedOrderQuery([]string{query.OrderByNetworkCount}) {
var (
wireq = WireManager.Query().SubQuery()
netq = NetworkManager.Query().SubQuery()
vpcq = VpcManager.Query().SubQuery()
)
countq := vpcq.Query(
vpcq.Field("id"),
sqlchemy.COUNT("network_count", netq.Field("id")),
)
countq = countq.Join(wireq, sqlchemy.OR(
sqlchemy.Equals(countq.Field("id"), wireq.Field("vpc_id")),
sqlchemy.AND(
sqlchemy.Equals(countq.Field("id"), api.DEFAULT_VPC_ID),
sqlchemy.IsNullOrEmpty(wireq.Field("vpc_id")),
),
))
countq = countq.Join(netq, sqlchemy.Equals(
netq.Field("wire_id"), wireq.Field("id"),
))
countq = countq.GroupBy(vpcq.Field("id"))
countSubq := countq.SubQuery()
q = q.LeftJoin(countSubq, sqlchemy.Equals(
q.Field("id"), countSubq.Field("id"),
))
q.AppendField(q.QueryFields()...)
q = q.AppendField(countSubq.Field("network_count"))
q = db.OrderByFields(q,
[]string{
query.OrderByNetworkCount,
},
[]sqlchemy.IQueryField{
countSubq.Field("network_count"),
},
)
}
return q, nil
}