// Copyright 2016 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 builder import ( "fmt" "reflect" "strings" ) type condIn struct { col string vals []interface{} } var _ Cond = condIn{} // In generates IN condition func In(col string, values ...interface{}) Cond { return condIn{col, values} } func (condIn condIn) WriteTo(w Writer) error { if len(condIn.vals) <= 0 { return ErrNoInConditions } switch condIn.vals[0].(type) { case []int8: vals := condIn.vals[0].([]int8) if len(vals) <= 0 { return ErrNoInConditions } questionMark := strings.Repeat("?,", len(vals)) if _, err := fmt.Fprintf(w, "%s IN (%s)", condIn.col, questionMark[:len(questionMark)-1]); err != nil { return err } for _, val := range vals { w.Append(val) } case []int16: vals := condIn.vals[0].([]int16) if len(vals) <= 0 { return ErrNoInConditions } questionMark := strings.Repeat("?,", len(vals)) if _, err := fmt.Fprintf(w, "%s IN (%s)", condIn.col, questionMark[:len(questionMark)-1]); err != nil { return err } for _, val := range vals { w.Append(val) } case []int: vals := condIn.vals[0].([]int) if len(vals) <= 0 { return ErrNoInConditions } questionMark := strings.Repeat("?,", len(vals)) if _, err := fmt.Fprintf(w, "%s IN (%s)", condIn.col, questionMark[:len(questionMark)-1]); err != nil { return err } for _, val := range vals { w.Append(val) } case []int32: vals := condIn.vals[0].([]int32) if len(vals) <= 0 { return ErrNoInConditions } questionMark := strings.Repeat("?,", len(vals)) if _, err := fmt.Fprintf(w, "%s IN (%s)", condIn.col, questionMark[:len(questionMark)-1]); err != nil { return err } for _, val := range vals { w.Append(val) } case []int64: vals := condIn.vals[0].([]int64) if len(vals) <= 0 { return ErrNoInConditions } questionMark := strings.Repeat("?,", len(vals)) if _, err := fmt.Fprintf(w, "%s IN (%s)", condIn.col, questionMark[:len(questionMark)-1]); err != nil { return err } for _, val := range vals { w.Append(val) } case []uint8: vals := condIn.vals[0].([]uint8) if len(vals) <= 0 { return ErrNoInConditions } questionMark := strings.Repeat("?,", len(vals)) if _, err := fmt.Fprintf(w, "%s IN (%s)", condIn.col, questionMark[:len(questionMark)-1]); err != nil { return err } for _, val := range vals { w.Append(val) } case []uint16: vals := condIn.vals[0].([]uint16) if len(vals) <= 0 { return ErrNoInConditions } questionMark := strings.Repeat("?,", len(vals)) if _, err := fmt.Fprintf(w, "%s IN (%s)", condIn.col, questionMark[:len(questionMark)-1]); err != nil { return err } for _, val := range vals { w.Append(val) } case []uint: vals := condIn.vals[0].([]uint) if len(vals) <= 0 { return ErrNoInConditions } questionMark := strings.Repeat("?,", len(vals)) if _, err := fmt.Fprintf(w, "%s IN (%s)", condIn.col, questionMark[:len(questionMark)-1]); err != nil { return err } for _, val := range vals { w.Append(val) } case []uint32: vals := condIn.vals[0].([]uint32) if len(vals) <= 0 { return ErrNoInConditions } questionMark := strings.Repeat("?,", len(vals)) if _, err := fmt.Fprintf(w, "%s IN (%s)", condIn.col, questionMark[:len(questionMark)-1]); err != nil { return err } for _, val := range vals { w.Append(val) } case []uint64: vals := condIn.vals[0].([]uint64) if len(vals) <= 0 { return ErrNoInConditions } questionMark := strings.Repeat("?,", len(vals)) if _, err := fmt.Fprintf(w, "%s IN (%s)", condIn.col, questionMark[:len(questionMark)-1]); err != nil { return err } for _, val := range vals { w.Append(val) } case []string: vals := condIn.vals[0].([]string) if len(vals) <= 0 { return ErrNoInConditions } questionMark := strings.Repeat("?,", len(vals)) if _, err := fmt.Fprintf(w, "%s IN (%s)", condIn.col, questionMark[:len(questionMark)-1]); err != nil { return err } for _, val := range vals { w.Append(val) } case []interface{}: vals := condIn.vals[0].([]interface{}) if len(vals) <= 0 { return ErrNoInConditions } questionMark := strings.Repeat("?,", len(vals)) if _, err := fmt.Fprintf(w, "%s IN (%s)", condIn.col, questionMark[:len(questionMark)-1]); err != nil { return err } w.Append(vals...) case expr: val := condIn.vals[0].(expr) if _, err := fmt.Fprintf(w, "%s IN (", condIn.col); err != nil { return err } if err := val.WriteTo(w); err != nil { return err } if _, err := fmt.Fprintf(w, ")"); err != nil { return err } case *Builder: bd := condIn.vals[0].(*Builder) if _, err := fmt.Fprintf(w, "%s IN (", condIn.col); err != nil { return err } if err := bd.WriteTo(w); err != nil { return err } if _, err := fmt.Fprintf(w, ")"); err != nil { return err } default: if len(condIn.vals) <= 0 { return ErrNoInConditions } v := reflect.ValueOf(condIn.vals[0]) if v.Kind() == reflect.Slice { l := v.Len() questionMark := strings.Repeat("?,", l) if _, err := fmt.Fprintf(w, "%s IN (%s)", condIn.col, questionMark[:len(questionMark)-1]); err != nil { return err } for i := 0; i < l; i++ { w.Append(v.Index(i).Interface()) } } else { questionMark := strings.Repeat("?,", len(condIn.vals)) if _, err := fmt.Fprintf(w, "%s IN (%s)", condIn.col, questionMark[:len(questionMark)-1]); err != nil { return err } w.Append(condIn.vals...) } } return nil } func (condIn condIn) And(conds ...Cond) Cond { return And(condIn, And(conds...)) } func (condIn condIn) Or(conds ...Cond) Cond { return Or(condIn, Or(conds...)) } func (condIn condIn) IsValid() bool { return len(condIn.col) > 0 && len(condIn.vals) > 0 }
session(release): write data/sessions/a/a/aaac422e6438d6db: no space left on device
github.com/go-macaron/session@v0.0.0-20190805070824-1a3cdc6f5659/session.go:199 (0x8b2934) gopkg.in/macaron.v1@v1.3.9/context.go:79 (0x83d0a0) github.com/go-macaron/inject@v0.0.0-20160627170012-d8a0b8677191/inject.go:157 (0x80ab07) github.com/go-macaron/inject@v0.0.0-20160627170012-d8a0b8677191/inject.go:135 (0x80a8a8) gopkg.in/macaron.v1@v1.3.9/context.go:121 (0x83d1f8) gopkg.in/macaron.v1@v1.3.9/context.go:112 (0x84fdb5) gopkg.in/macaron.v1@v1.3.9/recovery.go:161 (0x84fda8) gopkg.in/macaron.v1@v1.3.9/logger.go:40 (0x840c73) github.com/go-macaron/inject@v0.0.0-20160627170012-d8a0b8677191/inject.go:157 (0x80ab07) github.com/go-macaron/inject@v0.0.0-20160627170012-d8a0b8677191/inject.go:135 (0x80a8a8) gopkg.in/macaron.v1@v1.3.9/context.go:121 (0x83d1f8) gopkg.in/macaron.v1@v1.3.9/router.go:187 (0x850fc6) gopkg.in/macaron.v1@v1.3.9/router.go:303 (0x8493e5) gopkg.in/macaron.v1@v1.3.9/macaron.go:220 (0x841fca) net/http/server.go:2836 (0x7a79b2) net/http/server.go:1924 (0x7a341b) runtime/asm_amd64.s:1373 (0x46f9f0)