sqrl

package module
v0.0.0-...-e7c25d5 Latest Latest
Warning

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

Go to latest
Published: Jun 7, 2023 License: MIT Imports: 12 Imported by: 0

README

sqrl - fat-free version of squirrel - fluent SQL generator for Go

Non thread safe fork of squirrel. The same handy fluffy helper, but with extra letters removed :)

import "github.com/elgris/sqrl"

GoDoc Build Status

Requires Go 1.8 and higher

Inspired by

Why to make good squirrel lighter?

Ask benchmarks about that ;). Squirrel is good, reliable and thread-safe with it's immutable query builder. Although immutability is nice, it's resource consuming and sometimes redundant. As authors of dbr say: "100% of our application code was written without the need for this".

Why not to use dbr then?

Although, dbr's query builder is proven to be much faster than squirrel and even faster than sqrl, it doesn't have all syntax sugar. Especially I miss support of JOINs, subqueries and aliases.

Usage

sqrl is not an ORM., it helps you build SQL queries from composable parts. sqrl is non thread safe. SQL builders change their state, so using the same builder in parallel is dangerous.

It's very easy to switch between original squirrel and sqrl, because there is no change in interface:

import sq "github.com/elgris/sqrl" // you can easily use github.com/lann/squirrel here

users := sq.Select("*").From("users").Join("emails USING (email_id)")

active := users.Where(sq.Eq{"deleted_at": nil})

sql, args, err := active.ToSql()

sql == "SELECT * FROM users JOIN emails USING (email_id) WHERE deleted_at IS NULL"
sql, args, err := sq.
    Insert("users").Columns("name", "age").
    Values("moe", 13).Values("larry", sq.Expr("? + 5", 12)).
    ToSql()

sql == "INSERT INTO users (name,age) VALUES (?,?),(?,? + 5)"

Like squirrel, sqrl can execute queries directly:

stooges := users.Where(sq.Eq{"username": []string{"moe", "larry", "curly", "shemp"}})
three_stooges := stooges.Limit(3)
rows, err := three_stooges.RunWith(db).Query()

// Behaves like:
rows, err := db.Query("SELECT * FROM users WHERE username IN (?,?,?,?) LIMIT 3", "moe", "larry", "curly", "shemp")

Build conditional queries with ease:

if len(q) > 0 {
    users = users.Where("name LIKE ?", q)
}
MySQL-specific functions
Multi-table delete
sql, args, err := sq.Delete("a1", "a2").
    From("z1 AS a1").
    JoinClause("INNER JOIN a2 ON a1.id = a2.ref_id").
    Where("b = ?", 1).
    ToSql()
sql, args, err := sq.Delete("a1").
    Using("a2").
    Where("a1.id = a2.ref_id AND a2.num = ?", 42).
    ToSql()
PostgreSQL-specific functions

Package pg contains PostgreSQL specific operators.

Update from
sql, args, err := sq.Update("a1").
    Set("foo", 1).
    From("a2").
    Where("id = a2.ref_id AND a2.num = ?", 42).
    ToSql()
Delete using
sql, args, err := sq.Delete("a1").
    Using("a2").
    Where("id = a2.ref_id AND a2.num = ?", 42).
    ToSql()
Returning clause
sql, args, err := Update("a").
    Set("foo", 1).
    Where("id = ?", 42).
    Returning("bar").
    ToSql()
JSON values

JSON and JSONB use json.Marshal to serialize values and cast them to appropriate column type.

sql, args, err := sq.Insert("posts").
    Columns("content", "tags").
    Values("Lorem Ipsum", pg.JSONB([]string{"foo", "bar"})).
    ToSql()
Array values

Array serializes single and multidimensional slices of string, int, float32 and float64 values.

sql, args, err := sqrl.Insert("posts").
    Columns("content", "tags").
    Values("Lorem Ipsum", pg.Array([]string{"foo", "bar"})).
    ToSql()

License

Sqrl is released under the MIT License.

Documentation

Overview

package sqrl provides a fluent SQL generator.

See https://github.com/elgris/sqrl for examples.

Index

Constants

This section is empty.

Variables

View Source
var (
	// Question is a PlaceholderFormat instance that leaves placeholders as
	// question marks.
	Question = questionFormat{}

	// Dollar is a PlaceholderFormat instance that replaces placeholders with
	// dollar-prefixed positional placeholders (e.g. $1, $2, $3).
	Dollar = dollarFormat{}
)
View Source
var ErrRunnerNotQueryRunner = fmt.Errorf("cannot QueryRow; Runner is not a QueryRower")

ErrRunnerNotQueryRunner is returned by QueryRow if the RunWith value doesn't implement QueryRower.

