func TestNumericMap(t *testing.T) { sqlVal, _ := sqltypes.BuildIntegral("8") got, err := numeric.(Unique).Map(nil, []interface{}{ 1, int32(2), int64(3), uint(4), uint32(5), uint64(6), []byte("7"), sqlVal, }) if err != nil { t.Error(err) } want := [][]byte{ []byte("\x00\x00\x00\x00\x00\x00\x00\x01"), []byte("\x00\x00\x00\x00\x00\x00\x00\x02"), []byte("\x00\x00\x00\x00\x00\x00\x00\x03"), []byte("\x00\x00\x00\x00\x00\x00\x00\x04"), []byte("\x00\x00\x00\x00\x00\x00\x00\x05"), []byte("\x00\x00\x00\x00\x00\x00\x00\x06"), []byte("\x00\x00\x00\x00\x00\x00\x00\x07"), []byte("\x00\x00\x00\x00\x00\x00\x00\x08"), } if !reflect.DeepEqual(got, want) { t.Errorf("Map(): %+v, want %+v", got, want) } }
// AsInterface converts the ValExpr to an interface. It converts // ValTuple to []interface{}, ValArg to string, StrVal to sqltypes.String, // NumVal to sqltypes.Numeric, NullVal to nil. // Otherwise, it returns an error. func AsInterface(node ValExpr) (interface{}, error) { switch node := node.(type) { case ValTuple: vals := make([]interface{}, 0, len(node)) for _, val := range node { v, err := AsInterface(val) if err != nil { return nil, err } vals = append(vals, v) } return vals, nil case ValArg: return string(node), nil case ListArg: return string(node), nil case StrVal: return sqltypes.MakeString(node), nil case NumVal: n, err := sqltypes.BuildIntegral(string(node)) if err != nil { return nil, fmt.Errorf("type mismatch: %s", err) } return n, nil case *NullVal: return nil, nil } return nil, fmt.Errorf("unexpected node %v", node) }
func TestNumericStaticMapMap(t *testing.T) { numericStaticMap, err := createVindex() if err != nil { t.Fatalf("failed to create vindex: %v", err) } sqlVal, _ := sqltypes.BuildIntegral("8") got, err := numericStaticMap.(Unique).Map(nil, []interface{}{ 1, int32(2), int64(3), uint(4), uint32(5), uint64(6), []byte("7"), sqlVal, }) if err != nil { t.Error(err) } // in the third slice, we expect 2 instead of 3 as numeric_static_map_test.json // has 3 mapped to 2 want := [][]byte{ []byte("\x00\x00\x00\x00\x00\x00\x00\x01"), []byte("\x00\x00\x00\x00\x00\x00\x00\x02"), []byte("\x00\x00\x00\x00\x00\x00\x00\x02"), []byte("\x00\x00\x00\x00\x00\x00\x00\x04"), []byte("\x00\x00\x00\x00\x00\x00\x00\x05"), []byte("\x00\x00\x00\x00\x00\x00\x00\x06"), []byte("\x00\x00\x00\x00\x00\x00\x00\x07"), []byte("\x00\x00\x00\x00\x00\x00\x00\x08"), } if !reflect.DeepEqual(got, want) { t.Errorf("Map(): %+v, want %+v", got, want) } }