mirror of
https://github.com/asdine/storm.git
synced 2025-10-16 11:40:44 +08:00
@@ -204,6 +204,73 @@ func ExampleDB_Remove() {
|
|||||||
// <nil>
|
// <nil>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ExampleDB_Begin() {
|
||||||
|
dir, db := prepareDB()
|
||||||
|
defer os.RemoveAll(dir)
|
||||||
|
defer db.Close()
|
||||||
|
|
||||||
|
// both start out with a balance of 10000 cents
|
||||||
|
var account1, account2 Account
|
||||||
|
|
||||||
|
tx, err := db.Begin(true)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = tx.One("ID", 1, &account1)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = tx.One("ID", 2, &account2)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
account1.Amount -= 1000
|
||||||
|
account2.Amount += 1000
|
||||||
|
|
||||||
|
err = tx.Save(account1)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
tx.Rollback()
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = tx.Save(account2)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
tx.Rollback()
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
tx.Commit()
|
||||||
|
|
||||||
|
var account1Reloaded, account2Reloaded Account
|
||||||
|
|
||||||
|
err = db.One("ID", 1, &account1Reloaded)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = db.One("ID", 2, &account2Reloaded)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println("Amount in account 1:", account1Reloaded.Amount)
|
||||||
|
fmt.Println("Amount in account 2:", account2Reloaded.Amount)
|
||||||
|
|
||||||
|
// Output:
|
||||||
|
// Amount in account 1: 9000
|
||||||
|
// Amount in account 2: 11000
|
||||||
|
}
|
||||||
|
|
||||||
type User struct {
|
type User struct {
|
||||||
ID int `storm:"id"`
|
ID int `storm:"id"`
|
||||||
Group string `storm:"index"`
|
Group string `storm:"index"`
|
||||||
@@ -213,6 +280,11 @@ type User struct {
|
|||||||
CreatedAt time.Time `storm:"index"`
|
CreatedAt time.Time `storm:"index"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Account struct {
|
||||||
|
ID int `storm:"id"`
|
||||||
|
Amount int64 // amount in cents
|
||||||
|
}
|
||||||
|
|
||||||
func prepareDB() (string, *storm.DB) {
|
func prepareDB() (string, *storm.DB) {
|
||||||
dir, _ := ioutil.TempDir(os.TempDir(), "storm")
|
dir, _ := ioutil.TempDir(os.TempDir(), "storm")
|
||||||
db, _ := storm.Open(filepath.Join(dir, "storm.db"), storm.AutoIncrement())
|
db, _ := storm.Open(filepath.Join(dir, "storm.db"), storm.AutoIncrement())
|
||||||
@@ -229,7 +301,17 @@ func prepareDB() (string, *storm.DB) {
|
|||||||
err := db.Save(&user)
|
err := db.Save(&user)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := int64(0); i < 10; i++ {
|
||||||
|
account := Account{Amount: 10000}
|
||||||
|
|
||||||
|
err := db.Save(&account)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user