· 8 years ago · May 07, 2018, 08:46 PM
1import (
2 "testing"
3
4 "github.com/gocql/gocql"
5 "github.com/scylladb/gocqlx"
6 "github.com/scylladb/gocqlx/qb"
7)
8
9const (
10 createTypeStmt = `CREATE TYPE IF NOT EXISTS gocqlx_test.segment (
11 name text
12 );`
13
14 createTableStmt = `CREATE TABLE IF NOT EXISTS gocqlx_test.segments (
15 id uuid PRIMARY KEY,
16 segments frozen<list<frozen <segment>>>
17 );`
18)
19
20func TestComplex(t *testing.T) {
21
22 session := createSession(t)
23
24 if err := createTable(session, createTypeStmt); err != nil {
25 t.Fatal(err)
26 }
27
28 if err := createTable(session, createTableStmt); err != nil {
29 t.Fatal(err)
30 }
31
32 id := gocql.TimeUUID()
33
34 h := Holder{
35 ID: id,
36 Segments: []Segment{
37 {
38 Name: "name 1",
39 },
40 {
41 Name: "name 2",
42 },
43 },
44 }
45
46 stmt, names := qb.Insert("gocqlx_test.segments").Columns("id", "segments").ToCql()
47 q := gocqlx.Query(session.Query(stmt), names).BindStruct(h)
48 if err := q.ExecRelease(); err != nil {
49 t.Fatal(err)
50 }
51
52 stmt, names = qb.Select("gocqlx_test.segments").Where(qb.Eq("id")).ToCql()
53
54 q = gocqlx.Query(session.Query(stmt), names).BindMap(qb.M{
55 "id": id,
56 })
57
58 var hRes Holder
59 if err := gocqlx.Get(&hRes, q.Query); err != nil {
60 t.Fatal("get:", err)
61 }
62
63 t.Log(hRes)
64}
65
66type Holder struct {
67 ID gocql.UUID
68 Segments []Segment
69}
70
71type Segment struct {
72 Name string `cql:"name"`
73}