|
@@ -67,7 +67,7 @@ func (queryParams *BaseAdvanceQueryParams) GetPageSize() int {
|
|
|
type FormAdditionalSelectClausesFunc func(queryParams AdvanceQueryParams) ([]string, error)
|
|
|
type FormAdditionalFromFunc func(queryParams AdvanceQueryParams) ([]clause.Clause, error)
|
|
|
type FormAdditionalConditionsFunc func(queryParams AdvanceQueryParams) (clause.Clause, error)
|
|
|
-type FormOtherClausesFunc func(queryParams AdvanceQueryParams) ([]clause.Clause, error)
|
|
|
+type FormOrderByFunc func(queryParams AdvanceQueryParams) (clause.Clause, error)
|
|
|
|
|
|
type AddUseQueryRuleQueryRouteParams struct {
|
|
|
DBSchema string
|
|
@@ -75,7 +75,7 @@ type AddUseQueryRuleQueryRouteParams struct {
|
|
|
FormAdditionalSelectClausesFunc FormAdditionalSelectClausesFunc
|
|
|
FormAdditionalFromFunc FormAdditionalFromFunc
|
|
|
FormAdditionalConditionsFunc FormAdditionalConditionsFunc
|
|
|
- FormOtherClausesFunc FormOtherClausesFunc
|
|
|
+ FormOrderByFunc FormOrderByFunc
|
|
|
Object domain.Object
|
|
|
QueryMiddlewares []binding.Middleware
|
|
|
}
|
|
@@ -118,16 +118,8 @@ func AddUseQueryRuleQueryRoute[O any](binder *binding.Binder, addParams *AddUseQ
|
|
|
return errResponse, errors.New("需要传递领域对象应该为实体")
|
|
|
}
|
|
|
|
|
|
- var selectClause *clause.Select
|
|
|
- var countClause *clause.Select
|
|
|
- var fromClause *clause.From
|
|
|
- var additionalConditions clause.Clause
|
|
|
-
|
|
|
+
|
|
|
selectClauses := make([]string, 0)
|
|
|
- fromClauses := []clause.Clause{clause.TableName(domain.TableName(addParams.DBSchema, e))}
|
|
|
- selectOtherClauses := make([]clause.Clause, 0)
|
|
|
- countOtherClauses := make([]clause.Clause, 0)
|
|
|
-
|
|
|
if addParams.FormAdditionalSelectClausesFunc != nil {
|
|
|
additionalSelectClauses, err := addParams.FormAdditionalSelectClausesFunc(advanceQueryParams)
|
|
|
if err != nil {
|
|
@@ -137,6 +129,8 @@ func AddUseQueryRuleQueryRoute[O any](binder *binding.Binder, addParams *AddUseQ
|
|
|
selectClauses = additionalSelectClauses
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ fromClauses := []clause.Clause{clause.TableName(domain.TableName(addParams.DBSchema, e))}
|
|
|
if addParams.FormAdditionalFromFunc != nil {
|
|
|
additionalFromClauses, err := addParams.FormAdditionalFromFunc(advanceQueryParams)
|
|
|
if err != nil {
|
|
@@ -146,57 +140,49 @@ func AddUseQueryRuleQueryRoute[O any](binder *binding.Binder, addParams *AddUseQ
|
|
|
fromClauses = append(fromClauses, additionalFromClauses...)
|
|
|
}
|
|
|
|
|
|
- fromClause = clause.NewFrom(fromClauses)
|
|
|
- limitClause := clause.NewLimit(advanceQueryParams.GetPageNo(), advanceQueryParams.GetPageSize())
|
|
|
-
|
|
|
- if addParams.FormAdditionalConditionsFunc != nil {
|
|
|
- conditions, err := addParams.FormAdditionalConditionsFunc(advanceQueryParams)
|
|
|
- if err != nil {
|
|
|
- return errResponse, err
|
|
|
- }
|
|
|
-
|
|
|
- additionalConditions = conditions
|
|
|
- }
|
|
|
-
|
|
|
- if strutils.IsStringEmpty(advanceQueryParams.GetRule()) {
|
|
|
- if additionalConditions != nil {
|
|
|
- selectOtherClauses = append(selectOtherClauses, clause.NewWhere(additionalConditions), limitClause)
|
|
|
- countOtherClauses = append(countOtherClauses, clause.NewWhere(additionalConditions))
|
|
|
- } else {
|
|
|
- selectOtherClauses = append(selectOtherClauses, limitClause)
|
|
|
- }
|
|
|
- } else {
|
|
|
+
|
|
|
+ var conditionsClause clause.Clause
|
|
|
+ if strutils.IsStringNotEmpty(advanceQueryParams.GetRule()) {
|
|
|
queryRule := new(rule.Rule)
|
|
|
err := json.Unmarshal([]byte(advanceQueryParams.GetRule()), queryRule)
|
|
|
if err != nil {
|
|
|
return errResponse, err
|
|
|
}
|
|
|
|
|
|
- conditionClause, err := rule.FormConditionClauseByRule(e.DomainCamelName(), *queryRule, nil)
|
|
|
+ ruleConditionClause, err := rule.FormConditionClauseByRule(e.DomainCamelName(), *queryRule, nil)
|
|
|
if err != nil {
|
|
|
return errResponse, err
|
|
|
}
|
|
|
|
|
|
- if additionalConditions != nil {
|
|
|
- conditionClause = clause.NewConditionJoin(conditionClause, additionalConditions).And()
|
|
|
+ conditionsClause = ruleConditionClause
|
|
|
+ }
|
|
|
+
|
|
|
+ if addParams.FormAdditionalConditionsFunc != nil {
|
|
|
+ additionalConditionsClause, err := addParams.FormAdditionalConditionsFunc(advanceQueryParams)
|
|
|
+ if err != nil {
|
|
|
+ return errResponse, err
|
|
|
}
|
|
|
|
|
|
- selectOtherClauses = append(selectOtherClauses, clause.NewWhere(conditionClause), limitClause)
|
|
|
- countOtherClauses = append(countOtherClauses, clause.NewWhere(conditionClause))
|
|
|
+ conditionsClause = clause.NewConditionJoin(conditionsClause, additionalConditionsClause).And()
|
|
|
}
|
|
|
|
|
|
- if addParams.FormOtherClausesFunc != nil {
|
|
|
- otherClauses, err := addParams.FormOtherClausesFunc(advanceQueryParams)
|
|
|
+
|
|
|
+ var orderByClause clause.Clause
|
|
|
+ if addParams.FormOrderByFunc != nil {
|
|
|
+ innerOrderByClause, err := addParams.FormOrderByFunc(advanceQueryParams)
|
|
|
if err != nil {
|
|
|
return errResponse, err
|
|
|
}
|
|
|
|
|
|
- selectOtherClauses = append(selectOtherClauses, otherClauses...)
|
|
|
- countOtherClauses = append(countOtherClauses, otherClauses...)
|
|
|
+ orderByClause = innerOrderByClause
|
|
|
}
|
|
|
|
|
|
- selectClause = clause.NewSelect(selectClauses, fromClause, selectOtherClauses...)
|
|
|
- countClause = clause.NewSelect([]string{"COUNT(*) AS total"}, fromClause, countOtherClauses...)
|
|
|
+
|
|
|
+ limitClause := clause.NewLimit(advanceQueryParams.GetPageNo(), advanceQueryParams.GetPageSize())
|
|
|
+
|
|
|
+ fromClause := clause.NewFrom(fromClauses)
|
|
|
+ selectClause := clause.NewSelect(selectClauses, fromClause, clause.NewWhere(conditionsClause), orderByClause, limitClause)
|
|
|
+ countClause := clause.NewSelect([]string{"COUNT(*) AS total"}, fromClause, clause.NewWhere(conditionsClause))
|
|
|
|
|
|
selectClauseStr, err := selectClause.Clause()
|
|
|
if err != nil {
|