|
@@ -60,11 +60,13 @@ func (queryParams *BaseAdvanceQueryParams) GetPageSize() int {
|
|
|
}
|
|
|
|
|
|
type FormAdditionalConditionsFunc func(queryParams AdvanceQueryParams) (clause.Clause, error)
|
|
|
+type FormOtherClausesFunc func(queryParams AdvanceQueryParams) ([]clause.Clause, error)
|
|
|
|
|
|
type AddUseQueryRuleQueryRouteParams struct {
|
|
|
DBSchema string
|
|
|
QueryParams AdvanceQueryParams
|
|
|
FormAdditionalConditionsFunc FormAdditionalConditionsFunc
|
|
|
+ FormOtherClausesFunc FormOtherClausesFunc
|
|
|
Object domain.Object
|
|
|
QueryMiddlewares []binding.Middleware
|
|
|
}
|
|
@@ -110,6 +112,8 @@ func AddUseQueryRuleQueryRoute[O any](binder *binding.Binder, addParams *AddUseQ
|
|
|
var selectClause *clause.Select
|
|
|
var countClause *clause.Select
|
|
|
var additionalConditions clause.Clause
|
|
|
+ selectOtherClauses := make([]clause.Clause, 0)
|
|
|
+ countOtherClauses := make([]clause.Clause, 0)
|
|
|
|
|
|
fromClause := clause.NewFrom([]clause.Clause{clause.TableName(domain.TableName(addParams.DBSchema, e))})
|
|
|
limitClause := clause.NewLimit(advanceQueryParams.GetPageNo(), advanceQueryParams.GetPageSize())
|
|
@@ -125,11 +129,10 @@ func AddUseQueryRuleQueryRoute[O any](binder *binding.Binder, addParams *AddUseQ
|
|
|
|
|
|
if strutils.IsStringEmpty(advanceQueryParams.GetRule()) {
|
|
|
if additionalConditions != nil {
|
|
|
- selectClause = clause.NewSelect(nil, fromClause, clause.NewWhere(additionalConditions), limitClause)
|
|
|
- countClause = clause.NewSelect([]string{"COUNT(*) AS total"}, fromClause, clause.NewWhere(additionalConditions))
|
|
|
+ selectOtherClauses = append(selectOtherClauses, clause.NewWhere(additionalConditions), limitClause)
|
|
|
+ countOtherClauses = append(countOtherClauses, clause.NewWhere(additionalConditions))
|
|
|
} else {
|
|
|
- selectClause = clause.NewSelect(nil, fromClause, limitClause)
|
|
|
- countClause = clause.NewSelect([]string{"COUNT(*) AS total"}, fromClause)
|
|
|
+ selectOtherClauses = append(selectOtherClauses, limitClause)
|
|
|
}
|
|
|
} else {
|
|
|
queryRule := new(rule.Rule)
|
|
@@ -147,10 +150,23 @@ func AddUseQueryRuleQueryRoute[O any](binder *binding.Binder, addParams *AddUseQ
|
|
|
conditionClause = clause.NewConditionJoin(conditionClause, additionalConditions).And()
|
|
|
}
|
|
|
|
|
|
- selectClause = clause.NewSelect(nil, fromClause, clause.NewWhere(conditionClause), limitClause)
|
|
|
- countClause = clause.NewSelect([]string{"COUNT(*) AS total"}, fromClause, clause.NewWhere(conditionClause))
|
|
|
+ selectOtherClauses = append(selectOtherClauses, clause.NewWhere(conditionClause), limitClause)
|
|
|
+ countOtherClauses = append(countOtherClauses, clause.NewWhere(conditionClause))
|
|
|
}
|
|
|
|
|
|
+ if addParams.FormOtherClausesFunc != nil {
|
|
|
+ otherClauses, err := addParams.FormOtherClausesFunc(advanceQueryParams)
|
|
|
+ if err != nil {
|
|
|
+ return errResponse, err
|
|
|
+ }
|
|
|
+
|
|
|
+ selectOtherClauses = append(selectOtherClauses, otherClauses...)
|
|
|
+ countOtherClauses = append(countOtherClauses, otherClauses...)
|
|
|
+ }
|
|
|
+
|
|
|
+ selectClause = clause.NewSelect(nil, fromClause, selectOtherClauses...)
|
|
|
+ countClause = clause.NewSelect([]string{"COUNT(*) AS total"}, fromClause, countOtherClauses...)
|
|
|
+
|
|
|
selectClauseStr, err := selectClause.Clause()
|
|
|
if err != nil {
|
|
|
return errResponse, err
|