1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
| package gorp_test
import ( "database/sql" _ "github.com/mattn/go-sqlite3" "gopkg.in/gorp.v1" "log" "testing" "time" )
func TestGorp(t *testing.T) { dbmap := initDb() defer dbmap.Db.Close()
err := dbmap.TruncateTables() checkErr(err, "TruncateTables failed")
p1 := newPost("Go 1.1 released!", "Lorem ipsum lorem ipsum") p2 := newPost("Go 1.2 released!", "Lorem ipsum lorem ipsum")
err = dbmap.Insert(&p1, &p2) checkErr(err, "Insert failed")
count, err := dbmap.SelectInt("select count(*) from posts") checkErr(err, "select count(*) failed") log.Println("Rows after inserting:", count)
p2.Title = "Go 1.2 is better than ever" count, err = dbmap.Update(&p2) checkErr(err, "Update failed") log.Println("Rows updated:", count)
err = dbmap.SelectOne(&p2, "select * from posts where post_id=?", p2.Id) checkErr(err, "SelectOne failed") log.Println("p2 row:", p2)
var posts []Post _, err = dbmap.Select(&posts, "select * from posts order by post_id") checkErr(err, "Select failed") log.Println("All rows:") for x, p := range posts { log.Printf(" %d: %v\n", x, p) }
count, err = dbmap.Delete(&p1) checkErr(err, "Delete failed") log.Println("Rows deleted:", count)
_, err = dbmap.Exec("delete from posts where post_id=?", p2.Id) checkErr(err, "Exec failed")
count, err = dbmap.SelectInt("select count(*) from posts") checkErr(err, "select count(*) failed") log.Println("Row count - should be zero:", count)
log.Println("Done!") }
type Post struct { Id int64 `db:"post_id"` Created int64 Title string Body string }
func newPost(title, body string) Post { return Post{ Created: time.Now().UnixNano(), Title: title, Body: body, } }
func initDb() *gorp.DbMap { db, err := sql.Open("sqlite3", "/tmp/post_db.bin") checkErr(err, "sql.Open failed")
dbmap := &gorp.DbMap{Db: db, Dialect: gorp.SqliteDialect{}}
dbmap.AddTableWithName(Post{}, "posts").SetKeys(true, "Id")
err = dbmap.CreateTablesIfNotExists() checkErr(err, "Create tables failed")
return dbmap }
func checkErr(err error, msg string) { if err != nil { log.Fatalln(msg, err) } }
|