diff --git a/g/database/gdb/gdb_linkop.go b/g/database/gdb/gdb_linkop.go index 92579a0dc..b4c3b7709 100644 --- a/g/database/gdb/gdb_linkop.go +++ b/g/database/gdb/gdb_linkop.go @@ -152,7 +152,7 @@ func (op *gLinkOp) Save() (sql.Result, error) { return nil, errors.New("saving into table with empty data") } if d, ok := op.data.(Map); ok { - return op.link.Insert(op.tables, d) + return op.link.Save(op.tables, d) } return nil, errors.New("saving into table with invalid data type") } diff --git a/geg/database/mysql/mysql.go b/geg/database/mysql/mysql.go index 172e57292..f7def237f 100644 --- a/geg/database/mysql/mysql.go +++ b/geg/database/mysql/mysql.go @@ -128,7 +128,7 @@ func insert() { r, err := db.Insert("user", gdb.Map { "name": "john", }) - if (err == nil) { + if err == nil { uid, err2 := r.LastInsertId() if err2 == nil { r, err = db.Insert("user_detail", gdb.Map { @@ -169,7 +169,7 @@ func replace() { "uid" : 1, "name" : "john", }) - if (err == nil) { + if err == nil { fmt.Println(r.LastInsertId()) fmt.Println(r.RowsAffected()) } else { @@ -185,7 +185,7 @@ func save() { "uid" : 1, "name" : "john", }) - if (err == nil) { + if err == nil { fmt.Println(r.LastInsertId()) fmt.Println(r.RowsAffected()) } else { @@ -213,7 +213,7 @@ func batchInsert() { func update1() { fmt.Println("update1:") r, err := db.Update("user", gdb.Map {"name": "john1"}, "uid=?", 1) - if (err == nil) { + if err == nil { fmt.Println(r.LastInsertId()) fmt.Println(r.RowsAffected()) } else { @@ -226,7 +226,7 @@ func update1() { func update2() { fmt.Println("update2:") r, err := db.Update("user", "name='john2'", "uid=1") - if (err == nil) { + if err == nil { fmt.Println(r.LastInsertId()) fmt.Println(r.RowsAffected()) } else { @@ -239,7 +239,7 @@ func update2() { func update3() { fmt.Println("update3:") r, err := db.Update("user", "name=?", "uid=?", "john2", 1) - if (err == nil) { + if err == nil { fmt.Println(r.LastInsertId()) fmt.Println(r.RowsAffected()) } else { @@ -253,7 +253,7 @@ func update3() { func linkopSelect1() { fmt.Println("linkopSelect1:") r, err := db.Table("user u").LeftJoin("user_detail ud", "u.uid=ud.uid").Fields("u.*, ud.site").Where("u.uid > ?", 1).Limit(0, 2).Select() - if (err == nil) { + if err == nil { fmt.Println(r) } else { fmt.Println(err) @@ -265,7 +265,7 @@ func linkopSelect1() { func linkopSelect2() { fmt.Println("linkopSelect2:") r, err := db.Table("user u").LeftJoin("user_detail ud", "u.uid=ud.uid").Fields("u.*,ud.site").Where("u.uid=?", 1).One() - if (err == nil) { + if err == nil { fmt.Println(r) } else { fmt.Println(err) @@ -277,7 +277,7 @@ func linkopSelect2() { func linkopSelect3() { fmt.Println("linkopSelect3:") r, err := db.Table("user u").LeftJoin("user_detail ud", "u.uid=ud.uid").Fields("ud.site").Where("u.uid=?", 1).Value() - if (err == nil) { + if err == nil { fmt.Println(r.(string)) } else { fmt.Println(err) @@ -289,7 +289,7 @@ func linkopSelect3() { func linkopUpdate1() { fmt.Println("linkopUpdate1:") r, err := db.Table("henghe_setting").Update() - if (err == nil) { + if err == nil { fmt.Println(r.RowsAffected()) } else { fmt.Println(err) @@ -301,7 +301,7 @@ func linkopUpdate1() { func linkopUpdate2() { fmt.Println("linkopUpdate2:") r, err := db.Table("user").Data(gdb.Map{"name" : "john2"}).Where("name=?", "john").Update() - if (err == nil) { + if err == nil { fmt.Println(r.RowsAffected()) } else { fmt.Println(err) @@ -313,7 +313,7 @@ func linkopUpdate2() { func linkopUpdate3() { fmt.Println("linkopUpdate3:") r, err := db.Table("user").Data("name='john3'").Where("name=?", "john2").Update() - if (err == nil) { + if err == nil { fmt.Println(r.RowsAffected()) } else { fmt.Println(err) @@ -331,7 +331,7 @@ func linkopBatchInsert1() { {"name": "john_3"}, {"name": "john_4"}, }).Insert() - if (err == nil) { + if err == nil { fmt.Println(r.RowsAffected()) } else { fmt.Println(err) @@ -348,7 +348,7 @@ func linkopBatchInsert2() { {"name": "john_3"}, {"name": "john_4"}, }).Batch(2).Insert() - if (err == nil) { + if err == nil { fmt.Println(r.RowsAffected()) } else { fmt.Println(err) @@ -360,12 +360,12 @@ func linkopBatchInsert2() { func linkopBatchSave() { fmt.Println("linkopBatchSave:") r, err := db.Table("user").Data(gdb.List{ - {"id":1, "name": "john_1"}, - {"id":2, "name": "john_2"}, - {"id":3, "name": "john_3"}, - {"id":4, "name": "john_4"}, + {"uid":1, "name": "john_1"}, + {"uid":2, "name": "john_2"}, + {"uid":3, "name": "john_3"}, + {"uid":4, "name": "john_4"}, }).Save() - if (err == nil) { + if err == nil { fmt.Println(r.RowsAffected()) } else { fmt.Println(err) @@ -373,6 +373,29 @@ func linkopBatchSave() { fmt.Println() } +// 事务操作示例1 +func transaction1() { + fmt.Println("transaction1:") + db.Begin() + r, err := db.Save("user", gdb.Map{ + "uid" : 1, + "name" : "john", + }) + db.Rollback() + fmt.Println(r, err) + fmt.Println() +} + +// 事务操作示例2 +func transaction2() { + fmt.Println("transaction2:") + db.Begin() + r, err := db.Table("user").Data(gdb.Map{"uid":1, "name": "john_1"}).Save() + db.Commit() + fmt.Println(r, err) + fmt.Println() +} + // 主从io复用测试,在mysql中使用 show full processlist 查看链接信息 func keepPing() { fmt.Println("keepPing:") @@ -416,7 +439,7 @@ func main() { //create() //create() //insert() - query() + //query() //replace() //save() //batchInsert() @@ -429,5 +452,7 @@ func main() { //linkopUpdate1() //linkopUpdate2() //linkopUpdate3() - keepPing() + //keepPing() + transaction1() + transaction2() } \ No newline at end of file diff --git a/geg/database/pgsql/pgsql.go b/geg/database/pgsql/pgsql.go deleted file mode 100644 index 0dde27cf1..000000000 --- a/geg/database/pgsql/pgsql.go +++ /dev/null @@ -1,284 +0,0 @@ -package main - -import ( - "fmt" - "time" - "strconv" - "gitee.com/johng/gf/g/database/gdb" -) - -// 本文件用于gf框架的postgresql数据库操作示例,不作为单元测试使用 - -var db gdb.Link - -func init () { - gdb.AddDefaultConfigNode(gdb.ConfigNode { - Host : "127.0.0.1", - Port : "5432", - User : "postgres", - Pass : "123456", - Name : "test", - Type : "pgsql", - }) - db, _ = gdb.Instance() -} - - - -// 创建测试数据库 -func create() { - fmt.Println("create:") - _, err := db.Exec("CREATE SCHEMA IF NOT EXISTS \"test\"") - if (err != nil) { - fmt.Println(err) - } - - s := `CREATE TABLE IF NOT EXISTS "user" ( - uid int PRIMARY KEY, - name TEXT NOT NULL - ) - ` - _, err = db.Exec(s) - if (err != nil) { - fmt.Println(err) - } - - s = ` - CREATE TABLE IF NOT EXISTS user_detail ( - uid int PRIMARY KEY, - site TEXT NOT NULL - ) - ` - _, err = db.Exec(s) - if (err != nil) { - fmt.Println(err) - } - fmt.Println() -} - -// 数据写入 -func insert() { - fmt.Println("insert:") - r, err := db.Insert("user", gdb.Map { - "uid" : 1, - "name": "john", - }) - if (err == nil) { - uid, err2 := r.LastInsertId() - if err2 == nil { - r, err = db.Insert("user_detail", gdb.Map { - "uid" : string(uid), - "site" : "http://johng.cn", - }) - if err == nil { - fmt.Printf("uid: %d\n", uid) - } else { - fmt.Println(err) - } - } else { - fmt.Println(err2) - } - } else { - fmt.Println(err) - } - fmt.Println() -} - - -// 基本sql查询 -func query() { - fmt.Println("query:") - list, err := db.GetAll("select * from \"user\"") - if err == nil { - fmt.Println(list) - } else { - fmt.Println(err) - } - fmt.Println() -} - -// replace into -func replace() { - fmt.Println("replace:") - r, err := db.Save("user", gdb.Map { - "uid": "1", - "name": "john", - }) - if (err == nil) { - fmt.Println(r.LastInsertId()) - fmt.Println(r.RowsAffected()) - } else { - fmt.Println(err) - } - fmt.Println() -} - -// 数据保存 -func save() { - fmt.Println("save:") - r, err := db.Save("user", gdb.Map { - "uid" : "1", - "name" : "john", - }) - if (err == nil) { - fmt.Println(r.LastInsertId()) - fmt.Println(r.RowsAffected()) - } else { - fmt.Println(err) - } - fmt.Println() -} - -// 批量写入 -func batchInsert() { - fmt.Println("batchInsert:") - err := db.BatchInsert("user", gdb.List { - {"name": "john_" + strconv.FormatInt(time.Now().UnixNano(), 10)}, - {"name": "john_" + strconv.FormatInt(time.Now().UnixNano(), 10)}, - {"name": "john_" + strconv.FormatInt(time.Now().UnixNano(), 10)}, - {"name": "john_" + strconv.FormatInt(time.Now().UnixNano(), 10)}, - }, 10) - if err != nil { - fmt.Println(err) - } - fmt.Println() -} - -// 数据更新 -func update1() { - fmt.Println("update1:") - r, err := db.Update("user", gdb.Map {"name": "john1"}, "uid=?", 1) - if (err == nil) { - fmt.Println(r.LastInsertId()) - fmt.Println(r.RowsAffected()) - } else { - fmt.Println(err) - } - fmt.Println() -} - -// 数据更新 -func update2() { - fmt.Println("update2:") - r, err := db.Update("user", "name='john2'", "uid=1") - if (err == nil) { - fmt.Println(r.LastInsertId()) - fmt.Println(r.RowsAffected()) - } else { - fmt.Println(err) - } - fmt.Println() -} - -// 数据更新 -func update3() { - fmt.Println("update3:") - r, err := db.Update("user", "name=?", "uid=?", "john2", 1) - if (err == nil) { - fmt.Println(r.LastInsertId()) - fmt.Println(r.RowsAffected()) - } else { - fmt.Println(err) - } - fmt.Println() -} - - -// 链式查询操作 -func linkopSelect() { - fmt.Println("linkopSelect:") - r, err := db.Table("user u"). - LeftJoin("user_detail ud", "u.uid=ud.uid"). - Fields("u.*, ud.site"). - Condition("u.uid > ?", 1). - Limit(0, 2).Select() - if (err == nil) { - fmt.Println(r) - } else { - fmt.Println(err) - } - fmt.Println() -} - -// 错误操作 -func linkopUpdate1() { - fmt.Println("linkopUpdate1:") - r, err := db.Table("henghe_setting").Update() - if (err == nil) { - fmt.Println(r.RowsAffected()) - } else { - fmt.Println(err) - } - fmt.Println() -} - -// 通过Map指针方式传参方式 -func linkopUpdate2() { - fmt.Println("linkopUpdate2:") - r, err := db.Table("user").Data(gdb.Map{"name" : "john2"}).Condition("name=?", "john").Update() - if (err == nil) { - fmt.Println(r.RowsAffected()) - } else { - fmt.Println(err) - } - fmt.Println() -} - -// 通过字符串方式传参 -func linkopUpdate3() { - fmt.Println("linkopUpdate3:") - r, err := db.Table("user").Data("name='john3'").Condition("name=?", "john2").Update() - if (err == nil) { - fmt.Println(r.RowsAffected()) - } else { - fmt.Println(err) - } - fmt.Println() -} - -// 主从io复用测试,在mysql中使用 show full processlist 查看链接信息 -func keepPing() { - fmt.Println("keepPing:") - for { - fmt.Println("ping...") - db.PingMaster() - db.PingSlave() - time.Sleep(1*time.Second) - } -} - -// 数据库单例测试,在mysql中使用 show full processlist 查看链接信息 -func instance() { - fmt.Println("instance:") - db1, _ := gdb.Instance() - db2, _ := gdb.Instance() - db3, _ := gdb.Instance() - for { - fmt.Println("ping...") - db1.PingMaster() - db1.PingSlave() - db2.PingMaster() - db2.PingSlave() - db3.PingMaster() - db3.PingSlave() - time.Sleep(1*time.Second) - } -} - - -func main() { - create() - create() - insert() - query() - replace() - save() - batchInsert() - update1() - update2() - update3() - linkopSelect() - linkopUpdate1() - linkopUpdate2() - linkopUpdate3() -} \ No newline at end of file