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  }