View Source
var ErrRunnerNotQueryRunnerContext = fmt.Errorf("cannot QueryRow; Runner is not a QueryRowerContext")

ErrRunnerNotQueryRunnerContext is returned by QueryRowContext if the RunWith value doesn't implement QueryRowerContext.

View Source
var ErrRunnerNotSet = fmt.Errorf("cannot run; no Runner set (RunWith)")

ErrRunnerNotSet is returned by methods that need a Runner if it isn't set.

View Source
var StatementBuilder = StatementBuilderType{/* contains filtered or unexported fields */}

StatementBuilder is a basic statement builder, holds global configuration options like placeholder format or SQL runner

Functions

func Alias

func Alias(expr Sqlizer, alias string) aliasExpr

Alias allows to define alias for column in SelectBuilder. Useful when column is defined as complex expression like IF or CASE Ex:

.Column(Alias(caseStmt, "case_column"))

func ExecWith

func ExecWith(db Execer, s Sqlizer) (res sql.Result, err error)

ExecWith Execs the SQL returned by s with db.

func ExecWithContext

func ExecWithContext(ctx context.Context, db ExecerContext, s Sqlizer) (res sql.Result, err error)

ExecWithContext Execs the SQL returned by s with db.

func Expr

func Expr(sql string, args ...interface{}) expr

Expr builds value expressions for InsertBuilder and UpdateBuilder.

Ex:

.Values(Expr("FROM_UNIXTIME(?)", t))

func ExtractColumns

func ExtractColumns(builder Sqlizer) []string

func ExtractTableNames

func ExtractTableNames(builder Sqlizer) []string

func ExtractValues

func ExtractValues(builder Sqlizer) [][]interface{}

func LastInsertId

func LastInsertId(res sql.Result, err error) (int64, error)

LastInsertId returns last insert id or error from query execution

func Placeholders

func Placeholders(count int) string

Placeholders returns a string with count ? placeholders joined with commas.

func QueryWith

func QueryWith(db Queryer, s Sqlizer) (rows *sql.Rows, err error)

QueryWith Querys the SQL returned by s with db.

func QueryWithContext

func QueryWithContext(ctx context.Context, db QueryerContext, s Sqlizer) (rows *sql.Rows, err error)

QueryWithContext Querys the SQL returned by s with db.

func RowsAffected

func RowsAffected(res sql.Result, err error) (int64, error)

RowsAffected returns number of rows affected or error from query execution

Types

type And

type And conj

And is syntactic sugar that glues where/having parts with AND clause Ex:

.Where(And{Expr("a > ?", 15), Expr("b < ?", 20), Expr("c is TRUE")})

func (And) ToSql

func (a And) ToSql() (string, []interface{}, error)

ToSql builds the query into a SQL string and bound args.

type BaseRunner

type BaseRunner interface {
	Execer
	ExecerContext
	Queryer
	QueryerContext
}

BaseRunner groups the Execer and Queryer interfaces.

type CaseBuilder

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

CaseBuilder builds SQL CASE construct which could be used as parts of queries.

func Case

func Case(what ...interface{}) *CaseBuilder

Case returns a new CaseBuilder "what" represents case value

func (*CaseBuilder) Else

func (b *CaseBuilder) Else(expr interface{}) *CaseBuilder

Else sets optional "ELSE ..." part for CASE construct

func (*CaseBuilder) ToSql

func (b *CaseBuilder) ToSql() (sqlStr string, args []interface{}, err error)

ToSql implements Sqlizer

func (*CaseBuilder) When

func (b *CaseBuilder) When(when interface{}, then interface{}) *CaseBuilder

When adds "WHEN ... THEN ..." part to CASE construct

type DBProxy

DBProxy groups the Execer, Queryer, QueryRower, and Preparer interfaces.

func NewStmtCacher

func NewStmtCacher(prep Preparer) DBProxy

NewStmtCacher returns a DBProxy wrapping prep that caches Prepared Stmts.

Stmts are cached based on the string value of their queries.

type DBProxyBeginner

type DBProxyBeginner interface {
	DBProxy
	Begin() (*sql.Tx, error)
}

DBProxyBeginner describes a DBProxy that can start transactions

func NewStmtCacheProxy

func NewStmtCacheProxy(db *sql.DB) DBProxyBeginner

NewStmtCacheProxy creates new cache proxy for statements

type DeleteBuilder

type DeleteBuilder struct {
	StatementBuilderType
	// contains filtered or unexported fields
}

DeleteBuilder builds SQL DELETE statements.

func Delete

func Delete(what ...string) *DeleteBuilder

Delete returns a new DeleteBuilder for given table names.

See DeleteBuilder.Table.

func NewDeleteBuilder

