func EncodeValue(buf *bytes.Buffer, value interface{}) error { switch bindVal := value.(type) { case nil: buf.WriteString("null") case []sqltypes.Value: for i := 0; i < len(bindVal); i++ { if i != 0 { buf.WriteString(", ") } if err := EncodeValue(buf, bindVal[i]); err != nil { return err } } case [][]sqltypes.Value: for i := 0; i < len(bindVal); i++ { if i != 0 { buf.WriteString(", ") } buf.WriteByte('(') if err := EncodeValue(buf, bindVal[i]); err != nil { return err } buf.WriteByte(')') } default: v, err := sqltypes.BuildValue(bindVal) if err != nil { return err } v.EncodeSql(buf) } return nil }
func resolveValue(col *schema.TableColumn, value interface{}, bindVars map[string]interface{}) (result sqltypes.Value) { switch v := value.(type) { case string: lookup, ok := bindVars[v[1:]] if !ok { panic(NewTabletError(FAIL, "Missing bind var %s", v)) } sqlval, err := sqltypes.BuildValue(lookup) if err != nil { panic(NewTabletError(FAIL, "%v", err)) } result = sqlval case sqltypes.Value: result = v case nil: // no op default: panic("unreachable") } validateValue(col, result) return result }