EM-4027: Remove references to jinzhu from embroker/gorm
This commit is contained in:
		
							parent
							
								
									742de83e9e
								
							
						
					
					
						commit
						02028e8300
					
				
							
								
								
									
										139
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										139
									
								
								README.md
									
									
									
									
									
								
							@ -25,7 +25,7 @@ The fantastic ORM library for Golang, aims to be developer friendly.
 | 
				
			|||||||
## Install
 | 
					## Install
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
go get -u github.com/jinzhu/gorm
 | 
					go get -u github.com/embroker/gorm
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Define Models (Structs)
 | 
					## Define Models (Structs)
 | 
				
			||||||
@ -104,7 +104,7 @@ type User struct {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
```go
 | 
					```go
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"github.com/jinzhu/gorm"
 | 
						"github.com/embroker/gorm"
 | 
				
			||||||
	_ "github.com/lib/pq"
 | 
						_ "github.com/lib/pq"
 | 
				
			||||||
	_ "github.com/go-sql-driver/mysql"
 | 
						_ "github.com/go-sql-driver/mysql"
 | 
				
			||||||
	_ "github.com/mattn/go-sqlite3"
 | 
						_ "github.com/mattn/go-sqlite3"
 | 
				
			||||||
@ -164,10 +164,10 @@ db.NewRecord(user) // => return `false` after `user` created
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// Associations will be inserted automatically when save the record
 | 
					// Associations will be inserted automatically when save the record
 | 
				
			||||||
user := User{
 | 
					user := User{
 | 
				
			||||||
	Name:            "jinzhu",
 | 
						Name:            "embroker",
 | 
				
			||||||
	BillingAddress:  Address{Address1: "Billing Address - Address 1"},
 | 
						BillingAddress:  Address{Address1: "Billing Address - Address 1"},
 | 
				
			||||||
	ShippingAddress: Address{Address1: "Shipping Address - Address 1"},
 | 
						ShippingAddress: Address{Address1: "Shipping Address - Address 1"},
 | 
				
			||||||
	Emails:          []Email{{Email: "jinzhu@example.com"}, {Email: "jinzhu-2@example@example.com"}},
 | 
						Emails:          []Email{{Email: "embroker@example.com"}, {Email: "embroker-2@example@example.com"}},
 | 
				
			||||||
	Languages:       []Language{{Name: "ZH"}, {Name: "EN"}},
 | 
						Languages:       []Language{{Name: "ZH"}, {Name: "EN"}},
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -175,9 +175,9 @@ db.Create(&user)
 | 
				
			|||||||
//// BEGIN TRANSACTION;
 | 
					//// BEGIN TRANSACTION;
 | 
				
			||||||
//// INSERT INTO "addresses" (address1) VALUES ("Billing Address - Address 1");
 | 
					//// INSERT INTO "addresses" (address1) VALUES ("Billing Address - Address 1");
 | 
				
			||||||
//// INSERT INTO "addresses" (address1) VALUES ("Shipping Address - Address 1");
 | 
					//// INSERT INTO "addresses" (address1) VALUES ("Shipping Address - Address 1");
 | 
				
			||||||
//// INSERT INTO "users" (name,billing_address_id,shipping_address_id) VALUES ("jinzhu", 1, 2);
 | 
					//// INSERT INTO "users" (name,billing_address_id,shipping_address_id) VALUES ("embroker", 1, 2);
 | 
				
			||||||
//// INSERT INTO "emails" (user_id,email) VALUES (111, "jinzhu@example.com");
 | 
					//// INSERT INTO "emails" (user_id,email) VALUES (111, "embroker@example.com");
 | 
				
			||||||
//// INSERT INTO "emails" (user_id,email) VALUES (111, "jinzhu-2@example.com");
 | 
					//// INSERT INTO "emails" (user_id,email) VALUES (111, "embroker-2@example.com");
 | 
				
			||||||
//// INSERT INTO "languages" ("name") VALUES ('ZH');
 | 
					//// INSERT INTO "languages" ("name") VALUES ('ZH');
 | 
				
			||||||
//// INSERT INTO user_languages ("user_id","language_id") VALUES (111, 1);
 | 
					//// INSERT INTO user_languages ("user_id","language_id") VALUES (111, 1);
 | 
				
			||||||
//// INSERT INTO "languages" ("name") VALUES ('EN');
 | 
					//// INSERT INTO "languages" ("name") VALUES ('EN');
 | 
				
			||||||
@ -211,23 +211,23 @@ db.First(&user, 10)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
```go
 | 
					```go
 | 
				
			||||||
// Get the first matched record
 | 
					// Get the first matched record
 | 
				
			||||||
db.Where("name = ?", "jinzhu").First(&user)
 | 
					db.Where("name = ?", "embroker").First(&user)
 | 
				
			||||||
//// SELECT * FROM users WHERE name = 'jinzhu' limit 1;
 | 
					//// SELECT * FROM users WHERE name = 'embroker' limit 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Get all matched records
 | 
					// Get all matched records
 | 
				
			||||||
db.Where("name = ?", "jinzhu").Find(&users)
 | 
					db.Where("name = ?", "embroker").Find(&users)
 | 
				
			||||||
//// SELECT * FROM users WHERE name = 'jinzhu';
 | 
					//// SELECT * FROM users WHERE name = 'embroker';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
db.Where("name <> ?", "jinzhu").Find(&users)
 | 
					db.Where("name <> ?", "embroker").Find(&users)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// IN
 | 
					// IN
 | 
				
			||||||
db.Where("name in (?)", []string{"jinzhu", "jinzhu 2"}).Find(&users)
 | 
					db.Where("name in (?)", []string{"embroker", "embroker 2"}).Find(&users)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// LIKE
 | 
					// LIKE
 | 
				
			||||||
db.Where("name LIKE ?", "%jin%").Find(&users)
 | 
					db.Where("name LIKE ?", "%jin%").Find(&users)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// AND
 | 
					// AND
 | 
				
			||||||
db.Where("name = ? and age >= ?", "jinzhu", "22").Find(&users)
 | 
					db.Where("name = ? and age >= ?", "embroker", "22").Find(&users)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Time
 | 
					// Time
 | 
				
			||||||
db.Where("updated_at > ?", lastWeek).Find(&users)
 | 
					db.Where("updated_at > ?", lastWeek).Find(&users)
 | 
				
			||||||
@ -239,12 +239,12 @@ db.Where("created_at BETWEEN ? AND ?", lastWeek, today).Find(&users)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
```go
 | 
					```go
 | 
				
			||||||
// Struct
 | 
					// Struct
 | 
				
			||||||
db.Where(&User{Name: "jinzhu", Age: 20}).First(&user)
 | 
					db.Where(&User{Name: "embroker", Age: 20}).First(&user)
 | 
				
			||||||
//// SELECT * FROM users WHERE name = "jinzhu" AND age = 20 LIMIT 1;
 | 
					//// SELECT * FROM users WHERE name = "embroker" AND age = 20 LIMIT 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Map
 | 
					// Map
 | 
				
			||||||
db.Where(map[string]interface{}{"name": "jinzhu", "age": 20}).Find(&users)
 | 
					db.Where(map[string]interface{}{"name": "embroker", "age": 20}).Find(&users)
 | 
				
			||||||
//// SELECT * FROM users WHERE name = "jinzhu" AND age = 20;
 | 
					//// SELECT * FROM users WHERE name = "embroker" AND age = 20;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Slice of primary keys
 | 
					// Slice of primary keys
 | 
				
			||||||
db.Where([]int64{20, 21, 22}).Find(&users)
 | 
					db.Where([]int64{20, 21, 22}).Find(&users)
 | 
				
			||||||
@ -254,12 +254,12 @@ db.Where([]int64{20, 21, 22}).Find(&users)
 | 
				
			|||||||
### Query With Not
 | 
					### Query With Not
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```go
 | 
					```go
 | 
				
			||||||
db.Not("name", "jinzhu").First(&user)
 | 
					db.Not("name", "embroker").First(&user)
 | 
				
			||||||
//// SELECT * FROM users WHERE name <> "jinzhu" LIMIT 1;
 | 
					//// SELECT * FROM users WHERE name <> "embroker" LIMIT 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Not In
 | 
					// Not In
 | 
				
			||||||
db.Not("name", []string{"jinzhu", "jinzhu 2"}).Find(&users)
 | 
					db.Not("name", []string{"embroker", "embroker 2"}).Find(&users)
 | 
				
			||||||
//// SELECT * FROM users WHERE name NOT IN ("jinzhu", "jinzhu 2");
 | 
					//// SELECT * FROM users WHERE name NOT IN ("embroker", "embroker 2");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Not In slice of primary keys
 | 
					// Not In slice of primary keys
 | 
				
			||||||
db.Not([]int64{1,2,3}).First(&user)
 | 
					db.Not([]int64{1,2,3}).First(&user)
 | 
				
			||||||
@ -269,12 +269,12 @@ db.Not([]int64{}).First(&user)
 | 
				
			|||||||
//// SELECT * FROM users;
 | 
					//// SELECT * FROM users;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Plain SQL
 | 
					// Plain SQL
 | 
				
			||||||
db.Not("name = ?", "jinzhu").First(&user)
 | 
					db.Not("name = ?", "embroker").First(&user)
 | 
				
			||||||
//// SELECT * FROM users WHERE NOT(name = "jinzhu");
 | 
					//// SELECT * FROM users WHERE NOT(name = "embroker");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Struct
 | 
					// Struct
 | 
				
			||||||
db.Not(User{Name: "jinzhu"}).First(&user)
 | 
					db.Not(User{Name: "embroker"}).First(&user)
 | 
				
			||||||
//// SELECT * FROM users WHERE name <> "jinzhu";
 | 
					//// SELECT * FROM users WHERE name <> "embroker";
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Query With Inline Condition
 | 
					### Query With Inline Condition
 | 
				
			||||||
@ -285,11 +285,11 @@ db.First(&user, 23)
 | 
				
			|||||||
//// SELECT * FROM users WHERE id = 23 LIMIT 1;
 | 
					//// SELECT * FROM users WHERE id = 23 LIMIT 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Plain SQL
 | 
					// Plain SQL
 | 
				
			||||||
db.Find(&user, "name = ?", "jinzhu")
 | 
					db.Find(&user, "name = ?", "embroker")
 | 
				
			||||||
//// SELECT * FROM users WHERE name = "jinzhu";
 | 
					//// SELECT * FROM users WHERE name = "embroker";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
db.Find(&users, "name <> ? AND age > ?", "jinzhu", 20)
 | 
					db.Find(&users, "name <> ? AND age > ?", "embroker", 20)
 | 
				
			||||||
//// SELECT * FROM users WHERE name <> "jinzhu" AND age > 20;
 | 
					//// SELECT * FROM users WHERE name <> "embroker" AND age > 20;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Struct
 | 
					// Struct
 | 
				
			||||||
db.Find(&users, User{Age: 20})
 | 
					db.Find(&users, User{Age: 20})
 | 
				
			||||||
@ -307,11 +307,11 @@ db.Where("role = ?", "admin").Or("role = ?", "super_admin").Find(&users)
 | 
				
			|||||||
//// SELECT * FROM users WHERE role = 'admin' OR role = 'super_admin';
 | 
					//// SELECT * FROM users WHERE role = 'admin' OR role = 'super_admin';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Struct
 | 
					// Struct
 | 
				
			||||||
db.Where("name = 'jinzhu'").Or(User{Name: "jinzhu 2"}).Find(&users)
 | 
					db.Where("name = 'embroker'").Or(User{Name: "embroker 2"}).Find(&users)
 | 
				
			||||||
//// SELECT * FROM users WHERE name = 'jinzhu' OR name = 'jinzhu 2';
 | 
					//// SELECT * FROM users WHERE name = 'embroker' OR name = 'embroker 2';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Map
 | 
					// Map
 | 
				
			||||||
db.Where("name = 'jinzhu'").Or(map[string]interface{}{"name": "jinzhu 2"}).Find(&users)
 | 
					db.Where("name = 'embroker'").Or(map[string]interface{}{"name": "embroker 2"}).Find(&users)
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Query Chains
 | 
					### Query Chains
 | 
				
			||||||
@ -319,10 +319,10 @@ db.Where("name = 'jinzhu'").Or(map[string]interface{}{"name": "jinzhu 2"}).Find(
 | 
				
			|||||||
Gorm has a chainable API, you could use it like this
 | 
					Gorm has a chainable API, you could use it like this
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```go
 | 
					```go
 | 
				
			||||||
db.Where("name <> ?","jinzhu").Where("age >= ? and role <> ?",20,"admin").Find(&users)
 | 
					db.Where("name <> ?","embroker").Where("age >= ? and role <> ?",20,"admin").Find(&users)
 | 
				
			||||||
//// SELECT * FROM users WHERE name <> 'jinzhu' AND age >= 20 AND role <> 'admin';
 | 
					//// SELECT * FROM users WHERE name <> 'embroker' AND age >= 20 AND role <> 'admin';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
db.Where("role = ?", "admin").Or("role = ?", "super_admin").Not("name = ?", "jinzhu").Find(&users)
 | 
					db.Where("role = ?", "admin").Or("role = ?", "super_admin").Not("name = ?", "embroker").Find(&users)
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Preloading (Eager loading)
 | 
					### Preloading (Eager loading)
 | 
				
			||||||
@ -359,13 +359,13 @@ db.Preload("Orders", "state = ?", "paid").Preload("Orders.OrderItems").Find(&use
 | 
				
			|||||||
```go
 | 
					```go
 | 
				
			||||||
// Update an existing struct
 | 
					// Update an existing struct
 | 
				
			||||||
db.First(&user)
 | 
					db.First(&user)
 | 
				
			||||||
user.Name = "jinzhu 2"
 | 
					user.Name = "embroker 2"
 | 
				
			||||||
user.Age = 100
 | 
					user.Age = 100
 | 
				
			||||||
db.Save(&user)
 | 
					db.Save(&user)
 | 
				
			||||||
//// UPDATE users SET name='jinzhu 2', age=100, updated_at = '2013-11-17 21:34:10' WHERE id=111;
 | 
					//// UPDATE users SET name='embroker 2', age=100, updated_at = '2013-11-17 21:34:10' WHERE id=111;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
db.Where("active = ?", true).Save(&user)
 | 
					db.Where("active = ?", true).Save(&user)
 | 
				
			||||||
//// UPDATE users SET name='jinzhu 2', age=100, updated_at = '2013-11-17 21:34:10' WHERE id=111 AND active = true;
 | 
					//// UPDATE users SET name='embroker 2', age=100, updated_at = '2013-11-17 21:34:10' WHERE id=111 AND active = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Update an attribute if it is changed
 | 
					// Update an attribute if it is changed
 | 
				
			||||||
db.Model(&user).Update("name", "hello")
 | 
					db.Model(&user).Update("name", "hello")
 | 
				
			||||||
@ -442,7 +442,7 @@ db.Delete(&email)
 | 
				
			|||||||
### Batch Delete
 | 
					### Batch Delete
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```go
 | 
					```go
 | 
				
			||||||
db.Where("email LIKE ?", "%jinzhu%").Delete(Email{})
 | 
					db.Where("email LIKE ?", "%embroker%").Delete(Email{})
 | 
				
			||||||
//// DELETE from emails where email LIKE "%jinhu%";
 | 
					//// DELETE from emails where email LIKE "%jinhu%";
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -593,7 +593,7 @@ db.FirstOrInit(&user, User{Name: "non_existing"})
 | 
				
			|||||||
// Found
 | 
					// Found
 | 
				
			||||||
db.Where(User{Name: "Jinzhu"}).FirstOrInit(&user)
 | 
					db.Where(User{Name: "Jinzhu"}).FirstOrInit(&user)
 | 
				
			||||||
//// user -> User{Id: 111, Name: "Jinzhu", Age: 20}
 | 
					//// user -> User{Id: 111, Name: "Jinzhu", Age: 20}
 | 
				
			||||||
db.FirstOrInit(&user, map[string]interface{}{"name": "jinzhu"})
 | 
					db.FirstOrInit(&user, map[string]interface{}{"name": "embroker"})
 | 
				
			||||||
//// user -> User{Id: 111, Name: "Jinzhu", Age: 20}
 | 
					//// user -> User{Id: 111, Name: "Jinzhu", Age: 20}
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -613,7 +613,7 @@ db.Where(User{Name: "noexisting_user"}).Attrs("age", 20).FirstOrInit(&user)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// Found
 | 
					// Found
 | 
				
			||||||
db.Where(User{Name: "Jinzhu"}).Attrs(User{Age: 30}).FirstOrInit(&user)
 | 
					db.Where(User{Name: "Jinzhu"}).Attrs(User{Age: 30}).FirstOrInit(&user)
 | 
				
			||||||
//// SELECT * FROM USERS WHERE name = jinzhu';
 | 
					//// SELECT * FROM USERS WHERE name = embroker';
 | 
				
			||||||
//// user -> User{Id: 111, Name: "Jinzhu", Age: 20}
 | 
					//// user -> User{Id: 111, Name: "Jinzhu", Age: 20}
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -628,7 +628,7 @@ db.Where(User{Name: "non_existing"}).Assign(User{Age: 20}).FirstOrInit(&user)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// Found
 | 
					// Found
 | 
				
			||||||
db.Where(User{Name: "Jinzhu"}).Assign(User{Age: 30}).FirstOrInit(&user)
 | 
					db.Where(User{Name: "Jinzhu"}).Assign(User{Age: 30}).FirstOrInit(&user)
 | 
				
			||||||
//// SELECT * FROM USERS WHERE name = jinzhu';
 | 
					//// SELECT * FROM USERS WHERE name = embroker';
 | 
				
			||||||
//// user -> User{Id: 111, Name: "Jinzhu", Age: 30}
 | 
					//// user -> User{Id: 111, Name: "Jinzhu", Age: 30}
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -659,9 +659,9 @@ db.Where(User{Name: "non_existing"}).Attrs(User{Age: 20}).FirstOrCreate(&user)
 | 
				
			|||||||
//// user -> User{Id: 112, Name: "non_existing", Age: 20}
 | 
					//// user -> User{Id: 112, Name: "non_existing", Age: 20}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Found
 | 
					// Found
 | 
				
			||||||
db.Where(User{Name: "jinzhu"}).Attrs(User{Age: 30}).FirstOrCreate(&user)
 | 
					db.Where(User{Name: "embroker"}).Attrs(User{Age: 30}).FirstOrCreate(&user)
 | 
				
			||||||
//// SELECT * FROM users WHERE name = 'jinzhu';
 | 
					//// SELECT * FROM users WHERE name = 'embroker';
 | 
				
			||||||
//// user -> User{Id: 111, Name: "jinzhu", Age: 20}
 | 
					//// user -> User{Id: 111, Name: "embroker", Age: 20}
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Assign
 | 
					### Assign
 | 
				
			||||||
@ -676,10 +676,10 @@ db.Where(User{Name: "non_existing"}).Assign(User{Age: 20}).FirstOrCreate(&user)
 | 
				
			|||||||
//// user -> User{Id: 112, Name: "non_existing", Age: 20}
 | 
					//// user -> User{Id: 112, Name: "non_existing", Age: 20}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Found
 | 
					// Found
 | 
				
			||||||
db.Where(User{Name: "jinzhu"}).Assign(User{Age: 30}).FirstOrCreate(&user)
 | 
					db.Where(User{Name: "embroker"}).Assign(User{Age: 30}).FirstOrCreate(&user)
 | 
				
			||||||
//// SELECT * FROM users WHERE name = 'jinzhu';
 | 
					//// SELECT * FROM users WHERE name = 'embroker';
 | 
				
			||||||
//// UPDATE users SET age=30 WHERE id = 111;
 | 
					//// UPDATE users SET age=30 WHERE id = 111;
 | 
				
			||||||
//// user -> User{Id: 111, Name: "jinzhu", Age: 30}
 | 
					//// user -> User{Id: 111, Name: "embroker", Age: 30}
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Select
 | 
					## Select
 | 
				
			||||||
@ -738,12 +738,12 @@ db.Offset(10).Find(&users1).Offset(-1).Find(&users2)
 | 
				
			|||||||
## Count
 | 
					## Count
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```go
 | 
					```go
 | 
				
			||||||
db.Where("name = ?", "jinzhu").Or("name = ?", "jinzhu 2").Find(&users).Count(&count)
 | 
					db.Where("name = ?", "embroker").Or("name = ?", "embroker 2").Find(&users).Count(&count)
 | 
				
			||||||
//// SELECT * from USERS WHERE name = 'jinzhu' OR name = 'jinzhu 2'; (users)
 | 
					//// SELECT * from USERS WHERE name = 'embroker' OR name = 'embroker 2'; (users)
 | 
				
			||||||
//// SELECT count(*) FROM users WHERE name = 'jinzhu' OR name = 'jinzhu 2'; (count)
 | 
					//// SELECT count(*) FROM users WHERE name = 'embroker' OR name = 'embroker 2'; (count)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
db.Model(User{}).Where("name = ?", "jinzhu").Count(&count)
 | 
					db.Model(User{}).Where("name = ?", "embroker").Count(&count)
 | 
				
			||||||
//// SELECT count(*) FROM users WHERE name = 'jinzhu'; (count)
 | 
					//// SELECT count(*) FROM users WHERE name = 'embroker'; (count)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
db.Table("deleted_users").Count(&count)
 | 
					db.Table("deleted_users").Count(&count)
 | 
				
			||||||
//// SELECT count(*) FROM deleted_users;
 | 
					//// SELECT count(*) FROM deleted_users;
 | 
				
			||||||
@ -778,10 +778,10 @@ db.Exec("UPDATE orders SET shipped_at=? WHERE id IN (?)", time.Now, []int64{11,2
 | 
				
			|||||||
It is even possible to get query result as `*sql.Row` or `*sql.Rows`
 | 
					It is even possible to get query result as `*sql.Row` or `*sql.Rows`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```go
 | 
					```go
 | 
				
			||||||
row := db.Table("users").Where("name = ?", "jinzhu").Select("name, age").Row() // (*sql.Row)
 | 
					row := db.Table("users").Where("name = ?", "embroker").Select("name, age").Row() // (*sql.Row)
 | 
				
			||||||
row.Scan(&name, &age)
 | 
					row.Scan(&name, &age)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
rows, err := db.Model(User{}).Where("name = ?", "jinzhu").Select("name, age, email").Rows() // (*sql.Rows, error)
 | 
					rows, err := db.Model(User{}).Where("name = ?", "embroker").Select("name, age, email").Rows() // (*sql.Rows, error)
 | 
				
			||||||
defer rows.Close()
 | 
					defer rows.Close()
 | 
				
			||||||
for rows.Next() {
 | 
					for rows.Next() {
 | 
				
			||||||
	...
 | 
						...
 | 
				
			||||||
@ -790,7 +790,7 @@ for rows.Next() {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Raw SQL
 | 
					// Raw SQL
 | 
				
			||||||
rows, err := db.Raw("select name, age, email from users where name = ?", "jinzhu").Rows() // (*sql.Rows, error)
 | 
					rows, err := db.Raw("select name, age, email from users where name = ?", "embroker").Rows() // (*sql.Rows, error)
 | 
				
			||||||
defer rows.Close()
 | 
					defer rows.Close()
 | 
				
			||||||
for rows.Next() {
 | 
					for rows.Next() {
 | 
				
			||||||
	...
 | 
						...
 | 
				
			||||||
@ -850,7 +850,7 @@ db.Table("users").Select("users.name, emails.email").Joins("left join emails on
 | 
				
			|||||||
db.Joins("inner join emails on emails.user_id = users.id").Where("emails.email = ?", "x@example.org").Find(&user)
 | 
					db.Joins("inner join emails on emails.user_id = users.id").Where("emails.email = ?", "x@example.org").Find(&user)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// find all email addresses for a user
 | 
					// find all email addresses for a user
 | 
				
			||||||
db.Joins("left join users on users.id = emails.user_id").Where("users.name = ?", "jinzhu").Find(&emails)
 | 
					db.Joins("left join users on users.id = emails.user_id").Where("users.name = ?", "embroker").Find(&emails)
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Transactions
 | 
					## Transactions
 | 
				
			||||||
@ -986,8 +986,8 @@ var deleted_users []User
 | 
				
			|||||||
db.Table("deleted_users").Find(&deleted_users)
 | 
					db.Table("deleted_users").Find(&deleted_users)
 | 
				
			||||||
//// SELECT * FROM deleted_users;
 | 
					//// SELECT * FROM deleted_users;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
db.Table("deleted_users").Where("name = ?", "jinzhu").Delete()
 | 
					db.Table("deleted_users").Where("name = ?", "embroker").Delete()
 | 
				
			||||||
//// DELETE FROM deleted_users WHERE name = 'jinzhu';
 | 
					//// DELETE FROM deleted_users WHERE name = 'embroker';
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Specifying The Table Name For A Struct Permanently with TableName
 | 
					### Specifying The Table Name For A Struct Permanently with TableName
 | 
				
			||||||
@ -1012,12 +1012,12 @@ func (u User) TableName() string {
 | 
				
			|||||||
## Error Handling
 | 
					## Error Handling
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```go
 | 
					```go
 | 
				
			||||||
query := db.Where("name = ?", "jinzhu").First(&user)
 | 
					query := db.Where("name = ?", "embroker").First(&user)
 | 
				
			||||||
query := db.First(&user).Limit(10).Find(&users)
 | 
					query := db.First(&user).Limit(10).Find(&users)
 | 
				
			||||||
// query.Error will return the last happened error
 | 
					// query.Error will return the last happened error
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// So you could do error handing in your application like this:
 | 
					// So you could do error handing in your application like this:
 | 
				
			||||||
if err := db.Where("name = ?", "jinzhu").First(&user).Error; err != nil {
 | 
					if err := db.Where("name = ?", "embroker").First(&user).Error; err != nil {
 | 
				
			||||||
	// error handling...
 | 
						// error handling...
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1044,15 +1044,15 @@ db.LogMode(true)
 | 
				
			|||||||
db.LogMode(false)
 | 
					db.LogMode(false)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Debug a single operation
 | 
					// Debug a single operation
 | 
				
			||||||
db.Debug().Where("name = ?", "jinzhu").First(&User{})
 | 
					db.Debug().Where("name = ?", "embroker").First(&User{})
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||

 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Customize Logger
 | 
					### Customize Logger
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```go
 | 
					```go
 | 
				
			||||||
// Refer gorm's default logger for how to: https://github.com/jinzhu/gorm/blob/master/logger.go#files
 | 
					// Refer gorm's default logger for how to: https://github.com/embroker/gorm/blob/master/logger.go#files
 | 
				
			||||||
db.SetLogger(gorm.Logger{revel.TRACE})
 | 
					db.SetLogger(gorm.Logger{revel.TRACE})
 | 
				
			||||||
db.SetLogger(log.New(os.Stdout, "\r\n", 0))
 | 
					db.SetLogger(log.New(os.Stdout, "\r\n", 0))
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
@ -1182,14 +1182,11 @@ db.Where("email = ?", "x@example.org").Attrs(User{RegisteredIp: "111.111.111.111
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Author
 | 
					# Author
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**jinzhu**
 | 
					**embroker**
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* <http://github.com/jinzhu>
 | 
					 | 
				
			||||||
* <wosmvp@gmail.com>
 | 
					 | 
				
			||||||
* <http://twitter.com/zhangjinzhu>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
## License
 | 
					## License
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Released under the [MIT License](https://github.com/jinzhu/gorm/blob/master/License).
 | 
					Released under the [MIT License](https://github.com/embroker/gorm/blob/master/License).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[](http://godoc.org/github.com/jinzhu/gorm)
 | 
					[](http://godoc.org/github.com/embroker/gorm)
 | 
				
			||||||
 | 
				
			|||||||
@ -59,10 +59,10 @@ func TestHasOneAndHasManyAssociation(t *testing.T) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func TestRelated(t *testing.T) {
 | 
					func TestRelated(t *testing.T) {
 | 
				
			||||||
	user := User{
 | 
						user := User{
 | 
				
			||||||
		Name:            "jinzhu",
 | 
							Name:            "embroker",
 | 
				
			||||||
		BillingAddress:  Address{Address1: "Billing Address - Address 1"},
 | 
							BillingAddress:  Address{Address1: "Billing Address - Address 1"},
 | 
				
			||||||
		ShippingAddress: Address{Address1: "Shipping Address - Address 1"},
 | 
							ShippingAddress: Address{Address1: "Shipping Address - Address 1"},
 | 
				
			||||||
		Emails:          []Email{{Email: "jinzhu@example.com"}, {Email: "jinzhu-2@example@example.com"}},
 | 
							Emails:          []Email{{Email: "embroker@example.com"}, {Email: "embroker-2@example@example.com"}},
 | 
				
			||||||
		CreditCard:      CreditCard{Number: "1234567890"},
 | 
							CreditCard:      CreditCard{Number: "1234567890"},
 | 
				
			||||||
		Company:         Company{Name: "company1"},
 | 
							Company:         Company{Name: "company1"},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -88,7 +88,7 @@ func TestRelated(t *testing.T) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var emails2 []Email
 | 
						var emails2 []Email
 | 
				
			||||||
	DB.Model(&user).Where("email = ?", "jinzhu@example.com").Related(&emails2)
 | 
						DB.Model(&user).Where("email = ?", "embroker@example.com").Related(&emails2)
 | 
				
			||||||
	if len(emails2) != 1 {
 | 
						if len(emails2) != 1 {
 | 
				
			||||||
		t.Errorf("Should have two emails")
 | 
							t.Errorf("Should have two emails")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
				
			|||||||
@ -3,7 +3,7 @@ package gorm_test
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"errors"
 | 
						"errors"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/jinzhu/gorm"
 | 
						"github.com/embroker/gorm"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"reflect"
 | 
						"reflect"
 | 
				
			||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
 | 
				
			|||||||
@ -5,7 +5,7 @@ import (
 | 
				
			|||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/jinzhu/gorm"
 | 
						"github.com/embroker/gorm"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type Person struct {
 | 
					type Person struct {
 | 
				
			||||||
 | 
				
			|||||||
@ -9,7 +9,7 @@ import (
 | 
				
			|||||||
	_ "github.com/denisenkom/go-mssqldb"
 | 
						_ "github.com/denisenkom/go-mssqldb"
 | 
				
			||||||
	testdb "github.com/erikstmartin/go-testdb"
 | 
						testdb "github.com/erikstmartin/go-testdb"
 | 
				
			||||||
	_ "github.com/go-sql-driver/mysql"
 | 
						_ "github.com/go-sql-driver/mysql"
 | 
				
			||||||
	"github.com/jinzhu/gorm"
 | 
						"github.com/embroker/gorm"
 | 
				
			||||||
	"github.com/jinzhu/now"
 | 
						"github.com/jinzhu/now"
 | 
				
			||||||
	_ "github.com/lib/pq"
 | 
						_ "github.com/lib/pq"
 | 
				
			||||||
	_ "github.com/mattn/go-sqlite3"
 | 
						_ "github.com/mattn/go-sqlite3"
 | 
				
			||||||
@ -94,7 +94,7 @@ func TestExceptionsWithInvalidSql(t *testing.T) {
 | 
				
			|||||||
		t.Errorf("Should find some users")
 | 
							t.Errorf("Should find some users")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if DB.Where("name = ?", "jinzhu; delete * from users").First(&User{}).Error == nil {
 | 
						if DB.Where("name = ?", "embroker; delete * from users").First(&User{}).Error == nil {
 | 
				
			||||||
		t.Errorf("Should got error with invalid SQL")
 | 
							t.Errorf("Should got error with invalid SQL")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -400,7 +400,7 @@ func TestRaw(t *testing.T) {
 | 
				
			|||||||
		t.Errorf("Raw with Rows should find one record with name 3")
 | 
							t.Errorf("Raw with Rows should find one record with name 3")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	DB.Exec("update users set name=? where name in (?)", "jinzhu", []string{user1.Name, user2.Name, user3.Name})
 | 
						DB.Exec("update users set name=? where name in (?)", "embroker", []string{user1.Name, user2.Name, user3.Name})
 | 
				
			||||||
	if DB.Where("name in (?)", []string{user1.Name, user2.Name, user3.Name}).First(&User{}).Error != gorm.RecordNotFound {
 | 
						if DB.Where("name in (?)", []string{user1.Name, user2.Name, user3.Name}).First(&User{}).Error != gorm.RecordNotFound {
 | 
				
			||||||
		t.Error("Raw sql to update records")
 | 
							t.Error("Raw sql to update records")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
				
			|||||||
@ -104,7 +104,7 @@ func TestAutoMigration(t *testing.T) {
 | 
				
			|||||||
		t.Errorf("Auto Migrate should not raise any error")
 | 
							t.Errorf("Auto Migrate should not raise any error")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	DB.Save(&BigEmail{Email: "jinzhu@example.org", UserAgent: "pc", RegisteredAt: time.Now()})
 | 
						DB.Save(&BigEmail{Email: "embroker@example.org", UserAgent: "pc", RegisteredAt: time.Now()})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	scope := DB.NewScope(&BigEmail{})
 | 
						scope := DB.NewScope(&BigEmail{})
 | 
				
			||||||
	if !scope.Dialect().HasIndex(scope, scope.TableName(), "idx_email_agent") {
 | 
						if !scope.Dialect().HasIndex(scope, scope.TableName(), "idx_email_agent") {
 | 
				
			||||||
@ -117,7 +117,7 @@ func TestAutoMigration(t *testing.T) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	var bigemail BigEmail
 | 
						var bigemail BigEmail
 | 
				
			||||||
	DB.First(&bigemail, "user_agent = ?", "pc")
 | 
						DB.First(&bigemail, "user_agent = ?", "pc")
 | 
				
			||||||
	if bigemail.Email != "jinzhu@example.org" || bigemail.UserAgent != "pc" || bigemail.RegisteredAt.IsZero() {
 | 
						if bigemail.Email != "embroker@example.org" || bigemail.UserAgent != "pc" || bigemail.RegisteredAt.IsZero() {
 | 
				
			||||||
		t.Error("Big Emails should be saved and fetched correctly")
 | 
							t.Error("Big Emails should be saved and fetched correctly")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -4,7 +4,7 @@ import (
 | 
				
			|||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"reflect"
 | 
						"reflect"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/jinzhu/now"
 | 
						"github.com/embroker/now"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
@ -541,8 +541,8 @@ func TestFindOrCreate(t *testing.T) {
 | 
				
			|||||||
		t.Errorf("user should be found and updated with assigned attrs")
 | 
							t.Errorf("user should be found and updated with assigned attrs")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	DB.Where(&User{Name: "find or create embedded struct"}).Assign(User{Age: 44, CreditCard: CreditCard{Number: "1231231231"}, Emails: []Email{{Email: "jinzhu@assign_embedded_struct.com"}, {Email: "jinzhu-2@assign_embedded_struct.com"}}}).FirstOrCreate(&user8)
 | 
						DB.Where(&User{Name: "find or create embedded struct"}).Assign(User{Age: 44, CreditCard: CreditCard{Number: "1231231231"}, Emails: []Email{{Email: "embroker@assign_embedded_struct.com"}, {Email: "embroker-2@assign_embedded_struct.com"}}}).FirstOrCreate(&user8)
 | 
				
			||||||
	if DB.Where("email = ?", "jinzhu-2@assign_embedded_struct.com").First(&Email{}).RecordNotFound() {
 | 
						if DB.Where("email = ?", "embroker-2@assign_embedded_struct.com").First(&Email{}).RecordNotFound() {
 | 
				
			||||||
		t.Errorf("embedded struct email should be saved")
 | 
							t.Errorf("embedded struct email should be saved")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -566,7 +566,7 @@ func TestSelectWithEscapedFieldName(t *testing.T) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestSelectWithVariables(t *testing.T) {
 | 
					func TestSelectWithVariables(t *testing.T) {
 | 
				
			||||||
	DB.Save(&User{Name: "jinzhu"})
 | 
						DB.Save(&User{Name: "embroker"})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rows, _ := DB.Table("users").Select("? as fake", "name").Rows()
 | 
						rows, _ := DB.Table("users").Select("? as fake", "name").Rows()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -581,12 +581,12 @@ func TestSelectWithVariables(t *testing.T) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestSelectWithArrayInput(t *testing.T) {
 | 
					func TestSelectWithArrayInput(t *testing.T) {
 | 
				
			||||||
	DB.Save(&User{Name: "jinzhu", Age: 42})
 | 
						DB.Save(&User{Name: "embroker", Age: 42})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var user User
 | 
						var user User
 | 
				
			||||||
	DB.Select([]string{"name", "age"}).Where("age = 42 AND name = 'jinzhu'").First(&user)
 | 
						DB.Select([]string{"name", "age"}).Where("age = 42 AND name = 'embroker'").First(&user)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if user.Name != "jinzhu" || user.Age != 42 {
 | 
						if user.Name != "embroker" || user.Age != 42 {
 | 
				
			||||||
		t.Errorf("Should have selected both age and name")
 | 
							t.Errorf("Should have selected both age and name")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1,7 +1,7 @@
 | 
				
			|||||||
package gorm_test
 | 
					package gorm_test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"github.com/jinzhu/gorm"
 | 
						"github.com/embroker/gorm"
 | 
				
			||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -7,7 +7,7 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func TestCloneSearch(t *testing.T) {
 | 
					func TestCloneSearch(t *testing.T) {
 | 
				
			||||||
	s := new(search)
 | 
						s := new(search)
 | 
				
			||||||
	s.Where("name = ?", "jinzhu").Order("name").Attrs("name", "jinzhu").Select("name, age")
 | 
						s.Where("name = ?", "embroker").Order("name").Attrs("name", "embroker").Select("name, age")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	s1 := s.clone()
 | 
						s1 := s.clone()
 | 
				
			||||||
	s1.Where("age = ?", 20).Order("age").Attrs("email", "a@e.org").Select("email")
 | 
						s1.Where("age = ?", 20).Order("age").Attrs("email", "a@e.org").Select("email")
 | 
				
			||||||
 | 
				
			|||||||
@ -4,7 +4,7 @@ import (
 | 
				
			|||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/jinzhu/gorm"
 | 
						"github.com/embroker/gorm"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestUpdate(t *testing.T) {
 | 
					func TestUpdate(t *testing.T) {
 | 
				
			||||||
 | 
				
			|||||||
@ -10,7 +10,7 @@ import (
 | 
				
			|||||||
func fileWithLineNum() string {
 | 
					func fileWithLineNum() string {
 | 
				
			||||||
	for i := 2; i < 15; i++ {
 | 
						for i := 2; i < 15; i++ {
 | 
				
			||||||
		_, file, line, ok := runtime.Caller(i)
 | 
							_, file, line, ok := runtime.Caller(i)
 | 
				
			||||||
		if ok && (!regexp.MustCompile(`jinzhu/gorm/.*.go`).MatchString(file) || regexp.MustCompile(`jinzhu/gorm/.*test.go`).MatchString(file)) {
 | 
							if ok && (!regexp.MustCompile(`embroker/gorm/.*.go`).MatchString(file) || regexp.MustCompile(`embroker/gorm/.*test.go`).MatchString(file)) {
 | 
				
			||||||
			return fmt.Sprintf("%v:%v", file, line)
 | 
								return fmt.Sprintf("%v:%v", file, line)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user