func NewDeleteBuilder(b StatementBuilderType) *DeleteBuilder

NewDeleteBuilder creates new instance of DeleteBuilder

func (*DeleteBuilder) AppendToSql

func (r *DeleteBuilder) AppendToSql(w io.Writer, args []interface{}) ([]interface{}, error)

func (*DeleteBuilder) Exec

func (b *DeleteBuilder) Exec() (sql.Result, error)

Exec builds and Execs the query with the Runner set by RunWith.

func (*DeleteBuilder) ExecContext

func (b *DeleteBuilder) ExecContext(ctx context.Context) (sql.Result, error)

ExecContext builds and Execs the query with the Runner set by RunWith using given context.

func (*DeleteBuilder) From

func (b *DeleteBuilder) From(from string) *DeleteBuilder

From sets the FROM clause of the query.

func (*DeleteBuilder) Join

func (b *DeleteBuilder) Join(join string) *DeleteBuilder

Join adds a JOIN clause to the query.

func (*DeleteBuilder) JoinClause

func (b *DeleteBuilder) JoinClause(join string) *DeleteBuilder

JoinClause adds a join clause to the query.

func (*DeleteBuilder) LeftJoin

func (b *DeleteBuilder) LeftJoin(join string) *DeleteBuilder

LeftJoin adds a LEFT JOIN clause to the query.

func (*DeleteBuilder) Limit

func (b *DeleteBuilder) Limit(limit uint64) *DeleteBuilder

Limit sets a LIMIT clause on the query.

func (*DeleteBuilder) Offset

func (b *DeleteBuilder) Offset(offset uint64) *DeleteBuilder

Offset sets a OFFSET clause on the query.

func (*DeleteBuilder) OrderBy

func (b *DeleteBuilder) OrderBy(orderBys ...string) *DeleteBuilder

OrderBy adds ORDER BY expressions to the query.

func (*DeleteBuilder) PlaceholderFormat

func (b *DeleteBuilder) PlaceholderFormat(f PlaceholderFormat) *DeleteBuilder

PlaceholderFormat sets PlaceholderFormat (e.g. Question or Dollar) for the query.

func (*DeleteBuilder) Prefix

func (b *DeleteBuilder) Prefix(sql string, args ...interface{}) *DeleteBuilder

Prefix adds an expression to the beginning of the query

func (*DeleteBuilder) Query

func (b *DeleteBuilder) Query() (*sql.Rows, error)

Query builds and Querys the query with the Runner set by RunWith.

func (*DeleteBuilder) QueryContext

func (b *DeleteBuilder) QueryContext(ctx context.Context) (*sql.Rows, error)

QueryContext builds and runs the query using given context and Query command.

func (*DeleteBuilder) QueryRow

func (b *DeleteBuilder) QueryRow() RowScanner

QueryRow builds and QueryRows the query with the Runner set by RunWith.

func (*DeleteBuilder) QueryRowContext

func (b *DeleteBuilder) QueryRowContext(ctx context.Context) RowScanner

QueryRowContext builds and runs the query using given context.

func (*DeleteBuilder) Returning

func (b *DeleteBuilder) Returning(columns ...string) *DeleteBuilder

Returning adds columns to RETURNING clause of the query

DELETE ... RETURNING is PostgreSQL specific extension

func (*DeleteBuilder) ReturningSelect

func (b *DeleteBuilder) ReturningSelect(from *SelectBuilder, alias string) *DeleteBuilder

ReturningSelect adds subquery to RETURNING clause of the query

DELETE ... RETURNING is PostgreSQL specific extension

func (*DeleteBuilder) RightJoin

func (b *DeleteBuilder) RightJoin(join string) *DeleteBuilder

RightJoin adds a RIGHT JOIN clause to the query.

func (*DeleteBuilder) RunWith

func (b *DeleteBuilder) RunWith(runner BaseRunner) *DeleteBuilder

RunWith sets a Runner (like database/sql.DB) to be used with e.g. Exec.

func (*DeleteBuilder) Scan

func (b *DeleteBuilder) Scan(dest ...interface{}) error

Scan is a shortcut for QueryRow().Scan.

func (*DeleteBuilder) Suffix

func (b *DeleteBuilder) Suffix(sql string, args ...interface{}) *DeleteBuilder

Suffix adds an expression to the end of the query

func (*DeleteBuilder) ToSql

func (b *DeleteBuilder) ToSql() (sqlStr string, args []interface{}, err error)

ToSql builds the query into a SQL string and bound args.

func (*DeleteBuilder) Using

func (b *DeleteBuilder) Using(tables ...string) *DeleteBuilder

Using sets the USING clause of the query.

DELETE ... USING is an MySQL/PostgreSQL specific extension

