func resolveListArg(col *schema.TableColumn, key string, bindVars map[string]interface{}) ([]sqltypes.Value, error) { val, _, err := sqlparser.FetchBindVar(key, bindVars) if err != nil { return nil, NewTabletError(FAIL, "%v", err) } list := val.([]interface{}) resolved := make([]sqltypes.Value, len(list)) for i, v := range list { sqlval, err := sqltypes.BuildValue(v) if err != nil { return nil, NewTabletError(FAIL, "%v", err) } if err = validateValue(col, sqlval); err != nil { return nil, err } resolved[i] = sqlval } return resolved, nil }
func resolveValue(col *schema.TableColumn, value interface{}, bindVars map[string]interface{}) (result sqltypes.Value, err error) { switch v := value.(type) { case string: val, _, err := sqlparser.FetchBindVar(v, bindVars) if err != nil { return result, NewTabletError(FAIL, "%v", err) } sqlval, err := sqltypes.BuildValue(val) if err != nil { return result, NewTabletError(FAIL, "%v", err) } result = sqlval case sqltypes.Value: result = v default: panic(fmt.Sprintf("incompatible value type %v", v)) } if err = validateValue(col, result); err != nil { return result, err } return result, nil }