|
@@ -64,16 +64,20 @@ func (queryParams *BaseAdvanceQueryParams) GetPageSize() int {
|
|
|
return queryParams.PageSize
|
|
|
}
|
|
|
|
|
|
+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 AddUseQueryRuleQueryRouteParams struct {
|
|
|
- DBSchema string
|
|
|
- QueryParams AdvanceQueryParams
|
|
|
- FormAdditionalConditionsFunc FormAdditionalConditionsFunc
|
|
|
- FormOtherClausesFunc FormOtherClausesFunc
|
|
|
- Object domain.Object
|
|
|
- QueryMiddlewares []binding.Middleware
|
|
|
+ DBSchema string
|
|
|
+ QueryParams AdvanceQueryParams
|
|
|
+ FormAdditionalSelectClausesFunc FormAdditionalSelectClausesFunc
|
|
|
+ FormAdditionalFromFunc FormAdditionalFromFunc
|
|
|
+ FormAdditionalConditionsFunc FormAdditionalConditionsFunc
|
|
|
+ FormOtherClausesFunc FormOtherClausesFunc
|
|
|
+ Object domain.Object
|
|
|
+ QueryMiddlewares []binding.Middleware
|
|
|
}
|
|
|
|
|
|
func AddUseQueryRuleQueryRoute[O any](binder *binding.Binder, addParams *AddUseQueryRuleQueryRouteParams) {
|
|
@@ -116,11 +120,33 @@ func AddUseQueryRuleQueryRoute[O any](binder *binding.Binder, addParams *AddUseQ
|
|
|
|
|
|
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)
|
|
|
|
|
|
- fromClause := clause.NewFrom([]clause.Clause{clause.TableName(domain.TableName(addParams.DBSchema, e))})
|
|
|
+ if addParams.FormAdditionalSelectClausesFunc != nil {
|
|
|
+ additionalSelectClauses, err := addParams.FormAdditionalSelectClausesFunc(advanceQueryParams)
|
|
|
+ if err != nil {
|
|
|
+ return errResponse, err
|
|
|
+ }
|
|
|
+
|
|
|
+ selectClauses = additionalSelectClauses
|
|
|
+ }
|
|
|
+
|
|
|
+ if addParams.FormAdditionalFromFunc != nil {
|
|
|
+ additionalFromClauses, err := addParams.FormAdditionalFromFunc(advanceQueryParams)
|
|
|
+ if err != nil {
|
|
|
+ return errResponse, err
|
|
|
+ }
|
|
|
+
|
|
|
+ fromClauses = append(fromClauses, additionalFromClauses...)
|
|
|
+ }
|
|
|
+
|
|
|
+ fromClause = clause.NewFrom(fromClauses)
|
|
|
limitClause := clause.NewLimit(advanceQueryParams.GetPageNo(), advanceQueryParams.GetPageSize())
|
|
|
|
|
|
if addParams.FormAdditionalConditionsFunc != nil {
|
|
@@ -169,7 +195,7 @@ func AddUseQueryRuleQueryRoute[O any](binder *binding.Binder, addParams *AddUseQ
|
|
|
countOtherClauses = append(countOtherClauses, otherClauses...)
|
|
|
}
|
|
|
|
|
|
- selectClause = clause.NewSelect(nil, fromClause, selectOtherClauses...)
|
|
|
+ selectClause = clause.NewSelect(selectClauses, fromClause, selectOtherClauses...)
|
|
|
countClause = clause.NewSelect([]string{"COUNT(*) AS total"}, fromClause, countOtherClauses...)
|
|
|
|
|
|
selectClauseStr, err := selectClause.Clause()
|