orm

package
v4.9.4+incompatible Latest Latest
Warning

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

Go to latest
Published: Sep 14, 2016 License: BSD-2-Clause Imports: 13 Imported by: 0

Documentation

Index

Constants

View Source
const (
	PrimaryKeyFlag = 1 << iota
	ForeignKeyFlag
	NullFlag
)
View Source
const (
	AfterQueryHookFlag = 1 << iota
	AfterSelectHookFlag
	BeforeCreateHookFlag
	AfterCreateHookFlag
)
View Source
const (
	HasOneRelation = 1 << iota
	BelongsToRelation
	HasManyRelation
	Many2ManyRelation
)

Variables

View Source
var Tables = newTables()

Functions

func Create

func Create(db DB, v ...interface{}) error

func Delete

func Delete(db DB, v interface{}) error

func F

func F(field string, params ...interface{}) types.F

func Q

func Q(query string, params ...interface{}) types.Q

func Scan

func Scan(values ...interface{}) valuesModel

func Select

func Select(db DB, model interface{}) error

func Underscore

func Underscore(s string) string

Underscore converts "CamelCasedString" to "camel_cased_string".

func Update

func Update(db DB, v interface{}) error

Types

type Collection

type Collection interface {
	// NewModel returns ColumnScanner that is used to scan columns
	// from the current row.
	NewModel() ColumnScanner

	// AddModel adds ColumnScanner to the Collection.
	AddModel(ColumnScanner) error
}

Collection is a set of models mapped to database rows.

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 DB

type DB interface {
	Model(model ...interface{}) *Query
	Select(model interface{}) error
	Create(model ...interface{}) error
	Update(model interface{}) error
	Delete(model interface{}) error

	Exec(query interface{}, params ...interface{}) (*types.Result, error)
	ExecOne(query interface{}, params ...interface{}) (*types.Result, error)
	Query(coll, query interface{}, params ...interface{}) (*types.Result, error)
	QueryOne(model, query interface{}, params ...interface{}) (*types.Result, error)

	QueryFormatter
}

DB is a common interface for pg.DB and pg.Tx types.

type Discard

type Discard struct{}

func (Discard) AddModel

func (Discard) AddModel(_ ColumnScanner) error

func (Discard) AfterCreate

func (Discard) AfterCreate(DB) error

func (Discard) AfterQuery

func (Discard) AfterQuery(DB) error

func (Discard) AfterSelect

func (Discard) AfterSelect(DB) error

func (Discard) BeforeCreate

func (Discard) BeforeCreate(DB) error

func (Discard) NewModel

func (d Discard) NewModel() ColumnScanner

func (Discard) ScanColumn

func (Discard) ScanColumn(colIdx int, colName string, b []byte) error

type Field

type Field struct {
	GoName  string // struct field name, e.g. Id
	SQLName string // SQL name, .e.g. id
	ColName types.Q
	Index   []int
	// contains filtered or unexported fields
}

func (*Field) AppendValue

func (f *Field) AppendValue(b []byte, strct reflect.Value, quote int) []byte

func (*Field) Copy

func (f *Field) Copy() *Field

func (*Field) Has

func (f *Field) Has(flag uint8) bool

func (*Field) IsEmpty

func (f *Field) IsEmpty(strct reflect.Value) bool

func (*Field) OmitEmpty

func (f *Field) OmitEmpty(strct reflect.Value) bool

func (*Field) ScanValue

func (f *Field) ScanValue(strct reflect.Value, b []byte) error

func (*Field) Value

func (f *Field) Value(strct reflect.Value) reflect.Value

type Formatter

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

func (Formatter) Append

func (f Formatter) Append(dst []byte, src string, params ...interface{}) []byte

func (Formatter) AppendBytes

func (f Formatter) AppendBytes(dst, src []byte, params ...interface{}) []byte

func (*Formatter) SetParam

func (f *Formatter) SetParam(key string, value interface{})

type Method

type Method struct {
	Index int
	// contains filtered or unexported fields
}

func (*Method) AppendValue

func (m *Method) AppendValue(dst []byte, strct reflect.Value, quote int) []byte

func (*Method) Has

func (m *Method) Has(flag int8) bool

func (*Method) Value

func (m *Method) Value(strct reflect.Value) reflect.Value

type Model

type Model interface {
	Collection
	ColumnScanner

	AfterQuery(DB) error
	AfterSelect(DB) error

	BeforeCreate(DB) error
	AfterCreate(DB) error
}

func NewModel

func NewModel(values ...interface{}) (Model, error)

type Query

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

func NewQuery

func NewQuery(db DB, model ...interface{}) *Query

func (*Query) Alias

func (q *Query) Alias(alias string) *Query

func (*Query) Apply