func (*DeleteBuilder) UsingSelect

func (b *DeleteBuilder) UsingSelect(from *SelectBuilder, alias string) *DeleteBuilder

UsingSelect sets a subquery into the USING clause of the query.

DELETE ... USING is an MySQL/PostgreSQL specific extension

func (*DeleteBuilder) What

func (b *DeleteBuilder) What(what ...string) *DeleteBuilder

What sets names of tables to be used for deleting from

func (*DeleteBuilder) Where

func (b *DeleteBuilder) Where(pred interface{}, args ...interface{}) *DeleteBuilder

Where adds WHERE expressions to the query.

type Eq

type Eq map[string]interface{}

Eq is syntactic sugar for use with Where/Having/Set methods. Ex:

.Where(Eq{"id": 1})

func (Eq) ToSql

func (eq Eq) ToSql() (sql string, args []interface{}, err error)

ToSql builds the query into a SQL string and bound args.

type Execer

type Execer interface {
	Exec(query string, args ...interface{}) (sql.Result, error)
}

Execer is the interface that wraps the Exec method.

Exec executes the given query as implemented by database/sql.Exec.

type ExecerContext

type ExecerContext interface {
	ExecContext(ctx context.Context, query string, args ...interface{}) (sql.Result, error)
}

ExecerContext is the interface that wraps the Exec method.

ExecContext executes the given query using given context as implemented by database/sql.ExecContext.

type Gt

type Gt Lt

Gt is syntactic sugar for use with Where/Having/Set methods. Ex:

.Where(Gt{"id": 1}) == "id > 1"

func (Gt) ToSql

func (gt Gt) ToSql() (sql string, args []interface{}, err error)

type GtOrEq

type GtOrEq Lt

GtOrEq is syntactic sugar for use with Where/Having/Set methods. Ex:

.Where(GtOrEq{"id": 1}) == "id >= 1"

func (GtOrEq) ToSql

func (gtOrEq GtOrEq) ToSql() (sql string, args []interface{}, err error)

type InsertBuilder

type InsertBuilder struct {
	StatementBuilderType
	// contains filtered or unexported fields
}

InsertBuilder builds SQL INSERT statements.

func Insert

func Insert(into string) *InsertBuilder

Insert returns a new InsertBuilder with the given table name.

See InsertBuilder.Into.

func NewInsertBuilder

func NewInsertBuilder(b StatementBuilderType) *InsertBuilder

NewInsertBuilder creates new instance of InsertBuilder

func (*InsertBuilder) AppendToSql

func (r *InsertBuilder) AppendToSql(w io.Writer, args []interface{}) ([]interface{}, error)

func (*InsertBuilder) Columns

func (b *InsertBuilder) Columns(columns ...string) *InsertBuilder

Columns adds insert columns to the query.

func (*InsertBuilder) Exec

func (b *InsertBuilder) Exec() (sql.Result, error)

Exec builds and Execs the query with the Runner set by RunWith.

func (*InsertBuilder) ExecContext

func (b *InsertBuilder) ExecContext(ctx context.Context) (sql.Result, error)

ExecContext builds and Execs the query with the Runner set by RunWith using given context.

func (*InsertBuilder) Into

func (b *InsertBuilder) Into(into string) *InsertBuilder

Into sets the INTO clause of the query.

func (*InsertBuilder) Options

func (b *InsertBuilder) Options(options ...string) *InsertBuilder

Options adds keyword options before the INTO clause of the query.

func (*InsertBuilder) PlaceholderFormat

func (b *InsertBuilder) PlaceholderFormat(f PlaceholderFormat) *InsertBuilder

PlaceholderFormat sets PlaceholderFormat (e.g. Question or Dollar) for the query.

func (*InsertBuilder) Prefix

func (b *InsertBuilder) Prefix(sql string, args ...interface{}) *InsertBuilder

Prefix adds an expression to the beginning of the query

func (*InsertBuilder) Query

func (b *InsertBuilder) Query() (*sql.Rows, error)

Query builds and Querys the query with the Runner set by RunWith.

func (*InsertBuilder) QueryContext

func (b *InsertBuilder) QueryContext(ctx context.Context) (*sql.Rows, error)

QueryContext builds and runs the query using given context and Query command.

func (*InsertBuilder) QueryRow

func (b *InsertBuilder) QueryRow() RowScanner

QueryRow builds and QueryRows the query with the Runner set by RunWith.

func (*InsertBuilder) QueryRowContext

func (b *InsertBuilder) QueryRowContext(ctx context.Context) RowScanner

QueryRowContext builds and runs the query using given context.

func (*InsertBuilder) Returning

func (b *InsertBuilder) Returning(columns ...string) *InsertBuilder

