summaryrefslogtreecommitdiffstats
path: root/vendor/xorm.io/xorm/statement_exprparam.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/xorm.io/xorm/statement_exprparam.go')
-rw-r--r--vendor/xorm.io/xorm/statement_exprparam.go117
1 files changed, 117 insertions, 0 deletions
diff --git a/vendor/xorm.io/xorm/statement_exprparam.go b/vendor/xorm.io/xorm/statement_exprparam.go
new file mode 100644
index 0000000000..4da4f1ea12
--- /dev/null
+++ b/vendor/xorm.io/xorm/statement_exprparam.go
@@ -0,0 +1,117 @@
+// 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 xorm
+
+import (
+ "fmt"
+ "strings"
+
+ "xorm.io/builder"
+)
+
+type ErrUnsupportedExprType struct {
+ tp string
+}
+
+func (err ErrUnsupportedExprType) Error() string {
+ return fmt.Sprintf("Unsupported expression type: %v", err.tp)
+}
+
+type exprParam struct {
+ colName string
+ arg interface{}
+}
+
+type exprParams struct {
+ colNames []string
+ args []interface{}
+}
+
+func (exprs *exprParams) Len() int {
+ return len(exprs.colNames)
+}
+
+func (exprs *exprParams) addParam(colName string, arg interface{}) {
+ exprs.colNames = append(exprs.colNames, colName)
+ exprs.args = append(exprs.args, arg)
+}
+
+func (exprs *exprParams) isColExist(colName string) bool {
+ for _, name := range exprs.colNames {
+ if strings.EqualFold(trimQuote(name), trimQuote(colName)) {
+ return true
+ }
+ }
+ return false
+}
+
+func (exprs *exprParams) getByName(colName string) (exprParam, bool) {
+ for i, name := range exprs.colNames {
+ if strings.EqualFold(name, colName) {
+ return exprParam{name, exprs.args[i]}, true
+ }
+ }
+ return exprParam{}, false
+}
+
+func (exprs *exprParams) writeArgs(w *builder.BytesWriter) error {
+ for i, expr := range exprs.args {
+ switch arg := expr.(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
+ }
+ default:
+ if _, err := w.WriteString(fmt.Sprintf("%v", arg)); err != nil {
+ return err
+ }
+ }
+ if i != len(exprs.args)-1 {
+ if _, err := w.WriteString(","); err != nil {
+ return err
+ }
+ }
+ }
+ return nil
+}
+
+func (exprs *exprParams) writeNameArgs(w *builder.BytesWriter) error {
+ for i, colName := range exprs.colNames {
+ if _, err := w.WriteString(colName); err != nil {
+ return err
+ }
+ if _, err := w.WriteString("="); err != nil {
+ return err
+ }
+
+ switch arg := exprs.args[i].(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
+ }
+ default:
+ w.Append(exprs.args[i])
+ }
+
+ if i+1 != len(exprs.colNames) {
+ if _, err := w.WriteString(","); err != nil {
+ return err
+ }
+ }
+ }
+ return nil
+}