diff --git a/README.md b/README.md index f3bc45cfdc548c4e148563121a7c3930e251b36b..b58d70cfe67f58a9d9ec90d5735b9f1159c9569b 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,127 @@ # upper.io/db -Still a work in progress. +[Upper DB][1] is a [Go][2] package for saving and retrieving [Go][2] structs +to permanent storage with ease. + +[Upper DB][1] is able to comunicate with SQL and NoSQL databases through a +simplified API and perform the most common operations on database systems such +as appending, searching, updating and removing items. + +## Database compatibility + +Wrappers are provided for the following databases: + +* SQLite3 +* MySQL +* PostgreSQL +* MongoDB + +Wrappers are based on popular SQL drivers for `database/sql` and in the MongoDB +driver `labix.org/v2/mgo`. + +## Installation + +Get the main package. + +``` +go get upper.io/db +``` + +Then, get the wrapper you want to use. Choose one of `mysql`, `sqlite`, `mongo` +or `postgresql`. + +``` +go get upper.io/db/sqlite +``` + +## An actual code example + +Define a Go struct, use Go datatypes and define column names within field tags. + +``` +type Birthday struct { + Name string `field:"name"` + Born time.Time `field:"born"` +} +``` + +Define your database settings. + +``` +var settings = db.Settings{ + Database: `example.db`, +} +``` + +Open a connection to a database using a driver (`sqlite` in this example). + +``` +sess, err = db.Open("sqlite", settings) +``` + +Get a collection reference. + +``` + birthdayCollection, err = sess.Collection("birthdays") +``` + +Use the `Collection.Append` method to insert some data into the collection. + +``` +birthdayCollection.Append(Birthday{ + Name: "Hayao Miyazaki", + Born: time.Date(1941, time.January, 5, 0, 0, 0, 0, time.UTC), +}) +``` + +Use the `Collection.Filter` method without arguments to retrieve all the rows +within the collection. + +``` +res, err = birthdayCollection.Filter() + +var birthday Birthday + +for { + err = res.Next(&birthday) + if err == nil { + fmt.Printf("%s was born in %s.\n", birthday.Name, birthday.Born.Format("January 2, 2006")) + } else if err == db.ErrNoMoreRows { + break + } else { + panic(err.Error()) + } +} +``` + +Close this session, you can also use `defer` for closing. + +``` +sess.Close() +``` + +## License + +> Copyright (c) 2012-2013 José Carlos Nieto, https://menteslibres.net/xiam +> +> Permission is hereby granted, free of charge, to any person obtaining +> a copy of this software and associated documentation files (the +> "Software"), to deal in the Software without restriction, including +> without limitation the rights to use, copy, modify, merge, publish, +> distribute, sublicense, and/or sell copies of the Software, and to +> permit persons to whom the Software is furnished to do so, subject to +> the following conditions: +> +> The above copyright notice and this permission notice shall be +> included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +> MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +> NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +> LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +> OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +> WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +[1]: http://upper.io/db +[2]: http://golang.org