gosql

package module
v1.2.7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 7, 2020 License: MIT Imports: 11 Imported by: 0

README

GoSQL

Query builder with some handy utility functions.

Documentation

For full documentation see the godoc or GitBook.

Benchmarks

BenchmarkInsert-4        	    836143 ns/op	     400 B/op	      17 allocs/op
BenchmarkUpdate-4        	     22923 ns/op	     488 B/op	      18 allocs/op
BenchmarkSelect-4        	     24934 ns/op	     648 B/op	      26 allocs/op
BenchmarkSelectMany-4    	    127559 ns/op	    6568 B/op	     328 allocs/op
BenchmarkSelectManyPtrs-4	    130752 ns/op	    7976 B/op	     428 allocs/op

Contribute

Make a pull request

Documentation

Index

Examples

Constants

This section is empty.

Variables

View Source
var ErrNotFound = errors.New("no result found")

ErrNotFound is returned when a query for one result returns no results.

Functions

This section is empty.

Types

type CountQuery

type CountQuery struct {
	// contains filtered or unexported fields
}

CountQuery is a query for counting rows in a table.

func (*CountQuery) Exec

func (cq *CountQuery) Exec() (int64, error)

Exec executes the query.

func (*CountQuery) Join

func (cq *CountQuery) Join(join string) *CountQuery

Join joins another table to this query.

func (*CountQuery) OrWhere

func (cq *CountQuery) OrWhere(condition string, args ...interface{}) *CountQuery

OrWhere specifies which rows will be returned.

func (*CountQuery) String

func (cq *CountQuery) String() string

String returns the string representation of CountQuery.

func (*CountQuery) Where

func (cq *CountQuery) Where(condition string, args ...interface{}) *CountQuery

Where specifies which rows will be returned.

type DB

type DB struct {
	// contains filtered or unexported fields
}

DB is a wrapper around sql.DB.

func New

func New(db *sql.DB) *DB

New returns a reference to DB.

func (*DB) Begin

func (db *DB) Begin() (*sql.Tx, error)

Begin starts a transaction.

func (*DB) Count

func (db *DB) Count(table string, count string) *CountQuery

Count starts a query for counting rows in a table.

func (*DB) Delete

func (db *DB) Delete(obj interface{}) (sql.Result, error)

Delete deletes a row from the database.

Example
package main

import (
	"database/sql"
	"fmt"
	"os"

	_ "github.com/mattn/go-sqlite3"
	"github.com/twharmon/gosql"
)

func main() {
	os.Remove("/tmp/foo.db")
	sqliteDB, _ := sql.Open("sqlite3", "/tmp/foo.db")
	sqliteDB.Exec("create table user (id integer not null primary key, name text); delete from user")
	db := gosql.New(sqliteDB)
	type User struct {
		ID   int `gosql:"primary"`
		Name string
	}
	db.Register(User{})
	user := User{ID: 5, Name: "Gopher"}
	db.Insert(&user)
	db.Delete(&user)
	var foo User
	err := db.Select("*").Get(&foo)
	fmt.Println(err)
}
Output:

no result found

func (*DB) Exec

func (db *DB) Exec(query string, args ...interface{}) (sql.Result, error)

Exec is a wrapper around sql.DB.Exec().

func (*DB) Insert

func (db *DB) Insert(obj interface{}) (sql.Result, error)

Insert insterts a row in the database.

Example
package main

import (
	"database/sql"
	"fmt"
	"os"

	_ "github.com/mattn/go-sqlite3"
	"github.com/twharmon/gosql"
)

func main() {
	os.Remove("/tmp/foo.db")
	sqliteDB, _ := sql.Open("sqlite3", "/tmp/foo.db")
	sqliteDB.Exec("create table user (id integer not null primary key, name text); delete from user")
	db := gosql.New(sqliteDB)
	type User struct {
		ID   int `gosql:"primary"`
		Name string
	}
	db.Register(User{})
	db.Insert(&User{Name: "Gopher"})
	var user User
	db.Select("*").Get(&user)
	fmt.Println(user.Name)
}
Output:

