mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			95 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
		
			Vendored
		
	
	
	
			
		
		
	
	
			95 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
		
			Vendored
		
	
	
	
// Copyright 2019 The Xorm Authors. All rights reserved.
 | 
						|
// Use of this source code is governed by a BSD-style
 | 
						|
// license that can be found in the LICENSE file.
 | 
						|
 | 
						|
package statements
 | 
						|
 | 
						|
import (
 | 
						|
	"fmt"
 | 
						|
	"strings"
 | 
						|
 | 
						|
	"xorm.io/builder"
 | 
						|
	"xorm.io/xorm/schemas"
 | 
						|
)
 | 
						|
 | 
						|
// ErrUnsupportedExprType represents an error with unsupported express type
 | 
						|
type ErrUnsupportedExprType struct {
 | 
						|
	tp string
 | 
						|
}
 | 
						|
 | 
						|
func (err ErrUnsupportedExprType) Error() string {
 | 
						|
	return fmt.Sprintf("Unsupported expression type: %v", err.tp)
 | 
						|
}
 | 
						|
 | 
						|
// Expr represents an SQL express
 | 
						|
type Expr struct {
 | 
						|
	ColName string
 | 
						|
	Arg     interface{}
 | 
						|
}
 | 
						|
 | 
						|
// WriteArgs writes args to the writer
 | 
						|
func (expr *Expr) WriteArgs(w *builder.BytesWriter) error {
 | 
						|
	switch arg := expr.Arg.(type) {
 | 
						|
	case *builder.Builder:
 | 
						|
		if _, err := w.WriteString("("); err != nil {
 | 
						|
			return err
 | 
						|
		}
 | 
						|
		if err := arg.WriteTo(w); err != nil {
 | 
						|
			return err
 | 
						|
		}
 | 
						|
		if _, err := w.WriteString(")"); err != nil {
 | 
						|
			return err
 | 
						|
		}
 | 
						|
	case string:
 | 
						|
		if arg == "" {
 | 
						|
			arg = "''"
 | 
						|
		}
 | 
						|
		if _, err := w.WriteString(fmt.Sprintf("%v", arg)); err != nil {
 | 
						|
			return err
 | 
						|
		}
 | 
						|
	default:
 | 
						|
		if _, err := w.WriteString("?"); err != nil {
 | 
						|
			return err
 | 
						|
		}
 | 
						|
		w.Append(arg)
 | 
						|
	}
 | 
						|
	return nil
 | 
						|
}
 | 
						|
 | 
						|
type exprParams []Expr
 | 
						|
 | 
						|
func (exprs exprParams) ColNames() []string {
 | 
						|
	var cols = make([]string, 0, len(exprs))
 | 
						|
	for _, expr := range exprs {
 | 
						|
		cols = append(cols, expr.ColName)
 | 
						|
	}
 | 
						|
	return cols
 | 
						|
}
 | 
						|
 | 
						|
func (exprs *exprParams) Add(name string, arg interface{}) {
 | 
						|
	*exprs = append(*exprs, Expr{name, arg})
 | 
						|
}
 | 
						|
 | 
						|
func (exprs exprParams) IsColExist(colName string) bool {
 | 
						|
	for _, expr := range exprs {
 | 
						|
		if strings.EqualFold(schemas.CommonQuoter.Trim(expr.ColName), schemas.CommonQuoter.Trim(colName)) {
 | 
						|
			return true
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return false
 | 
						|
}
 | 
						|
 | 
						|
func (exprs exprParams) WriteArgs(w *builder.BytesWriter) error {
 | 
						|
	for i, expr := range exprs {
 | 
						|
		if err := expr.WriteArgs(w); err != nil {
 | 
						|
			return err
 | 
						|
		}
 | 
						|
		if i != len(exprs)-1 {
 | 
						|
			if _, err := w.WriteString(","); err != nil {
 | 
						|
				return err
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return nil
 | 
						|
}
 |