Documentation
¶
Index ¶
- Constants
- Variables
- func Delete(db DB, model interface{}) error
- func Insert(db DB, v ...interface{}) error
- func Pagination(values url.Values) func(*Query) (*Query, error)
- func Q(query string, params ...interface{}) queryParamsAppender
- func Scan(values ...interface{}) valuesModel
- func Select(db DB, model interface{}) error
- func URLFilters(urlValues url.Values) func(*Query) (*Query, error)
- func Update(db DB, model ...interface{}) error
- type ColumnScanner
- type CreateTableOptions
- type DB
- type Discard
- func (Discard) AddModel(_ ColumnScanner) error
- func (Discard) AfterDelete(_ DB) error
- func (Discard) AfterInsert(_ DB) error
- func (Discard) AfterQuery(_ DB) error
- func (Discard) AfterSelect(_ DB) error
- func (Discard) AfterUpdate(_ DB) error
- func (Discard) BeforeDelete(_ DB) error
- func (Discard) BeforeInsert(_ DB) error
- func (Discard) BeforeUpdate(_ DB) error
- func (Discard) Init() error
- func (d Discard) NewModel() ColumnScanner
- func (Discard) ScanColumn(colIdx int, colName string, b []byte) error
- type DropTableOptions
- type Field
- func (f *Field) AppendValue(b []byte, strct reflect.Value, quote int) []byte
- func (f *Field) Copy() *Field
- func (f *Field) HasFlag(flag uint8) bool
- func (f *Field) IsZero(strct reflect.Value) bool
- func (f *Field) OmitZero(strct reflect.Value) bool
- func (f *Field) ScanValue(strct reflect.Value, b []byte) error
- func (f *Field) SetFlag(flag uint8)
- func (f *Field) Value(strct reflect.Value) reflect.Value
- type FormatAppender
- type Formatter
- func (f Formatter) Append(dst []byte, src string, params ...interface{}) []byte
- func (f Formatter) AppendBytes(dst, src []byte, params ...interface{}) []byte
- func (f Formatter) FormatQuery(dst []byte, query string, params ...interface{}) []byte
- func (f *Formatter) SetParam(param string, value interface{})
- func (f Formatter) String() string
- func (f *Formatter) WithParam(param string, value interface{}) Formatter
- type Method
- type Model
- type Pager
- type Query
- func (q *Query) AppendQuery(b []byte) ([]byte, error)
- func (q *Query) Apply(fn func(*Query) (*Query, error)) *Query
- func (q *Query) Column(columns ...string) *Query
- func (q *Query) ColumnExpr(expr string, params ...interface{}) *Query
- func (q *Query) Copy() *Query
- func (q *Query) Count() (int, error)
- func (q *Query) CountEstimate(threshold int) (int, error)
- func (q *Query) CreateTable(opt *CreateTableOptions) (Result, error)
- func (q *Query) DB(db DB) *Query
- func (q *Query) Delete(values ...interface{}) (Result, error)
- func (q *Query) DropTable(opt *DropTableOptions) (Result, error)
- func (q *Query) Exec(query interface{}, params ...interface{}) (Result, error)
- func (q *Query) ExecOne(query interface{}, params ...interface{}) (Result, error)
- func (q *Query) First() error
- func (q *Query) FormatQuery(b []byte, query string, params ...interface{}) []byte
- func (q *Query) Group(columns ...string) *Query
- func (q *Query) GroupExpr(group string, params ...interface{}) *Query
- func (q *Query) Having(having string, params ...interface{}) *Query
- func (q *Query) Insert(values ...interface{}) (Result, error)
- func (q *Query) Join(join string, params ...interface{}) *Query
- func (q *Query) Last() error
- func (q *Query) Limit(n int) *Query
- func (q *Query) Model(model ...interface{}) *Query
- func (q *Query) New() *Query
- func (q *Query) Offset(n int) *Query
- func (q *Query) OnConflict(s string, params ...interface{}) *Query
- func (q *Query) Order(orders ...string) *Query
- func (q *Query) OrderExpr(order string, params ...interface{}) *Query
- func (q *Query) Query(model, query interface{}, params ...interface{}) (Result, error)
- func (q *Query) QueryOne(model, query interface{}, params ...interface{}) (Result, error)
- func (q *Query) Relation(name string, apply func(*Query) (*Query, error)) *Query
- func (q *Query) Returning(s string, params ...interface{}) *Query
- func (q *Query) Select(values ...interface{}) error
- func (q *Query) SelectAndCount(values ...interface{}) (count int, err error)
- func (q *Query) SelectAndCountEstimate(threshold int, values ...interface{}) (count int, err error)
- func (q *Query) SelectOrInsert(values ...interface{}) (inserted bool, err error)
- func (q *Query) Set(set string, params ...interface{}) *Query
- func (q *Query) Table(tables ...string) *Query
- func (q *Query) TableExpr(expr string, params ...interface{}) *Query
- func (q *Query) Update(values ...interface{}) (Result, error)
- func (q *Query) Where(where string, params ...interface{}) *Query
- func (q *Query) WhereGroup(fn func(*Query) (*Query, error)) *Query
- func (q *Query) WhereIn(where string, params ...interface{}) *Query
- func (q *Query) WhereOr(where string, params ...interface{}) *Query
- func (q *Query) With(name string, subq *Query) *Query
- func (q *Query) WrapWith(name string) *Query
- type QueryAppender
- type QueryFormatter
- type Relation
- type Result
- type Table
- func (t *Table) AddField(field *Field)
- func (t *Table) AppendParam(dst []byte, strct reflect.Value, name string) ([]byte, bool)
- func (t *Table) GetField(fieldName string) (*Field, error)
- func (t *Table) HasField(field string) bool
- func (t *Table) HasFlag(flag uint8) bool
- func (t *Table) SetFlag(flag uint8)
Constants ¶
const ( PrimaryKeyFlag = uint8(1) << iota ForeignKeyFlag NotNullFlag UniqueFlag ArrayFlag )
const ( AfterQueryHookFlag = uint8(1) << iota AfterSelectHookFlag BeforeInsertHookFlag AfterInsertHookFlag BeforeUpdateHookFlag AfterUpdateHookFlag BeforeDeleteHookFlag AfterDeleteHookFlag )
const ( HasOneRelation = 1 << iota BelongsToRelation HasManyRelation Many2ManyRelation )
Variables ¶
var Tables = newTables()
Functions ¶
func Pagination ¶
Pagination is used with Query.Apply to set LIMIT and OFFSET from the URL values:
- ?limit=10 - sets q.Limit(10), max limit is 1000.
- ?page=5 - sets q.Offset((page - 1) * limit), max offset is 1000000.
func URLFilters ¶
URLFilters is used with Query.Apply to add WHERE clauses from the URL values:
- ?foo=bar - Where(`"foo" = 'bar'`)
- ?foo=hello&foo=world - Where(`"foo" IN ('hello','world')`)
- ?foo__exclude=bar - Where(`"foo" != 'bar'`)
- ?foo__ieq=bar - Where(`"foo" ILIKE 'bar'`)
- ?foo__match=bar - Where(`"foo" SIMILAR TO 'bar'`)
- ?foo__gt=42 - Where(`"foo" > 42`)
- ?foo__gte=42 - Where(`"foo" >= 42`)
- ?foo__lt=42 - Where(`"foo" < 42`)
- ?foo__lte=42 - Where(`"foo" <= 42`)
Types ¶
type ColumnScanner ¶
type ColumnScanner interface {
// Scan assigns a column value from a row.
//
// An error should be returned if the value can not be stored
// without loss of information.
ScanColumn(colIdx int, colName string, b []byte) error
}
ColumnScanner is used to scan column values.
type CreateTableOptions ¶
type DB ¶
type DB interface {
Model(model ...interface{}) *Query
Select(model interface{}) error
Insert(model ...interface{}) error
Update(model ...interface{}) error
Delete(model interface{}) error
Exec(query interface{}, params ...interface{}) (Result, error)
ExecOne(query interface{}, params ...interface{}) (Result, error)
Query(coll, query interface{}, params ...interface{}) (Result, error)
QueryOne(model, query interface{}, params ...interface{}) (Result, error)
QueryFormatter
}
DB is a common interface for pg.DB and pg.Tx types.
type Discard ¶
type Discard struct {
// contains filtered or unexported fields
}
func (Discard) AddModel ¶
func (Discard) AddModel(_ ColumnScanner) error
func (Discard) AfterDelete ¶
func (Discard) AfterInsert ¶
func (Discard) AfterQuery ¶
func (Discard) AfterSelect ¶
func (Discard) AfterUpdate ¶
func (Discard) BeforeDelete ¶
func (Discard) BeforeInsert ¶
func (Discard) BeforeUpdate ¶
func (Discard) NewModel ¶
func (d Discard) NewModel() ColumnScanner
type DropTableOptions ¶
type DropTableOptions struct {
IfExists bool
}
type Field ¶
type Field struct {
Type reflect.Type
GoName string // struct field name, e.g. Id
SQLName string // SQL name, .e.g. id
Column types.Q // escaped SQL name
SQLType string
Index []int
// contains filtered or unexported fields
}
func (*Field) AppendValue ¶
type FormatAppender ¶
type FormatAppender interface {
AppendFormat([]byte, QueryFormatter) []byte
}
type Formatter ¶
type Formatter struct {
// contains filtered or unexported fields
}
func (Formatter) AppendBytes ¶
func (Formatter) FormatQuery ¶
type Method ¶
type Method struct {
Index int
// contains filtered or unexported fields
}
func (*Method) AppendValue ¶
type Model ¶
type Model interface {
ColumnScanner
Init() error
// NewModel returns ColumnScanner that is used to scan columns
// from the current row.
NewModel() ColumnScanner
// AddModel adds ColumnScanner to the Collection.
AddModel(ColumnScanner) error
AfterQuery(DB) error
AfterSelect(DB) error
BeforeInsert(DB) error
AfterInsert(DB) error
BeforeUpdate(DB) error
AfterUpdate(DB) error
BeforeDelete(DB) error
AfterDelete(DB) error
}
type Pager ¶
type Pager struct {
Limit int
Offset int
// Default max limit is 1000.
MaxLimit int
// Default max offset is 1000000.
MaxOffset int
// contains filtered or unexported fields
}
func (*Pager) SetURLValues ¶
type Query ¶
type Query struct {
// contains filtered or unexported fields
}
func (*Query) Column ¶
Column adds column to the Query quoting it according to PostgreSQL rules. ColumnExpr can be used to bypass quoting restriction.
func (*Query) ColumnExpr ¶
ColumnExpr adds column expression to the Query.
func (*Query) Count ¶
Count returns number of rows matching the query using count aggregate function.
func (*Query) CountEstimate ¶
CountEstimate uses EXPLAIN to get estimated number of rows matching the query. If that number is bigger than the threshold it returns the estimation. Otherwise it executes another query using count aggregate function and returns the result.
func (*Query) CreateTable ¶
func (q *Query) CreateTable(opt *CreateTableOptions) (Result, error)
func (*Query) FormatQuery ¶
func (*Query) OnConflict ¶
func (*Query) Order ¶
Order adds sort order to the Query quoting column name. OrderExpr can be used to bypass quoting restriction.
func (*Query) SelectAndCount ¶
SelectAndCount runs Select and Count in two goroutines, waits for them to finish and returns the result.
func (*Query) SelectAndCountEstimate ¶
SelectAndCountEstimate runs Select and CountEstimate in two goroutines, waits for them to finish and returns the result.
func (*Query) SelectOrInsert ¶
SelectOrInsert selects the model inserting one if it does not exist.
func (*Query) WhereGroup ¶
WhereGroup encloses conditions added in the function in parentheses.
q.Where("TRUE").
WhereGroup(func(q *orm.Query) (*orm.Query, error)) {
q = q.WhereOr("FALSE").
WhereOr("TRUE").
return q, nil
})
generates
WHERE TRUE AND (FALSE OR TRUE)
func (*Query) WhereIn ¶
WhereIn is a shortcut for Where and pg.In to work with IN operator:
WhereIn("id IN (?)", 1, 2, 3)
type QueryAppender ¶
type QueryAppender interface {
Copy() QueryAppender
Query() *Query
AppendQuery(dst []byte) ([]byte, error)
}
type QueryFormatter ¶
type Result ¶
type Result interface {
Model() Model
// RowsAffected returns the number of rows affected by SELECT, INSERT, UPDATE,
// or DELETE queries. It returns -1 if query can't possibly affect any rows,
// e.g. in case of CREATE or SHOW queries.
RowsAffected() int
// RowsReturned returns the number of rows returned by the query.
RowsReturned() int
}
A Result summarizes an executed SQL command.
func CreateTable ¶
func CreateTable(db DB, model interface{}, opt *CreateTableOptions) (Result, error)
type Table ¶
type Table struct {
Type reflect.Type
TypeName string
Name types.Q
Alias types.Q
ModelName string
Fields []*Field
// TODO: PKs and Columns should be slices of Fields
PKs []*Field
Columns []*Field
FieldsMap map[string]*Field
Methods map[string]*Method
Relations map[string]*Relation
// contains filtered or unexported fields
}
func (*Table) AppendParam ¶
Source Files
¶
- count_estimate.go
- create_table.go
- delete.go
- drop_table.go
- field.go
- format.go
- hook.go
- insert.go
- join.go
- model.go
- model_discard.go
- model_scan.go
- model_slice.go
- model_table.go
- model_table_m2m.go
- model_table_many.go
- model_table_slice.go
- model_table_struct.go
- orm.go
- query.go
- relation.go
- result.go
- select.go
- table.go
- table_params.go
- tables.go
- tag.go
- update.go
- url_values.go
- util.go
- zero.go