Documentation ¶
Overview ¶
Package gdb provides ORM features for popular relationship databases.
Example (Transaction) ¶
db.Transaction(func(tx *gdb.TX) error { // user result, err := tx.Insert("user", g.Map{ "passport": "john", "password": "12345678", "nickname": "JohnGuo", }) if err != nil { return err } // user_detail id, err := result.LastInsertId() if err != nil { return err } _, err = tx.Insert("user_detail", g.Map{ "uid": id, "site": "https://johng.cn", "true_name": "GuoQiang", }) if err != nil { return err } return nil })
Output:
Index ¶
- Constants
- Variables
- func AddConfigNode(group string, node ConfigNode)
- func AddDefaultConfigGroup(nodes ConfigGroup)
- func AddDefaultConfigNode(node ConfigNode)
- func ConvertDataForTableRecord(value interface{}) map[string]interface{}
- func DataToMapDeep(value interface{}) map[string]interface{}
- func FormatSqlWithArgs(sql string, args []interface{}) string
- func GetDefaultGroup() string
- func GetInsertOperationByOption(option int) string
- func GetPrimaryKey(pointer interface{}) (string, error)
- func GetPrimaryKeyCondition(primary string, where ...interface{}) (newWhereCondition []interface{})
- func GetWhereConditionOfStruct(pointer interface{}) (where string, args []interface{}, err error)
- func IsConfigured() bool
- func ListItemValues(list interface{}, key interface{}, subKey ...interface{}) (values []interface{})
- func ListItemValuesUnique(list interface{}, key string, subKey ...interface{}) []interface{}
- func Register(name string, driver Driver) error
- func SetConfig(config Config)
- func SetConfigGroup(group string, nodes ConfigGroup)
- func SetDefaultGroup(name string)
- type Config
- type ConfigGroup
- type ConfigNode
- type Core
- func (c *Core) BatchInsert(table string, list interface{}, batch ...int) (sql.Result, error)
- func (c *Core) BatchInsertIgnore(table string, list interface{}, batch ...int) (sql.Result, error)
- func (c *Core) BatchReplace(table string, list interface{}, batch ...int) (sql.Result, error)
- func (c *Core) BatchSave(table string, list interface{}, batch ...int) (sql.Result, error)
- func (c *Core) Begin() (*TX, error)
- func (c *Core) Ctx(ctx context.Context) DB
- func (c *Core) Delete(table string, condition interface{}, args ...interface{}) (result sql.Result, err error)
- func (c *Core) DoBatchInsert(link Link, table string, list interface{}, option int, batch ...int) (result sql.Result, err error)
- func (c *Core) DoDelete(link Link, table string, condition string, args ...interface{}) (result sql.Result, err error)
- func (c *Core) DoExec(link Link, sql string, args ...interface{}) (result sql.Result, err error)
- func (c *Core) DoGetAll(link Link, sql string, args ...interface{}) (result Result, err error)
- func (c *Core) DoInsert(link Link, table string, data interface{}, option int, batch ...int) (result sql.Result, err error)
- func (c *Core) DoPrepare(link Link, sql string) (*sql.Stmt, error)
- func (c *Core) DoQuery(link Link, sql string, args ...interface{}) (rows *sql.Rows, err error)
- func (c *Core) DoUpdate(link Link, table string, data interface{}, condition string, ...) (result sql.Result, err error)
- func (c *Core) Exec(sql string, args ...interface{}) (result sql.Result, err error)
- func (c *Core) GetAll(sql string, args ...interface{}) (Result, error)
- func (c *Core) GetArray(sql string, args ...interface{}) ([]Value, error)
- func (c *Core) GetCache() *gcache.Cache
- func (c *Core) GetChars() (charLeft string, charRight string)
- func (c *Core) GetConfig() *ConfigNode
- func (c *Core) GetCount(sql string, args ...interface{}) (int, error)
- func (c *Core) GetCtx() context.Context
- func (c *Core) GetDebug() bool
- func (c *Core) GetDryRun() bool
- func (c *Core) GetGroup() string
- func (c *Core) GetLogger() *glog.Logger
- func (c *Core) GetMaster(schema ...string) (*sql.DB, error)
- func (c *Core) GetOne(sql string, args ...interface{}) (Record, error)
- func (c *Core) GetPrefix() string
- func (c *Core) GetScan(pointer interface{}, sql string, args ...interface{}) error
- func (c *Core) GetSchema() string
- func (c *Core) GetSlave(schema ...string) (*sql.DB, error)
- func (c *Core) GetStruct(pointer interface{}, sql string, args ...interface{}) error
- func (c *Core) GetStructs(pointer interface{}, sql string, args ...interface{}) error
- func (c *Core) GetValue(sql string, args ...interface{}) (Value, error)
- func (c *Core) HandleSqlBeforeCommit(sql string) string
- func (c *Core) HasTable(name string) (bool, error)
- func (c *Core) Insert(table string, data interface{}, batch ...int) (sql.Result, error)
- func (c *Core) InsertIgnore(table string, data interface{}, batch ...int) (sql.Result, error)
- func (c *Core) MarshalJSON() ([]byte, error)
- func (c *Core) Master() (*sql.DB, error)
- func (c *Core) Model(table ...string) *Model
- func (c *Core) PingMaster() error
- func (c *Core) PingSlave() error
- func (c *Core) Prepare(sql string, execOnMaster ...bool) (*sql.Stmt, error)
- func (c *Core) Query(sql string, args ...interface{}) (rows *sql.Rows, err error)
- func (c *Core) QuotePrefixTableName(table string) string
- func (c *Core) QuoteString(s string) string
- func (c *Core) QuoteWord(s string) string
- func (c *Core) Replace(table string, data interface{}, batch ...int) (sql.Result, error)
- func (c *Core) Save(table string, data interface{}, batch ...int) (sql.Result, error)
- func (c *Core) Schema(schema string) *Schema
- func (c *Core) SetDebug(debug bool)
- func (c *Core) SetDryRun(enabled bool)
- func (c *Core) SetLogger(logger *glog.Logger)
- func (c *Core) SetMaxConnLifetime(d time.Duration)
- func (c *Core) SetMaxIdleConnCount(n int)
- func (c *Core) SetMaxOpenConnCount(n int)
- func (c *Core) SetSchema(schema string)
- func (c *Core) Slave() (*sql.DB, error)
- func (c *Core) Table(table ...string) *Model
- func (c *Core) TableFields(table string, schema ...string) (fields map[string]*TableField, err error)
- func (c *Core) Tables(schema ...string) (tables []string, err error)
- func (c *Core) Transaction(f func(tx *TX) error) (err error)
- func (c *Core) Update(table string, data interface{}, condition interface{}, args ...interface{}) (sql.Result, error)
- type Counter
- type DB
- type Driver
- type DriverMssql
- func (d *DriverMssql) GetChars() (charLeft string, charRight string)
- func (d *DriverMssql) HandleSqlBeforeCommit(link Link, sql string, args []interface{}) (string, []interface{})
- func (d *DriverMssql) New(core *Core, node *ConfigNode) (DB, error)
- func (d *DriverMssql) Open(config *ConfigNode) (*sql.DB, error)
- func (d *DriverMssql) TableFields(table string, schema ...string) (fields map[string]*TableField, err error)
- func (d *DriverMssql) Tables(schema ...string) (tables []string, err error)
- type DriverMysql
- func (d *DriverMysql) GetChars() (charLeft string, charRight string)
- func (d *DriverMysql) HandleSqlBeforeCommit(link Link, sql string, args []interface{}) (string, []interface{})
- func (d *DriverMysql) New(core *Core, node *ConfigNode) (DB, error)
- func (d *DriverMysql) Open(config *ConfigNode) (*sql.DB, error)
- func (d *DriverMysql) TableFields(table string, schema ...string) (fields map[string]*TableField, err error)
- func (d *DriverMysql) Tables(schema ...string) (tables []string, err error)
- type DriverOracle
- func (d *DriverOracle) DoBatchInsert(link Link, table string, list interface{}, option int, batch ...int) (result sql.Result, err error)
- func (d *DriverOracle) DoInsert(link Link, table string, data interface{}, option int, batch ...int) (result sql.Result, err error)
- func (d *DriverOracle) GetChars() (charLeft string, charRight string)
- func (d *DriverOracle) HandleSqlBeforeCommit(link Link, sql string, args []interface{}) (newSql string, newArgs []interface{})
- func (d *DriverOracle) New(core *Core, node *ConfigNode) (DB, error)
- func (d *DriverOracle) Open(config *ConfigNode) (*sql.DB, error)
- func (d *DriverOracle) TableFields(table string, schema ...string) (fields map[string]*TableField, err error)
- func (d *DriverOracle) Tables(schema ...string) (tables []string, err error)
- type DriverPgsql
- func (d *DriverPgsql) GetChars() (charLeft string, charRight string)
- func (d *DriverPgsql) HandleSqlBeforeCommit(link Link, sql string, args []interface{}) (string, []interface{})
- func (d *DriverPgsql) New(core *Core, node *ConfigNode) (DB, error)
- func (d *DriverPgsql) Open(config *ConfigNode) (*sql.DB, error)
- func (d *DriverPgsql) TableFields(table string, schema ...string) (fields map[string]*TableField, err error)
- func (d *DriverPgsql) Tables(schema ...string) (tables []string, err error)
- type DriverSqlite
- func (d *DriverSqlite) GetChars() (charLeft string, charRight string)
- func (d *DriverSqlite) HandleSqlBeforeCommit(link Link, sql string, args []interface{}) (string, []interface{})
- func (d *DriverSqlite) New(core *Core, node *ConfigNode) (DB, error)
- func (d *DriverSqlite) Open(config *ConfigNode) (*sql.DB, error)
- func (d *DriverSqlite) TableFields(table string, schema ...string) (fields map[string]*TableField, err error)
- func (d *DriverSqlite) Tables(schema ...string) (tables []string, err error)
- type Link
- type List
- type Map
- type Model
- func (m *Model) All(where ...interface{}) (Result, error)
- func (m *Model) And(where interface{}, args ...interface{}) *Model
- func (m *Model) Args(args ...interface{}) *Model
- func (m *Model) Array(fieldsAndWhere ...interface{}) ([]Value, error)
- func (m *Model) As(as string) *Model
- func (m *Model) Batch(batch int) *Model
- func (m *Model) Cache(duration time.Duration, name ...string) *Model
- func (m *Model) Chunk(limit int, callback func(result Result, err error) bool)
- func (m *Model) Clone() *Model
- func (m *Model) Count(where ...interface{}) (int, error)
- func (m *Model) Ctx(ctx context.Context) *Model
- func (m *Model) DB(db DB) *Model
- func (m *Model) Data(data ...interface{}) *Model
- func (m *Model) Delete(where ...interface{}) (result sql.Result, err error)
- func (m *Model) Fields(fieldNamesOrMapStruct ...interface{}) *Model
- func (m *Model) FieldsEx(fieldNamesOrMapStruct ...interface{}) *Model
- func (m *Model) FieldsExStr(fields string, prefix ...string) string
- func (m *Model) FieldsStr(prefix ...string) string
- func (m *Model) Filter() *Model
- func (m *Model) FindAll(where ...interface{}) (Result, error)
- func (m *Model) FindArray(fieldsAndWhere ...interface{}) ([]Value, error)
- func (m *Model) FindCount(where ...interface{}) (int, error)
- func (m *Model) FindOne(where ...interface{}) (Record, error)
- func (m *Model) FindScan(pointer interface{}, where ...interface{}) error
- func (m *Model) FindValue(fieldsAndWhere ...interface{}) (Value, error)
- func (m *Model) ForPage(page, limit int) *Model
- func (m *Model) GetFieldsExStr(fields string, prefix ...string) string
- func (m *Model) GetFieldsStr(prefix ...string) string
- func (m *Model) Group(groupBy string) *Model
- func (m *Model) GroupBy(groupBy string) *Model
- func (m *Model) HasField(field string) (bool, error)
- func (m *Model) Having(having interface{}, args ...interface{}) *Model
- func (m *Model) InnerJoin(table ...string) *Model
- func (m *Model) Insert(data ...interface{}) (result sql.Result, err error)
- func (m *Model) InsertIgnore(data ...interface{}) (result sql.Result, err error)
- func (m *Model) LeftJoin(table ...string) *Model
- func (m *Model) Limit(limit ...int) *Model
- func (m *Model) LockShared() *Model
- func (m *Model) LockUpdate() *Model
- func (m *Model) Master() *Model
- func (m *Model) Offset(offset int) *Model
- func (m *Model) OmitEmpty() *Model
- func (m *Model) One(where ...interface{}) (Record, error)
- func (m *Model) Option(option int) *Model
- func (m *Model) OptionOmitEmpty() *Model
- func (m *Model) Or(where interface{}, args ...interface{}) *Model
- func (m *Model) Order(orderBy ...string) *Model
- func (m *Model) OrderBy(orderBy string) *Model
- func (m *Model) Page(page, limit int) *Model
- func (m *Model) Replace(data ...interface{}) (result sql.Result, err error)
- func (m *Model) RightJoin(table ...string) *Model
- func (m *Model) Safe(safe ...bool) *Model
- func (m *Model) Save(data ...interface{}) (result sql.Result, err error)
- func (m *Model) Scan(pointer interface{}, where ...interface{}) error
- func (m *Model) ScanList(listPointer interface{}, attributeName string, relation ...string) (err error)
- func (m *Model) Schema(schema string) *Model
- func (m *Model) Select(where ...interface{}) (Result, error)
- func (m *Model) Slave() *Model
- func (m *Model) Struct(pointer interface{}, where ...interface{}) error
- func (m *Model) Structs(pointer interface{}, where ...interface{}) error
- func (m *Model) TX(tx *TX) *Model
- func (m *Model) Unscoped() *Model
- func (m *Model) Update(dataAndWhere ...interface{}) (result sql.Result, err error)
- func (m *Model) Value(fieldsAndWhere ...interface{}) (Value, error)
- func (m *Model) Where(where interface{}, args ...interface{}) *Model
- func (m *Model) WherePri(where interface{}, args ...interface{}) *Model
- type Raw
- type Record
- func (r Record) GMap() *gmap.StrAnyMap
- func (r Record) IsEmpty() bool
- func (r Record) Json() string
- func (r Record) Map() Map
- func (r Record) Struct(pointer interface{}) error
- func (r Record) ToJson() string
- func (r Record) ToMap() Map
- func (r Record) ToStruct(pointer interface{}) error
- func (r Record) ToXml(rootTag ...string) string
- func (r Record) Xml(rootTag ...string) string
- type Result
- func (r Result) Array(field ...string) []Value
- func (r Result) Chunk(size int) []Result
- func (r Result) IsEmpty() bool
- func (r Result) Json() string
- func (r Result) Len() int
- func (r Result) List() List
- func (r Result) MapKeyInt(key string) map[int]Map
- func (r Result) MapKeyStr(key string) map[string]Map
- func (r Result) MapKeyUint(key string) map[uint]Map
- func (r Result) MapKeyValue(key string) map[string]Value
- func (r Result) RecordKeyInt(key string) map[int]Record
- func (r Result) RecordKeyStr(key string) map[string]Record
- func (r Result) RecordKeyUint(key string) map[uint]Record
- func (r Result) ScanList(listPointer interface{}, attributeName string, relation ...string) (err error)
- func (r Result) Size() int
- func (r Result) Structs(pointer interface{}) (err error)
- func (r Result) ToIntMap(key string) map[int]Map
- func (r Result) ToIntRecord(key string) map[int]Record
- func (r Result) ToJson() string
- func (r Result) ToList() List
- func (r Result) ToStringMap(key string) map[string]Map
- func (r Result) ToStringRecord(key string) map[string]Record
- func (r Result) ToStructs(pointer interface{}) (err error)
- func (r Result) ToUintMap(key string) map[uint]Map
- func (r Result) ToUintRecord(key string) map[uint]Record
- func (r Result) ToXml(rootTag ...string) string
- func (r Result) Xml(rootTag ...string) string
- type Schema
- type Sql
- type SqlResult
- type TX
- func (tx *TX) BatchInsert(table string, list interface{}, batch ...int) (sql.Result, error)
- func (tx *TX) BatchInsertIgnore(table string, list interface{}, batch ...int) (sql.Result, error)
- func (tx *TX) BatchReplace(table string, list interface{}, batch ...int) (sql.Result, error)
- func (tx *TX) BatchSave(table string, list interface{}, batch ...int) (sql.Result, error)
- func (tx *TX) Commit() error
- func (tx *TX) Delete(table string, condition interface{}, args ...interface{}) (sql.Result, error)
- func (tx *TX) Exec(sql string, args ...interface{}) (sql.Result, error)
- func (tx *TX) GetAll(sql string, args ...interface{}) (Result, error)
- func (tx *TX) GetCount(sql string, args ...interface{}) (int, error)
- func (tx *TX) GetOne(sql string, args ...interface{}) (Record, error)
- func (tx *TX) GetScan(objPointer interface{}, sql string, args ...interface{}) error
- func (tx *TX) GetStruct(obj interface{}, sql string, args ...interface{}) error
- func (tx *TX) GetStructs(objPointerSlice interface{}, sql string, args ...interface{}) error
- func (tx *TX) GetValue(sql string, args ...interface{}) (Value, error)
- func (tx *TX) Insert(table string, data interface{}, batch ...int) (sql.Result, error)
- func (tx *TX) InsertIgnore(table string, data interface{}, batch ...int) (sql.Result, error)
- func (tx *TX) Model(table ...string) *Model
- func (tx *TX) Prepare(sql string) (*sql.Stmt, error)
- func (tx *TX) Query(sql string, args ...interface{}) (rows *sql.Rows, err error)
- func (tx *TX) Replace(table string, data interface{}, batch ...int) (sql.Result, error)
- func (tx *TX) Rollback() error
- func (tx *TX) Save(table string, data interface{}, batch ...int) (sql.Result, error)
- func (tx *TX) Schema(schema string) *Schema
- func (tx *TX) Table(table ...string) *Model
- func (tx *TX) Update(table string, data interface{}, condition interface{}, args ...interface{}) (sql.Result, error)
- type TableField
- type Value
Examples ¶
Constants ¶
const ( OrmTagForStruct = "orm" OrmTagForUnique = "unique" OrmTagForPrimary = "primary" )
const ( OPTION_OMITEMPTY = 1 OPTION_ALLOWEMPTY = 2 )
const (
DefaultGroupName = "default" // Default group name.
)
Variables ¶
var ( // ErrNoRows is alias of sql.ErrNoRows. ErrNoRows = sql.ErrNoRows )
Functions ¶
func AddConfigNode ¶
func AddConfigNode(group string, node ConfigNode)
AddConfigNode adds one node configuration to configuration of given group.
func AddDefaultConfigGroup ¶
func AddDefaultConfigGroup(nodes ConfigGroup)
AddDefaultConfigGroup adds multiple node configurations to configuration of default group.
func AddDefaultConfigNode ¶
func AddDefaultConfigNode(node ConfigNode)
AddDefaultConfigNode adds one node configuration to configuration of default group.
func ConvertDataForTableRecord ¶
func ConvertDataForTableRecord(value interface{}) map[string]interface{}
ConvertDataForTableRecord is a very important function, which does converting for any data that will be inserted into table as a record.
The parameter <obj> should be type of *map/map/*struct/struct. It supports inherit struct definition for struct.
func DataToMapDeep ¶
func DataToMapDeep(value interface{}) map[string]interface{}
DataToMapDeep converts <value> to map type recursively. The parameter <value> should be type of *map/map/*struct/struct. It supports inherit struct definition for struct.
func FormatSqlWithArgs ¶
FormatSqlWithArgs binds the arguments to the sql string and returns a complete sql string, just for debugging.
func GetDefaultGroup ¶
func GetDefaultGroup() string
GetDefaultGroup returns the { name of default configuration.
func GetInsertOperationByOption ¶
GetInsertOperationByOption returns proper insert option with given parameter <option>.
func GetPrimaryKey ¶
GetPrimaryKey retrieves and returns primary key field name from given struct.
func GetPrimaryKeyCondition ¶
func GetPrimaryKeyCondition(primary string, where ...interface{}) (newWhereCondition []interface{})
GetPrimaryKeyCondition returns a new where condition by primary field name. The optional parameter <where> is like follows: 123 => primary=123 []int{1, 2, 3} => primary IN(1,2,3) "john" => primary='john' []string{"john", "smith"} => primary IN('john','smith') g.Map{"id": g.Slice{1,2,3}} => id IN(1,2,3) g.Map{"id": 1, "name": "john"} => id=1 AND name='john' etc.
Note that it returns the given <where> parameter directly if the <primary> is empty or length of <where> > 1.
func GetWhereConditionOfStruct ¶
GetWhereConditionOfStruct returns the where condition sql and arguments by given struct pointer. This function automatically retrieves primary or unique field and its attribute value as condition.
func IsConfigured ¶
func IsConfigured() bool
IsConfigured checks and returns whether the database configured. It returns true if any configuration exists.
func ListItemValues ¶
func ListItemValues(list interface{}, key interface{}, subKey ...interface{}) (values []interface{})
ListItemValues retrieves and returns the elements of all item struct/map with key <key>. Note that the parameter <list> should be type of slice which contains elements of map or struct, or else it returns an empty slice.
The parameter <list> supports types like: []map[string]interface{} []map[string]sub-map []struct []struct:sub-struct Note that the sub-map/sub-struct makes sense only if the optional parameter <subKey> is given. See gutil.ListItemValues.
func ListItemValuesUnique ¶
func ListItemValuesUnique(list interface{}, key string, subKey ...interface{}) []interface{}
ListItemValuesUnique retrieves and returns the unique elements of all struct/map with key <key>. Note that the parameter <list> should be type of slice which contains elements of map or struct, or else it returns an empty slice. See gutil.ListItemValuesUnique.
func SetConfig ¶
func SetConfig(config Config)
SetConfig sets the global configuration for package. It will overwrite the old configuration of package.
func SetConfigGroup ¶
func SetConfigGroup(group string, nodes ConfigGroup)
SetConfigGroup sets the configuration for given group.
func SetDefaultGroup ¶
func SetDefaultGroup(name string)
SetDefaultGroup sets the group name for default configuration.
Types ¶
type ConfigGroup ¶
type ConfigGroup []ConfigNode
ConfigGroup is a slice of configuration node for specified named group.
func GetConfig ¶
func GetConfig(group string) ConfigGroup
GetConfig retrieves and returns the configuration of given group.
type ConfigNode ¶
type ConfigNode struct { Host string `json:"host"` // Host of server, ip or domain like: 127.0.0.1, localhost Port string `json:"port"` // Port, it's commonly 3306. User string `json:"user"` // Authentication username. Pass string `json:"pass"` // Authentication password. Name string `json:"name"` // Default used database name. Type string `json:"type"` // Database type: mysql, sqlite, mssql, pgsql, oracle. Role string `json:"role"` // (Optional, "master" in default) Node role, used for master-slave mode: master, slave. Debug bool `json:"debug"` // (Optional) Debug mode enables debug information logging and output. Prefix string `json:"prefix"` // (Optional) Table prefix. DryRun bool `json:"dryRun"` // (Optional) Dry run, which does SELECT but no INSERT/UPDATE/DELETE statements. Weight int `json:"weight"` // (Optional) Weight for load balance calculating, it's useless if there's just one node. Charset string `json:"charset"` // (Optional, "utf8mb4" in default) Custom charset when operating on database. LinkInfo string `json:"link"` // (Optional) Custom link information, when it is used, configuration Host/Port/User/Pass/Name are ignored. MaxIdleConnCount int `json:"maxIdle"` // (Optional) Max idle connection configuration for underlying connection pool. MaxOpenConnCount int `json:"maxOpen"` // (Optional) Max open connection configuration for underlying connection pool. MaxConnLifetime time.Duration `json:"maxLifetime"` // (Optional) Max connection TTL configuration for underlying connection pool. QueryTimeout time.Duration `json:"queryTimeout"` // (Optional) Max query time for per dql. ExecTimeout time.Duration `json:"execTimeout"` // (Optional) Max exec time for dml. TranTimeout time.Duration `json:"tranTimeout"` // (Optional) Max exec time time for a transaction. PrepareTimeout time.Duration `json:"prepareTimeout"` // (Optional) Max exec time time for prepare operation. CreatedAt string `json:"createdAt"` // (Optional) The filed name of table for automatic-filled created datetime. UpdatedAt string `json:"updatedAt"` // (Optional) The filed name of table for automatic-filled updated datetime. DeletedAt string `json:"deletedAt"` // (Optional) The filed name of table for automatic-filled updated datetime. TimeMaintainDisabled bool `json:"timeMaintainDisabled"` // (Optional) Disable the automatic time maintaining feature. }
ConfigNode is configuration for one node.
func (*ConfigNode) String ¶
func (node *ConfigNode) String() string
String returns the node as string.
type Core ¶
type Core struct { DB DB // DB interface object. // contains filtered or unexported fields }
Core is the base struct for database management.
func (*Core) BatchInsert ¶
BatchInsert batch inserts data. The parameter <list> must be type of slice of map or struct.
func (*Core) BatchInsertIgnore ¶
BatchInsertIgnore batch inserts data with ignore option. The parameter <list> must be type of slice of map or struct.
func (*Core) BatchReplace ¶
BatchReplace batch replaces data. The parameter <list> must be type of slice of map or struct.
func (*Core) BatchSave ¶
BatchSave batch replaces data. The parameter <list> must be type of slice of map or struct.
func (*Core) Begin ¶
Begin starts and returns the transaction object. You should call Commit or Rollback functions of the transaction object if you no longer use the transaction. Commit or Rollback functions will also close the transaction automatically.
func (*Core) Ctx ¶
Ctx is a chaining function, which creates and returns a new DB that is a shallow copy of current DB object and with given context in it. Note that this returned DB object can be used only once, so do not assign it to a global or package variable for long using.
func (*Core) Delete ¶
func (c *Core) Delete(table string, condition interface{}, args ...interface{}) (result sql.Result, err error)
Delete does "DELETE FROM ... " statement for the table.
The parameter <condition> can be type of string/map/gmap/slice/struct/*struct, etc. It is commonly used with parameter <args>. Eg: "uid=10000", "uid", 10000 "money>? AND name like ?", 99999, "vip_%" "status IN (?)", g.Slice{1,2,3} "age IN(?,?)", 18, 50 User{ Id : 1, UserName : "john"}
func (*Core) DoBatchInsert ¶
func (c *Core) DoBatchInsert(link Link, table string, list interface{}, option int, batch ...int) (result sql.Result, err error)
DoBatchInsert batch inserts/replaces/saves data. This function is usually used for custom interface definition, you do not need call it manually.
func (*Core) DoDelete ¶
func (c *Core) DoDelete(link Link, table string, condition string, args ...interface{}) (result sql.Result, err error)
DoDelete does "DELETE FROM ... " statement for the table. This function is usually used for custom interface definition, you do not need call it manually.
func (*Core) DoExec ¶
DoExec commits the sql string and its arguments to underlying driver through given link object and returns the execution result.
func (*Core) DoInsert ¶
func (c *Core) DoInsert(link Link, table string, data interface{}, option int, batch ...int) (result sql.Result, err error)
doInsert inserts or updates data for given table. This function is usually used for custom interface definition, you do not need call it manually. The parameter <data> can be type of map/gmap/struct/*struct/[]map/[]struct, etc. Eg: Data(g.Map{"uid": 10000, "name":"john"}) Data(g.Slice{g.Map{"uid": 10000, "name":"john"}, g.Map{"uid": 20000, "name":"smith"})
The parameter <option> values are as follows: 0: insert: just insert, if there's unique/primary key in the data, it returns error; 1: replace: if there's unique/primary key in the data, it deletes it from table and inserts a new one; 2: save: if there's unique/primary key in the data, it updates it or else inserts a new one; 3: ignore: if there's unique/primary key in the data, it ignores the inserting;
func (*Core) DoPrepare ¶
doPrepare calls prepare function on given link object and returns the statement object.
func (*Core) DoQuery ¶
DoQuery commits the sql string and its arguments to underlying driver through given link object and returns the execution result.
func (*Core) DoUpdate ¶
func (c *Core) DoUpdate(link Link, table string, data interface{}, condition string, args ...interface{}) (result sql.Result, err error)
doUpdate does "UPDATE ... " statement for the table. This function is usually used for custom interface definition, you do not need call it manually.
func (*Core) Exec ¶
Exec commits one query SQL to underlying driver and returns the execution result. It is most commonly used for data inserting and updating.
func (*Core) GetArray ¶
GetArray queries and returns data values as slice from database. Note that if there're multiple columns in the result, it returns just one column values randomly.
func (*Core) GetChars ¶
GetChars returns the security char for current database. It does nothing in default.
func (*Core) GetConfig ¶
func (c *Core) GetConfig() *ConfigNode
GetConfig returns the current used node configuration.
func (*Core) GetCtx ¶
GetCtx returns the context for current DB. It returns `context.Background()` is there's no context previously set.
func (*Core) GetMaster ¶
GetMaster acts like function Master but with additional <schema> parameter specifying the schema for the connection. It is defined for internal usage. Also see Master.
func (*Core) GetPrefix ¶
GetPrefix returns the table prefix string configured. Deprecated, use GetConfig instead.
func (*Core) GetScan ¶
GetScan queries one or more records from database and converts them to given struct or struct array.
If parameter <pointer> is type of struct pointer, it calls GetStruct internally for the conversion. If parameter <pointer> is type of slice, it calls GetStructs internally for conversion.
func (*Core) GetSlave ¶
GetSlave acts like function Slave but with additional <schema> parameter specifying the schema for the connection. It is defined for internal usage. Also see Slave.
func (*Core) GetStruct ¶
GetStruct queries one record from database and converts it to given struct. The parameter <pointer> should be a pointer to struct.
func (*Core) GetStructs ¶
GetStructs queries records from database and converts them to given struct. The parameter <pointer> should be type of struct slice: []struct/[]*struct.
func (*Core) GetValue ¶
GetValue queries and returns the field value from database. The sql should queries only one field from database, or else it returns only one field of the result.
func (*Core) HandleSqlBeforeCommit ¶
HandleSqlBeforeCommit handles the sql before posts it to database. It does nothing in default.
func (*Core) Insert ¶
Insert does "INSERT INTO ..." statement for the table. If there's already one unique record of the data in the table, it returns error.
The parameter <data> can be type of map/gmap/struct/*struct/[]map/[]struct, etc. Eg: Data(g.Map{"uid": 10000, "name":"john"}) Data(g.Slice{g.Map{"uid": 10000, "name":"john"}, g.Map{"uid": 20000, "name":"smith"})
The parameter <batch> specifies the batch operation count when given data is slice.
func (*Core) InsertIgnore ¶
InsertIgnore does "INSERT IGNORE INTO ..." statement for the table. If there's already one unique record of the data in the table, it ignores the inserting.
The parameter <data> can be type of map/gmap/struct/*struct/[]map/[]struct, etc. Eg: Data(g.Map{"uid": 10000, "name":"john"}) Data(g.Slice{g.Map{"uid": 10000, "name":"john"}, g.Map{"uid": 20000, "name":"smith"})
The parameter <batch> specifies the batch operation count when given data is slice.
func (*Core) MarshalJSON ¶
MarshalJSON implements the interface MarshalJSON for json.Marshal. It just returns the pointer address.
Note that this interface implements mainly for workaround for a json infinite loop bug of Golang version < v1.14.
func (*Core) Master ¶
Master creates and returns a connection from master node if master-slave configured. It returns the default connection if master-slave not configured.
func (*Core) PingMaster ¶
PingMaster pings the master node to check authentication or keeps the connection alive.
func (*Core) PingSlave ¶
PingSlave pings the slave node to check authentication or keeps the connection alive.
func (*Core) Prepare ¶
Prepare creates a prepared statement for later queries or executions. Multiple queries or executions may be run concurrently from the returned statement. The caller must call the statement's Close method when the statement is no longer needed.
The parameter <execOnMaster> specifies whether executing the sql on master node, or else it executes the sql on slave node if master-slave configured.
func (*Core) Query ¶
Query commits one query SQL to underlying driver and returns the execution result. It is most commonly used for data querying.
func (*Core) QuotePrefixTableName ¶
QuotePrefixTableName adds prefix string and quotes chars for the table. It handles table string like: "user", "user u", "user,user_detail", "user u, user_detail ut", "user as u, user_detail as ut".
Note that, this will automatically checks the table prefix whether already added, if true it does nothing to the table name, or else adds the prefix to the table name.
func (*Core) QuoteString ¶
QuoteString quotes string with quote chars. Strings like: "user", "user u", "user,user_detail", "user u, user_detail ut", "u.id asc".
func (*Core) QuoteWord ¶
QuoteWord checks given string <s> a word, if true quotes it with security chars of the database and returns the quoted string; or else return <s> without any change.
func (*Core) Replace ¶
Replace does "REPLACE INTO ..." statement for the table. If there's already one unique record of the data in the table, it deletes the record and inserts a new one.
The parameter <data> can be type of map/gmap/struct/*struct/[]map/[]struct, etc. Eg: Data(g.Map{"uid": 10000, "name":"john"}) Data(g.Slice{g.Map{"uid": 10000, "name":"john"}, g.Map{"uid": 20000, "name":"smith"})
The parameter <data> can be type of map/gmap/struct/*struct/[]map/[]struct, etc. If given data is type of slice, it then does batch replacing, and the optional parameter <batch> specifies the batch operation count.
func (*Core) Save ¶
Save does "INSERT INTO ... ON DUPLICATE KEY UPDATE..." statement for the table. It updates the record if there's primary or unique index in the saving data, or else it inserts a new record into the table.
The parameter <data> can be type of map/gmap/struct/*struct/[]map/[]struct, etc. Eg: Data(g.Map{"uid": 10000, "name":"john"}) Data(g.Slice{g.Map{"uid": 10000, "name":"john"}, g.Map{"uid": 20000, "name":"smith"})
If given data is type of slice, it then does batch saving, and the optional parameter <batch> specifies the batch operation count.
func (*Core) SetDryRun ¶
SetDryRun enables/disables the DryRun feature. Deprecated, use GetConfig instead.
func (*Core) SetMaxConnLifetime ¶
SetMaxConnLifetime sets the connection TTL for underlying connection pool. If parameter <d> <= 0, it means the connection never expires.
func (*Core) SetMaxIdleConnCount ¶
SetMaxIdleConnCount sets the max idle connection count for underlying connection pool.
func (*Core) SetMaxOpenConnCount ¶
SetMaxOpenConnCount sets the max open connection count for underlying connection pool.
func (*Core) SetSchema ¶
SetSchema changes the schema for this database connection object. Importantly note that when schema configuration changed for the database, it affects all operations on the database object in the future.
func (*Core) Slave ¶
Slave creates and returns a connection from slave node if master-slave configured. It returns the default connection if master-slave not configured.
func (*Core) Table ¶
Table creates and returns a new ORM model from given schema. The parameter <table> can be more than one table names, and also alias name, like:
- Table names: Table("user") Table("user u") Table("user, user_detail") Table("user u, user_detail ud")
- Table name with alias: Table("user", "u")
func (*Core) TableFields ¶
func (c *Core) TableFields(table string, schema ...string) (fields map[string]*TableField, err error)
TableFields retrieves and returns the fields information of specified table of current schema.
Note that it returns a map containing the field name and its corresponding fields. As a map is unsorted, the TableField struct has a "Index" field marks its sequence in the fields.
It's using cache feature to enhance the performance, which is never expired util the process restarts.
It does nothing in default.
func (*Core) Tables ¶
Tables retrieves and returns the tables of current schema. It's mainly used in cli tool chain for automatically generating the models.
It does nothing in default.
func (*Core) Transaction ¶
Transaction wraps the transaction logic using function <f>. It rollbacks the transaction and returns the error from function <f> if it returns non-nil error. It commits the transaction and returns nil if function <f> returns nil.
Note that, you should not Commit or Rollback the transaction in function <f> as it is automatically handled by this function.
func (*Core) Update ¶
func (c *Core) Update(table string, data interface{}, condition interface{}, args ...interface{}) (sql.Result, error)
Update does "UPDATE ... " statement for the table.
The parameter <data> can be type of string/map/gmap/struct/*struct, etc. Eg: "uid=10000", "uid", 10000, g.Map{"uid": 10000, "name":"john"}
The parameter <condition> can be type of string/map/gmap/slice/struct/*struct, etc. It is commonly used with parameter <args>. Eg: "uid=10000", "uid", 10000 "money>? AND name like ?", 99999, "vip_%" "status IN (?)", g.Slice{1,2,3} "age IN(?,?)", 18, 50 User{ Id : 1, UserName : "john"}
type DB ¶
type DB interface { // The DB interface is designed not only for // relational databases but also for NoSQL databases in the future. The name // "Table" is not proper for that purpose any more. Table(table ...string) *Model Model(table ...string) *Model Schema(schema string) *Schema // Open creates a raw connection object for database with given node configuration. // Note that it is not recommended using the this function manually. Open(config *ConfigNode) (*sql.DB, error) // Ctx is a chaining function, which creates and returns a new DB that is a shallow copy // of current DB object and with given context in it. // Note that this returned DB object can be used only once, so do not assign it to // a global or package variable for long using. Ctx(ctx context.Context) DB Query(sql string, args ...interface{}) (*sql.Rows, error) Exec(sql string, args ...interface{}) (sql.Result, error) Prepare(sql string, execOnMaster ...bool) (*sql.Stmt, error) Insert(table string, data interface{}, batch ...int) (sql.Result, error) InsertIgnore(table string, data interface{}, batch ...int) (sql.Result, error) Replace(table string, data interface{}, batch ...int) (sql.Result, error) Save(table string, data interface{}, batch ...int) (sql.Result, error) BatchInsert(table string, list interface{}, batch ...int) (sql.Result, error) BatchReplace(table string, list interface{}, batch ...int) (sql.Result, error) BatchSave(table string, list interface{}, batch ...int) (sql.Result, error) Update(table string, data interface{}, condition interface{}, args ...interface{}) (sql.Result, error) Delete(table string, condition interface{}, args ...interface{}) (sql.Result, error) DoQuery(link Link, sql string, args ...interface{}) (rows *sql.Rows, err error) DoGetAll(link Link, sql string, args ...interface{}) (result Result, err error) DoExec(link Link, sql string, args ...interface{}) (result sql.Result, err error) DoPrepare(link Link, sql string) (*sql.Stmt, error) DoInsert(link Link, table string, data interface{}, option int, batch ...int) (result sql.Result, err error) DoBatchInsert(link Link, table string, list interface{}, option int, batch ...int) (result sql.Result, err error) DoUpdate(link Link, table string, data interface{}, condition string, args ...interface{}) (result sql.Result, err error) DoDelete(link Link, table string, condition string, args ...interface{}) (result sql.Result, err error) GetAll(sql string, args ...interface{}) (Result, error) GetOne(sql string, args ...interface{}) (Record, error) GetValue(sql string, args ...interface{}) (Value, error) GetArray(sql string, args ...interface{}) ([]Value, error) GetCount(sql string, args ...interface{}) (int, error) GetStruct(objPointer interface{}, sql string, args ...interface{}) error GetStructs(objPointerSlice interface{}, sql string, args ...interface{}) error GetScan(objPointer interface{}, sql string, args ...interface{}) error Master() (*sql.DB, error) Slave() (*sql.DB, error) PingMaster() error PingSlave() error Begin() (*TX, error) Transaction(f func(tx *TX) error) (err error) GetCache() *gcache.Cache SetDebug(debug bool) GetDebug() bool SetSchema(schema string) GetSchema() string GetPrefix() string GetGroup() string SetDryRun(dryrun bool) GetDryRun() bool SetLogger(logger *glog.Logger) GetLogger() *glog.Logger GetConfig() *ConfigNode SetMaxIdleConnCount(n int) SetMaxOpenConnCount(n int) SetMaxConnLifetime(d time.Duration) GetCtx() context.Context GetChars() (charLeft string, charRight string) GetMaster(schema ...string) (*sql.DB, error) GetSlave(schema ...string) (*sql.DB, error) QuoteWord(s string) string QuoteString(s string) string QuotePrefixTableName(table string) string Tables(schema ...string) (tables []string, err error) TableFields(table string, schema ...string) (map[string]*TableField, error) HasTable(name string) (bool, error) // HandleSqlBeforeCommit is a hook function, which deals with the sql string before // it's committed to underlying driver. The parameter <link> specifies the current // database connection operation object. You can modify the sql string <sql> and its // arguments <args> as you wish before they're committed to driver. HandleSqlBeforeCommit(link Link, sql string, args []interface{}) (string, []interface{}) // contains filtered or unexported methods }
DB defines the interfaces for ORM operations.
type Driver ¶
type Driver interface { // New creates and returns a database object for specified database server. New(core *Core, node *ConfigNode) (DB, error) }
Driver is the interface for integrating sql drivers into package gdb.
type DriverMssql ¶
type DriverMssql struct {
*Core
}
DriverMssql is the driver for SQL server database.
func (*DriverMssql) GetChars ¶
func (d *DriverMssql) GetChars() (charLeft string, charRight string)
GetChars returns the security char for this type of database.
func (*DriverMssql) HandleSqlBeforeCommit ¶
func (d *DriverMssql) HandleSqlBeforeCommit(link Link, sql string, args []interface{}) (string, []interface{})
HandleSqlBeforeCommit deals with the sql string before commits it to underlying sql driver.
func (*DriverMssql) New ¶
func (d *DriverMssql) New(core *Core, node *ConfigNode) (DB, error)
New creates and returns a database object for SQL server. It implements the interface of gdb.Driver for extra database driver installation.
func (*DriverMssql) Open ¶
func (d *DriverMssql) Open(config *ConfigNode) (*sql.DB, error)
Open creates and returns a underlying sql.DB object for mssql.
func (*DriverMssql) TableFields ¶
func (d *DriverMssql) TableFields(table string, schema ...string) (fields map[string]*TableField, err error)
TableFields retrieves and returns the fields information of specified table of current schema.
type DriverMysql ¶
type DriverMysql struct {
*Core
}
DriverMysql is the driver for mysql database.
func (*DriverMysql) GetChars ¶
func (d *DriverMysql) GetChars() (charLeft string, charRight string)
GetChars returns the security char for this type of database.
func (*DriverMysql) HandleSqlBeforeCommit ¶
func (d *DriverMysql) HandleSqlBeforeCommit(link Link, sql string, args []interface{}) (string, []interface{})
HandleSqlBeforeCommit handles the sql before posts it to database.
func (*DriverMysql) New ¶
func (d *DriverMysql) New(core *Core, node *ConfigNode) (DB, error)
New creates and returns a database object for mysql. It implements the interface of gdb.Driver for extra database driver installation.
func (*DriverMysql) Open ¶
func (d *DriverMysql) Open(config *ConfigNode) (*sql.DB, error)
Open creates and returns a underlying sql.DB object for mysql. Note that it converts time.Time argument to local timezone in default.
func (*DriverMysql) TableFields ¶
func (d *DriverMysql) TableFields(table string, schema ...string) (fields map[string]*TableField, err error)
TableFields retrieves and returns the fields information of specified table of current schema.
Note that it returns a map containing the field name and its corresponding fields. As a map is unsorted, the TableField struct has a "Index" field marks its sequence in the fields.
It's using cache feature to enhance the performance, which is never expired util the process restarts.
type DriverOracle ¶
type DriverOracle struct {
*Core
}
DriverOracle is the driver for oracle database.
func (*DriverOracle) DoBatchInsert ¶
func (*DriverOracle) GetChars ¶
func (d *DriverOracle) GetChars() (charLeft string, charRight string)
GetChars returns the security char for this type of database.
func (*DriverOracle) HandleSqlBeforeCommit ¶
func (d *DriverOracle) HandleSqlBeforeCommit(link Link, sql string, args []interface{}) (newSql string, newArgs []interface{})
HandleSqlBeforeCommit deals with the sql string before commits it to underlying sql driver.
func (*DriverOracle) New ¶
func (d *DriverOracle) New(core *Core, node *ConfigNode) (DB, error)
New creates and returns a database object for oracle. It implements the interface of gdb.Driver for extra database driver installation.
func (*DriverOracle) Open ¶
func (d *DriverOracle) Open(config *ConfigNode) (*sql.DB, error)
Open creates and returns a underlying sql.DB object for oracle.
func (*DriverOracle) TableFields ¶
func (d *DriverOracle) TableFields(table string, schema ...string) (fields map[string]*TableField, err error)
TableFields retrieves and returns the fields information of specified table of current schema.
func (*DriverOracle) Tables ¶
func (d *DriverOracle) Tables(schema ...string) (tables []string, err error)
Tables retrieves and returns the tables of current schema. It's mainly used in cli tool chain for automatically generating the models. Note that it ignores the parameter <schema> in oracle database, as it is not necessary.
type DriverPgsql ¶
type DriverPgsql struct {
*Core
}
DriverPgsql is the driver for postgresql database.
func (*DriverPgsql) GetChars ¶
func (d *DriverPgsql) GetChars() (charLeft string, charRight string)
GetChars returns the security char for this type of database.
func (*DriverPgsql) HandleSqlBeforeCommit ¶
func (d *DriverPgsql) HandleSqlBeforeCommit(link Link, sql string, args []interface{}) (string, []interface{})
HandleSqlBeforeCommit deals with the sql string before commits it to underlying sql driver.
func (*DriverPgsql) New ¶
func (d *DriverPgsql) New(core *Core, node *ConfigNode) (DB, error)
New creates and returns a database object for postgresql. It implements the interface of gdb.Driver for extra database driver installation.
func (*DriverPgsql) Open ¶
func (d *DriverPgsql) Open(config *ConfigNode) (*sql.DB, error)
Open creates and returns a underlying sql.DB object for pgsql.
func (*DriverPgsql) TableFields ¶
func (d *DriverPgsql) TableFields(table string, schema ...string) (fields map[string]*TableField, err error)
TableFields retrieves and returns the fields information of specified table of current schema.
type DriverSqlite ¶
type DriverSqlite struct {
*Core
}
DriverSqlite is the driver for sqlite database.
func (*DriverSqlite) GetChars ¶
func (d *DriverSqlite) GetChars() (charLeft string, charRight string)
GetChars returns the security char for this type of database.
func (*DriverSqlite) HandleSqlBeforeCommit ¶
func (d *DriverSqlite) HandleSqlBeforeCommit(link Link, sql string, args []interface{}) (string, []interface{})
HandleSqlBeforeCommit deals with the sql string before commits it to underlying sql driver. TODO 需要增加对Save方法的支持,可使用正则来实现替换, TODO 将ON DUPLICATE KEY UPDATE触发器修改为两条SQL语句(INSERT OR IGNORE & UPDATE)
func (*DriverSqlite) New ¶
func (d *DriverSqlite) New(core *Core, node *ConfigNode) (DB, error)
New creates and returns a database object for sqlite. It implements the interface of gdb.Driver for extra database driver installation.
func (*DriverSqlite) Open ¶
func (d *DriverSqlite) Open(config *ConfigNode) (*sql.DB, error)
Open creates and returns a underlying sql.DB object for sqlite.
func (*DriverSqlite) TableFields ¶
func (d *DriverSqlite) TableFields(table string, schema ...string) (fields map[string]*TableField, err error)
TableFields retrieves and returns the fields information of specified table of current schema.
type Link ¶
type Link interface { Query(sql string, args ...interface{}) (*sql.Rows, error) Exec(sql string, args ...interface{}) (sql.Result, error) Prepare(sql string) (*sql.Stmt, error) QueryContext(ctx context.Context, query string, args ...interface{}) (*sql.Rows, error) ExecContext(ctx context.Context, query string, args ...interface{}) (sql.Result, error) PrepareContext(ctx context.Context, query string) (*sql.Stmt, error) }
Link is a common database function wrapper interface.
type Map ¶
type Map = map[string]interface{} // Map is alias of map[string]interface{}, which is the most common usage map type.
type Model ¶
type Model struct {
// contains filtered or unexported fields
}
Model is the DAO for ORM.
func (*Model) All ¶
All does "SELECT FROM ..." statement for the model. It retrieves the records from table and returns the result as slice type. It returns nil if there's no record retrieved with the given conditions from table.
The optional parameter <where> is the same as the parameter of Model.Where function, see Model.Where.
func (*Model) Array ¶
Array queries and returns data values as slice from database. Note that if there're multiple columns in the result, it returns just one column values randomly.
If the optional parameter <fieldsAndWhere> is given, the fieldsAndWhere[0] is the selected fields and fieldsAndWhere[1:] is treated as where condition fields. Also see Model.Fields and Model.Where functions.
func (*Model) Cache ¶
Cache sets the cache feature for the model. It caches the result of the sql, which means if there's another same sql request, it just reads and returns the result from cache, it but not committed and executed into the database.
If the parameter <duration> < 0, which means it clear the cache with given <name>. If the parameter <duration> = 0, which means it never expires. If the parameter <duration> > 0, which means it expires after <duration>.
The optional parameter <name> is used to bind a name to the cache, which means you can later control the cache like changing the <duration> or clearing the cache with specified <name>.
Note that, the cache feature is disabled if the model is performing select statement on a transaction.
func (*Model) Clone ¶
Clone creates and returns a new model which is a clone of current model. Note that it uses deep-copy for the clone.
func (*Model) Count ¶
Count does "SELECT COUNT(x) FROM ..." statement for the model. The optional parameter <where> is the same as the parameter of Model.Where function, see Model.Where.
func (*Model) Data ¶
Data sets the operation data for the model. The parameter <data> can be type of string/map/gmap/slice/struct/*struct, etc. Note that, it uses shallow value copying for `data` if `data` is type of map/slice to avoid changing it inside function. Eg: Data("uid=10000") Data("uid", 10000) Data("uid=? AND name=?", 10000, "john") Data(g.Map{"uid": 10000, "name":"john"}) Data(g.Slice{g.Map{"uid": 10000, "name":"john"}, g.Map{"uid": 20000, "name":"smith"})
func (*Model) Delete ¶
Delete does "DELETE FROM ... " statement for the model. The optional parameter <where> is the same as the parameter of Model.Where function, see Model.Where.
func (*Model) Fields ¶
Fields sets the operation fields of the model, multiple fields joined using char ','. The parameter <fieldNamesOrMapStruct> can be type of string/map/*map/struct/*struct.
func (*Model) FieldsEx ¶
FieldsEx sets the excluded operation fields of the model, multiple fields joined using char ','. Note that this function supports only single table operations. The parameter <fieldNamesOrMapStruct> can be type of string/map/*map/struct/*struct.
func (*Model) FieldsExStr ¶
Deprecated, use GetFieldsExStr instead. This function name confuses the user that it was a chaining function.
func (*Model) FieldsStr ¶
Deprecated, use GetFieldsStr instead. This function name confuses the user that it was a chaining function.
func (*Model) Filter ¶
Filter marks filtering the fields which does not exist in the fields of the operated table. Note that this function supports only single table operations.
func (*Model) FindAll ¶
FindAll retrieves and returns Result by by Model.WherePri and Model.All. Also see Model.WherePri and Model.All.
func (*Model) FindArray ¶
FindArray queries and returns data values as slice from database. Note that if there're multiple columns in the result, it returns just one column values randomly. Also see Model.WherePri and Model.Value.
func (*Model) FindCount ¶
FindCount retrieves and returns the record number by Model.WherePri and Model.Count. Also see Model.WherePri and Model.Count.
func (*Model) FindOne ¶
FindOne retrieves and returns a single Record by Model.WherePri and Model.One. Also see Model.WherePri and Model.One.
func (*Model) FindScan ¶
FindScan retrieves and returns the record/records by Model.WherePri and Model.Scan. Also see Model.WherePri and Model.Scan.
func (*Model) FindValue ¶
FindValue retrieves and returns single field value by Model.WherePri and Model.Value. Also see Model.WherePri and Model.Value.
func (*Model) GetFieldsExStr ¶
FieldsExStr retrieves and returns fields which are not in parameter <fields> from the table, joined with char ','. The parameter <fields> specifies the fields that are excluded. The optional parameter <prefix> specifies the prefix for each field, eg: FieldsExStr("id", "u.").
func (*Model) GetFieldsStr ¶
FieldsStr retrieves and returns all fields from the table, joined with char ','. The optional parameter <prefix> specifies the prefix for each field, eg: FieldsStr("u.").
func (*Model) Having ¶
Having sets the having statement for the model. The parameters of this function usage are as the same as function Where. See Where.
func (*Model) InnerJoin ¶
InnerJoin does "INNER JOIN ... ON ..." statement on the model. The parameter <table> can be joined table and its joined condition, and also with its alias name, like: Table("user").InnerJoin("user_detail", "user_detail.uid=user.uid") Table("user", "u").InnerJoin("user_detail", "ud", "ud.uid=u.uid") Table("user", "u").InnerJoin("SELECT xxx FROM xxx AS a", "a.uid=u.uid")
func (*Model) Insert ¶
Insert does "INSERT INTO ..." statement for the model. The optional parameter <data> is the same as the parameter of Model.Data function, see Model.Data.
func (*Model) InsertIgnore ¶
InsertIgnore does "INSERT IGNORE INTO ..." statement for the model. The optional parameter <data> is the same as the parameter of Model.Data function, see Model.Data.
func (*Model) LeftJoin ¶
LeftJoin does "LEFT JOIN ... ON ..." statement on the model. The parameter <table> can be joined table and its joined condition, and also with its alias name, like: Table("user").LeftJoin("user_detail", "user_detail.uid=user.uid") Table("user", "u").LeftJoin("user_detail", "ud", "ud.uid=u.uid") Table("user", "u").LeftJoin("SELECT xxx FROM xxx AS a", "a.uid=u.uid")
func (*Model) Limit ¶
Limit sets the "LIMIT" statement for the model. The parameter <limit> can be either one or two number, if passed two number is passed, it then sets "LIMIT limit[0],limit[1]" statement for the model, or else it sets "LIMIT limit[0]" statement.
func (*Model) LockShared ¶
LockShared sets the lock in share mode for current operation.
func (*Model) LockUpdate ¶
LockUpdate sets the lock for update for current operation.
func (*Model) Offset ¶
Offset sets the "OFFSET" statement for the model. It only makes sense for some databases like SQLServer, PostgreSQL, etc.
func (*Model) OmitEmpty ¶
OmitEmpty sets OPTION_OMITEMPTY option for the model, which automatically filers the data and where attributes for empty values.
func (*Model) One ¶
One retrieves one record from table and returns the result as map type. It returns nil if there's no record retrieved with the given conditions from table.
The optional parameter <where> is the same as the parameter of Model.Where function, see Model.Where.
func (*Model) OptionOmitEmpty ¶
OptionOmitEmpty sets OPTION_OMITEMPTY option for the model, which automatically filers the data and where attributes for empty values. Deprecated, use OmitEmpty instead.
func (*Model) Page ¶
Page sets the paging number for the model. The parameter <page> is started from 1 for paging. Note that, it differs that the Limit function starts from 0 for "LIMIT" statement.
func (*Model) Replace ¶
Replace does "REPLACE INTO ..." statement for the model. The optional parameter <data> is the same as the parameter of Model.Data function, see Model.Data.
func (*Model) RightJoin ¶
RightJoin does "RIGHT JOIN ... ON ..." statement on the model. The parameter <table> can be joined table and its joined condition, and also with its alias name, like: Table("user").RightJoin("user_detail", "user_detail.uid=user.uid") Table("user", "u").RightJoin("user_detail", "ud", "ud.uid=u.uid") Table("user", "u").RightJoin("SELECT xxx FROM xxx AS a", "a.uid=u.uid")
func (*Model) Safe ¶
Safe marks this model safe or unsafe. If safe is true, it clones and returns a new model object whenever the operation done, or else it changes the attribute of current model.
func (*Model) Save ¶
Save does "INSERT INTO ... ON DUPLICATE KEY UPDATE..." statement for the model. The optional parameter <data> is the same as the parameter of Model.Data function, see Model.Data.
It updates the record if there's primary or unique index in the saving data, or else it inserts a new record into the table.
func (*Model) Scan ¶
Scan automatically calls Struct or Structs function according to the type of parameter <pointer>. It calls function Struct if <pointer> is type of *struct/**struct. It calls function Structs if <pointer> is type of *[]struct/*[]*struct.
The optional parameter <where> is the same as the parameter of Model.Where function, see Model.Where.
Note that it returns sql.ErrNoRows if there's no record retrieved with the given conditions from table.
Eg: user := new(User) err := db.Model("user").Where("id", 1).Scan(user)
user := (*User)(nil) err := db.Model("user").Where("id", 1).Scan(&user)
users := ([]User)(nil) err := db.Model("user").Scan(&users)
users := ([]*User)(nil) err := db.Model("user").Scan(&users)
func (*Model) ScanList ¶
func (m *Model) ScanList(listPointer interface{}, attributeName string, relation ...string) (err error)
ScanList converts <r> to struct slice which contains other complex struct attributes. Note that the parameter <listPointer> should be type of *[]struct/*[]*struct. Usage example:
type Entity struct { User *EntityUser UserDetail *EntityUserDetail UserScores []*EntityUserScores }
var users []*Entity or var users []Entity
ScanList(&users, "User") ScanList(&users, "UserDetail", "User", "uid:Uid") ScanList(&users, "UserScores", "User", "uid:Uid") The parameters "User"/"UserDetail"/"UserScores" in the example codes specify the target attribute struct that current result will be bound to. The "uid" in the example codes is the table field name of the result, and the "Uid" is the relational struct attribute name. It automatically calculates the HasOne/HasMany relationship with given <relation> parameter. See the example or unit testing cases for clear understanding for this function.
func (*Model) Slave ¶
Slave marks the following operation on slave node. Note that it makes sense only if there's any slave node configured.
func (*Model) Struct ¶
Struct retrieves one record from table and converts it into given struct. The parameter <pointer> should be type of *struct/**struct. If type **struct is given, it can create the struct internally during converting.
The optional parameter <where> is the same as the parameter of Model.Where function, see Model.Where.
Note that it returns sql.ErrNoRows if there's no record retrieved with the given conditions from table and <pointer> is not nil.
Eg: user := new(User) err := db.Model("user").Where("id", 1).Struct(user)
user := (*User)(nil) err := db.Model("user").Where("id", 1).Struct(&user)
func (*Model) Structs ¶
Structs retrieves records from table and converts them into given struct slice. The parameter <pointer> should be type of *[]struct/*[]*struct. It can create and fill the struct slice internally during converting.
The optional parameter <where> is the same as the parameter of Model.Where function, see Model.Where.
Note that it returns sql.ErrNoRows if there's no record retrieved with the given conditions from table and <pointer> is not empty.
Eg: users := ([]User)(nil) err := db.Model("user").Structs(&users)
users := ([]*User)(nil) err := db.Model("user").Structs(&users)
func (*Model) Unscoped ¶
Unscoped disables the auto-update time feature for insert, update and delete options.
func (*Model) Update ¶
Update does "UPDATE ... " statement for the model.
If the optional parameter <dataAndWhere> is given, the dataAndWhere[0] is the updated data field, and dataAndWhere[1:] is treated as where condition fields. Also see Model.Data and Model.Where functions.
func (*Model) Value ¶
Value retrieves a specified record value from table and returns the result as interface type. It returns nil if there's no record found with the given conditions from table.
If the optional parameter <fieldsAndWhere> is given, the fieldsAndWhere[0] is the selected fields and fieldsAndWhere[1:] is treated as where condition fields. Also see Model.Fields and Model.Where functions.
func (*Model) Where ¶
Where sets the condition statement for the model. The parameter <where> can be type of string/map/gmap/slice/struct/*struct, etc. Note that, if it's called more than one times, multiple conditions will be joined into where statement using "AND". Eg: Where("uid=10000") Where("uid", 10000) Where("money>? AND name like ?", 99999, "vip_%") Where("uid", 1).Where("name", "john") Where("status IN (?)", g.Slice{1,2,3}) Where("age IN(?,?)", 18, 50) Where(User{ Id : 1, UserName : "john"})
func (*Model) WherePri ¶
WherePri does the same logic as Model.Where except that if the parameter <where> is a single condition like int/string/float/slice, it treats the condition as the primary key value. That is, if primary key is "id" and given <where> parameter as "123", the WherePri function treats the condition as "id=123", but Model.Where treats the condition as string "123".
type Raw ¶
type Raw string // Raw is a raw sql that will not be treated as argument but as a direct sql part.
type Record ¶
type Result ¶
type Result []Record // Result is the row record array.
func (Result) Array ¶
Array retrieves and returns specified column values as slice. The parameter <field> is optional is the column field is only one.
func (Result) Chunk ¶
Chunk splits an Result into multiple Results, the size of each array is determined by <size>. The last chunk may contain less than size elements.
func (Result) MapKeyInt ¶
MapKeyInt converts <r> to a map[int]Map of which key is specified by <key>.
func (Result) MapKeyStr ¶
MapKeyStr converts <r> to a map[string]Map of which key is specified by <key>.
func (Result) MapKeyUint ¶
MapKeyUint converts <r> to a map[uint]Map of which key is specified by <key>.
func (Result) MapKeyValue ¶
MapKeyValue converts <r> to a map[string]Value of which key is specified by <key>. Note that the item value may be type of slice.
func (Result) RecordKeyInt ¶
RecordKeyInt converts <r> to a map[int]Record of which key is specified by <key>.
func (Result) RecordKeyStr ¶
RecordKeyInt converts <r> to a map[int]Record of which key is specified by <key>.
func (Result) RecordKeyUint ¶
RecordKeyUint converts <r> to a map[uint]Record of which key is specified by <key>.
func (Result) ScanList ¶
func (r Result) ScanList(listPointer interface{}, attributeName string, relation ...string) (err error)
ScanList converts <r> to struct slice which contains other complex struct attributes. Note that the parameter <listPointer> should be type of *[]struct/*[]*struct. Usage example:
type Entity struct { User *EntityUser UserDetail *EntityUserDetail UserScores []*EntityUserScores }
var users []*Entity or var users []Entity
ScanList(&users, "User") ScanList(&users, "UserDetail", "User", "uid:Uid") ScanList(&users, "UserScores", "User", "uid:Uid")
The parameters "User"/"UserDetail"/"UserScores" in the example codes specify the target attribute struct that current result will be bound to.
The "uid" in the example codes is the table field name of the result, and the "Uid" is the relational struct attribute name - not the attribute name of the bound to target. In the example codes, it's attribute name "Uid" of "User" of entity "Entity". It automatically calculates the HasOne/HasMany relationship with given <relation> parameter.
See the example or unit testing cases for clear understanding for this function.
func (Result) Structs ¶
Structs converts <r> to struct slice. Note that the parameter <pointer> should be type of *[]struct/*[]*struct.
func (Result) ToStringRecord ¶
Deprecated.
type Schema ¶
type Schema struct {
// contains filtered or unexported fields
}
Schema is a schema object from which it can then create a Model.
type Sql ¶
type Sql struct { Sql string // SQL string(may contain reserved char '?'). Args []interface{} // Arguments for this sql. Format string // Formatted sql which contains arguments in the sql. Error error // Execution result. Start int64 // Start execution timestamp in milliseconds. End int64 // End execution timestamp in milliseconds. Group string // Group is the group name of the configuration that the sql is executed from. }
Sql is the sql recording struct.
type SqlResult ¶
type SqlResult struct {
// contains filtered or unexported fields
}
SqlResult is execution result for sql operations. It also supports batch operation result for rowsAffected.
func (*SqlResult) LastInsertId ¶
see sql.Result.LastInsertId
func (*SqlResult) MustGetAffected ¶
MustGetAffected returns the affected rows count, if any error occurs, it panics.
func (*SqlResult) MustGetInsertId ¶
MustGetInsertId returns the last insert id, if any error occurs, it panics.
func (*SqlResult) RowsAffected ¶
see sql.Result.RowsAffected
type TX ¶
type TX struct {
// contains filtered or unexported fields
}
TX is the struct for transaction management.
func (*TX) BatchInsert ¶
BatchInsert batch inserts data. The parameter <list> must be type of slice of map or struct.
func (*TX) BatchInsertIgnore ¶
BatchInsert batch inserts data with ignore option. The parameter <list> must be type of slice of map or struct.
func (*TX) BatchReplace ¶
BatchReplace batch replaces data. The parameter <list> must be type of slice of map or struct.
func (*TX) BatchSave ¶
BatchSave batch replaces data. The parameter <list> must be type of slice of map or struct.
func (*TX) Delete ¶
Delete does "DELETE FROM ... " statement for the table.
The parameter <condition> can be type of string/map/gmap/slice/struct/*struct, etc. It is commonly used with parameter <args>. Eg: "uid=10000", "uid", 10000 "money>? AND name like ?", 99999, "vip_%" "status IN (?)", g.Slice{1,2,3} "age IN(?,?)", 18, 50 User{ Id : 1, UserName : "john"}
func (*TX) GetScan ¶
GetScan queries one or more records from database and converts them to given struct or struct array.
If parameter <pointer> is type of struct pointer, it calls GetStruct internally for the conversion. If parameter <pointer> is type of slice, it calls GetStructs internally for conversion.
func (*TX) GetStruct ¶
GetStruct queries one record from database and converts it to given struct. The parameter <pointer> should be a pointer to struct.
func (*TX) GetStructs ¶
GetStructs queries records from database and converts them to given struct. The parameter <pointer> should be type of struct slice: []struct/[]*struct.
func (*TX) GetValue ¶
GetValue queries and returns the field value from database. The sql should queries only one field from database, or else it returns only one field of the result.
func (*TX) Insert ¶
Insert does "INSERT INTO ..." statement for the table. If there's already one unique record of the data in the table, it returns error.
The parameter <data> can be type of map/gmap/struct/*struct/[]map/[]struct, etc. Eg: Data(g.Map{"uid": 10000, "name":"john"}) Data(g.Slice{g.Map{"uid": 10000, "name":"john"}, g.Map{"uid": 20000, "name":"smith"})
The parameter <batch> specifies the batch operation count when given data is slice.
func (*TX) InsertIgnore ¶
InsertIgnore does "INSERT IGNORE INTO ..." statement for the table. If there's already one unique record of the data in the table, it ignores the inserting.
The parameter <data> can be type of map/gmap/struct/*struct/[]map/[]struct, etc. Eg: Data(g.Map{"uid": 10000, "name":"john"}) Data(g.Slice{g.Map{"uid": 10000, "name":"john"}, g.Map{"uid": 20000, "name":"smith"})
The parameter <batch> specifies the batch operation count when given data is slice.
func (*TX) Prepare ¶
Prepare creates a prepared statement for later queries or executions. Multiple queries or executions may be run concurrently from the returned statement. The caller must call the statement's Close method when the statement is no longer needed.
func (*TX) Replace ¶
Replace does "REPLACE INTO ..." statement for the table. If there's already one unique record of the data in the table, it deletes the record and inserts a new one.
The parameter <data> can be type of map/gmap/struct/*struct/[]map/[]struct, etc. Eg: Data(g.Map{"uid": 10000, "name":"john"}) Data(g.Slice{g.Map{"uid": 10000, "name":"john"}, g.Map{"uid": 20000, "name":"smith"})
The parameter <data> can be type of map/gmap/struct/*struct/[]map/[]struct, etc. If given data is type of slice, it then does batch replacing, and the optional parameter <batch> specifies the batch operation count.
func (*TX) Save ¶
Save does "INSERT INTO ... ON DUPLICATE KEY UPDATE..." statement for the table. It updates the record if there's primary or unique index in the saving data, or else it inserts a new record into the table.
The parameter <data> can be type of map/gmap/struct/*struct/[]map/[]struct, etc. Eg: Data(g.Map{"uid": 10000, "name":"john"}) Data(g.Slice{g.Map{"uid": 10000, "name":"john"}, g.Map{"uid": 20000, "name":"smith"})
If given data is type of slice, it then does batch saving, and the optional parameter <batch> specifies the batch operation count.
func (*TX) Schema ¶
Schema creates and returns a initialization model from schema, from which it can then create a Model.
func (*TX) Update ¶
func (tx *TX) Update(table string, data interface{}, condition interface{}, args ...interface{}) (sql.Result, error)
Update does "UPDATE ... " statement for the table.
The parameter <data> can be type of string/map/gmap/struct/*struct, etc. Eg: "uid=10000", "uid", 10000, g.Map{"uid": 10000, "name":"john"}
The parameter <condition> can be type of string/map/gmap/slice/struct/*struct, etc. It is commonly used with parameter <args>. Eg: "uid=10000", "uid", 10000 "money>? AND name like ?", 99999, "vip_%" "status IN (?)", g.Slice{1,2,3} "age IN(?,?)", 18, 50 User{ Id : 1, UserName : "john"}
type TableField ¶
type TableField struct { Index int // For ordering purpose as map is unordered. Name string // Field name. Type string // Field type. Null bool // Field can be null or not. Key string // The index information(empty if it's not a index). Default interface{} // Default value for the field. Extra string // Extra information. Comment string // Comment. }
TableField is the struct for table field.
Source Files ¶
- gdb.go
- gdb_core.go
- gdb_core_config.go
- gdb_core_structure.go
- gdb_core_utility.go
- gdb_driver_mssql.go
- gdb_driver_mysql.go
- gdb_driver_oracle.go
- gdb_driver_pgsql.go
- gdb_driver_sqlite.go
- gdb_func.go
- gdb_model.go
- gdb_model_cache.go
- gdb_model_condition.go
- gdb_model_delete.go
- gdb_model_fields.go
- gdb_model_insert.go
- gdb_model_join.go
- gdb_model_lock.go
- gdb_model_option.go
- gdb_model_select.go
- gdb_model_time.go
- gdb_model_update.go
- gdb_model_utility.go
- gdb_result.go
- gdb_schema.go
- gdb_transaction.go
- gdb_type_record.go
- gdb_type_record_deprecated.go
- gdb_type_result.go
- gdb_type_result_deprecated.go
- gdb_type_result_scanlist.go