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