@@ -9,10 +9,10 @@ package mariadb_test
99import (
1010 "context"
1111 "fmt"
12+ "testing"
1213 "time"
1314
1415 _ "github.com/gogf/gf/contrib/drivers/mariadb/v2"
15-
1616 "github.com/gogf/gf/v2/container/garray"
1717 "github.com/gogf/gf/v2/database/gdb"
1818 "github.com/gogf/gf/v2/frame/g"
@@ -21,18 +21,24 @@ import (
2121)
2222
2323const (
24- TableSize = 10
25- TableName = "user"
26- TestSchema1 = "test1"
27- TestSchema2 = "test2"
28- TestDbPass = "12345678"
29- CreateTime = "2018-10-24 10:00:00"
24+ TableSize = 10
25+ TableName = "user"
26+ TestSchema1 = "test1"
27+ TestSchema2 = "test2"
28+ TestPartitionDB = "test3"
29+ TableNamePrefix1 = "gf_"
30+ TestDbUser = "root"
31+ TestDbPass = "12345678"
32+ CreateTime = "2018-10-24 10:00:00"
3033)
3134
3235var (
33- db gdb.DB
34- db2 gdb.DB
35- ctx = context .TODO ()
36+ db gdb.DB
37+ db2 gdb.DB
38+ db3 gdb.DB
39+ dbPrefix gdb.DB
40+ dbInvalid gdb.DB
41+ ctx = context .TODO ()
3642)
3743
3844func init () {
@@ -41,10 +47,26 @@ func init() {
4147 Link : fmt .Sprintf ("mariadb:root:%s@tcp(127.0.0.1:3307)/?loc=Local&parseTime=true" , TestDbPass ),
4248 TranTimeout : time .Second * 3 ,
4349 }
44- err := gdb .AddConfigNode (gdb .DefaultGroupName , nodeDefault )
45- if err != nil {
46- panic (err )
50+ partitionDefault := gdb.ConfigNode {
51+ Link : fmt .Sprintf ("mariadb:root:%s@tcp(127.0.0.1:3307)/?loc=Local&parseTime=true" , TestDbPass ),
52+ Debug : true ,
53+ TranTimeout : time .Second * 3 ,
54+ }
55+ nodePrefix := gdb.ConfigNode {
56+ Link : fmt .Sprintf ("mariadb:root:%s@tcp(127.0.0.1:3307)/?loc=Local&parseTime=true" , TestDbPass ),
57+ TranTimeout : time .Second * 3 ,
58+ }
59+ nodePrefix .Prefix = TableNamePrefix1
60+
61+ nodeInvalid := gdb.ConfigNode {
62+ Link : fmt .Sprintf ("mariadb:root:%s@tcp(127.0.0.1:3307)/?loc=Local&parseTime=true" , TestDbPass ),
63+ TranTimeout : time .Second * 3 ,
4764 }
65+ gdb .AddConfigNode ("test" , nodeDefault )
66+ gdb .AddConfigNode ("prefix" , nodePrefix )
67+ gdb .AddConfigNode ("nodeinvalid" , nodeInvalid )
68+ gdb .AddConfigNode ("partition" , partitionDefault )
69+ gdb .AddConfigNode (gdb .DefaultGroupName , nodeDefault )
4870
4971 // Default db.
5072 if r , err := gdb .NewByGroup (); err != nil {
@@ -59,8 +81,33 @@ func init() {
5981 if _ , err := db .Exec (ctx , fmt .Sprintf (schemaTemplate , TestSchema2 )); err != nil {
6082 gtest .Error (err )
6183 }
84+ if _ , err := db .Exec (ctx , fmt .Sprintf (schemaTemplate , TestPartitionDB )); err != nil {
85+ gtest .Error (err )
86+ }
6287 db = db .Schema (TestSchema1 )
6388 db2 = db .Schema (TestSchema2 )
89+ db3 = db .Schema (TestPartitionDB )
90+ // Prefix db.
91+ if r , err := gdb .NewByGroup ("prefix" ); err != nil {
92+ gtest .Error (err )
93+ } else {
94+ dbPrefix = r
95+ }
96+ if _ , err := dbPrefix .Exec (ctx , fmt .Sprintf (schemaTemplate , TestSchema1 )); err != nil {
97+ gtest .Error (err )
98+ }
99+ if _ , err := dbPrefix .Exec (ctx , fmt .Sprintf (schemaTemplate , TestSchema2 )); err != nil {
100+ gtest .Error (err )
101+ }
102+ dbPrefix = dbPrefix .Schema (TestSchema1 )
103+
104+ // Invalid db.
105+ if r , err := gdb .NewByGroup ("nodeinvalid" ); err != nil {
106+ gtest .Error (err )
107+ } else {
108+ dbInvalid = r
109+ }
110+ dbInvalid = dbInvalid .Schema (TestSchema1 )
64111}
65112
66113func createTable (table ... string ) string {
@@ -126,3 +173,61 @@ func dropTableWithDb(db gdb.DB, table string) {
126173 gtest .Error (err )
127174 }
128175}
176+
177+ func Test_PartitionTable (t * testing.T ) {
178+ dropShopDBTable ()
179+ createShopDBTable ()
180+ insertShopDBData ()
181+
182+ // defer dropShopDBTable()
183+ gtest .C (t , func (t * gtest.T ) {
184+ data , err := db3 .Ctx (ctx ).Model ("dbx_order" ).Partition ("p3" , "p4" ).All ()
185+ t .AssertNil (err )
186+ dataLen := len (data )
187+ t .Assert (dataLen , 5 )
188+ data , err = db3 .Ctx (ctx ).Model ("dbx_order" ).Partition ("p3" ).All ()
189+ t .AssertNil (err )
190+ dataLen = len (data )
191+ t .Assert (dataLen , 5 )
192+ })
193+ }
194+
195+ func createShopDBTable () {
196+ sql := `CREATE TABLE dbx_order (
197+ id int(11) NOT NULL,
198+ sales_date date DEFAULT NULL,
199+ amount decimal(10,2) DEFAULT NULL
200+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
201+ PARTITION BY RANGE (YEAR(sales_date))
202+ (PARTITION p1 VALUES LESS THAN (2020) ENGINE = InnoDB,
203+ PARTITION p2 VALUES LESS THAN (2021) ENGINE = InnoDB,
204+ PARTITION p3 VALUES LESS THAN (2022) ENGINE = InnoDB,
205+ PARTITION p4 VALUES LESS THAN MAXVALUE ENGINE = InnoDB);`
206+ _ , err := db3 .Exec (ctx , sql )
207+ if err != nil {
208+ gtest .Fatal (err .Error ())
209+ }
210+ }
211+
212+ func insertShopDBData () {
213+ data := g.Slice {}
214+ year := 2020
215+ for i := 1 ; i <= 5 ; i ++ {
216+ year ++
217+ data = append (data , g.Map {
218+ "id" : i ,
219+ "sales_date" : fmt .Sprintf ("%d-09-21" , year ),
220+ "amount" : fmt .Sprintf ("1%d.21" , i ),
221+ })
222+ }
223+ _ , err := db3 .Model ("dbx_order" ).Ctx (ctx ).Data (data ).Insert ()
224+ if err != nil {
225+ gtest .Error (err )
226+ }
227+ }
228+
229+ func dropShopDBTable () {
230+ if _ , err := db3 .Exec (ctx , "DROP TABLE IF EXISTS `dbx_order`" ); err != nil {
231+ gtest .Error (err )
232+ }
233+ }
0 commit comments