tuple_test.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. // +build all integration
  2. package gocql
  3. import "testing"
  4. func TestTupleSimple(t *testing.T) {
  5. session := createSession(t)
  6. defer session.Close()
  7. if session.cfg.ProtoVersion < protoVersion3 {
  8. t.Skip("tuple types are only available of proto>=3")
  9. }
  10. err := createTable(session, `CREATE TABLE gocql_test.tuple_test(
  11. id int,
  12. coord frozen<tuple<int, int>>,
  13. primary key(id))`)
  14. if err != nil {
  15. t.Fatal(err)
  16. }
  17. err = session.Query("INSERT INTO tuple_test(id, coord) VALUES(?, (?, ?))", 1, 100, -100).Exec()
  18. if err != nil {
  19. t.Fatal(err)
  20. }
  21. var (
  22. id int
  23. coord struct {
  24. x int
  25. y int
  26. }
  27. )
  28. iter := session.Query("SELECT id, coord FROM tuple_test WHERE id=?", 1)
  29. if err := iter.Scan(&id, &coord.x, &coord.y); err != nil {
  30. t.Fatal(err)
  31. }
  32. if id != 1 {
  33. t.Errorf("expected to get id=1 got: %v", id)
  34. }
  35. if coord.x != 100 {
  36. t.Errorf("expected to get coord.x=100 got: %v", coord.x)
  37. }
  38. if coord.y != -100 {
  39. t.Errorf("expected to get coord.y=-100 got: %v", coord.y)
  40. }
  41. }
  42. func TestTupleMapScan(t *testing.T) {
  43. session := createSession(t)
  44. defer session.Close()
  45. if session.cfg.ProtoVersion < protoVersion3 {
  46. t.Skip("tuple types are only available of proto>=3")
  47. }
  48. defer session.Close()
  49. err := createTable(session, `CREATE TABLE gocql_test.tuple_map_scan(
  50. id int,
  51. val frozen<tuple<int, int>>,
  52. primary key(id))`)
  53. if err != nil {
  54. t.Fatal(err)
  55. }
  56. if err := session.Query(`INSERT INTO tuple_map_scan (id, val) VALUES (1, (1, 2));`).Exec(); err != nil {
  57. t.Fatal(err)
  58. }
  59. m := make(map[string]interface{})
  60. err = session.Query(`SELECT * FROM tuple_map_scan`).MapScan(m)
  61. if err != nil {
  62. t.Fatal(err)
  63. }
  64. }