Returning adds columns to RETURNING clause of the query

INSERT ... RETURNING is PostgreSQL specific extension

func (*InsertBuilder) ReturningSelect

func (b *InsertBuilder) ReturningSelect(from *SelectBuilder, alias string) *InsertBuilder

ReturningSelect adds subquery to RETURNING clause of the query

INSERT ... RETURNING is PostgreSQL specific extension

func (*InsertBuilder) RunWith

func (b *InsertBuilder) RunWith(runner BaseRunner) *InsertBuilder

RunWith sets a Runner (like database/sql.DB) to be used with e.g. Exec.

func (*InsertBuilder) Scan

func (b *InsertBuilder) Scan(dest ...interface{}) error

Scan is a shortcut for QueryRow().Scan.

func (*InsertBuilder) Select

func (b *InsertBuilder) Select(sb *SelectBuilder) *InsertBuilder

Select set Select clause for insert query If Values and Select are used, then Select has higher priority

func (*InsertBuilder) SetMap

func (b *InsertBuilder) SetMap(clauses map[string]interface{}) *InsertBuilder

SetMap set columns and values for insert builder from a map of column name and value note that it will reset all previous columns and values was set if any

func (*InsertBuilder) Suffix

func (b *InsertBuilder) Suffix(sql string, args ...interface{}) *InsertBuilder

Suffix adds an expression to the end of the query

func (*InsertBuilder) ToSql

func (b *InsertBuilder) ToSql() (sqlStr string, args []interface{}, err error)

ToSql builds the query into a SQL string and bound args.

func (*InsertBuilder) Values

func (b *InsertBuilder) Values(values ...interface{}) *InsertBuilder

Values adds a single row's values to the query.

type Lt

type Lt map[string]interface{}

Lt is syntactic sugar for use with Where/Having/Set methods. Ex:

.Where(Lt{"id": 1})

func (Lt) ToSql

func (lt Lt) ToSql() (sql string, args []interface{}, err error)

type LtOrEq

type LtOrEq Lt

LtOrEq is syntactic sugar for use with Where/Having/Set methods. Ex:

.Where(LtOrEq{"id": 1}) == "id <= 1"

func (LtOrEq) ToSql

func (ltOrEq LtOrEq) ToSql() (sql string, args []interface{}, err error)

type NotEq

type NotEq Eq

NotEq is syntactic sugar for use with Where/Having/Set methods. Ex:

.Where(NotEq{"id": 1}) == "id <> 1"

func (NotEq) ToSql

func (neq NotEq) ToSql() (sql string, args []interface{}, err error)

ToSql builds the query into a SQL string and bound args.

type Or

type Or conj

Or is syntactic sugar that glues where/having parts with OR clause Ex:

.Where(Or{Expr("a > ?", 15), Expr("b < ?", 20), Expr("c is TRUE")})

func (Or) ToSql

func (o Or) ToSql() (string, []interface{}, error)

ToSql builds the query into a SQL string and bound args.

type PlaceholderFormat

type PlaceholderFormat interface {
	ReplacePlaceholders(sql string) (string, error)
}

PlaceholderFormat is the interface that wraps the ReplacePlaceholders method.

ReplacePlaceholders takes a SQL statement and replaces each question mark placeholder with a (possibly different) SQL placeholder.

type Preparer

type Preparer interface {
	Prepare(query string) (*sql.Stmt, error)
	PrepareContext(ctx context.Context, query string) (*sql.Stmt, error)
}

Preparer is the interface that wraps the Prepare method.

Prepare executes the given query as implemented by database/sql.Prepare. Prepare executes the given query as implemented by database/sql.PrepareContext.

type QueryRower

type QueryRower interface {
	QueryRow(query string, args ...interface{}) RowScanner
}

QueryRower is the interface that wraps the QueryRow method.

QueryRow executes the given query as implemented by database/sql.QueryRow.

type QueryRowerContext

type QueryRowerContext interface {
	QueryRowContext(ctx context.Context, query string, args ...interface{}) RowScanner
}

QueryRowerContext is the interface that wraps the QueryRow method.

QueryRowContext executes the given query using given context as implemented by database/sql.QueryRowContext.

type Queryer

type Queryer interface {
	Query(query string, args ...interface{}) (*sql.Rows, error)
}

Queryer is the interface that wraps the Query method.

Query executes the given query as implemented by database/sql.Query.

type QueryerContext

type QueryerContext interface {
	QueryContext(ctx context.Context, query string, args ...interface{}) (*sql.Rows, error)
}

QueryerContext is the interface that wraps the Query method.

QueryerContext executes the given query using given context as implemented by database/sql.QueryContext.

type Row

type Row struct {
	RowScanner
	// contains filtered or unexported fields
}

