diff --git a/README.md b/README.md index d651f7b..5e4e93f 100644 --- a/README.md +++ b/README.md @@ -2,20 +2,53 @@ Package `gocqlx` is a `gocql` extension, similar to what `sqlx` is to `database/sql`. -It provides a new type that seamlessly wraps `gocql.Iter` and provide -convenience methods which are useful in the development of database driven -applications. None of the underlying gocql.Iter methods are changed. -Instead all extended behavior is implemented through new methods defined on -wrapper type. - -The wrapper type enables you to bind iterator row into a struct. Under the -hood it uses `sqlx/reflectx` package, models / structs working whit `sqlx` will -also work with `gocqlx`. +It contains wrappers over `gocql` types that provide convenience methods which +are useful in the development of database driven applications. Under the +hood it uses `sqlx/reflectx` package so `sqlx` models will also work with `gocqlx`. ## Installation go get github.com/scylladb/gocqlx +## Features + +Read all rows into a slice. + +```go +var v []*Item +if err := gocqlx.Select(&v, session.Query(`SELECT * FROM items WHERE id = ?`, id)); err != nil { + log.Fatal("select failed", err) +} +``` + +Read a single row into a struct. + +```go +var v Item +if err := gocqlx.Get(&v, session.Query(`SELECT * FROM items WHERE id = ?`, id)); err != nil { + log.Fatal("get failed", err) +} +``` + +Bind named query parameters from a struct or map. + +```go +stmt, names, err := gocqlx.CompileNamedQuery([]byte("INSERT INTO items (id, name) VALUES (:id, :name)")) +if err != nil { + t.Fatal("compile:", err) +} +q := gocqlx.Queryx{ + Query: session.Query(stmt), + Names: names, +} +if err := q.BindStruct(&Item{"id", "name"}); err != nil { + t.Fatal("bind:", err) +} +if err := q.Query.Exec(); err != nil { + log.Fatal("get failed", err) +} +``` + ## Example See [example test](https://github.com/scylladb/gocqlx/blob/master/example_test.go). diff --git a/doc.go b/doc.go index fc07604..e7d64bf 100644 --- a/doc.go +++ b/doc.go @@ -1,26 +1,38 @@ // Package gocqlx is a gocql extension, similar to what sqlx is to database/sql. // -// It provides a new type that seamlessly wraps gocql.Iter and provide -// convenience methods which are useful in the development of database driven -// applications. None of the underlying gocql.Iter methods are changed. -// Instead all extended behavior is implemented through new methods defined on -// wrapper type. +// It contains wrappers over gocql types that provide convenience methods which +// are useful in the development of database driven applications. Under the +// hood it uses sqlx/reflectx package so sqlx models will also work with gocqlx. // -// The wrapper type enables you to bind iterator row into a struct. Under the -// hood it uses sqlx/reflectx package, models / structs working whit sqlx will -// also work with gocqlx. -// -// Example, read all items for a given id +// Example, read all rows into a slice // // var v []*Item // if err := gocqlx.Select(&v, session.Query(`SELECT * FROM items WHERE id = ?`, id)); err != nil { // log.Fatal("select failed", err) // } // -// Example, read first item for a given id +// Example, read a single row into a struct // // var v Item // if err := gocqlx.Get(&v, session.Query(`SELECT * FROM items WHERE id = ?`, id)); err != nil { // log.Fatal("get failed", err) // } +// +// Example, bind named query parameters from a struct or map +// +// stmt, names, err := gocqlx.CompileNamedQuery([]byte("INSERT INTO items (id, name) VALUES (:id, :name)")) +// if err != nil { +// t.Fatal("compile:", err) +// } +// q := gocqlx.Queryx{ +// Query: session.Query(stmt), +// Names: names, +// } +// if err := q.BindStruct(&Item{"id", "name"}); err != nil { +// t.Fatal("bind:", err) +// } +// if err := q.Query.Exec(); err != nil { +// log.Fatal("get failed", err) +// } +// package gocqlx