Gopher

func (*DB) ManualDelete

func (db *DB) ManualDelete(table string) *DeleteQuery

ManualDelete starts a query for manually deleting rows in a table.

func (*DB) ManualUpdate

func (db *DB) ManualUpdate(table string) *UpdateQuery

ManualUpdate starts a query for manually updating rows in a table.

func (*DB) Query

func (db *DB) Query(query string, args ...interface{}) (*sql.Rows, error)

Query is a wrapper around sql.DB.Query().

func (*DB) QueryRow

func (db *DB) QueryRow(query string, args ...interface{}) *sql.Row

QueryRow is a wrapper around sql.DB.QueryRow().

func (*DB) Register

func (db *DB) Register(structs ...interface{}) error

Register registers structs for database queries.

func (*DB) Select

func (db *DB) Select(fields ...string) *SelectQuery

Select selects columns of a table.

func (*DB) Update

func (db *DB) Update(obj interface{}) (sql.Result, error)

Update updates a row in the database.

Example
package main

import (
	"database/sql"
	"fmt"
	"os"

	_ "github.com/mattn/go-sqlite3"
	"github.com/twharmon/gosql"
)

func main() {
	os.Remove("/tmp/foo.db")
	sqliteDB, _ := sql.Open("sqlite3", "/tmp/foo.db")
	sqliteDB.Exec("create table user (id integer not null primary key, name text, email text); delete from user")
	db := gosql.New(sqliteDB)
	type User struct {
		ID    int `gosql:"primary"`
		Name  string
		Email string
	}
	db.Register(User{})
	user := User{ID: 5, Name: "Gopher", Email: "gopher@example.com"}
	db.Insert(&user)
	user.Name = "Gofer"
	user.Email = "gofer@example.com"
	db.Update(&user)
	var foo User
	db.Select("*").Get(&foo)
	fmt.Println(foo.Name, foo.Email)
}
Output:

Gofer gofer@example.com

type DeleteQuery

type DeleteQuery struct {
	// contains filtered or unexported fields
}

DeleteQuery is a query for deleting rows from a table.

func (*DeleteQuery) Exec

func (dq *DeleteQuery) Exec() (sql.Result, error)

Exec executes the query.

func (*DeleteQuery) Join

func (dq *DeleteQuery) Join(join string) *DeleteQuery

Join joins another table to this query.

func (*DeleteQuery) OrWhere

func (dq *DeleteQuery) OrWhere(condition string, args ...interface{}) *DeleteQuery

OrWhere specifies which rows will be returned.

func (*DeleteQuery) String

func (dq *DeleteQuery) String() string

String returns the string representation of DeleteQuery.

func (*DeleteQuery) Where

func (dq *DeleteQuery) Where(condition string, args ...interface{}) *DeleteQuery

Where specifies which rows will be returned.

type NullInt64 added in v1.2.5

type NullInt64 struct {
	Int64 int64
	Valid bool
}

NullInt64 holds an int64 value that might be null in the database.

func (NullInt64) MarshalJSON added in v1.2.5

func (n NullInt64) MarshalJSON() ([]byte, error)

MarshalJSON implements the Marshaler interface.

func (*NullInt64) Scan added in v1.2.5

func (n *NullInt64) Scan(value interface{}) error

Scan implements the Scanner interface.

func (*NullInt64) UnmarshalJSON added in v1.2.5

func (n *NullInt64) UnmarshalJSON(data []byte) error

UnmarshalJSON implements the Unmarshaler interface.

func (NullInt64) Value added in v1.2.5

func (n NullInt64) Value() (driver.Value, error)

Value implements the driver Valuer interface.

type NullString added in v1.2.5

type NullString struct {
	String string
	Valid  bool
}