Row wraps database/sql.Row to let squirrel return new errors on Scan.

func (*Row) Scan

func (r *Row) Scan(dest ...interface{}) error

Scan returns Row.err or calls RowScanner.Scan.

type RowScanner

type RowScanner interface {
	Scan(...interface{}) error
}

RowScanner is the interface that wraps the Scan method.

Scan behaves like database/sql.Row.Scan.

func QueryRowWith

func QueryRowWith(db QueryRower, s Sqlizer) RowScanner

QueryRowWith QueryRows the SQL returned by s with db.

func QueryRowWithContext

func QueryRowWithContext(ctx context.Context, db QueryRowerContext, s Sqlizer) RowScanner

QueryRowWithContext QueryRows the SQL returned by s with db.

type Runner

Runner groups the Execer, Queryer, and QueryRower interfaces.

type SelectBuilder

type SelectBuilder struct {
	StatementBuilderType
	// contains filtered or unexported fields
}

SelectBuilder builds SQL SELECT statements.

func NewSelectBuilder

func NewSelectBuilder(b StatementBuilderType) *SelectBuilder

NewSelectBuilder creates new instance of SelectBuilder

func Select

func Select(columns ...string) *SelectBuilder

Select returns a new SelectBuilder, optionally setting some result columns.

See SelectBuilder.Columns.

func (*SelectBuilder) Column

func (b *SelectBuilder) Column(column interface{}, args ...interface{}) *SelectBuilder

Column adds a result column to the query. Unlike Columns, Column accepts args which will be bound to placeholders in the columns string, for example:

Column("IF(col IN ("+Placeholders(3)+"), 1, 0) as col", 1, 2, 3)

func (*SelectBuilder) Columns

func (b *SelectBuilder) Columns(columns ...string) *SelectBuilder

Columns adds result columns to the query.

func (*SelectBuilder) Distinct

func (b *SelectBuilder) Distinct() *SelectBuilder

Distinct adds a DISTINCT clause to the query.

func (*SelectBuilder) Exec

func (b *SelectBuilder) Exec() (sql.Result, error)

Exec builds and Execs the query with the Runner set by RunWith.

func (*SelectBuilder) ExecContext

func (b *SelectBuilder) ExecContext(ctx context.Context) (sql.Result, error)

ExecContext builds and Execs the query with the Runner set by RunWith using given context.

func (*SelectBuilder) From

func (b *SelectBuilder) From(tables ...string) *SelectBuilder

From sets the FROM clause of the query.

func (*SelectBuilder) FromSelect

func (b *SelectBuilder) FromSelect(from *SelectBuilder, alias string) *SelectBuilder

FromSelect sets a subquery into the FROM clause of the query.

func (*SelectBuilder) GroupBy

func (b *SelectBuilder) GroupBy(groupBys ...string) *SelectBuilder

GroupBy adds GROUP BY expressions to the query.

func (*SelectBuilder) Having

func (b *SelectBuilder) Having(pred interface{}, rest ...interface{}) *SelectBuilder

Having adds an expression to the HAVING clause of the query.

See Where.

func (*SelectBuilder) Join

func (b *SelectBuilder) Join(join string, rest ...interface{}) *SelectBuilder

Join adds a JOIN clause to the query.

func (*SelectBuilder) JoinClause

func (b *SelectBuilder) JoinClause(pred interface{}, args ...interface{}) *SelectBuilder

JoinClause adds a join clause to the query.

func (*SelectBuilder) LeftJoin

func (b *SelectBuilder) LeftJoin(join string, rest ...interface{}) *SelectBuilder

LeftJoin adds a LEFT JOIN clause to the query.

func (*SelectBuilder) Limit

func (b *SelectBuilder) Limit(limit uint64) *SelectBuilder

Limit sets a LIMIT clause on the query.

func (*SelectBuilder) Offset

func (b *SelectBuilder) Offset(offset uint64) *SelectBuilder

Offset sets a OFFSET clause on the query.

func (*SelectBuilder) Options

func (b *SelectBuilder) Options(options ...string) *SelectBuilder

Options adds select option to the query

func (*SelectBuilder) OrderBy

func (b *SelectBuilder) OrderBy(orderBys ...string) *SelectBuilder

OrderBy adds ORDER BY expressions to the query.

func (*SelectBuilder) PlaceholderFormat

func (b *SelectBuilder) PlaceholderFormat(f PlaceholderFormat) *SelectBuilder

PlaceholderFormat sets PlaceholderFormat (e.g. Question or Dollar) for the query.

func (*SelectBuilder) Prefix

func (b *SelectBuilder) Prefix(sql string, args ...interface{}) *SelectBuilder

Prefix adds an expression to the beginning of the query

