forked from go-mysql-org/go-mysql
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathschema_test.go
126 lines (104 loc) · 3.69 KB
/
schema_test.go
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
package schema
import (
"database/sql"
"flag"
"fmt"
"testing"
. "github.com/pingcap/check"
"github.com/go-mysql-org/go-mysql/client"
_ "github.com/go-mysql-org/go-mysql/driver"
)
// use docker mysql for test
var host = flag.String("host", "127.0.0.1", "MySQL host")
func Test(t *testing.T) {
TestingT(t)
}
type schemaTestSuite struct {
conn *client.Conn
sqlDB *sql.DB
}
var _ = Suite(&schemaTestSuite{})
func (s *schemaTestSuite) SetUpSuite(c *C) {
var err error
s.conn, err = client.Connect(fmt.Sprintf("%s:%d", *host, 3306), "root", "", "test")
c.Assert(err, IsNil)
s.sqlDB, err = sql.Open("mysql", fmt.Sprintf("root:@%s:3306", *host))
c.Assert(err, IsNil)
}
func (s *schemaTestSuite) TearDownSuite(c *C) {
if s.conn != nil {
s.conn.Close()
}
if s.sqlDB != nil {
s.sqlDB.Close()
}
}
func (s *schemaTestSuite) TestSchema(c *C) {
_, err := s.conn.Execute(`DROP TABLE IF EXISTS schema_test`)
c.Assert(err, IsNil)
str := `
CREATE TABLE IF NOT EXISTS schema_test (
id INT,
id1 INT,
id2 INT,
name VARCHAR(256),
status ENUM('appointing','serving','abnormal','stop','noaftermarket','finish','financial_audit'),
se SET('a', 'b', 'c'),
f FLOAT,
d DECIMAL(2, 1),
uint INT UNSIGNED,
zfint INT ZEROFILL,
name_ucs VARCHAR(256) CHARACTER SET ucs2,
name_utf8 VARCHAR(256) CHARACTER SET utf8,
name_char CHAR(10),
name_binary BINARY(11),
name_varbinary VARBINARY(12),
PRIMARY KEY(id2, id),
UNIQUE (id1),
INDEX name_idx (name)
) ENGINE = INNODB;
`
_, err = s.conn.Execute(str)
c.Assert(err, IsNil)
ta, err := NewTable(s.conn, "test", "schema_test")
c.Assert(err, IsNil)
c.Assert(ta.Columns, HasLen, 15)
c.Assert(ta.Indexes, HasLen, 3)
c.Assert(ta.PKColumns, DeepEquals, []int{2, 0})
c.Assert(ta.Indexes[0].Columns, HasLen, 2)
c.Assert(ta.Indexes[0].Name, Equals, "PRIMARY")
c.Assert(ta.Indexes[2].Name, Equals, "name_idx")
c.Assert(ta.Columns[3].Type, Equals, TYPE_STRING)
c.Assert(ta.Columns[3].MaxSize, Equals, uint(256))
c.Assert(ta.Columns[3].FixedSize, Equals, uint(0))
c.Assert(ta.Columns[4].EnumValues, DeepEquals, []string{"appointing", "serving", "abnormal", "stop", "noaftermarket", "finish", "financial_audit"})
c.Assert(ta.Columns[5].SetValues, DeepEquals, []string{"a", "b", "c"})
c.Assert(ta.Columns[7].Type, Equals, TYPE_DECIMAL)
c.Assert(ta.Columns[0].IsUnsigned, IsFalse)
c.Assert(ta.Columns[8].IsUnsigned, IsTrue)
c.Assert(ta.Columns[9].IsUnsigned, IsTrue)
c.Assert(ta.Columns[10].Collation, Matches, "^ucs2.*")
c.Assert(ta.Columns[10].MaxSize, Equals, uint(256))
c.Assert(ta.Columns[10].FixedSize, Equals, uint(0))
c.Assert(ta.Columns[11].Collation, Matches, "^utf8.*")
c.Assert(ta.Columns[12].Type, Equals, TYPE_STRING)
c.Assert(ta.Columns[12].MaxSize, Equals, uint(10))
c.Assert(ta.Columns[12].FixedSize, Equals, uint(10))
c.Assert(ta.Columns[13].Type, Equals, TYPE_BINARY)
c.Assert(ta.Columns[13].MaxSize, Equals, uint(11))
c.Assert(ta.Columns[13].FixedSize, Equals, uint(11))
c.Assert(ta.Columns[14].Type, Equals, TYPE_BINARY)
c.Assert(ta.Columns[14].MaxSize, Equals, uint(12))
c.Assert(ta.Columns[14].FixedSize, Equals, uint(0))
taSqlDb, err := NewTableFromSqlDB(s.sqlDB, "test", "schema_test")
c.Assert(err, IsNil)
c.Assert(taSqlDb, DeepEquals, ta)
}
func (s *schemaTestSuite) TestQuoteSchema(c *C) {
str := "CREATE TABLE IF NOT EXISTS `a-b_test` (`a.b` INT) ENGINE = INNODB"
_, err := s.conn.Execute(str)
c.Assert(err, IsNil)
ta, err := NewTable(s.conn, "test", "a-b_test")
c.Assert(err, IsNil)
c.Assert(ta.Columns[0].Name, Equals, "a.b")
}