Documentation ¶
Index ¶
- Constants
- func CreateComposite(db DB, model interface{}, opt *CreateCompositeOptions) error
- func CreateTable(db DB, model interface{}, opt *CreateTableOptions) error
- func Delete(db DB, model interface{}) error
- func DropComposite(db DB, model interface{}, opt *DropCompositeOptions) error
- func DropTable(db DB, model interface{}, opt *DropTableOptions) error
- func ForceDelete(db DB, model interface{}) error
- func Insert(db DB, model ...interface{}) error
- func Pagination(values url.Values) func(*Query) (*Query, error)
- func Q(query string, params ...interface{}) *queryParamsAppender
- func RegisterTable(strct interface{})
- func Scan(values ...interface{}) scanValuesModel
- func Select(db DB, model interface{}) error
- func SetTableNameInflector(fn func(string) string)
- func URLFilters(urlValues url.Values) func(*Query) (*Query, error)
- func Update(db DB, model interface{}) error
- type ColumnScanner
- type CreateCompositeOptions
- type CreateTableOptions
- type DB
- type Discard
- func (m 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) BeforeSelectQuery(db DB, q *Query) (*Query, error)
- func (Discard) BeforeUpdate(_ DB) error
- func (Discard) Init() error
- func (m Discard) NewModel() ColumnScanner
- func (m Discard) ScanColumn(colIdx int, colName string, b []byte) error
- type DropCompositeOptions
- 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() 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) Param(param string) interface{}
- func (f *Formatter) SetParam(param string, value interface{})
- func (f Formatter) String() string
- func (f *Formatter) WithParam(param string, value interface{}) Formatter
- type HooklessModel
- 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) CopyFrom(r io.Reader, query interface{}, params ...interface{}) (Result, error)
- func (q *Query) CopyTo(w io.Writer, query interface{}, params ...interface{}) (Result, error)
- func (q *Query) Count() (int, error)
- func (q *Query) CountEstimate(threshold int) (int, error)
- func (q *Query) CreateTable(opt *CreateTableOptions) error
- func (q *Query) DB(db DB) *Query
- func (q *Query) Delete(values ...interface{}) (Result, error)
- func (q *Query) Deleted() *Query
- func (q *Query) DropTable(opt *DropTableOptions) error
- func (q *Query) ExcludeColumn(columns ...string) *Query
- func (q *Query) Exec(query interface{}, params ...interface{}) (Result, error)
- func (q *Query) ExecOne(query interface{}, params ...interface{}) (Result, error)
- func (q *Query) Exists() (bool, error)
- func (q *Query) First() error
- func (q *Query) For(s string, params ...interface{}) *Query
- func (q *Query) ForEach(fn interface{}) error
- func (q *Query) ForceDelete(values ...interface{}) (Result, 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) JoinOn(condition string, params ...interface{}) *Query
- func (q *Query) JoinOnOr(condition 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, firstErr error)
- func (q *Query) SelectAndCountEstimate(threshold int, values ...interface{}) (count int, firstErr error)
- func (q *Query) SelectOrInsert(values ...interface{}) (inserted bool, _ 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(scan ...interface{}) (Result, error)
- func (q *Query) UpdateNotNull(scan ...interface{}) (Result, error)
- func (q *Query) Value(column string, value string, params ...interface{}) *Query
- func (q *Query) Where(condition string, params ...interface{}) *Query
- func (q *Query) WhereGroup(fn func(*Query) (*Query, error)) *Query
- func (q *Query) WhereIn(where string, values ...interface{}) *Query
- func (q *Query) WhereOr(condition string, params ...interface{}) *Query
- func (q *Query) WhereOrGroup(fn func(*Query) (*Query, error)) *Query
- func (q *Query) WherePK() *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(b []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 uint16) bool
- func (t *Table) RemoveField(field *Field)
- func (t *Table) SetFlag(flag uint16)
- func (t *Table) String() string
- type URLFilter
- type URLValues
- func (v URLValues) Bool(name string) (bool, error)
- func (v URLValues) Duration(name string) (time.Duration, error)
- func (v URLValues) Has(name string) bool
- func (v URLValues) Int(name string) (int, error)
- func (v URLValues) Int64(name string) (int64, error)
- func (v URLValues) MaybeBool(name string) bool
- func (v URLValues) MaybeDuration(name string) time.Duration
- func (v URLValues) MaybeInt(name string) int
- func (v URLValues) MaybeInt64(name string) int64
- func (v URLValues) MaybeTime(name string) time.Time
- func (v URLValues) Pager() *Pager
- func (v URLValues) SetDefault(name string, values ...string)
- func (v URLValues) String(name string) string
- func (v URLValues) Strings(name string) []string
- func (v URLValues) Time(name string) (time.Time, error)
Constants ¶
const ( PrimaryKeyFlag = uint8(1) << iota ForeignKeyFlag NotNullFlag UniqueFlag ArrayFlag )
const ( HasOneRelation = 1 << iota BelongsToRelation HasManyRelation Many2ManyRelation )
const ( AfterQueryHookFlag = uint16(1) << iota BeforeSelectQueryHookFlag AfterSelectHookFlag BeforeInsertHookFlag AfterInsertHookFlag BeforeUpdateHookFlag AfterUpdateHookFlag BeforeDeleteHookFlag AfterDeleteHookFlag )
Variables ¶
This section is empty.
Functions ¶
func CreateComposite ¶ added in v6.14.4
func CreateComposite(db DB, model interface{}, opt *CreateCompositeOptions) error
func CreateTable ¶
func CreateTable(db DB, model interface{}, opt *CreateTableOptions) error
func DropComposite ¶ added in v6.14.4
func DropComposite(db DB, model interface{}, opt *DropCompositeOptions) error
func DropTable ¶ added in v6.1.6
func DropTable(db DB, model interface{}, opt *DropTableOptions) error
func ForceDelete ¶ added in v6.14.4
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 RegisterTable ¶ added in v6.12.0
func RegisterTable(strct interface{})
RegisterTable registers a struct as SQL table. It is usually used to register intermediate table in many to many relationship.
func SetTableNameInflector ¶ added in v6.4.20
SetTableNameInflector overrides the default func that pluralizes model name to get table name, e.g. my_article becomes my_articles.
func URLFilters ¶
URLFilters is a shortcut for NewURLFilter(urlValues).Filters.
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 CreateCompositeOptions ¶ added in v6.14.4
type CreateCompositeOptions struct {
Varchar int // replaces PostgreSQL data type `text` with `varchar(n)`
}
type CreateTableOptions ¶
type CreateTableOptions struct { Temp bool IfNotExists bool Varchar int // replaces PostgreSQL data type `text` with `varchar(n)` // FKConstraints causes CreateTable to create foreign key constraints // for has one relations. ON DELETE hook can be added using tag // `sql:"on_delete:RESTRICT"` on foreign key field. FKConstraints bool }
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 ForceDelete(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) CopyFrom(r io.Reader, query interface{}, params ...interface{}) (Result, error) CopyTo(w io.Writer, query interface{}, params ...interface{}) (Result, error) Context() context.Context 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 (m 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) BeforeSelectQuery ¶ added in v6.14.4
func (Discard) BeforeUpdate ¶
func (Discard) NewModel ¶
func (m Discard) NewModel() ColumnScanner
type DropCompositeOptions ¶ added in v6.14.4
type DropTableOptions ¶ added in v6.1.6
type Field ¶
type Field struct { Field reflect.StructField Type reflect.Type GoName string // struct field name, e.g. Id SQLName string // SQL name, .e.g. id Column types.Q // escaped SQL name, e.g. "id" SQLType string Index []int Default types.Q OnDelete string // 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 HooklessModel ¶ added in v6.6.22
type HooklessModel interface { // Init is responsible to initialize/reset model state. // It is called only once no matter how many rows // were returned by database. Init() error // NewModel returns ColumnScanner that is used to scan columns // from the current row. It is called once for every row. NewModel() ColumnScanner // AddModel adds ColumnScanner created by NewModel to the Collection. AddModel(ColumnScanner) error ColumnScanner }
type Method ¶
type Method struct { Index int // contains filtered or unexported fields }
func (*Method) AppendValue ¶
type Model ¶
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 ¶ added in v6.2.0
type Query ¶
type Query struct {
// contains filtered or unexported fields
}
func (*Query) Column ¶
Column adds a column to the Query quoting it according to PostgreSQL rules. Does not expand params like ?TableAlias etc. ColumnExpr can be used to bypass quoting restriction or for params expansion. Column name can be:
- column_name,
- table_alias.column_name,
- table_alias.*.
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 returned 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) error
func (*Query) Delete ¶
Delete deletes the model. When model has deleted_at column the row is soft deleted instead.
func (*Query) Deleted ¶ added in v6.14.4
Deleted adds `WHERE deleted_at IS NOT NULL` clause for soft deleted models.
func (*Query) DropTable ¶ added in v6.1.6
func (q *Query) DropTable(opt *DropTableOptions) error
func (*Query) ExcludeColumn ¶ added in v6.13.5
ExcludeColumn excludes a column from the list of to be selected columns.
func (*Query) Exists ¶ added in v6.14.3
Exists returns true or false depending if there are any rows matching the query.
func (*Query) First ¶
First sorts rows by primary key and selects the first row. It is a shortcut for:
q.OrderExpr("id ASC").Limit(1)
func (*Query) ForEach ¶ added in v6.12.0
ForEach calls the function for each row returned by the query without loading all rows into the memory. Function accepts a struct, pointer to a struct, orm.Model, or values for columns in a row. Function must return an error.
func (*Query) ForceDelete ¶ added in v6.14.4
Delete forces delete of the model with deleted_at column.
func (*Query) FormatQuery ¶
func (*Query) Last ¶
Last sorts rows by primary key and selects the last row. It is a shortcut for:
q.OrderExpr("id DESC").Limit(1)
func (*Query) OnConflict ¶
func (*Query) Order ¶
Order adds sort order to the Query quoting column name. Does not expand params like ?TableAlias etc. OrderExpr can be used to bypass quoting restriction or for params expansion.
func (*Query) Relation ¶
Relation adds a relation to the query. Relation name can be:
- RelationName to select all columns,
- RelationName.column_name,
- RelationName._ to join relation without selecting relation columns.
func (*Query) SelectAndCount ¶
SelectAndCount runs Select and Count in two goroutines, waits for them to finish and returns the result. If query limit is -1 it does not select any data and only counts the results.
func (*Query) SelectAndCountEstimate ¶
func (q *Query) SelectAndCountEstimate(threshold int, values ...interface{}) (count int, firstErr error)
SelectAndCountEstimate runs Select and CountEstimate in two goroutines, waits for them to finish and returns the result. If query limit is -1 it does not select any data and only counts the results.
func (*Query) SelectOrInsert ¶
SelectOrInsert selects the model inserting one if it does not exist. It returns true when model was inserted.
func (*Query) UpdateNotNull ¶ added in v6.6.1
Update updates the model omitting null columns.
func (*Query) Value ¶ added in v6.9.3
Value overwrites model value for the column in INSERT and UPDATE queries.
func (*Query) WhereGroup ¶ added in v6.2.2
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)
func (*Query) WhereOrGroup ¶ added in v6.4.24
WhereOrGroup encloses conditions added in the function in parentheses.
q.Where("TRUE"). WhereOrGroup(func(q *orm.Query) (*orm.Query, error)) { q = q.Where("FALSE").Where("TRUE"). return q, nil })
generates
WHERE TRUE OR (FALSE AND TRUE)
func (*Query) WherePK ¶ added in v6.6.18
WherePK adds condition based on the model primary key. Typically it is the same as:
Where("id = ?id")
type QueryAppender ¶
type QueryAppender interface { Copy() QueryAppender Query() *Query AppendQuery(dst []byte) ([]byte, error) }
type QueryFormatter ¶
type Relation ¶
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.
type Table ¶
type Table struct { Type reflect.Type TypeName string Name types.Q NameForSelects types.Q Alias types.Q ModelName string Fields []*Field // PKs + DataFields PKs []*Field DataFields []*Field FieldsMap map[string]*Field Methods map[string]*Method Relations map[string]*Relation Unique map[string][]*Field // contains filtered or unexported fields }
Table represents a SQL table created from Go struct.
func (*Table) AppendParam ¶
func (*Table) RemoveField ¶ added in v6.6.20
type URLFilter ¶ added in v6.13.6
type URLFilter struct {
// contains filtered or unexported fields
}
URLFilter 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`)
func NewURLFilter ¶ added in v6.13.6
type URLValues ¶ added in v6.13.6
func (URLValues) MaybeDuration ¶ added in v6.13.6
func (URLValues) MaybeInt64 ¶ added in v6.13.6
func (URLValues) SetDefault ¶ added in v6.13.6
Source Files ¶
- composite.go
- composite_create.go
- composite_drop.go
- count_estimate.go
- delete.go
- field.go
- format.go
- hook.go
- inflection.go
- insert.go
- join.go
- model.go
- model_discard.go
- model_func.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
- pager.go
- query.go
- relation.go
- result.go
- select.go
- table.go
- table_create.go
- table_drop.go
- table_params.go
- tables.go
- tag.go
- update.go
- url_filter.go
- url_values.go
- util.go
- zero.go