func (*SelectBuilder) Query

func (b *SelectBuilder) Query() (*sql.Rows, error)

Query builds and Querys the query with the Runner set by RunWith.

func (*SelectBuilder) QueryContext

func (b *SelectBuilder) QueryContext(ctx context.Context) (*sql.Rows, error)

QueryContext builds and Querys the query with the Runner set by RunWith in given context.

func (*SelectBuilder) QueryRow

func (b *SelectBuilder) QueryRow() RowScanner

QueryRow builds and QueryRows the query with the Runner set by RunWith.

func (*SelectBuilder) QueryRowContext

func (b *SelectBuilder) QueryRowContext(ctx context.Context) RowScanner

func (*SelectBuilder) RightJoin

func (b *SelectBuilder) RightJoin(join string, rest ...interface{}) *SelectBuilder

RightJoin adds a RIGHT JOIN clause to the query.

func (*SelectBuilder) RunWith

func (b *SelectBuilder) RunWith(runner BaseRunner) *SelectBuilder

RunWith sets a Runner (like database/sql.DB) to be used with e.g. Exec.

func (*SelectBuilder) Scan

func (b *SelectBuilder) Scan(dest ...interface{}) error

Scan is a shortcut for QueryRow().Scan.

func (*SelectBuilder) Suffix

func (b *SelectBuilder) Suffix(sql string, args ...interface{}) *SelectBuilder

Suffix adds an expression to the end of the query

func (*SelectBuilder) ToSql

func (b *SelectBuilder) ToSql() (sqlStr string, args []interface{}, err error)

ToSql builds the query into a SQL string and bound args.

func (*SelectBuilder) Where

func (b *SelectBuilder) Where(pred interface{}, args ...interface{}) *SelectBuilder

Where adds an expression to the WHERE clause of the query.

Expressions are ANDed together in the generated SQL.

Where accepts several types for its pred argument:

nil OR "" - ignored.

string - SQL expression. If the expression has SQL placeholders then a set of arguments must be passed as well, one for each placeholder.

map[string]interface{} OR Eq - map of SQL expressions to values. Each key is transformed into an expression like "<key> = ?", with the corresponding value bound to the placeholder. If the value is nil, the expression will be "<key> IS NULL". If the value is an array or slice, the expression will be "<key> IN (?,?,...)", with one placeholder for each item in the value. These expressions are ANDed together.

Where will panic if pred isn't any of the above types.

type Sqlizer

type Sqlizer interface {
	ToSql() (string, []interface{}, error)
}

Sqlizer is the interface that wraps the ToSql method.

ToSql returns a SQL representation of the Sqlizer, along with a slice of args as passed to e.g. database/sql.Exec. It can also return an error.

func ExtractWhereParts

func ExtractWhereParts(builder Sqlizer) []Sqlizer

func NewWherePart

func NewWherePart(pred interface{}, args ...interface{}) Sqlizer

type StatementBuilderType

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

StatementBuilderType is the type of StatementBuilder.

func (StatementBuilderType) Delete

func (b StatementBuilderType) Delete(what ...string) *DeleteBuilder

Delete returns a DeleteBuilder for this StatementBuilder.

func (StatementBuilderType) Insert

func (b StatementBuilderType) Insert(into string) *InsertBuilder

Insert returns a InsertBuilder for this StatementBuilder.

func (StatementBuilderType) PlaceholderFormat

PlaceholderFormat sets the PlaceholderFormat field for any child builders.

func (StatementBuilderType) RunWith

RunWith sets the RunWith field for any child builders.

func (StatementBuilderType) Select

func (b StatementBuilderType) Select(columns ...string) *SelectBuilder

Select returns a SelectBuilder for this StatementBuilder.

func (StatementBuilderType) Update

func (b StatementBuilderType) Update(table string) *UpdateBuilder

Update returns a UpdateBuilder for this StatementBuilder.

type UpdateBuilder

type UpdateBuilder struct {
	StatementBuilderType
	// contains filtered or unexported fields
}

UpdateBuilder builds SQL UPDATE statements.

func NewUpdateBuilder

func NewUpdateBuilder(b StatementBuilderType) *UpdateBuilder

NewUpdateBuilder creates new instance of UpdateBuilder

func Update

func Update(table string) *UpdateBuilder

Update returns a new UpdateBuilder with the given table name.

See UpdateBuilder.Table.

func (*UpdateBuilder) AppendToSql

func (r *UpdateBuilder) AppendToSql(w io.Writer, args []interface{}) ([]interface{}, error)

func (*UpdateBuilder) Exec

func (b *UpdateBuilder) Exec() (sql.Result, error)

Exec builds and Execs the query with the Runner set by RunWith.

