func getBoundValue(valExpr sqlparser.ValExpr, bindVariables map[string]interface{}) (string, error) { switch node := valExpr.(type) { case sqlparser.ValTuple: if len(node) != 1 { return "", fmt.Errorf("tuples not allowed as insert values") } // TODO: Change parser to create single value tuples into non-tuples. return getBoundValue(node[0], bindVariables) case sqlparser.StrVal: return string(node), nil case sqlparser.NumVal: val, err := strconv.ParseInt(string(node), 10, 64) if err != nil { return "", err } return key.Uint64Key(val).String(), nil case sqlparser.ValArg: value, err := findBindValue(node, bindVariables) if err != nil { return "", err } return key.EncodeValue(value), nil } panic("Unexpected token") }
func (node *Node) getBoundValue(bindVariables map[string]interface{}) string { switch node.Type { case '(': return node.NodeAt(0).getBoundValue(bindVariables) case STRING: return string(node.Value) case NUMBER: val, err := strconv.ParseInt(string(node.Value), 10, 64) if err != nil { panic(NewParserError("%s", err.Error())) } return key.Uint64Key(val).String() case VALUE_ARG: value := node.findBindValue(bindVariables) return key.EncodeValue(value) } panic("Unexpected token") }