github.com/movsb/taorm@v0.0.0-20201209183410-91bafb0b22a6/taorm/stmt_test.go (about) 1 package taorm 2 3 import ( 4 "database/sql" 5 "database/sql/driver" 6 "testing" 7 8 _ "github.com/go-sql-driver/mysql" 9 "github.com/movsb/taorm/mimic" 10 ) 11 12 type User struct { 13 ID int64 14 Name string 15 Age int 16 } 17 18 func (User) TableName() string { 19 return `users` 20 } 21 22 type Like struct { 23 ID int64 24 UserID int64 25 LikeID int64 26 } 27 28 func (Like) TableName() string { 29 return `likes` 30 } 31 32 func TestSQLs(t *testing.T) { 33 db, err := sql.Open("mysql", "taorm:taorm@/taorm") 34 if err != nil { 35 t.Fatal(err) 36 } 37 tdb := NewDB(db) 38 tests := []struct { 39 want string 40 got string 41 }{ 42 { 43 "SELECT * FROM users", 44 tdb.From(User{}).FindSQL(), 45 }, 46 { 47 "SELECT * FROM users", 48 tdb.From(User{ID: 28}).FindSQL(), 49 }, 50 { 51 "INSERT INTO users (name,age) VALUES (tao,18)", 52 tdb.Model(User{ 53 Name: "tao", 54 Age: 18, 55 }).CreateSQL(), 56 }, 57 { 58 "UPDATE users SET age=20 WHERE (id=1)", 59 tdb.Model(User{ 60 ID: 1, 61 Name: "tao", 62 Age: 18, 63 }).UpdateMapSQL(M{ 64 "age": 20, 65 }), 66 }, 67 { 68 "UPDATE users SET name=TAO,age=28 WHERE (id=1)", 69 tdb.Model(User{ 70 ID: 1, 71 Name: "tao", 72 Age: 18, 73 }).UpdateModelSQL(User{ 74 ID: 1, 75 Name: "TAO", 76 Age: 28, 77 }), 78 }, 79 { 80 "UPDATE users SET age=age+1", 81 tdb.Model(User{ 82 Age: 18, 83 }).UpdateMapSQL(M{ 84 "age": Expr("age+?", 1), 85 }), 86 }, 87 { 88 "DELETE FROM users WHERE (id=1)", 89 tdb.From(User{}).Where("id=?", 1).DeleteSQL(), 90 }, 91 { 92 "DELETE FROM users WHERE (id=28)", 93 tdb.Model(User{ID: 28}).DeleteSQL(), 94 }, 95 { 96 "SELECT COUNT(1) FROM users WHERE (age=28)", 97 tdb.From(User{}).Where("age=?", 28).CountSQL(), 98 }, 99 { 100 "SELECT * FROM users WHERE (id=1 AND age=28)", 101 tdb.Raw("SELECT * FROM users WHERE (id=? AND age=?)", 1, 28).FindSQL(), 102 }, 103 { 104 "SELECT * FROM users ORDER BY id", 105 tdb.From(User{}).OrderBy("id").FindSQL(), 106 }, 107 { 108 "SELECT users.* FROM users INNER JOIN likes ON users.id = likes.user_id ORDER BY id", 109 tdb.From(User{}).OrderBy("id").InnerJoin(Like{}, "users.id = likes.user_id").FindSQL(), 110 }, 111 { 112 "SELECT users.* FROM users INNER JOIN likes ON users.id = likes.user_id ORDER BY users.id", 113 tdb.From(User{}).OrderBy("users.id").InnerJoin(Like{}, "users.id = likes.user_id").FindSQL(), 114 }, 115 } 116 for _, test := range tests { 117 if test.want != test.got { 118 t.Fatalf("not equal: \n want: %s\n got: %s\n", test.want, test.got) 119 } 120 } 121 } 122 123 func BenchmarkInsert(b *testing.B) { 124 user := User{ 125 Name: "tao", 126 Age: 18, 127 } 128 129 db, err := sql.Open("mimic", "") 130 if err != nil { 131 b.Fatal(err) 132 } 133 defer db.Close() 134 135 taodb := NewDB(db) 136 137 for i := 0; i < b.N; i++ { 138 err := taodb.Model(&user).Create() 139 if err != nil { 140 b.Fatal(err) 141 } 142 } 143 } 144 145 func BenchmarkSelectAll(b *testing.B) { 146 mimic.SetRows([]string{"id", "name", "age"}, [][]driver.Value{ 147 {int64(1), "tao", 100}, 148 {int64(2), "qiao", 101}, 149 {int64(3), "daniel", 102}, 150 }) 151 152 db, err := sql.Open("mimic", "") 153 if err != nil { 154 b.Fatal(err) 155 } 156 defer db.Close() 157 158 taodb := NewDB(db) 159 160 for i := 0; i < b.N; i++ { 161 var users []*User 162 err := taodb.From("users").Find(&users) 163 if err != nil { 164 b.Fatal(err) 165 } 166 } 167 } 168 169 func BenchmarkSelectComplex(b *testing.B) { 170 mimic.SetRows([]string{"id", "name", "age"}, [][]driver.Value{ 171 {int64(1), "tao", 100}, 172 {int64(2), "qiao", 101}, 173 {int64(3), "daniel", 102}, 174 }) 175 176 db, err := sql.Open("mimic", "") 177 if err != nil { 178 b.Fatal(err) 179 } 180 defer db.Close() 181 182 taodb := NewDB(db) 183 184 type User struct { 185 ID int64 186 Name string 187 Age int 188 } 189 190 for i := 0; i < b.N; i++ { 191 var users []*User 192 err = taodb.From("users").Where("id > ?", 1). 193 Where("name <> ?", "thing"). 194 Limit(1). 195 GroupBy("id"). 196 Offset(1). 197 Select("id, name, color, uuid, identifier, cargo, manifest"). 198 Find(&users) 199 if err != nil { 200 b.Fatal(err) 201 } 202 } 203 }