func (*UpdateBuilder) ExecContext

func (b *UpdateBuilder) ExecContext(ctx context.Context) (sql.Result, error)

ExecContext builds and Execs the query with the Runner set by RunWith using given context.

func (*UpdateBuilder) From

func (b *UpdateBuilder) From(tables ...string) *UpdateBuilder

From adds tables to FROM clause of the query.

UPDATE ... FROM is an PostgreSQL specific extension

func (*UpdateBuilder) FromSelect

func (b *UpdateBuilder) FromSelect(from *SelectBuilder, alias string) *UpdateBuilder

FromSelect adds subquery to FROM clause of the query.

UPDATE ... FROM is an PostgreSQL specific extension

func (*UpdateBuilder) Limit

func (b *UpdateBuilder) Limit(limit uint64) *UpdateBuilder

Limit sets a LIMIT clause on the query.

func (*UpdateBuilder) Offset

func (b *UpdateBuilder) Offset(offset uint64) *UpdateBuilder

Offset sets a OFFSET clause on the query.

func (*UpdateBuilder) OrderBy

func (b *UpdateBuilder) OrderBy(orderBys ...string) *UpdateBuilder

OrderBy adds ORDER BY expressions to the query.

func (*UpdateBuilder) PlaceholderFormat

func (b *UpdateBuilder) PlaceholderFormat(f PlaceholderFormat) *UpdateBuilder

PlaceholderFormat sets PlaceholderFormat (e.g. Question or Dollar) for the query.

func (*UpdateBuilder) Prefix

func (b *UpdateBuilder) Prefix(sql string, args ...interface{}) *UpdateBuilder

Prefix adds an expression to the beginning of the query

func (*UpdateBuilder) Query

func (b *UpdateBuilder) Query() (*sql.Rows, error)

Query builds and Querys the query with the Runner set by RunWith.

func (*UpdateBuilder) QueryContext

func (b *UpdateBuilder) QueryContext(ctx context.Context) (*sql.Rows, error)

QueryContext builds and runs the query using given context and Query command.

func (*UpdateBuilder) QueryRow

func (b *UpdateBuilder) QueryRow() RowScanner

QueryRow builds and QueryRows the query with the Runner set by RunWith.

func (*UpdateBuilder) QueryRowContext

func (b *UpdateBuilder) QueryRowContext(ctx context.Context) RowScanner

QueryRowContext builds and runs the query using given context.

func (*UpdateBuilder) Returning

func (b *UpdateBuilder) Returning(columns ...string) *UpdateBuilder

Returning adds columns to RETURNING clause of the query

UPDATE ... RETURNING is PostgreSQL specific extension

func (*UpdateBuilder) ReturningSelect

func (b *UpdateBuilder) ReturningSelect(from *SelectBuilder, alias string) *UpdateBuilder

ReturningSelect adds subquery to RETURNING clause of the query

UPDATE ... RETURNING is PostgreSQL specific extension

func (*UpdateBuilder) RunWith

func (b *UpdateBuilder) RunWith(runner BaseRunner) *UpdateBuilder

RunWith sets a Runner (like database/sql.DB) to be used with e.g. Exec.

func (*UpdateBuilder) Scan

func (b *UpdateBuilder) Scan(dest ...interface{}) error

Scan is a shortcut for QueryRow().Scan.

func (*UpdateBuilder) Set

func (b *UpdateBuilder) Set(column string, value interface{}) *UpdateBuilder

Set adds SET clauses to the query.

func (*UpdateBuilder) SetMap

func (b *UpdateBuilder) SetMap(clauses map[string]interface{}) *UpdateBuilder

SetMap is a convenience method which calls .Set for each key/value pair in clauses.

func (*UpdateBuilder) Suffix

func (b *UpdateBuilder) Suffix(sql string, args ...interface{}) *UpdateBuilder

Suffix adds an expression to the end of the query

func (*UpdateBuilder) Table

func (b *UpdateBuilder) Table(table string) *UpdateBuilder

Table sets the table to be updateb.

func (*UpdateBuilder) ToSql

func (b *UpdateBuilder) ToSql() (sqlStr string, args []interface{}, err error)

ToSql builds the query into a SQL string and bound args.

func (*UpdateBuilder) Where

func (b *UpdateBuilder) Where(pred interface{}, args ...interface{}) *UpdateBuilder

Where adds WHERE expressions to the query.

See SelectBuilder.Where for more information.

type WherePart

type WherePart part

func (WherePart) Args

func (p WherePart) Args() []interface{}

func (WherePart) Pred

func (p WherePart) Pred() interface{}

func (WherePart) ToSql

func (p WherePart) ToSql() (sql string, args []interface{}, err error)

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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