Documentation
¶
Index ¶
- Variables
- func AddNamingStrategy(ns *NamingStrategy)
- func IsByteArrayOrSlice(value reflect.Value) bool
- func IsRecordNotFoundError(err error) bool
- func RegisterDialect(name string, dialect Dialect)
- func ToColumnName(name string) string
- func ToDBName(name string) string
- func ToTableName(name string) string
- type Association
- func (association *Association) Append(values ...interface{}) *Association
- func (association *Association) Clear() *Association
- func (association *Association) Count() int
- func (association *Association) Delete(values ...interface{}) *Association
- func (association *Association) Find(value interface{}) *Association
- func (association *Association) Replace(values ...interface{}) *Association
- type Callback
- type CallbackProcessor
- func (cp *CallbackProcessor) After(callbackName string) *CallbackProcessor
- func (cp *CallbackProcessor) Before(callbackName string) *CallbackProcessor
- func (cp *CallbackProcessor) Get(callbackName string) (callback func(scope *Scope))
- func (cp *CallbackProcessor) Register(callbackName string, callback func(scope *Scope))
- func (cp *CallbackProcessor) Remove(callbackName string)
- func (cp *CallbackProcessor) Replace(callbackName string, callback func(scope *Scope))
- type DB
- func (s *DB) AddError(err error) error
- func (s *DB) AddForeignKey(field string, dest string, onDelete string, onUpdate string) *DB
- func (s *DB) AddIndex(indexName string, columns ...string) *DB
- func (s *DB) AddUniqueIndex(indexName string, columns ...string) *DB
- func (s *DB) Assign(attrs ...interface{}) *DB
- func (s *DB) Association(column string) *Association
- func (s *DB) Attrs(attrs ...interface{}) *DB
- func (s *DB) AutoMigrate(values ...interface{}) *DB
- func (s *DB) Begin() *DB
- func (s *DB) BeginTx(ctx context.Context, opts *sql.TxOptions) *DB
- func (s *DB) BlockGlobalUpdate(enable bool) *DB
- func (s *DB) Callback() *Callback
- func (s *DB) Close() error
- func (s *DB) Commit() *DB
- func (s *DB) CommonDB() SQLCommon
- func (s *DB) Count(value interface{}) *DB
- func (s *DB) Create(value interface{}) *DB
- func (s *DB) CreateTable(models ...interface{}) *DB
- func (s *DB) DB() *sql.DB
- func (s *DB) Debug() *DB
- func (s *DB) Delete(value interface{}, where ...interface{}) *DB
- func (s *DB) Dialect() Dialect
- func (s *DB) DropColumn(column string) *DB
- func (s *DB) DropTable(values ...interface{}) *DB
- func (s *DB) DropTableIfExists(values ...interface{}) *DB
- func (s *DB) Exec(sql string, values ...interface{}) *DB
- func (s *DB) Find(out interface{}, where ...interface{}) *DB
- func (s *DB) First(out interface{}, where ...interface{}) *DB
- func (s *DB) FirstOrCreate(out interface{}, where ...interface{}) *DB
- func (s *DB) FirstOrInit(out interface{}, where ...interface{}) *DB
- func (s *DB) Get(name string) (value interface{}, ok bool)
- func (s *DB) GetErrors() []error
- func (s *DB) Group(query string) *DB
- func (s *DB) HasBlockGlobalUpdate() bool
- func (s *DB) HasTable(value interface{}) bool
- func (s *DB) Having(query interface{}, values ...interface{}) *DB
- func (s *DB) InstantSet(name string, value interface{}) *DB
- func (s *DB) Joins(query string, args ...interface{}) *DB
- func (s *DB) Last(out interface{}, where ...interface{}) *DB
- func (s *DB) Limit(limit interface{}) *DB
- func (s *DB) LogMode(enable bool) *DB
- func (s *DB) Model(value interface{}) *DB
- func (s *DB) ModifyColumn(column string, typ string) *DB
- func (s *DB) New() *DB
- func (s *DB) NewRecord(value interface{}) bool
- func (s *DB) NewScope(value interface{}) *Scope
- func (s *DB) Not(query interface{}, args ...interface{}) *DB
- func (s *DB) Offset(offset interface{}) *DB
- func (s *DB) Omit(columns ...string) *DB
- func (s *DB) Or(query interface{}, args ...interface{}) *DB
- func (s *DB) Order(value interface{}, reorder ...bool) *DB
- func (s *DB) Pluck(column string, value interface{}) *DB
- func (s *DB) Preload(column string, conditions ...interface{}) *DB
- func (s *DB) Preloads(out interface{}) *DB
- func (s *DB) QueryExpr() *SqlExpr
- func (s *DB) Raw(sql string, values ...interface{}) *DB
- func (s *DB) RecordNotFound() bool
- func (s *DB) Related(value interface{}, foreignKeys ...string) *DB
- func (s *DB) RemoveForeignKey(field string, dest string) *DB
- func (s *DB) RemoveIndex(indexName string) *DB
- func (s *DB) Rollback() *DB
- func (s *DB) RollbackUnlessCommitted() *DB
- func (s *DB) Row() *sql.Row
- func (s *DB) Rows() (*sql.Rows, error)
- func (s *DB) Save(value interface{}) *DB
- func (s *DB) Scan(dest interface{}) *DB
- func (s *DB) ScanRows(rows *sql.Rows, result interface{}) error
- func (s *DB) Scopes(funcs ...func(*DB) *DB) *DB
- func (s *DB) Select(query interface{}, args ...interface{}) *DB
- func (s *DB) Set(name string, value interface{}) *DB
- func (s *DB) SetJoinTableHandler(source interface{}, column string, handler JoinTableHandlerInterface)
- func (s *DB) SetLogger(log logger)
- func (s *DB) SetNowFuncOverride(nowFuncOverride func() time.Time) *DB
- func (s *DB) SingularTable(enable bool)
- func (s *DB) SubQuery() *SqlExpr
- func (s *DB) Table(name string) *DB
- func (s *DB) Take(out interface{}, where ...interface{}) *DB
- func (s *DB) Transaction(fc func(tx *DB) error) (err error)
- func (s *DB) Unscoped() *DB
- func (s *DB) Update(attrs ...interface{}) *DB
- func (s *DB) UpdateColumn(attrs ...interface{}) *DB
- func (s *DB) UpdateColumns(values interface{}) *DB
- func (s *DB) Updates(values interface{}, ignoreProtectedAttrs ...bool) *DB
- func (s *DB) Where(query interface{}, args ...interface{}) *DB
- type DefaultForeignKeyNamer
- type Dialect
- type Errors
- type Field
- type JoinTableForeignKey
- type JoinTableHandler
- func (s JoinTableHandler) Add(handler JoinTableHandlerInterface, db *DB, source interface{}, ...) error
- func (s JoinTableHandler) Delete(handler JoinTableHandlerInterface, db *DB, sources ...interface{}) error
- func (s *JoinTableHandler) DestinationForeignKeys() []JoinTableForeignKey
- func (s JoinTableHandler) JoinWith(handler JoinTableHandlerInterface, db *DB, source interface{}) *DB
- func (s *JoinTableHandler) Setup(relationship *Relationship, tableName string, source reflect.Type, ...)
- func (s *JoinTableHandler) SourceForeignKeys() []JoinTableForeignKey
- func (s JoinTableHandler) Table(db *DB) string
- type JoinTableHandlerInterface
- type JoinTableSource
- type LogWriter
- type Logger
- type Model
- type ModelStruct
- type Namer
- type NamingStrategy
- type Relationship
- type RowQueryResult
- type RowsQueryResult
- type SQLCommon
- type Scope
- func (scope *Scope) AddToVars(value interface{}) string
- func (scope *Scope) Begin() *Scope
- func (scope *Scope) CallMethod(methodName string)
- func (scope *Scope) CombinedConditionSql() string
- func (scope *Scope) CommitOrRollback() *Scope
- func (scope *Scope) DB() *DB
- func (scope *Scope) Dialect() Dialect
- func (scope *Scope) Err(err error) error
- func (scope *Scope) Exec() *Scope
- func (scope *Scope) FieldByName(name string) (field *Field, ok bool)
- func (scope *Scope) Fields() []*Field
- func (scope *Scope) Get(name string) (interface{}, bool)
- func (scope *Scope) GetModelStruct() *ModelStruct
- func (scope *Scope) GetStructFields() (fields []*StructField)
- func (scope *Scope) HasColumn(column string) bool
- func (scope *Scope) HasError() bool
- func (scope *Scope) IndirectValue() reflect.Value
- func (scope *Scope) InstanceGet(name string) (interface{}, bool)
- func (scope *Scope) InstanceID() string
- func (scope *Scope) InstanceSet(name string, value interface{}) *Scope
- func (scope *Scope) Log(v ...interface{})
- func (scope *Scope) New(value interface{}) *Scope
- func (scope *Scope) NewDB() *DB
- func (scope *Scope) OmitAttrs() []string
- func (scope *Scope) PrimaryField() *Field
- func (scope *Scope) PrimaryFields() (fields []*Field)
- func (scope *Scope) PrimaryKey() string
- func (scope *Scope) PrimaryKeyValue() interface{}
- func (scope *Scope) PrimaryKeyZero() bool
- func (scope *Scope) Quote(str string) string
- func (scope *Scope) QuotedTableName() (name string)
- func (scope *Scope) Raw(sql string) *Scope
- func (scope *Scope) SQLDB() SQLCommon
- func (scope *Scope) SelectAttrs() []string
- func (scope *Scope) Set(name string, value interface{}) *Scope
- func (scope *Scope) SetColumn(column interface{}, value interface{}) error
- func (scope *Scope) SkipLeft()
- func (scope *Scope) TableName() string
- type SqlExpr
- type StructField
Constants ¶
This section is empty.
Variables ¶
var ( // ErrRecordNotFound returns a "record not found error". Occurs only when attempting to query the database with a struct; querying with a slice won't return this error ErrRecordNotFound = errors.New("record not found") // ErrInvalidSQL occurs when you attempt a query with invalid SQL ErrInvalidSQL = errors.New("invalid SQL") // ErrInvalidTransaction occurs when you are trying to `Commit` or `Rollback` ErrInvalidTransaction = errors.New("no valid transaction") // ErrCantStartTransaction can't start transaction when you are trying to start one with `Begin` ErrCantStartTransaction = errors.New("can't start transaction") // ErrUnaddressable unaddressable value ErrUnaddressable = errors.New("using unaddressable value") )
var DefaultCallback = &Callback{logger: nopLogger{}}
DefaultCallback default callbacks defined by gorm
var DefaultTableNameHandler = func(db *DB, defaultTableName string) string {
return defaultTableName
}
DefaultTableNameHandler default table name handler
var LogFormatter = func(values ...interface{}) (messages []interface{}) { if len(values) > 1 { var ( sql string formattedValues []string level = values[0] currentTime = "\n\033[33m[" + NowFunc().Format("2006-01-02 15:04:05") + "]\033[0m" source = fmt.Sprintf("\033[35m(%v)\033[0m", values[1]) ) messages = []interface{}{source, currentTime} if len(values) == 2 { currentTime = currentTime[1:] source = fmt.Sprintf("\033[35m%v\033[0m", values[1]) messages = []interface{}{currentTime, source} } if level == "sql" { messages = append(messages, fmt.Sprintf(" \033[36;1m[%.2fms]\033[0m ", float64(values[2].(time.Duration).Nanoseconds()/1e4)/100.0)) for _, value := range values[4].([]interface{}) { indirectValue := reflect.Indirect(reflect.ValueOf(value)) if indirectValue.IsValid() { value = indirectValue.Interface() if t, ok := value.(time.Time); ok { if t.IsZero() { formattedValues = append(formattedValues, fmt.Sprintf("'%v'", "0000-00-00 00:00:00")) } else { formattedValues = append(formattedValues, fmt.Sprintf("'%v'", t.Format("2006-01-02 15:04:05"))) } } else if b, ok := value.([]byte); ok { if str := string(b); isPrintable(str) { formattedValues = append(formattedValues, fmt.Sprintf("'%v'", str)) } else { formattedValues = append(formattedValues, "'<binary>'") } } else if r, ok := value.(driver.Valuer); ok { if value, err := r.Value(); err == nil && value != nil { formattedValues = append(formattedValues, fmt.Sprintf("'%v'", value)) } else { formattedValues = append(formattedValues, "NULL") } } else { switch value.(type) { case int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64, float32, float64, bool: formattedValues = append(formattedValues, fmt.Sprintf("%v", value)) default: formattedValues = append(formattedValues, fmt.Sprintf("'%v'", value)) } } } else { formattedValues = append(formattedValues, "NULL") } } if numericPlaceHolderRegexp.MatchString(values[3].(string)) { sql = values[3].(string) for index, value := range formattedValues { placeholder := fmt.Sprintf(`\$%d([^\d]|$)`, index+1) sql = regexp.MustCompile(placeholder).ReplaceAllString(sql, value+"$1") } } else { formattedValuesLength := len(formattedValues) for index, value := range sqlRegexp.Split(values[3].(string), -1) { sql += value if index < formattedValuesLength { sql += formattedValues[index] } } } messages = append(messages, sql) messages = append(messages, fmt.Sprintf(" \n\033[36;31m[%v]\033[0m ", strconv.FormatInt(values[5].(int64), 10)+" rows affected or returned ")) } else { messages = append(messages, "\033[31;1m") messages = append(messages, values[2:]...) messages = append(messages, "\033[0m") } } return }
var NowFunc = func() time.Time { return time.Now() }
NowFunc returns current time, this function is exported in order to be able to give the flexibility to the developer to customize it according to their needs, e.g:
gorm.NowFunc = func() time.Time {
return time.Now().UTC()
}
var ParseFieldStructForDialect = func(field *StructField, dialect Dialect) (fieldValue reflect.Value, sqlType string, size int, additionalType string) { // Get redirected field type var ( reflectType = field.Struct.Type dataType, _ = field.TagSettingsGet("TYPE") ) for reflectType.Kind() == reflect.Ptr { reflectType = reflectType.Elem() } fieldValue = reflect.Indirect(reflect.New(reflectType)) if gormDataType, ok := fieldValue.Interface().(interface { GormDataType(Dialect) string }); ok { dataType = gormDataType.GormDataType(dialect) } if dataType == "" { var getScannerValue func(reflect.Value) getScannerValue = func(value reflect.Value) { fieldValue = value if _, isScanner := reflect.New(fieldValue.Type()).Interface().(sql.Scanner); isScanner && fieldValue.Kind() == reflect.Struct { getScannerValue(fieldValue.Field(0)) } } getScannerValue(fieldValue) } if num, ok := field.TagSettingsGet("SIZE"); ok { size, _ = strconv.Atoi(num) } else { size = 255 } notNull, _ := field.TagSettingsGet("NOT NULL") unique, _ := field.TagSettingsGet("UNIQUE") additionalType = notNull + " " + unique if value, ok := field.TagSettingsGet("DEFAULT"); ok { additionalType = additionalType + " DEFAULT " + value } if value, ok := field.TagSettingsGet("COMMENT"); ok { additionalType = additionalType + " COMMENT " + value } return fieldValue, dataType, size, strings.TrimSpace(additionalType) }
ParseFieldStructForDialect get field's sql data type
var TheNamingStrategy = &NamingStrategy{
DB: defaultNamer,
Table: defaultNamer,
Column: defaultNamer,
}
TheNamingStrategy is being initialized with defaultNamingStrategy
Functions ¶
func AddNamingStrategy ¶ added in v0.1.3
func AddNamingStrategy(ns *NamingStrategy)
AddNamingStrategy sets the naming strategy
func IsByteArrayOrSlice ¶ added in v0.1.3
IsByteArrayOrSlice returns true of the reflected value is an array or slice
func IsRecordNotFoundError ¶ added in v0.1.3
IsRecordNotFoundError returns true if error contains a RecordNotFound error
func RegisterDialect ¶ added in v0.1.3
RegisterDialect register new dialect
func ToColumnName ¶ added in v0.1.3
ToColumnName convert string to db name
func ToTableName ¶ added in v0.1.3
ToTableName convert string to table name
Types ¶
type Association ¶ added in v0.1.3
type Association struct {
Error error
// contains filtered or unexported fields
}
Association Mode contains some helper methods to handle relationship things easily.
func (*Association) Append ¶ added in v0.1.3
func (association *Association) Append(values ...interface{}) *Association
Append append new associations for many2many, has_many, replace current association for has_one, belongs_to
func (*Association) Clear ¶ added in v0.1.3
func (association *Association) Clear() *Association
Clear remove relationship between source & current associations, won't delete those associations
func (*Association) Count ¶ added in v0.1.3
func (association *Association) Count() int
Count return the count of current associations
func (*Association) Delete ¶ added in v0.1.3
func (association *Association) Delete(values ...interface{}) *Association
Delete remove relationship between source & passed arguments, but won't delete those arguments
func (*Association) Find ¶ added in v0.1.3
func (association *Association) Find(value interface{}) *Association
Find find out all related associations
func (*Association) Replace ¶ added in v0.1.3
func (association *Association) Replace(values ...interface{}) *Association
Replace replace current associations with new one
type Callback ¶ added in v0.1.3
type Callback struct {
// contains filtered or unexported fields
}
Callback is a struct that contains all CRUD callbacks
Field `creates` contains callbacks will be call when creating object Field `updates` contains callbacks will be call when updating object Field `deletes` contains callbacks will be call when deleting object Field `queries` contains callbacks will be call when querying object with query methods like Find, First, Related, Association... Field `rowQueries` contains callbacks will be call when querying object with Row, Rows... Field `processors` contains all callback processors, will be used to generate above callbacks in order
func (*Callback) Create ¶ added in v0.1.3
func (c *Callback) Create() *CallbackProcessor
Create could be used to register callbacks for creating object
db.Callback().Create().After("gorm:create").Register("plugin:run_after_create", func(*Scope) {
// business logic
...
// set error if some thing wrong happened, will rollback the creating
scope.Err(errors.New("error"))
})
func (*Callback) Delete ¶ added in v0.1.3
func (c *Callback) Delete() *CallbackProcessor
Delete could be used to register callbacks for deleting object, refer `Create` for usage
func (*Callback) Query ¶ added in v0.1.3
func (c *Callback) Query() *CallbackProcessor
Query could be used to register callbacks for querying objects with query methods like `Find`, `First`, `Related`, `Association`... Refer `Create` for usage
func (*Callback) RowQuery ¶ added in v0.1.3
func (c *Callback) RowQuery() *CallbackProcessor
RowQuery could be used to register callbacks for querying objects with `Row`, `Rows`, refer `Create` for usage
func (*Callback) Update ¶ added in v0.1.3
func (c *Callback) Update() *CallbackProcessor
Update could be used to register callbacks for updating object, refer `Create` for usage
type CallbackProcessor ¶ added in v0.1.3
type CallbackProcessor struct {
// contains filtered or unexported fields
}
CallbackProcessor contains callback informations
func (*CallbackProcessor) After ¶ added in v0.1.3
func (cp *CallbackProcessor) After(callbackName string) *CallbackProcessor
After insert a new callback after callback `callbackName`, refer `Callbacks.Create`
func (*CallbackProcessor) Before ¶ added in v0.1.3
func (cp *CallbackProcessor) Before(callbackName string) *CallbackProcessor
Before insert a new callback before callback `callbackName`, refer `Callbacks.Create`
func (*CallbackProcessor) Get ¶ added in v0.1.3
func (cp *CallbackProcessor) Get(callbackName string) (callback func(scope *Scope))
Get registered callback
db.Callback().Create().Get("gorm:create")
func (*CallbackProcessor) Register ¶ added in v0.1.3
func (cp *CallbackProcessor) Register(callbackName string, callback func(scope *Scope))
Register a new callback, refer `Callbacks.Create`
func (*CallbackProcessor) Remove ¶ added in v0.1.3
func (cp *CallbackProcessor) Remove(callbackName string)
Remove a registered callback
db.Callback().Create().Remove("gorm:update_time_stamp_when_create")
func (*CallbackProcessor) Replace ¶ added in v0.1.3
func (cp *CallbackProcessor) Replace(callbackName string, callback func(scope *Scope))
Replace a registered callback with new callback
db.Callback().Create().Replace("gorm:update_time_stamp_when_create", func(*Scope) {
scope.SetColumn("CreatedAt", now)
scope.SetColumn("UpdatedAt", now)
})
type DB ¶ added in v0.1.3
type DB struct {
sync.RWMutex
Value interface{}
Error error
RowsAffected int64
// contains filtered or unexported fields
}
DB contains information for current db connection
func Open ¶ added in v0.1.3
Open initialize a new db connection, need to import driver first, e.g:
import _ "github.com/go-sql-driver/mysql"
func main() {
db, err := gorm.Open("mysql", "user:password@/dbname?charset=utf8&parseTime=True&loc=Local")
}
GORM has wrapped some drivers, for easier to remember driver's import path, so you could import the mysql driver with
import _ "github.com/zhangdapeng520/zdpgo_gorm/dialects/mysql" // import _ "github.com/zhangdapeng520/zdpgo_gorm/dialects/postgres" // import _ "github.com/zhangdapeng520/zdpgo_gorm/dialects/sqlite" // import _ "github.com/zhangdapeng520/zdpgo_gorm/dialects/mssql"
func (*DB) AddForeignKey ¶ added in v0.1.3
AddForeignKey Add foreign key to the given scope, e.g:
db.Model(&User{}).AddForeignKey("city_id", "cities(id)", "RESTRICT", "RESTRICT")
func (*DB) AddUniqueIndex ¶ added in v0.1.3
AddUniqueIndex add unique index for columns with given name
func (*DB) Assign ¶ added in v0.1.3
Assign assign result with argument regardless it is found or not with `FirstOrInit` https://jinzhu.github.io/gorm/crud.html#firstorinit or `FirstOrCreate` https://jinzhu.github.io/gorm/crud.html#firstorcreate
func (*DB) Association ¶ added in v0.1.3
func (s *DB) Association(column string) *Association
Association start `Association Mode` to handler relations things easir in that mode, refer: https://jinzhu.github.io/gorm/associations.html#association-mode
func (*DB) Attrs ¶ added in v0.1.3
Attrs initialize struct with argument if record not found with `FirstOrInit` https://jinzhu.github.io/gorm/crud.html#firstorinit or `FirstOrCreate` https://jinzhu.github.io/gorm/crud.html#firstorcreate
func (*DB) AutoMigrate ¶ added in v0.1.3
AutoMigrate run auto migration for given models, will only add missing fields, won't delete/change current data
func (*DB) BlockGlobalUpdate ¶ added in v0.1.3
BlockGlobalUpdate if true, generates an error on update/delete without where clause. This is to prevent eventual error with empty objects updates/deletions
func (*DB) Callback ¶ added in v0.1.3
Callback return `Callbacks` container, you could add/change/delete callbacks with it
db.Callback().Create().Register("update_created_at", updateCreated)
Refer https://jinzhu.github.io/gorm/development.html#callbacks
func (*DB) Close ¶ added in v0.1.3
Close close current db connection. If database connection is not an io.Closer, returns an error.
func (*DB) CommonDB ¶ added in v0.1.3
CommonDB return the underlying `*sql.DB` or `*sql.Tx` instance, mainly intended to allow coexistence with legacy non-GORM code.
func (*DB) CreateTable ¶ added in v0.1.3
CreateTable create table for models
func (*DB) DB ¶ added in v0.1.3
DB get `*sql.DB` from current connection If the underlying database connection is not a *sql.DB, returns nil
func (*DB) Delete ¶ added in v0.1.3
Delete delete value match given conditions, if the value has primary key, then will including the primary key as condition WARNING If model has DeletedAt field, GORM will only set field DeletedAt's value to current time
func (*DB) DropColumn ¶ added in v0.1.3
DropColumn drop a column
func (*DB) DropTableIfExists ¶ added in v0.1.3
DropTableIfExists drop table if it is exist
func (*DB) First ¶ added in v0.1.3
First find first record that match given conditions, order by primary key
func (*DB) FirstOrCreate ¶ added in v0.1.3
FirstOrCreate find first matched record or create a new one with given conditions (only works with struct, map conditions) https://jinzhu.github.io/gorm/crud.html#firstorcreate
func (*DB) FirstOrInit ¶ added in v0.1.3
FirstOrInit find first matched record or initialize a new one with given conditions (only works with struct, map conditions) https://jinzhu.github.io/gorm/crud.html#firstorinit
func (*DB) HasBlockGlobalUpdate ¶ added in v0.1.3
HasBlockGlobalUpdate return state of block
func (*DB) InstantSet ¶ added in v0.1.3
InstantSet instant set setting, will affect current db
func (*DB) Joins ¶ added in v0.1.3
Joins specify Joins conditions
db.Joins("JOIN emails ON emails.user_id = users.id AND emails.email = ?", "jinzhu@example.org").Find(&user)
func (*DB) Last ¶ added in v0.1.3
Last find last record that match given conditions, order by primary key
func (*DB) LogMode ¶ added in v0.1.3
LogMode set log mode, `true` for detailed logs, `false` for no log, default, will only print error logs
func (*DB) Model ¶ added in v0.1.3
Model specify the model you would like to run db operations
// update all users's name to `hello`
db.Model(&User{}).Update("name", "hello")
// if user's primary key is non-blank, will use it as condition, then will only update the user's name to `hello`
db.Model(&user).Update("name", "hello")
func (*DB) ModifyColumn ¶ added in v0.1.3
ModifyColumn modify column to type
func (*DB) Not ¶ added in v0.1.3
Not filter records that don't match current conditions, similar to `Where`
func (*DB) Offset ¶ added in v0.1.3
Offset specify the number of records to skip before starting to return the records
func (*DB) Omit ¶ added in v0.1.3
Omit specify fields that you want to ignore when saving to database for creating, updating
func (*DB) Or ¶ added in v0.1.3
Or filter records that match before conditions or this one, similar to `Where`
func (*DB) Order ¶ added in v0.1.3
Order specify order when retrieve records from database, set reorder to `true` to overwrite defined conditions
db.Order("name DESC")
db.Order("name DESC", true) // reorder
db.Order(gorm.Expr("name = ? DESC", "first")) // sql expression
func (*DB) Pluck ¶ added in v0.1.3
Pluck used to query single column from a model as a map
var ages []int64
db.Find(&users).Pluck("age", &ages)
func (*DB) Preload ¶ added in v0.1.3
Preload preload associations with given conditions
db.Preload("Orders", "state NOT IN (?)", "cancelled").Find(&users)
func (*DB) Raw ¶ added in v0.1.3
Raw use raw sql as conditions, won't run it unless invoked by other methods
db.Raw("SELECT name, age FROM users WHERE name = ?", 3).Scan(&result)
func (*DB) RecordNotFound ¶ added in v0.1.3
RecordNotFound check if returning ErrRecordNotFound error
func (*DB) RemoveForeignKey ¶ added in v0.1.3
RemoveForeignKey Remove foreign key from the given scope, e.g:
db.Model(&User{}).RemoveForeignKey("city_id", "cities(id)")
func (*DB) RemoveIndex ¶ added in v0.1.3
RemoveIndex remove index with name
func (*DB) RollbackUnlessCommitted ¶ added in v0.1.3
RollbackUnlessCommitted rollback a transaction if it has not yet been committed.
func (*DB) Save ¶ added in v0.1.3
Save update value in database, if the value doesn't have primary key, will insert it
func (*DB) Scopes ¶ added in v0.1.3
Scopes pass current database connection to arguments `func(*DB) *DB`, which could be used to add conditions dynamically
func AmountGreaterThan1000(db *gorm.DB) *gorm.DB {
return db.Where("amount > ?", 1000)
}
func OrderStatus(status []string) func (db *gorm.DB) *gorm.DB {
return func (db *gorm.DB) *gorm.DB {
return db.Scopes(AmountGreaterThan1000).Where("status in (?)", status)
}
}
db.Scopes(AmountGreaterThan1000, OrderStatus([]string{"paid", "shipped"})).Find(&orders)
func (*DB) Select ¶ added in v0.1.3
Select specify fields that you want to retrieve from database when querying, by default, will select all fields; When creating/updating, specify fields that you want to save to database
func (*DB) Set ¶ added in v0.1.3
Set set setting by name, which could be used in callbacks, will clone a new db, and update its setting
func (*DB) SetJoinTableHandler ¶ added in v0.1.3
func (s *DB) SetJoinTableHandler(source interface{}, column string, handler JoinTableHandlerInterface)
SetJoinTableHandler set a model's join table handler for a relation
func (*DB) SetLogger ¶ added in v0.1.3
func (s *DB) SetLogger(log logger)
SetLogger replace default logger
func (*DB) SetNowFuncOverride ¶ added in v0.1.3
SetNowFuncOverride set the function to be used when creating a new timestamp
func (*DB) SingularTable ¶ added in v0.1.3
SingularTable use singular table by default
func (*DB) Take ¶ added in v0.1.3
Take return a record that match given conditions, the order will depend on the database implementation
func (*DB) Transaction ¶ added in v0.1.3
Transaction start a transaction as a block, return error will rollback, otherwise to commit.
func (*DB) Unscoped ¶ added in v0.1.3
Unscoped return all record including deleted record, refer Soft Delete https://jinzhu.github.io/gorm/crud.html#soft-delete
func (*DB) Update ¶ added in v0.1.3
Update update attributes with callbacks, refer: https://jinzhu.github.io/gorm/crud.html#update WARNING when update with struct, GORM will not update fields that with zero value
func (*DB) UpdateColumn ¶ added in v0.1.3
UpdateColumn update attributes without callbacks, refer: https://jinzhu.github.io/gorm/crud.html#update
func (*DB) UpdateColumns ¶ added in v0.1.3
UpdateColumns update attributes without callbacks, refer: https://jinzhu.github.io/gorm/crud.html#update
func (*DB) Updates ¶ added in v0.1.3
Updates update attributes with callbacks, refer: https://jinzhu.github.io/gorm/crud.html#update
func (*DB) Where ¶ added in v0.1.3
Where return a new relation, filter records with given conditions, accepts `map`, `struct` or `string` as conditions, refer http://jinzhu.github.io/gorm/crud.html#query
type DefaultForeignKeyNamer ¶ added in v0.1.3
type DefaultForeignKeyNamer struct {
}
DefaultForeignKeyNamer contains the default foreign key name generator method
func (DefaultForeignKeyNamer) BuildKeyName ¶ added in v0.1.3
func (DefaultForeignKeyNamer) BuildKeyName(kind, tableName string, fields ...string) string
BuildKeyName returns a valid key name (foreign key, index key) for the given table, field and reference
type Dialect ¶ added in v0.1.3
type Dialect interface {
// GetName get dialect's name
GetName() string
// SetDB set db for dialect
SetDB(db SQLCommon)
// BindVar return the placeholder for actual values in SQL statements, in many dbs it is "?", Postgres using $1
BindVar(i int) string
// Quote quotes field name to avoid SQL parsing exceptions by using a reserved word as a field name
Quote(key string) string
// DataTypeOf return data's sql type
DataTypeOf(field *StructField) string
// HasIndex check has index or not
HasIndex(tableName string, indexName string) bool
// HasForeignKey check has foreign key or not
HasForeignKey(tableName string, foreignKeyName string) bool
// RemoveIndex remove index
RemoveIndex(tableName string, indexName string) error
// HasTable check has table or not
HasTable(tableName string) bool
// HasColumn check has column or not
HasColumn(tableName string, columnName string) bool
// ModifyColumn modify column's type
ModifyColumn(tableName string, columnName string, typ string) error
// LimitAndOffsetSQL return generated SQL with Limit and Offset, as mssql has special case
LimitAndOffsetSQL(limit, offset interface{}) (string, error)
// SelectFromDummyTable return select values, for most dbs, `SELECT values` just works, mysql needs `SELECT value FROM DUAL`
SelectFromDummyTable() string
// LastInsertIDOutputInterstitial most dbs support LastInsertId, but mssql needs to use `OUTPUT`
LastInsertIDOutputInterstitial(tableName, columnName string, columns []string) string
// LastInsertIdReturningSuffix most dbs support LastInsertId, but postgres needs to use `RETURNING`
LastInsertIDReturningSuffix(tableName, columnName string) string
// DefaultValueStr
DefaultValueStr() string
// BuildKeyName returns a valid key name (foreign key, index key) for the given table, field and reference
BuildKeyName(kind, tableName string, fields ...string) string
// NormalizeIndexAndColumn returns valid index name and column name depending on each dialect
NormalizeIndexAndColumn(indexName, columnName string) (string, string)
// CurrentDatabase return current database name
CurrentDatabase() string
}
Dialect interface contains behaviors that differ across SQL database
func GetDialect ¶ added in v0.1.3
GetDialect gets the dialect for the specified dialect name
type Errors ¶ added in v0.1.3
type Errors []error
Errors contains all happened errors
type Field ¶ added in v0.1.3
type Field struct {
*StructField
IsBlank bool
Field reflect.Value
}
Field model field definition
type JoinTableForeignKey ¶ added in v0.1.3
JoinTableForeignKey join table foreign key struct
type JoinTableHandler ¶ added in v0.1.3
type JoinTableHandler struct {
TableName string `sql:"-"`
Source JoinTableSource `sql:"-"`
Destination JoinTableSource `sql:"-"`
}
JoinTableHandler default join table handler
func (JoinTableHandler) Add ¶ added in v0.1.3
func (s JoinTableHandler) Add(handler JoinTableHandlerInterface, db *DB, source interface{}, destination interface{}) error
Add create relationship in join table for source and destination
func (JoinTableHandler) Delete ¶ added in v0.1.3
func (s JoinTableHandler) Delete(handler JoinTableHandlerInterface, db *DB, sources ...interface{}) error
Delete delete relationship in join table for sources
func (*JoinTableHandler) DestinationForeignKeys ¶ added in v0.1.3
func (s *JoinTableHandler) DestinationForeignKeys() []JoinTableForeignKey
DestinationForeignKeys return destination foreign keys
func (JoinTableHandler) JoinWith ¶ added in v0.1.3
func (s JoinTableHandler) JoinWith(handler JoinTableHandlerInterface, db *DB, source interface{}) *DB
JoinWith query with `Join` conditions
func (*JoinTableHandler) Setup ¶ added in v0.1.3
func (s *JoinTableHandler) Setup(relationship *Relationship, tableName string, source reflect.Type, destination reflect.Type)
Setup initialize a default join table handler
func (*JoinTableHandler) SourceForeignKeys ¶ added in v0.1.3
func (s *JoinTableHandler) SourceForeignKeys() []JoinTableForeignKey
SourceForeignKeys return source foreign keys
func (JoinTableHandler) Table ¶ added in v0.1.3
func (s JoinTableHandler) Table(db *DB) string
Table return join table's table name
type JoinTableHandlerInterface ¶ added in v0.1.3
type JoinTableHandlerInterface interface {
// initialize join table handler
Setup(relationship *Relationship, tableName string, source reflect.Type, destination reflect.Type)
// Table return join table's table name
Table(db *DB) string
// Add create relationship in join table for source and destination
Add(handler JoinTableHandlerInterface, db *DB, source interface{}, destination interface{}) error
// Delete delete relationship in join table for sources
Delete(handler JoinTableHandlerInterface, db *DB, sources ...interface{}) error
// JoinWith query with `Join` conditions
JoinWith(handler JoinTableHandlerInterface, db *DB, source interface{}) *DB
// SourceForeignKeys return source foreign keys
SourceForeignKeys() []JoinTableForeignKey
// DestinationForeignKeys return destination foreign keys
DestinationForeignKeys() []JoinTableForeignKey
}
JoinTableHandlerInterface is an interface for how to handle many2many relations
type JoinTableSource ¶ added in v0.1.3
type JoinTableSource struct {
ModelType reflect.Type
ForeignKeys []JoinTableForeignKey
}
JoinTableSource is a struct that contains model type and foreign keys
type LogWriter ¶ added in v0.1.3
type LogWriter interface {
Println(v ...interface{})
}
LogWriter log writer interface
type Model ¶ added in v0.1.3
type Model struct {
ID uint `gorm:"primary_key"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt *time.Time `sql:"index"`
}
Model base model definition, including fields `ID`, `CreatedAt`, `UpdatedAt`, `DeletedAt`, which could be embedded in your models
type User struct {
gorm.Model
}
type ModelStruct ¶ added in v0.1.3
type ModelStruct struct {
PrimaryFields []*StructField
StructFields []*StructField
ModelType reflect.Type
// contains filtered or unexported fields
}
ModelStruct model definition
func (*ModelStruct) TableName ¶ added in v0.1.3
func (s *ModelStruct) TableName(db *DB) string
TableName returns model's table name
type NamingStrategy ¶ added in v0.1.3
NamingStrategy represents naming strategies
func (*NamingStrategy) ColumnName ¶ added in v0.1.3
func (ns *NamingStrategy) ColumnName(name string) string
ColumnName alters the given name by Column
func (*NamingStrategy) DBName ¶ added in v0.1.3
func (ns *NamingStrategy) DBName(name string) string
DBName alters the given name by DB
func (*NamingStrategy) TableName ¶ added in v0.1.3
func (ns *NamingStrategy) TableName(name string) string
TableName alters the given name by Table
type Relationship ¶ added in v0.1.3
type Relationship struct {
Kind string
PolymorphicType string
PolymorphicDBName string
PolymorphicValue string
ForeignFieldNames []string
ForeignDBNames []string
AssociationForeignFieldNames []string
AssociationForeignDBNames []string
JoinTableHandler JoinTableHandlerInterface
}
Relationship described the relationship between models
type RowQueryResult ¶ added in v0.1.3
type RowsQueryResult ¶ added in v0.1.3
type SQLCommon ¶ added in v0.1.3
type SQLCommon interface {
Exec(query string, args ...interface{}) (sql.Result, error)
Prepare(query string) (*sql.Stmt, error)
Query(query string, args ...interface{}) (*sql.Rows, error)
QueryRow(query string, args ...interface{}) *sql.Row
}
SQLCommon is the minimal database connection functionality gorm requires. Implemented by *sql.DB.
type Scope ¶ added in v0.1.3
type Scope struct {
Search *search
Value interface{}
SQL string
SQLVars []interface{}
// contains filtered or unexported fields
}
Scope contain current operation's information when you perform any operation on the database
func (*Scope) AddToVars ¶ added in v0.1.3
AddToVars add value as sql's vars, used to prevent SQL injection
func (*Scope) CallMethod ¶ added in v0.1.3
CallMethod call scope value's method, if it is a slice, will call its element's method one by one
func (*Scope) CombinedConditionSql ¶ added in v0.1.3
CombinedConditionSql return combined condition sql
func (*Scope) CommitOrRollback ¶ added in v0.1.3
CommitOrRollback commit current transaction if no error happened, otherwise will rollback it
func (*Scope) FieldByName ¶ added in v0.1.3
FieldByName find `gorm.Field` with field name or db name
func (*Scope) GetModelStruct ¶ added in v0.1.3
func (scope *Scope) GetModelStruct() *ModelStruct
GetModelStruct get value's model struct, relationships based on struct and tag definition
func (*Scope) GetStructFields ¶ added in v0.1.3
func (scope *Scope) GetStructFields() (fields []*StructField)
GetStructFields get model's field structs
func (*Scope) IndirectValue ¶ added in v0.1.3
IndirectValue return scope's reflect value's indirect value
func (*Scope) InstanceGet ¶ added in v0.1.3
InstanceGet get instance setting from current operation
func (*Scope) InstanceID ¶ added in v0.1.3
InstanceID get InstanceID for scope
func (*Scope) InstanceSet ¶ added in v0.1.3
InstanceSet set instance setting for current operation, but not for operations in callbacks, like saving associations callback
func (*Scope) PrimaryField ¶ added in v0.1.3
PrimaryField return scope's main primary field, if defined more that one primary fields, will return the one having column name `id` or the first one
func (*Scope) PrimaryFields ¶ added in v0.1.3
PrimaryFields return scope's primary fields
func (*Scope) PrimaryKey ¶ added in v0.1.3
PrimaryKey get main primary field's db name
func (*Scope) PrimaryKeyValue ¶ added in v0.1.3
func (scope *Scope) PrimaryKeyValue() interface{}
PrimaryKeyValue get the primary key's value
func (*Scope) PrimaryKeyZero ¶ added in v0.1.3
PrimaryKeyZero check main primary field's value is blank or not
func (*Scope) QuotedTableName ¶ added in v0.1.3
QuotedTableName return quoted table name
func (*Scope) SelectAttrs ¶ added in v0.1.3
SelectAttrs return selected attributes
func (*Scope) SetColumn ¶ added in v0.1.3
SetColumn to set the column's value, column could be field or field's name/dbname
type SqlExpr ¶ added in v0.1.3
type SqlExpr struct {
// contains filtered or unexported fields
}
SQL expression
type StructField ¶ added in v0.1.3
type StructField struct {
DBName string
Name string
Names []string
IsPrimaryKey bool
IsNormal bool
IsIgnored bool
IsScanner bool
HasDefaultValue bool
Tag reflect.StructTag
TagSettings map[string]string
Struct reflect.StructField
IsForeignKey bool
Relationship *Relationship
// contains filtered or unexported fields
}
StructField model field's struct definition
func (*StructField) TagSettingsDelete ¶ added in v0.1.3
func (sf *StructField) TagSettingsDelete(key string)
TagSettingsDelete deletes a tag
func (*StructField) TagSettingsGet ¶ added in v0.1.3
func (sf *StructField) TagSettingsGet(key string) (string, bool)
TagSettingsGet returns a tag from the tag settings
func (*StructField) TagSettingsSet ¶ added in v0.1.3
func (sf *StructField) TagSettingsSet(key, val string)
TagSettingsSet Sets a tag in the tag settings map
Source Files
¶
- association.go
- callback.go
- callback_create.go
- callback_delete.go
- callback_query.go
- callback_query_preload.go
- callback_row_query.go
- callback_save.go
- callback_update.go
- dialect.go
- dialect_common.go
- dialect_mysql.go
- dialect_postgres.go
- dialect_sqlite3.go
- errors.go
- field.go
- interface.go
- join_table_handler.go
- logger.go
- main.go
- model.go
- model_struct.go
- naming.go
- scope.go
- search.go
- utils.go
Directories
¶
| Path | Synopsis |
|---|---|
|
Package inflection pluralizes and singularizes English nouns.
|
Package inflection pluralizes and singularizes English nouns. |