github.com/johnnyeven/libtools@v0.0.0-20191126065708-61829c1adf46/sqlx/builder/expression.go (about) 1 package builder 2 3 func ExprFrom(v interface{}) *Expression { 4 switch v.(type) { 5 case *Expression: 6 return v.(*Expression) 7 case CanExpr: 8 return v.(CanExpr).Expr() 9 } 10 return nil 11 } 12 13 func Expr(query string, args ...interface{}) *Expression { 14 return &Expression{Query: query, Args: args} 15 } 16 17 func ExprErr(err error) *Expression { 18 return &Expression{Err: err} 19 } 20 21 type CanExpr interface { 22 Expr() *Expression 23 } 24 25 type Expression struct { 26 Err error 27 Query string 28 Args []interface{} 29 } 30 31 func (e *Expression) Expr() *Expression { 32 return e 33 } 34 35 func (e Expression) ConcatBy(joiner string, canExpr CanExpr) *Expression { 36 expr := canExpr.Expr() 37 if expr == nil { 38 return &e 39 } 40 return Expr(e.Query+joiner+expr.Query, append(e.Args, expr.Args...)...) 41 }