func (q *Query) Apply(fn func(*Query) *Query) *Query

Apply calls the fn passing the Query as an argument.

func (*Query) Column

func (q *Query) Column(columns ...string) *Query

func (*Query) ColumnExpr

func (q *Query) ColumnExpr(expr string, params ...interface{}) *Query

func (*Query) Count

func (q *Query) Count() (int, error)

Count returns number of rows matching the query using count aggregate function.

func (*Query) CountEstimate

func (q *Query) CountEstimate(threshold int) (int, error)

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.

Based on https://wiki.postgresql.org/wiki/Count_estimate

func (*Query) Create

func (q *Query) Create(values ...interface{}) (*types.Result, error)

Create inserts the model.

func (*Query) DB

func (q *Query) DB(db DB) *Query

func (*Query) Delete

func (q *Query) Delete() (*types.Result, error)

Delete deletes the model.

func (*Query) Err

func (q *Query) Err(err error) *Query

Err sets the err returned when query is executed.

func (*Query) First

func (q *Query) First() error

First selects the first row.

func (*Query) FormatQuery

func (q *Query) FormatQuery(dst []byte, query string, params ...interface{}) []byte

func (*Query) Group

func (q *Query) Group(group string, params ...interface{}) *Query

func (*Query) Join

func (q *Query) Join(join string, params ...interface{}) *Query

func (*Query) Last

func (q *Query) Last() error

Last selects the last row.

func (*Query) Limit

func (q *Query) Limit(n int) *Query

func (*Query) Model

func (q *Query) Model(model ...interface{}) *Query

func (*Query) Offset

func (q *Query) Offset(n int) *Query

func (*Query) OnConflict

func (q *Query) OnConflict(s string, params ...interface{}) *Query

func (*Query) Order

func (q *Query) Order(order string, params ...interface{}) *Query

func (*Query) Relation

func (q *Query) Relation(name string, apply func(*Query) *Query) *Query

func (*Query) Returning

func (q *Query) Returning(columns ...interface{}) *Query

func (*Query) Select

func (q *Query) Select(values ...interface{}) error

Select selects the model.

func (*Query) SelectAndCount

func (q *Query) SelectAndCount(values ...interface{}) (count int, err error)

SelectAndCount runs Select and Count in two separate goroutines, waits for them to finish and returns the result.

func (*Query) SelectAndCountEstimate

func (q *Query) SelectAndCountEstimate(threshold int) (count int, err error)

SelectAndCountEstimate runs Select and CountEstimate in two separate goroutines, waits for them to finish and returns the result.

func (*Query) SelectOrCreate

func (q *Query) SelectOrCreate(values ...interface{}) (created bool, err error)

SelectOrCreate selects the model creating one if it does not exist.

func (*Query) Set

func (q *Query) Set(set string, params ...interface{}) *Query

func (*Query) Table

func (q *Query) Table(names ...string) *Query

func (*Query) Update

func (q *Query) Update(values ...interface{}) (*types.Result, error)

Update updates the model.

func (*Query) Where

func (q *Query) Where(where string, params ...interface{}) *Query

func (*Query) WhereOr

func (q *Query) WhereOr(conditions ...*SQL) *Query

WhereOr joins passed conditions using OR operation.

func (*Query) With

func (q *Query) With(name string, subq *Query) *Query

type QueryAppender

type QueryAppender interface {
	AppendQuery(dst []byte, params ...interface{}) ([]byte, error)
}

type QueryFormatter

type QueryFormatter interface {
	FormatQuery(dst []byte, query string, params ...interface{}) []byte
}

type Relation

type Relation struct {
	Type        int
	Polymorphic bool
	Field       *Field
	JoinTable   *Table
	FKs         []*Field

	M2MTableName types.Q
	BasePrefix   string
	JoinPrefix   string
}

type SQL

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

func NewSQL

func NewSQL(query string, params ...interface{}) *SQL

func (SQL) AppendFormat

func (q SQL) AppendFormat(dst []byte, f QueryFormatter) []byte

func (SQL) AppendValue

func (q SQL) AppendValue(dst []byte, quote int) ([]byte, error)

func (SQL) String

func (q SQL) String() string

type Table

type Table struct {
	Name      types.Q
	Alias     types.Q
	ModelName string
	Type      reflect.Type

	PKs       []*Field
	Fields    []*Field
	FieldsMap map[string]*Field

	Methods map[string]*Method

	Relations map[string]*Relation
	// contains filtered or unexported fields
}

func (*Table) AddField

func (t *Table) AddField(field *Field)

func (*Table) GetField

func (t *Table) GetField(fieldName string) (*Field, error)

func (*Table) Has

func (t *Table) Has(flag int8) bool

Jump to

Keyboard shortcuts

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