2013-05-03 07:26:51 +00:00
|
|
|
package xorm_test
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
_ "github.com/Go-SQL-Driver/MySQL"
|
2013-05-06 08:01:17 +00:00
|
|
|
_ "github.com/mattn/go-sqlite3"
|
2013-05-03 07:26:51 +00:00
|
|
|
"testing"
|
|
|
|
"time"
|
|
|
|
"xorm"
|
|
|
|
)
|
|
|
|
|
|
|
|
/*
|
|
|
|
CREATE TABLE `userinfo` (
|
|
|
|
`uid` INT(10) NULL AUTO_INCREMENT,
|
|
|
|
`username` VARCHAR(64) NULL,
|
|
|
|
`departname` VARCHAR(64) NULL,
|
|
|
|
`created` DATE NULL,
|
|
|
|
PRIMARY KEY (`uid`)
|
|
|
|
);
|
|
|
|
CREATE TABLE `userdeatail` (
|
|
|
|
`uid` INT(10) NULL,
|
|
|
|
`intro` TEXT NULL,
|
|
|
|
`profile` TEXT NULL,
|
|
|
|
PRIMARY KEY (`uid`)
|
|
|
|
);
|
|
|
|
*/
|
|
|
|
|
|
|
|
type Userinfo struct {
|
|
|
|
Uid int `xorm:"id pk not null autoincr"`
|
|
|
|
Username string
|
|
|
|
Departname string
|
|
|
|
Alias string `xorm:"-"`
|
|
|
|
Created time.Time
|
|
|
|
}
|
|
|
|
|
2013-05-08 13:42:22 +00:00
|
|
|
type Userdetail struct {
|
|
|
|
Uid int `xorm:"id pk not null"`
|
|
|
|
Intro string
|
|
|
|
Profile string
|
|
|
|
}
|
|
|
|
|
2013-05-03 07:26:51 +00:00
|
|
|
var engine xorm.Engine
|
|
|
|
|
2013-05-06 08:01:17 +00:00
|
|
|
func directCreateTable(t *testing.T) {
|
2013-05-03 07:26:51 +00:00
|
|
|
err := engine.CreateTables(&Userinfo{})
|
|
|
|
if err != nil {
|
|
|
|
t.Error(err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-05-06 08:01:17 +00:00
|
|
|
func mapper(t *testing.T) {
|
2013-05-03 07:26:51 +00:00
|
|
|
err := engine.UnMap(&Userinfo{})
|
|
|
|
if err != nil {
|
|
|
|
t.Error(err)
|
|
|
|
}
|
|
|
|
|
2013-05-08 13:42:22 +00:00
|
|
|
err = engine.Map(&Userinfo{}, &Userdetail{})
|
2013-05-03 07:26:51 +00:00
|
|
|
if err != nil {
|
|
|
|
t.Error(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
err = engine.DropAll()
|
|
|
|
if err != nil {
|
|
|
|
t.Error(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
err = engine.CreateAll()
|
|
|
|
if err != nil {
|
|
|
|
t.Error(err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-05-06 08:01:17 +00:00
|
|
|
func insert(t *testing.T) {
|
2013-05-03 07:26:51 +00:00
|
|
|
user := Userinfo{1, "xiaolunwen", "dev", "lunny", time.Now()}
|
|
|
|
_, err := engine.Insert(&user)
|
|
|
|
if err != nil {
|
|
|
|
t.Error(err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-05-08 13:42:22 +00:00
|
|
|
func query(t *testing.T) {
|
|
|
|
sql := "select * from userinfo"
|
|
|
|
results, err := engine.Query(sql)
|
|
|
|
if err != nil {
|
|
|
|
t.Error(err)
|
|
|
|
}
|
|
|
|
fmt.Println(results)
|
|
|
|
}
|
|
|
|
|
|
|
|
func exec(t *testing.T) {
|
|
|
|
sql := "update userinfo set username=? where id=?"
|
|
|
|
res, err := engine.Exec(sql, "xiaolun", 1)
|
|
|
|
if err != nil {
|
|
|
|
t.Error(err)
|
|
|
|
}
|
|
|
|
fmt.Println(res)
|
|
|
|
}
|
|
|
|
|
2013-05-06 08:01:17 +00:00
|
|
|
func insertAutoIncr(t *testing.T) {
|
2013-05-03 07:26:51 +00:00
|
|
|
// auto increment insert
|
|
|
|
user := Userinfo{Username: "xiaolunwen", Departname: "dev", Alias: "lunny", Created: time.Now()}
|
|
|
|
_, err := engine.Insert(&user)
|
|
|
|
if err != nil {
|
|
|
|
t.Error(err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-05-06 08:01:17 +00:00
|
|
|
func insertMulti(t *testing.T) {
|
2013-05-03 07:26:51 +00:00
|
|
|
user1 := Userinfo{Username: "xlw", Departname: "dev", Alias: "lunny2", Created: time.Now()}
|
|
|
|
user2 := Userinfo{Username: "xlw2", Departname: "dev", Alias: "lunny3", Created: time.Now()}
|
|
|
|
_, err := engine.Insert(&user1, &user2)
|
|
|
|
if err != nil {
|
|
|
|
t.Error(err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-05-08 13:42:22 +00:00
|
|
|
func insertTwoTable(t *testing.T) {
|
|
|
|
userinfo := Userinfo{Username: "xlw3", Departname: "dev", Alias: "lunny4", Created: time.Now()}
|
|
|
|
uid, err := engine.Insert(&userinfo)
|
|
|
|
if err != nil {
|
|
|
|
t.Error(err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
userdetail := Userdetail{Uid: int(uid), Intro: "I'm a very beautiful women.", Profile: "sfsaf"}
|
|
|
|
_, err = engine.Insert(&userdetail)
|
|
|
|
if err != nil {
|
|
|
|
t.Error(err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-05-06 08:01:17 +00:00
|
|
|
func update(t *testing.T) {
|
2013-05-03 07:26:51 +00:00
|
|
|
// update by id
|
2013-05-08 13:42:22 +00:00
|
|
|
user := Userinfo{Username: "xxx"}
|
2013-05-09 01:56:58 +00:00
|
|
|
_, err := engine.Id(1).Update(&user)
|
|
|
|
if err != nil {
|
|
|
|
t.Error(err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
_, err = engine.Update(&Userinfo{Username: "yyy"}, &user)
|
2013-05-03 07:26:51 +00:00
|
|
|
if err != nil {
|
|
|
|
t.Error(err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-05-06 08:01:17 +00:00
|
|
|
func delete(t *testing.T) {
|
2013-05-03 07:26:51 +00:00
|
|
|
user := Userinfo{Uid: 1}
|
|
|
|
_, err := engine.Delete(&user)
|
|
|
|
if err != nil {
|
|
|
|
t.Error(err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-05-06 08:01:17 +00:00
|
|
|
func get(t *testing.T) {
|
2013-05-03 07:26:51 +00:00
|
|
|
user := Userinfo{Uid: 2}
|
|
|
|
|
|
|
|
err := engine.Get(&user)
|
|
|
|
if err != nil {
|
|
|
|
t.Error(err)
|
|
|
|
}
|
|
|
|
fmt.Println(user)
|
|
|
|
}
|
|
|
|
|
2013-05-06 08:01:17 +00:00
|
|
|
func find(t *testing.T) {
|
2013-05-03 07:26:51 +00:00
|
|
|
users := make([]Userinfo, 0)
|
|
|
|
|
|
|
|
err := engine.Find(&users)
|
|
|
|
if err != nil {
|
|
|
|
t.Error(err)
|
|
|
|
}
|
|
|
|
fmt.Println(users)
|
|
|
|
}
|
|
|
|
|
2013-05-06 08:01:17 +00:00
|
|
|
func count(t *testing.T) {
|
|
|
|
user := Userinfo{Departname: "dev"}
|
2013-05-03 07:26:51 +00:00
|
|
|
total, err := engine.Count(&user)
|
|
|
|
if err != nil {
|
|
|
|
t.Error(err)
|
|
|
|
}
|
|
|
|
fmt.Printf("Total %d records!!!", total)
|
|
|
|
}
|
|
|
|
|
2013-05-06 08:01:17 +00:00
|
|
|
func where(t *testing.T) {
|
2013-05-03 07:26:51 +00:00
|
|
|
users := make([]Userinfo, 0)
|
2013-05-06 08:01:17 +00:00
|
|
|
err := engine.Where("id > ?", 2).Find(&users)
|
2013-05-03 07:26:51 +00:00
|
|
|
if err != nil {
|
|
|
|
t.Error(err)
|
|
|
|
}
|
2013-05-06 08:01:17 +00:00
|
|
|
fmt.Println(users)
|
|
|
|
}
|
|
|
|
|
|
|
|
func limit(t *testing.T) {
|
|
|
|
users := make([]Userinfo, 0)
|
|
|
|
err := engine.Limit(2, 1).Find(&users)
|
2013-05-03 07:26:51 +00:00
|
|
|
if err != nil {
|
|
|
|
t.Error(err)
|
|
|
|
}
|
|
|
|
fmt.Println(users)
|
|
|
|
}
|
|
|
|
|
2013-05-06 08:01:17 +00:00
|
|
|
func order(t *testing.T) {
|
2013-05-03 07:26:51 +00:00
|
|
|
users := make([]Userinfo, 0)
|
2013-05-06 08:01:17 +00:00
|
|
|
err := engine.OrderBy("id desc").Find(&users)
|
|
|
|
if err != nil {
|
|
|
|
t.Error(err)
|
|
|
|
}
|
|
|
|
fmt.Println(users)
|
|
|
|
}
|
|
|
|
|
2013-05-08 13:42:22 +00:00
|
|
|
func join(t *testing.T) {
|
|
|
|
users := make([]Userinfo, 0)
|
|
|
|
err := engine.Join("LEFT", "userdetail", "userinfo.id=userdetail.id").Find(&users)
|
|
|
|
if err != nil {
|
|
|
|
t.Error(err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func having(t *testing.T) {
|
|
|
|
users := make([]Userinfo, 0)
|
|
|
|
err := engine.GroupBy("username").Having("username='xlw'").Find(&users)
|
|
|
|
if err != nil {
|
|
|
|
t.Error(err)
|
|
|
|
}
|
|
|
|
fmt.Println(users)
|
|
|
|
}
|
|
|
|
|
2013-05-06 08:01:17 +00:00
|
|
|
func transaction(t *testing.T) {
|
|
|
|
counter := func() {
|
|
|
|
total, err := engine.Count(&Userinfo{})
|
|
|
|
if err != nil {
|
|
|
|
t.Error(err)
|
|
|
|
}
|
|
|
|
fmt.Printf("----now total %v records\n", total)
|
|
|
|
}
|
|
|
|
|
|
|
|
counter()
|
2013-05-08 13:42:22 +00:00
|
|
|
defer counter()
|
2013-05-03 07:26:51 +00:00
|
|
|
session, err := engine.MakeSession()
|
|
|
|
defer session.Close()
|
|
|
|
if err != nil {
|
|
|
|
t.Error(err)
|
2013-05-06 08:01:17 +00:00
|
|
|
return
|
2013-05-03 07:26:51 +00:00
|
|
|
}
|
2013-05-06 08:01:17 +00:00
|
|
|
|
|
|
|
session.Begin()
|
2013-05-08 13:42:22 +00:00
|
|
|
//session.IsAutoRollback = false
|
2013-05-06 08:01:17 +00:00
|
|
|
user1 := Userinfo{Username: "xiaoxiao", Departname: "dev", Alias: "lunny", Created: time.Now()}
|
|
|
|
_, err = session.Insert(&user1)
|
2013-05-03 07:26:51 +00:00
|
|
|
if err != nil {
|
2013-05-08 13:42:22 +00:00
|
|
|
session.Rollback()
|
2013-05-03 07:26:51 +00:00
|
|
|
t.Error(err)
|
2013-05-06 08:01:17 +00:00
|
|
|
return
|
|
|
|
}
|
|
|
|
user2 := Userinfo{Username: "yyy"}
|
2013-05-08 13:42:22 +00:00
|
|
|
_, err = session.Where("uid = ?", 0).Update(&user2)
|
2013-05-06 08:01:17 +00:00
|
|
|
if err != nil {
|
2013-05-08 13:42:22 +00:00
|
|
|
session.Rollback()
|
|
|
|
fmt.Println(err)
|
|
|
|
//t.Error(err)
|
2013-05-06 08:01:17 +00:00
|
|
|
return
|
2013-05-03 07:26:51 +00:00
|
|
|
}
|
|
|
|
|
2013-05-06 08:01:17 +00:00
|
|
|
_, err = session.Delete(&user2)
|
2013-05-03 07:26:51 +00:00
|
|
|
if err != nil {
|
2013-05-08 13:42:22 +00:00
|
|
|
session.Rollback()
|
|
|
|
t.Error(err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
err = session.Commit()
|
|
|
|
if err != nil {
|
|
|
|
t.Error(err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func combineTransaction(t *testing.T) {
|
|
|
|
counter := func() {
|
|
|
|
total, err := engine.Count(&Userinfo{})
|
|
|
|
if err != nil {
|
|
|
|
t.Error(err)
|
|
|
|
}
|
|
|
|
fmt.Printf("----now total %v records\n", total)
|
|
|
|
}
|
|
|
|
|
|
|
|
counter()
|
|
|
|
defer counter()
|
|
|
|
session, err := engine.MakeSession()
|
|
|
|
defer session.Close()
|
|
|
|
if err != nil {
|
|
|
|
t.Error(err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
session.Begin()
|
|
|
|
//session.IsAutoRollback = false
|
|
|
|
user1 := Userinfo{Username: "xiaoxiao2", Departname: "dev", Alias: "lunny", Created: time.Now()}
|
|
|
|
_, err = session.Insert(&user1)
|
|
|
|
if err != nil {
|
|
|
|
session.Rollback()
|
|
|
|
t.Error(err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
user2 := Userinfo{Username: "zzz"}
|
|
|
|
_, err = session.Where("id = ?", 0).Update(&user2)
|
|
|
|
if err != nil {
|
|
|
|
session.Rollback()
|
|
|
|
t.Error(err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
_, err = session.Exec("delete from userinfo where username = ?", user2.Username)
|
|
|
|
if err != nil {
|
|
|
|
session.Rollback()
|
2013-05-03 07:26:51 +00:00
|
|
|
t.Error(err)
|
2013-05-06 08:01:17 +00:00
|
|
|
return
|
2013-05-03 07:26:51 +00:00
|
|
|
}
|
2013-05-06 08:01:17 +00:00
|
|
|
|
|
|
|
err = session.Commit()
|
2013-05-03 07:26:51 +00:00
|
|
|
if err != nil {
|
|
|
|
t.Error(err)
|
2013-05-06 08:01:17 +00:00
|
|
|
return
|
2013-05-03 07:26:51 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-05-06 08:01:17 +00:00
|
|
|
func TestMysql(t *testing.T) {
|
2013-05-09 01:56:58 +00:00
|
|
|
engine = xorm.Create("mysql", "root:123@/test?charset=utf8")
|
2013-05-06 08:01:17 +00:00
|
|
|
engine.ShowSQL = true
|
|
|
|
|
|
|
|
directCreateTable(t)
|
|
|
|
mapper(t)
|
|
|
|
insert(t)
|
2013-05-08 13:42:22 +00:00
|
|
|
query(t)
|
|
|
|
exec(t)
|
2013-05-06 08:01:17 +00:00
|
|
|
insertAutoIncr(t)
|
|
|
|
insertMulti(t)
|
|
|
|
update(t)
|
|
|
|
delete(t)
|
|
|
|
get(t)
|
|
|
|
find(t)
|
|
|
|
count(t)
|
|
|
|
where(t)
|
|
|
|
limit(t)
|
|
|
|
order(t)
|
2013-05-08 13:42:22 +00:00
|
|
|
join(t)
|
|
|
|
having(t)
|
2013-05-06 08:01:17 +00:00
|
|
|
transaction(t)
|
2013-05-08 13:42:22 +00:00
|
|
|
combineTransaction(t)
|
2013-05-06 08:01:17 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestSqlite(t *testing.T) {
|
2013-05-09 01:56:58 +00:00
|
|
|
engine = xorm.Create("sqlite3", "./test.db")
|
2013-05-06 08:01:17 +00:00
|
|
|
engine.ShowSQL = true
|
|
|
|
|
|
|
|
directCreateTable(t)
|
|
|
|
mapper(t)
|
|
|
|
insert(t)
|
2013-05-08 13:42:22 +00:00
|
|
|
query(t)
|
|
|
|
exec(t)
|
2013-05-06 08:01:17 +00:00
|
|
|
insertAutoIncr(t)
|
|
|
|
insertMulti(t)
|
|
|
|
update(t)
|
|
|
|
delete(t)
|
|
|
|
get(t)
|
|
|
|
find(t)
|
|
|
|
count(t)
|
|
|
|
where(t)
|
|
|
|
limit(t)
|
|
|
|
order(t)
|
2013-05-08 13:42:22 +00:00
|
|
|
join(t)
|
|
|
|
having(t)
|
2013-05-06 08:01:17 +00:00
|
|
|
transaction(t)
|
2013-05-08 13:42:22 +00:00
|
|
|
combineTransaction(t)
|
2013-05-03 07:26:51 +00:00
|
|
|
}
|