Repository navigation
Expand file tree
/
Copy pathclone_test.go
More file actions
75 lines (68 loc) · 2.24 KB
/
Copy pathclone_test.go
File metadata and controls
75 lines (68 loc) · 2.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package sql_test
import (
"testing"
"github.com/go-test/deep"
"github.com/rqlite/sql"
)
// Ensure Clone() returns a deep copy with the same structure.
func TestFrameSpec_Clone(t *testing.T) {
s := &sql.FrameSpec{X: &sql.NumberLit{Value: "1"}, Y: &sql.NumberLit{Value: "2"}}
c := s.Clone()
if diff := deep.Equal(s, c); diff != nil {
t.Fatal(diff)
} else if c.X == s.X || c.Y == s.Y {
t.Fatal("expected deep copy of X and Y")
}
}
func TestCreateVirtualTableStatement_Clone(t *testing.T) {
s := &sql.CreateVirtualTableStatement{
Schema: &sql.Ident{Name: "main"},
Name: &sql.Ident{Name: "tbl"},
ModuleName: &sql.Ident{Name: "fts5"},
}
c := s.Clone()
if diff := deep.Equal(s, c); diff != nil {
t.Fatal(diff)
} else if c.Schema == s.Schema || c.Name == s.Name {
t.Fatal("expected deep copy of Schema and Name")
}
}
func TestReturningClause_Clone(t *testing.T) {
// The clause itself must be deep copied.
rc := &sql.ReturningClause{Columns: []*sql.ResultColumn{{Expr: &sql.Ident{Name: "x"}}}}
c := rc.Clone()
if diff := deep.Equal(rc, c); diff != nil {
t.Fatal(diff)
} else if c.Columns[0] == rc.Columns[0] {
t.Fatal("expected deep copy of Columns")
}
// Statements carrying a RETURNING clause must deep copy it too.
u := &sql.UpdateStatement{
Table: &sql.QualifiedTableName{Name: &sql.Ident{Name: "tbl"}},
Assignments: []*sql.Assignment{{Columns: []*sql.Ident{{Name: "x"}}, Expr: &sql.NumberLit{Value: "1"}}},
ReturningClause: rc,
}
if uc := u.Clone(); uc.ReturningClause == u.ReturningClause {
t.Fatal("UpdateStatement.Clone() shares ReturningClause")
}
d := &sql.DeleteStatement{
Table: &sql.QualifiedTableName{Name: &sql.Ident{Name: "tbl"}},
ReturningClause: rc,
}
if dc := d.Clone(); dc.ReturningClause == d.ReturningClause {
t.Fatal("DeleteStatement.Clone() shares ReturningClause")
}
}
func TestJoinClause_Clone(t *testing.T) {
j := &sql.JoinClause{
X: &sql.QualifiedTableName{Name: &sql.Ident{Name: "a"}},
Operator: &sql.JoinOperator{Left: pos(0)},
Y: &sql.QualifiedTableName{Name: &sql.Ident{Name: "b"}},
}
c := j.Clone()
if diff := deep.Equal(j, c); diff != nil {
t.Fatal(diff)
} else if c.Operator == j.Operator {
t.Fatal("expected deep copy of Operator")
}
}