1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- package sqlbuilder
- import (
- "reflect"
- "strings"
- )
- func Escape(ident string) string {
- return strings.Replace(ident, "$", "$$", -1)
- }
- func EscapeAll(ident ...string) []string {
- escaped := make([]string, 0, len(ident))
- for _, i := range ident {
- escaped = append(escaped, Escape(i))
- }
- return escaped
- }
- func Flatten(slices interface{}) (flattened []interface{}) {
- v := reflect.ValueOf(slices)
- slices, flattened = flatten(v)
- if slices != nil {
- return []interface{}{slices}
- }
- return flattened
- }
- func flatten(v reflect.Value) (elem interface{}, flattened []interface{}) {
- k := v.Kind()
- for k == reflect.Interface {
- v = v.Elem()
- k = v.Kind()
- }
- if k != reflect.Slice && k != reflect.Array {
- return v.Interface(), nil
- }
- for i, l := 0, v.Len(); i < l; i++ {
- e, f := flatten(v.Index(i))
- if e == nil {
- flattened = append(flattened, f...)
- } else {
- flattened = append(flattened, e)
- }
- }
- return
- }
- type rawArgs struct {
- expr string
- }
- func Raw(expr string) interface{} {
- return rawArgs{expr}
- }
- type listArgs struct {
- args []interface{}
- }
- func List(arg interface{}) interface{} {
- return listArgs{Flatten(arg)}
- }
- type namedArgs struct {
- name string
- arg interface{}
- }
- func Named(name string, arg interface{}) interface{} {
- return namedArgs{
- name: name,
- arg: arg,
- }
- }
|