From 7eace7d6f099bcac87aa1e64f4c39f0722c132d5 Mon Sep 17 00:00:00 2001 From: Masudur Rahman Date: Sat, 30 Mar 2024 01:08:50 +0600 Subject: [PATCH] Add quickstart docs for the database ORM Signed-off-by: Masudur Rahman --- README.md | 60 ++++++++++++++++++++++++++++++++++++++++ examples/quickstart.go | 50 +++++++++++++++++++++++++++++++++ sql/database.go | 10 +++---- sql/postgres/postgres.go | 4 +-- 4 files changed, 117 insertions(+), 7 deletions(-) create mode 100644 examples/quickstart.go diff --git a/README.md b/README.md index 1594926..65f362f 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,62 @@ # database Database Engine for different SQL and NoSQL databases + +## Install +```shell +go get -u github.com/masudur-rahman/database +``` + +## Quickstart + +```go +package main + +import ( + "context" + "time" + + "github.com/masudur-rahman/database/sql" + "github.com/masudur-rahman/database/sql/sqlite" + "github.com/masudur-rahman/database/sql/sqlite/lib" +) + +type User struct { + ID int64 `db:"id,pk autoincr"` + Name string `db:"name,uq"` + FullName string `db:"full_name,uqs"` + Email string `db:",uqs"` + CreatedAt time.Time `db:"created_at"` +} + +func main() { + // Create sqlite connection + conn, _ := lib.GetSQLiteConnection("test.db") + + // Start a database engine + var db sql.Database + db = sqlite.NewSqlite(context.Background(), conn) + + // Migrate database + db.Sync(User{}) + + db = db.Table("user") + + // Insert + db.InsertOne(&User{Name: "masud", FullName: "Masudur Rahman", Email: "masud@example.com"}) + + // Read + var user User + db.ID(1).FindOne(&user) + db.Where("email=?", "masud@example.com").FindOne(&user) + db.FindOne(&user, User{Name: "masud"}) + db.Columns("name", "email").FindOne(&user, User{Name: "masud"}) // fetch only name, email columns + + // Update + db.ID(user.ID).UpdateOne(User{Email: "test@example.com"}) + db.Where("email=?", "test@example.com").UpdateOne(User{FullName: "Test User"}) + + // Delete + db.ID(1).DeleteOne() // delete by id + db.DeleteOne(User{Name: "masud"}) // delete using filter +} +``` diff --git a/examples/quickstart.go b/examples/quickstart.go new file mode 100644 index 0000000..b9f8fa4 --- /dev/null +++ b/examples/quickstart.go @@ -0,0 +1,50 @@ +package examples + +import ( + "context" + "time" + + "github.com/masudur-rahman/database/sql" + "github.com/masudur-rahman/database/sql/sqlite" + "github.com/masudur-rahman/database/sql/sqlite/lib" +) + +type User struct { + ID int64 `db:"id,pk autoincr"` + Name string `db:"name,uq"` + FullName string `db:"full_name,uqs"` + Email string `db:",uqs"` + CreatedAt time.Time `db:"created_at"` +} + +func main() { + // Create sqlite connection + conn, _ := lib.GetSQLiteConnection("test.db") + + // Start a database engine + var db sql.Database + db = sqlite.NewSqlite(context.Background(), conn) + + // Migrate database + db.Sync(User{}) + + db = db.Table("user") + + // Insert + db.InsertOne(&User{Name: "masud", FullName: "Masudur Rahman", Email: "masud@example.com"}) + + // Read + var user User + db.ID(1).FindOne(&user) + db.Where("email=?", "masud@example.com").FindOne(&user) + db.FindOne(&user, User{Name: "masud"}) + db.Columns("name", "email").FindOne(&user, User{Name: "masud"}) // fetch only name, email columns + + // Update + db.ID(user.ID).UpdateOne(User{Email: "test@example.com"}) + db.Where("email=?", "test@example.com").UpdateOne(User{FullName: "Test User"}) + + // Delete + db.ID(1).DeleteOne() // delete by id + db.DeleteOne(User{Name: "masud"}) // delete using filter +} diff --git a/sql/database.go b/sql/database.go index b1158dc..1122dae 100644 --- a/sql/database.go +++ b/sql/database.go @@ -8,11 +8,11 @@ type Database interface { Table(name string) Database ID(id any) Database - In(string, ...any) Database - Where(string, ...any) Database - Columns(...string) Database + In(col string, values ...any) Database + Where(cond string, args ...any) Database + Columns(cols ...string) Database AllCols() Database - MustCols(...string) Database + MustCols(cols ...string) Database ShowSQL(showSQL bool) Database FindOne(document any, filter ...any) (bool, error) @@ -28,7 +28,7 @@ type Database interface { Query(query string, args ...any) (*sql.Rows, error) Exec(query string, args ...any) (sql.Result, error) - Sync(...any) error + Sync(tables ...any) error Close() error } diff --git a/sql/postgres/postgres.go b/sql/postgres/postgres.go index 3012163..6995572 100644 --- a/sql/postgres/postgres.go +++ b/sql/postgres/postgres.go @@ -133,10 +133,10 @@ func (pg Postgres) Exec(query string, args ...any) (sql.Result, error) { return pg.conn.ExecContext(pg.ctx, query, args...) } -func (p Postgres) Sync(tables ...any) error { +func (pg Postgres) Sync(tables ...any) error { ctx := context.Background() for _, table := range tables { - if err := lib.SyncTable(ctx, p.conn, table); err != nil { + if err := lib.SyncTable(ctx, pg.conn, table); err != nil { return err } }