NullString holds an string value that might be null in the database.

func (NullString) MarshalJSON added in v1.2.5

func (n NullString) MarshalJSON() ([]byte, error)

MarshalJSON implements the Marshaler interface.

func (*NullString) Scan added in v1.2.5

func (n *NullString) Scan(value interface{}) error

Scan implements the Scanner interface.

func (*NullString) UnmarshalJSON added in v1.2.5

func (n *NullString) UnmarshalJSON(data []byte) error

UnmarshalJSON implements the Unmarshaler interface.

func (NullString) Value added in v1.2.5

func (n NullString) Value() (driver.Value, error)

Value implements the driver Valuer interface.

type NullTime added in v1.2.5

type NullTime struct {
	Time  time.Time
	Valid bool
}

NullTime holds an time.Time value that might be null in the database.

func (NullTime) MarshalJSON added in v1.2.5

func (n NullTime) MarshalJSON() ([]byte, error)

MarshalJSON implements the Marshaler interface.

func (*NullTime) Scan added in v1.2.5

func (n *NullTime) Scan(value interface{}) error

Scan implements the Scanner interface.

func (*NullTime) UnmarshalJSON added in v1.2.5

func (n *NullTime) UnmarshalJSON(data []byte) error

UnmarshalJSON implements the Unmarshaler interface.

func (NullTime) Value added in v1.2.5

func (n NullTime) Value() (driver.Value, error)

Value implements the driver Valuer interface.

type SelectQuery

type SelectQuery struct {
	// contains filtered or unexported fields
}

SelectQuery holds information for a select query.

func (*SelectQuery) Get added in v1.2.6

func (sq *SelectQuery) Get(out interface{}) error

Get sets the result of the query to out. Get() can only take a pointer to a struct, a pointer to a slice of structs, or a pointer to a slice of pointers to structs.

func (*SelectQuery) Join

func (sq *SelectQuery) Join(join string) *SelectQuery

Join joins another table to this query.

func (*SelectQuery) Limit

func (sq *SelectQuery) Limit(limit int64) *SelectQuery

Limit limits the number of results returned by the query.

func (*SelectQuery) Offset

func (sq *SelectQuery) Offset(offset int64) *SelectQuery

Offset specifies the offset value in the query.

func (*SelectQuery) OrWhere

func (sq *SelectQuery) OrWhere(condition string, args ...interface{}) *SelectQuery

OrWhere specifies which rows will be returned.

func (*SelectQuery) OrderBy

func (sq *SelectQuery) OrderBy(orderBy string) *SelectQuery

OrderBy orders the results by the given criteria.

func (*SelectQuery) String

func (sq *SelectQuery) String() string

String returns the string representation of SelectQuery.

func (*SelectQuery) Where

func (sq *SelectQuery) Where(condition string, args ...interface{}) *SelectQuery

Where specifies which rows will be returned.

type UpdateQuery

type UpdateQuery struct {
	// contains filtered or unexported fields
}

UpdateQuery holds information for an update query.

func (*UpdateQuery) Exec

func (uq *UpdateQuery) Exec() (sql.Result, error)

Exec executes the query.

func (*UpdateQuery) Join

func (uq *UpdateQuery) Join(join string) *UpdateQuery

Join joins another table to this query.

func (*UpdateQuery) OrWhere

func (uq *UpdateQuery) OrWhere(condition string, args ...interface{}) *UpdateQuery

OrWhere specifies which rows will be returned.

func (*UpdateQuery) Set

func (uq *UpdateQuery) Set(set string, args ...interface{}) *UpdateQuery

Set specifies how to update a row in a table.

func (*UpdateQuery) String

func (uq *UpdateQuery) String() string

String returns the string representation of UpdateQuery.

func (*UpdateQuery) Where

func (uq *UpdateQuery) Where(condition string, args ...interface{}) *UpdateQuery

Where specifies which rows will be returned.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL