tuple_test.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. // +build all integration
  2. package gocql
  3. import "testing"
  4. func TestTupleSimple(t *testing.T) {
  5. if *flagProto < protoVersion3 {
  6. t.Skip("tuple types are only available of proto>=3")
  7. }
  8. session := createSession(t)
  9. defer session.Close()
  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. if *flagProto < protoVersion3 {
  44. t.Skip("tuple types are only available of proto>=3")
  45. }
  46. session := createSession(t)
  47. defer session.Close()
  48. err := createTable(session, `CREATE TABLE gocql_test.tuple_map_scan(
  49. id int,
  50. val frozen<tuple<int, int>>,
  51. primary key(id))`)
  52. if err != nil {
  53. t.Fatal(err)
  54. }
  55. if err := session.Query(`INSERT INTO tuple_map_scan (id, val) VALUES (1, (1, 2));`).Exec(); err != nil {
  56. t.Fatal(err)
  57. }
  58. m := make(map[string]interface{})
  59. err = session.Query(`SELECT * FROM tuple_map_scan`).MapScan(m)
  60. if err != nil {
  61. t.Fatal(err)
  62. }
  63. }