Documentation ¶
Overview ¶
Package xorm is a simple and powerful ORM for Go.
Installation ¶
Make sure you have installed Go 1.1+ and then:
go get github.com/lunny/xorm
Create Engine ¶
Firstly, we should new an engine for a database
engine, err := xorm.NewEngine(driverName, dataSourceName)
Method NewEngine's parameters is the same as sql.Open. It depends drivers' implementation. Generally, one engine is enough. You can set it as package variable.
Raw Methods ¶
Xorm also support raw sql execution:
1. query sql, the returned results is []map[string][]byte
results, err := engine.Query("select * from user")
2. exec sql, the returned results
affected, err := engine.Exec("update user set .... where ...")
ORM Methods ¶
There are 7 major ORM methods and many helpful methods to use to operate database.
1. Insert one or multipe records to database
affected, err := engine.Insert(&struct) // INSERT INTO struct () values () affected, err := engine.Insert(&struct1, &struct2) // INSERT INTO struct1 () values () // INSERT INTO struct2 () values () affected, err := engine.Insert(&sliceOfStruct) // INSERT INTO struct () values (),(),() affected, err := engine.Insert(&struct1, &sliceOfStruct2) // INSERT INTO struct1 () values () // INSERT INTO struct2 () values (),(),()
2. Query one record from database
has, err := engine.Get(&user) // SELECT * FROM user LIMIT 1
3. Query multiple records from database
err := engine.Find(...) // SELECT * FROM user
4. Query multiple records and record by record handle, there two methods, one is Iterate, another is Raws
raws, err := engine.Raws(...) // SELECT * FROM user for raws.Next() { raws.Scan(bean) } err := engine.Iterate(...) // SELECT * FROM user
5. Update one or more records
affected, err := engine.Update(&user) // UPDATE user SET
6. Delete one or more records
affected, err := engine.Delete(&user) // DELETE FROM user Where ...
7. Count records
counts, err := engine.Count(&user) // SELECT count(*) AS total FROM user
Conditions ¶
The above 7 methods could use with condition methods.
1. Id, In
engine.Id(1).Get(&user) // SELECT * FROM user WHERE id = 1 engine.In("id", 1, 2, 3).Find(&users) // SELECT * FROM user WHERE id IN (1, 2, 3)
2. Where, And, Or
engine.Where().And().Or().Find() // SELECT * FROM user WHERE (.. AND ..) OR ...
3. OrderBy, Asc, Desc
engine.Asc().Desc().Find() // SELECT * FROM user ORDER BY .. ASC, .. DESC engine.OrderBy().Find() // SELECT * FROM user ORDER BY ..
4. Limit, Top
engine.Limit().Find() // SELECT * FROM user LIMIT .. OFFSET .. engine.Top().Find() // SELECT * FROM user LIMIT ..
5. Sql
engine.Sql("select * from user").Find()
6. Cols, Omit, Distinct
engine.Cols("col1, col2").Find() // SELECT col1, col2 FROM user engine.Omit("col1").Find() // SELECT col2, col3 FROM user engine.Distinct("col1").Find() // SELECT DISTINCT col1 FROM user
7. Join, GroupBy, Having
engine.GroupBy("name").Having("name='xlw'").Find() //SELECT * FROM user GROUP BY name HAVING name='xlw' engine.Join("LEFT", "userdetail", "user.id=userdetail.id").Find() //SELECT * FROM user LEFT JOIN userdetail ON user.id=userdetail.id
More usage, please visit https://github.com/lunny/xorm/blob/master/docs/QuickStartEn.md
Index ¶
- Constants
- Variables
- func SQLType2Type(st SQLType) reflect.Type
- type AfterDeleteProcessor
- type AfterInsertProcessor
- type AfterUpdateProcessor
- type BeforeDeleteProcessor
- type BeforeInsertProcessor
- type BeforeUpdateProcessor
- type CacheMapper
- type CacheStore
- type Cacher
- type Column
- type Conversion
- type Engine
- func (engine *Engine) After(closures func(interface{})) *Session
- func (engine *Engine) AllCols() *Session
- func (engine *Engine) Asc(colNames ...string) *Session
- func (engine *Engine) AutoIncrStr() string
- func (engine *Engine) Before(closures func(interface{})) *Session
- func (engine *Engine) Cascade(trueOrFalse ...bool) *Session
- func (engine *Engine) Charset(charset string) *Session
- func (engine *Engine) ClearCache(beans ...interface{}) error
- func (engine *Engine) ClearCacheBean(bean interface{}, id int64) error
- func (engine *Engine) Close() error
- func (engine *Engine) Cols(columns ...string) *Session
- func (engine *Engine) Count(bean interface{}) (int64, error)
- func (engine *Engine) CreateIndexes(bean interface{}) error
- func (engine *Engine) CreateTables(beans ...interface{}) error
- func (engine *Engine) CreateUniques(bean interface{}) error
- func (engine *Engine) DBMetas() ([]*Table, error)
- func (engine *Engine) Delete(bean interface{}) (int64, error)
- func (engine *Engine) Desc(colNames ...string) *Session
- func (engine *Engine) Distinct(columns ...string) *Session
- func (engine *Engine) DropTables(beans ...interface{}) error
- func (engine *Engine) Exec(sql string, args ...interface{}) (sql.Result, error)
- func (engine *Engine) Find(beans interface{}, condiBeans ...interface{}) error
- func (engine *Engine) FormatTime(SQLTypeName string, t time.Time) (v interface{})
- func (engine *Engine) Get(bean interface{}) (bool, error)
- func (engine *Engine) GroupBy(keys string) *Session
- func (engine *Engine) Having(conditions string) *Session
- func (engine *Engine) Id(id interface{}) *Session
- func (engine *Engine) Import(ddlPath string) ([]sql.Result, error)
- func (engine *Engine) In(column string, args ...interface{}) *Session
- func (engine *Engine) Insert(beans ...interface{}) (int64, error)
- func (engine *Engine) InsertOne(bean interface{}) (int64, error)
- func (engine *Engine) IsTableEmpty(bean interface{}) (bool, error)
- func (engine *Engine) IsTableExist(bean interface{}) (bool, error)
- func (engine *Engine) Iterate(bean interface{}, fun IterFunc) error
- func (engine *Engine) Join(join_operator, tablename, condition string) *Session
- func (engine *Engine) Limit(limit int, start ...int) *Session
- func (engine *Engine) LogDebug(contents ...interface{})
- func (engine *Engine) LogError(contents ...interface{})
- func (engine *Engine) LogSQL(contents ...interface{})
- func (engine *Engine) LogWarn(contents ...interface{})
- func (engine *Engine) MapCacher(bean interface{}, cacher Cacher)
- func (engine *Engine) MustCols(columns ...string) *Session
- func (engine *Engine) NewSession() *Session
- func (engine *Engine) NoAutoTime() *Session
- func (engine *Engine) NoCache() *Session
- func (engine *Engine) NoCascade() *Session
- func (engine *Engine) NowTime(SQLTypeName string) interface{}
- func (engine *Engine) Omit(columns ...string) *Session
- func (engine *Engine) OpenDB() (*sql.DB, error)
- func (engine *Engine) OrderBy(order string) *Session
- func (engine *Engine) Ping() error
- func (engine *Engine) Query(sql string, paramStr ...interface{}) (resultsSlice []map[string][]byte, err error)
- func (engine *Engine) Quote(sql string) string
- func (engine *Engine) QuoteStr() string
- func (engine *Engine) Rows(bean interface{}) (*Rows, error)
- func (engine *Engine) SetColumnMapper(mapper IMapper)
- func (engine *Engine) SetDefaultCacher(cacher Cacher)
- func (engine *Engine) SetMapper(mapper IMapper)
- func (engine *Engine) SetMaxConns(conns int)
- func (engine *Engine) SetMaxIdleConns(conns int)
- func (engine *Engine) SetPool(pool IConnectPool) error
- func (engine *Engine) SetTableMapper(mapper IMapper)
- func (engine *Engine) Sql(querystring string, args ...interface{}) *Session
- func (engine *Engine) SqlType(c *Column) string
- func (engine *Engine) StoreEngine(storeEngine string) *Session
- func (engine *Engine) SupportInsertMany() bool
- func (engine *Engine) Sync(beans ...interface{}) error
- func (engine *Engine) TZTime(t time.Time) (r time.Time)
- func (engine *Engine) Table(tableNameOrBean interface{}) *Session
- func (engine *Engine) Update(bean interface{}, condiBeans ...interface{}) (int64, error)
- func (engine *Engine) UseBool(columns ...string) *Session
- func (engine *Engine) Where(querystring string, args ...interface{}) *Session
- type Filter
- type IConnectPool
- type IMapper
- type IdFilter
- type Index
- type IterFunc
- type LRUCacher
- func (m *LRUCacher) ClearBeans(tableName string)
- func (m *LRUCacher) ClearIds(tableName string)
- func (m *LRUCacher) DelBean(tableName string, id int64)
- func (m *LRUCacher) DelIds(tableName, sql string)
- func (m *LRUCacher) GC()
- func (m *LRUCacher) GetBean(tableName string, id int64) interface{}
- func (m *LRUCacher) GetIds(tableName, sql string) interface{}
- func (m *LRUCacher) PutBean(tableName string, id int64, obj interface{})
- func (m *LRUCacher) PutIds(tableName, sql string, ids interface{})
- func (m *LRUCacher) RunGC()
- type MemoryStore
- type NoneConnectPool
- func (p *NoneConnectPool) Close(engine *Engine) error
- func (p *NoneConnectPool) Init(engine *Engine) error
- func (p *NoneConnectPool) MaxConns() int
- func (p *NoneConnectPool) MaxIdleConns() int
- func (p *NoneConnectPool) ReleaseDB(engine *Engine, db *sql.DB)
- func (p *NoneConnectPool) RetrieveDB(engine *Engine) (db *sql.DB, err error)
- func (p *NoneConnectPool) SetMaxConns(conns int)
- func (p *NoneConnectPool) SetMaxIdleConns(conns int)
- type PK
- type PgSeqFilter
- type PrefixMapper
- type QuoteFilter
- type Rows
- type SQLType
- type SameMapper
- type Session
- func (session *Session) After(closures func(interface{})) *Session
- func (session *Session) AllCols() *Session
- func (session *Session) And(querystring string, args ...interface{}) *Session
- func (session *Session) Asc(colNames ...string) *Session
- func (session *Session) Before(closures func(interface{})) *Session
- func (session *Session) Begin() error
- func (session *Session) Cascade(trueOrFalse ...bool) *Session
- func (session *Session) Charset(charset string) *Session
- func (session *Session) Close()
- func (session *Session) Cols(columns ...string) *Session
- func (session *Session) Commit() error
- func (session *Session) Count(bean interface{}) (int64, error)
- func (session *Session) CreateIndexes(bean interface{}) error
- func (session *Session) CreateTable(bean interface{}) error
- func (session *Session) CreateUniques(bean interface{}) error
- func (session *Session) Delete(bean interface{}) (int64, error)
- func (session *Session) Desc(colNames ...string) *Session
- func (session *Session) Distinct(columns ...string) *Session
- func (session *Session) DropIndexes(bean interface{}) error
- func (session *Session) DropTable(bean interface{}) error
- func (session *Session) Exec(sqlStr string, args ...interface{}) (sql.Result, error)
- func (session *Session) Find(rowsSlicePtr interface{}, condiBean ...interface{}) error
- func (session *Session) Get(bean interface{}) (bool, error)
- func (session *Session) GroupBy(keys string) *Session
- func (session *Session) Having(conditions string) *Session
- func (session *Session) Id(id interface{}) *Session
- func (session *Session) In(column string, args ...interface{}) *Session
- func (session *Session) Init()
- func (session *Session) Insert(beans ...interface{}) (int64, error)
- func (session *Session) InsertMulti(rowsSlicePtr interface{}) (int64, error)
- func (session *Session) InsertOne(bean interface{}) (int64, error)
- func (session *Session) Iterate(bean interface{}, fun IterFunc) error
- func (session *Session) Join(join_operator, tablename, condition string) *Session
- func (session *Session) Limit(limit int, start ...int) *Session
- func (session *Session) MustCols(columns ...string) *Session
- func (session *Session) NoAutoTime() *Session
- func (session *Session) NoCache() *Session
- func (session *Session) NoCascade() *Session
- func (session *Session) Omit(columns ...string) *Session
- func (session *Session) Or(querystring string, args ...interface{}) *Session
- func (session *Session) OrderBy(order string) *Session
- func (session *Session) Ping() error
- func (session *Session) Query(sqlStr string, paramStr ...interface{}) (resultsSlice []map[string][]byte, err error)
- func (session *Session) Rollback() error
- func (session *Session) Rows(bean interface{}) (*Rows, error)
- func (session *Session) Sql(querystring string, args ...interface{}) *Session
- func (session *Session) StoreEngine(storeEngine string) *Session
- func (session *Session) Table(tableNameOrBean interface{}) *Session
- func (session *Session) Update(bean interface{}, condiBean ...interface{}) (int64, error)
- func (session *Session) UseBool(columns ...string) *Session
- func (session *Session) Where(querystring string, args ...interface{}) *Session
- type SimpleConnectPool
- func (p *SimpleConnectPool) Close(engine *Engine) error
- func (s *SimpleConnectPool) Init(engine *Engine) error
- func (p *SimpleConnectPool) MaxConns() int
- func (p *SimpleConnectPool) MaxIdleConns() int
- func (p *SimpleConnectPool) ReleaseDB(engine *Engine, db *sql.DB)
- func (p *SimpleConnectPool) RetrieveDB(engine *Engine) (*sql.DB, error)
- func (p *SimpleConnectPool) SetMaxConns(conns int)
- func (p *SimpleConnectPool) SetMaxIdleConns(conns int)
- type SnakeMapper
- type Statement
- func (statement *Statement) AllCols() *Statement
- func (statement *Statement) And(querystring string, args ...interface{}) *Statement
- func (statement *Statement) Cols(columns ...string) *Statement
- func (statement *Statement) Distinct(columns ...string) *Statement
- func (statement *Statement) GroupBy(keys string) *Statement
- func (statement *Statement) Having(conditions string) *Statement
- func (statement *Statement) Id(id interface{}) *Statement
- func (statement *Statement) In(column string, args ...interface{}) *Statement
- func (statement *Statement) Init()
- func (statement *Statement) Join(join_operator, tablename, condition string) *Statement
- func (statement *Statement) Limit(limit int, start ...int) *Statement
- func (statement *Statement) MustCols(columns ...string) *Statement
- func (statement *Statement) Omit(columns ...string)
- func (statement *Statement) Or(querystring string, args ...interface{}) *Statement
- func (statement *Statement) OrderBy(order string) *Statement
- func (statement *Statement) Sql(querystring string, args ...interface{}) *Statement
- func (statement *Statement) Table(tableNameOrBean interface{}) *Statement
- func (statement *Statement) TableName() string
- func (statement *Statement) Top(limit int) *Statement
- func (statement *Statement) UseBool(columns ...string) *Statement
- func (statement *Statement) Where(querystring string, args ...interface{}) *Statement
- type SuffixMapper
- type SysConnectPool
- func (p *SysConnectPool) Close(engine *Engine) error
- func (s *SysConnectPool) Init(engine *Engine) error
- func (p *SysConnectPool) MaxConns() int
- func (p *SysConnectPool) MaxIdleConns() int
- func (s *SysConnectPool) ReleaseDB(engine *Engine, db *sql.DB)
- func (s *SysConnectPool) RetrieveDB(engine *Engine) (db *sql.DB, err error)
- func (p *SysConnectPool) SetMaxConns(conns int)
- func (p *SysConnectPool) SetMaxIdleConns(conns int)
- type Table
Constants ¶
const ( // default cache expired time CacheExpired = 60 * time.Minute // not use now CacheMaxMemory = 256 // evey ten minutes to clear all expired nodes CacheGcInterval = 10 * time.Minute // each time when gc to removed max nodes CacheGcMaxRemoved = 20 )
const ( POSTGRES = "postgres" SQLITE = "sqlite3" MYSQL = "mysql" MYMYSQL = "mymysql" MSSQL = "mssql" ORACLE_OCI = "oci8" QL = "ql" )
const ( IndexType = iota + 1 UniqueType )
const ( TWOSIDES = iota + 1 ONLYTODB ONLYFROMDB )
const (
Version string = "0.3.1"
)
Variables ¶
var ( ErrParamsType error = errors.New("Params type error") ErrTableNotFound error = errors.New("Not found table") ErrUnSupportedType error = errors.New("Unsupported type error") ErrNotExist error = errors.New("Not exist error") ErrCacheFailed error = errors.New("Cache failed") ErrNeedDeletedCond error = errors.New("Delete need at least one condition") ErrNotImplemented error = errors.New("Not implemented.") )
var ( Bit = "BIT" TinyInt = "TINYINT" SmallInt = "SMALLINT" MediumInt = "MEDIUMINT" Int = "INT" Integer = "INTEGER" BigInt = "BIGINT" Char = "CHAR" Varchar = "VARCHAR" TinyText = "TINYTEXT" Text = "TEXT" MediumText = "MEDIUMTEXT" LongText = "LONGTEXT" Date = "DATE" DateTime = "DATETIME" Time = "TIME" TimeStamp = "TIMESTAMP" TimeStampz = "TIMESTAMPZ" Decimal = "DECIMAL" Numeric = "NUMERIC" Real = "REAL" Float = "FLOAT" Double = "DOUBLE" Binary = "BINARY" VarBinary = "VARBINARY" TinyBlob = "TINYBLOB" Blob = "BLOB" MediumBlob = "MEDIUMBLOB" LongBlob = "LONGBLOB" Bytea = "BYTEA" Bool = "BOOL" Serial = "SERIAL" BigSerial = "BIGSERIAL" )
Functions ¶
Types ¶
type AfterDeleteProcessor ¶
type AfterDeleteProcessor interface {
AfterDelete()
}
Executed after an object has been deleted
type AfterInsertProcessor ¶
type AfterInsertProcessor interface {
AfterInsert()
}
Executed after an object is persisted to the database
type AfterUpdateProcessor ¶
type AfterUpdateProcessor interface {
AfterUpdate()
}
Executed after an object has been updated
type BeforeDeleteProcessor ¶
type BeforeDeleteProcessor interface {
BeforeDelete()
}
Executed before an object is deleted
type BeforeInsertProcessor ¶
type BeforeInsertProcessor interface {
BeforeInsert()
}
Executed before an object is initially persisted to the database
type BeforeUpdateProcessor ¶
type BeforeUpdateProcessor interface {
BeforeUpdate()
}
Executed before an object is updated
type CacheMapper ¶
type CacheMapper struct {
// contains filtered or unexported fields
}
func NewCacheMapper ¶
func NewCacheMapper(mapper IMapper) *CacheMapper
func (*CacheMapper) Obj2Table ¶
func (m *CacheMapper) Obj2Table(o string) string
func (*CacheMapper) Table2Obj ¶
func (m *CacheMapper) Table2Obj(t string) string
type CacheStore ¶
type CacheStore interface { Put(key, value interface{}) error Get(key interface{}) (interface{}, error) Del(key interface{}) error }
CacheStore is a interface to store cache
type Cacher ¶
type Cacher interface { GetIds(tableName, sql string) interface{} GetBean(tableName string, id int64) interface{} PutIds(tableName, sql string, ids interface{}) PutBean(tableName string, id int64, obj interface{}) DelIds(tableName, sql string) DelBean(tableName string, id int64) ClearIds(tableName string) ClearBeans(tableName string) }
Cacher is an interface to provide cache
type Column ¶
type Column struct { Name string FieldName string SQLType SQLType Length int Length2 int Nullable bool Default string Indexes map[string]bool IsPrimaryKey bool IsAutoIncrement bool MapType int IsCreated bool IsUpdated bool IsCascade bool IsVersion bool DefaultIsEmpty bool }
database column
type Conversion ¶
Conversion is an interface. A type implements Conversion will according the custom method to fill into database and retrieve from database.
type Engine ¶
type Engine struct { TagIdentifier string DriverName string DataSourceName string Tables map[reflect.Type]*Table ShowSQL bool ShowErr bool ShowDebug bool ShowWarn bool Pool IConnectPool Filters []Filter Logger io.Writer Cacher Cacher UseCache bool TimeZone string // contains filtered or unexported fields }
Engine is the major struct of xorm, it means a database manager. Commonly, an application only need one engine
func (*Engine) Asc ¶
Method Asc will generate "ORDER BY column1 DESC, column2 Asc" This method can chainable use.
engine.Desc("name").Asc("age").Find(&users) // SELECT * FROM user ORDER BY name DESC, age ASC
func (*Engine) AutoIncrStr ¶
Database's autoincrement statement
func (*Engine) ClearCache ¶
If enabled cache, clear some tables' cache
func (*Engine) ClearCacheBean ¶
If enabled cache, clear the cache bean
func (*Engine) CreateIndexes ¶
create indexes
func (*Engine) CreateTables ¶
CreateTables create tabls according bean
func (*Engine) CreateUniques ¶
create uniques
func (*Engine) Distinct ¶
use for distinct columns. Caution: when you are using cache, distinct will not be cached because cache system need id, but distinct will not provide id
func (*Engine) DropTables ¶
func (*Engine) Find ¶
Find retrieve records from table, condiBeans's non-empty fields are conditions. beans could be []Struct, []*Struct, map[int64]Struct map[int64]*Struct
func (*Engine) FormatTime ¶
func (*Engine) IsTableEmpty ¶
If a table has any reocrd
func (*Engine) IsTableExist ¶
If a table is exist
func (*Engine) Iterate ¶
Iterate record by record handle records from table, bean's non-empty fields are conditions.
func (*Engine) Join ¶
The join_operator should be one of INNER, LEFT OUTER, CROSS etc - this will be prepended to JOIN
func (*Engine) NoAutoTime ¶
Default if your struct has "created" or "updated" filed tag, the fields will automatically be filled with current time when Insert or Update invoked. Call NoAutoTime if you dont' want to fill automatically.
func (*Engine) NoCache ¶
If you has set default cacher, and you want temporilly stop use cache, you can use NoCache()
func (*Engine) Query ¶
func (engine *Engine) Query(sql string, paramStr ...interface{}) (resultsSlice []map[string][]byte, err error)
Exec a raw sql and return records as []map[string][]byte
func (*Engine) QuoteStr ¶
Engine's database use which charactor as quote. mysql, sqlite use ` and postgres use "
func (*Engine) Rows ¶
Return sql.Rows compatible Rows obj, as a forward Iterator object for iterating record by record, bean's non-empty fields are conditions.
func (*Engine) SetColumnMapper ¶
func (*Engine) SetDefaultCacher ¶
SetDefaltCacher set the default cacher. Xorm's default not enable cacher.
func (*Engine) SetMaxConns ¶
SetMaxConns is only available for go 1.2+
func (*Engine) SetPool ¶
func (engine *Engine) SetPool(pool IConnectPool) error
Set engine's pool, the pool default is Go's standard library's connection pool.
func (*Engine) SetTableMapper ¶
func (*Engine) Sql ¶
Sql method let's you manualy write raw sql and operate For example:
engine.Sql("select * from user").Find(&users)
This code will execute "select * from user" and set the records to users
func (*Engine) StoreEngine ¶
set store engine when create table, only support mysql now
func (*Engine) SupportInsertMany ¶
If engine's database support batch insert records like "insert into user values (name, age), (name, age)". When the return is ture, then engine.Insert(&users) will generate batch sql and exeute.
func (*Engine) Sync ¶
Sync the new struct changes to database, this method will automatically add table, column, index, unique. but will not delete or change anything. If you change some field, you should change the database manually.
func (*Engine) Update ¶
Update records, bean's non-empty fields are updated contents, condiBean' non-empty filds are conditions CAUTION:
1.bool will defaultly be updated content nor conditions You should call UseBool if you have bool to use. 2.float32 & float64 may be not inexact as conditions
type IConnectPool ¶
type IConnectPool interface { Init(engine *Engine) error RetrieveDB(engine *Engine) (*sql.DB, error) ReleaseDB(engine *Engine, db *sql.DB) Close(engine *Engine) error SetMaxIdleConns(conns int) MaxIdleConns() int SetMaxConns(conns int) MaxConns() int }
Interface IConnecPool is a connection pool interface, all implements should implement Init, RetrieveDB, ReleaseDB and Close methods. Init for init when engine be created or invoke SetPool RetrieveDB for requesting a connection to db; ReleaseDB for releasing a db connection; Close for invoking when engine.Close
func NewNoneConnectPool ¶
func NewNoneConnectPool() IConnectPool
NewNoneConnectPool new a NoneConnectPool.
func NewSimpleConnectPool ¶
func NewSimpleConnectPool() IConnectPool
NewSimpleConnectPool new a SimpleConnectPool
func NewSysConnectPool ¶
func NewSysConnectPool() IConnectPool
NewSysConnectPool new a SysConnectPool.
type IdFilter ¶
type IdFilter struct { }
IdFilter filter SQL replace (id) to primary key column name
type LRUCacher ¶
type LRUCacher struct { Max int Expired time.Duration GcInterval time.Duration // contains filtered or unexported fields }
LRUCacher implements Cacher according to LRU algorithm
func NewLRUCacher ¶
func NewLRUCacher(store CacheStore, max int) *LRUCacher
func NewLRUCacher2 ¶
func NewLRUCacher2(store CacheStore, expired time.Duration, max int) *LRUCacher
func (*LRUCacher) ClearBeans ¶
func (*LRUCacher) GC ¶
func (m *LRUCacher) GC()
GC check ids lit and sql list to remove all element expired
type MemoryStore ¶
type MemoryStore struct {
// contains filtered or unexported fields
}
MemoryStore implements CacheStore provide local machine memory store
func NewMemoryStore ¶
func NewMemoryStore() *MemoryStore
func (*MemoryStore) Del ¶
func (s *MemoryStore) Del(key interface{}) error
func (*MemoryStore) Get ¶
func (s *MemoryStore) Get(key interface{}) (interface{}, error)
func (*MemoryStore) Put ¶
func (s *MemoryStore) Put(key, value interface{}) error
type NoneConnectPool ¶
type NoneConnectPool struct { }
Struct NoneConnectPool is a implement for IConnectPool. It provides directly invoke driver's open and release connection function
func (*NoneConnectPool) Close ¶
func (p *NoneConnectPool) Close(engine *Engine) error
Close do nothing
func (*NoneConnectPool) MaxIdleConns ¶
func (p *NoneConnectPool) MaxIdleConns() int
func (*NoneConnectPool) ReleaseDB ¶
func (p *NoneConnectPool) ReleaseDB(engine *Engine, db *sql.DB)
ReleaseDB directly close a connection
func (*NoneConnectPool) RetrieveDB ¶
func (p *NoneConnectPool) RetrieveDB(engine *Engine) (db *sql.DB, err error)
RetrieveDB directly open a connection
func (*NoneConnectPool) SetMaxConns ¶
func (p *NoneConnectPool) SetMaxConns(conns int)
not implemented
func (*NoneConnectPool) SetMaxIdleConns ¶
func (p *NoneConnectPool) SetMaxIdleConns(conns int)
type PgSeqFilter ¶
type PgSeqFilter struct { }
PgSeqFilter filter SQL replace ?, ? ... to $1, $2 ...
type PrefixMapper ¶
provide prefix table name support
func NewPrefixMapper ¶
func NewPrefixMapper(mapper IMapper, prefix string) PrefixMapper
func (PrefixMapper) Obj2Table ¶
func (mapper PrefixMapper) Obj2Table(name string) string
func (PrefixMapper) Table2Obj ¶
func (mapper PrefixMapper) Table2Obj(name string) string
type QuoteFilter ¶
type QuoteFilter struct { }
QuoteFilter filter SQL replace ` to database's own quote character
type Rows ¶
type Rows struct { NoTypeCheck bool // contains filtered or unexported fields }
func (*Rows) Err ¶
Err returns the error, if any, that was encountered during iteration. Err may be called after an explicit or implicit Close.
type SameMapper ¶
type SameMapper struct { }
SameMapper implements IMapper and provides same name between struct and database table
func (SameMapper) Obj2Table ¶
func (m SameMapper) Obj2Table(o string) string
func (SameMapper) Table2Obj ¶
func (m SameMapper) Table2Obj(t string) string
type Session ¶
type Session struct { Db *sql.DB Engine *Engine Tx *sql.Tx Statement Statement IsAutoCommit bool IsCommitedOrRollbacked bool TransType string IsAutoClose bool // contains filtered or unexported fields }
Struct Session keep a pointer to sql.DB and provides all execution of all kind of database operations.
func (*Session) Asc ¶
Method Asc provide asc order by query condition, the input parameters are columns.
func (*Session) Close ¶
func (session *Session) Close()
Method Close release the connection from pool
func (*Session) CreateIndexes ¶
create indexes
func (*Session) CreateTable ¶
this function create a table according a bean
func (*Session) CreateUniques ¶
create uniques
func (*Session) Desc ¶
Method Desc provide desc order by query condition, the input parameters are columns.
func (*Session) Distinct ¶
use for distinct columns. Caution: when you are using cache, distinct will not be cached because cache system need id, but distinct will not provide id
func (*Session) DropIndexes ¶
drop indexes
func (*Session) Find ¶
Find retrieve records from table, condiBeans's non-empty fields are conditions. beans could be []Struct, []*Struct, map[int64]Struct map[int64]*Struct
func (*Session) Get ¶
get retrieve one record from database, bean's non-empty fields will be as conditions
func (*Session) Init ¶
func (session *Session) Init()
Method Init reset the session as the init status.
func (*Session) InsertMulti ¶
Insert multiple records
func (*Session) InsertOne ¶
Method InsertOne insert only one struct into database as a record. The in parameter bean must a struct or a point to struct. The return parameter is inserted and error
func (*Session) Iterate ¶
Iterate record by record handle records from table, condiBeans's non-empty fields are conditions. beans could be []Struct, []*Struct, map[int64]Struct map[int64]*Struct
func (*Session) Join ¶
The join_operator should be one of INNER, LEFT OUTER, CROSS etc - this will be prepended to JOIN
func (*Session) NoAutoTime ¶
Method NoAutoTime means do not automatically give created field and updated field the current time on the current session temporarily
func (*Session) NoCache ¶
Method NoCache ask this session do not retrieve data from cache system and get data from database directly.
func (*Session) OrderBy ¶
Method OrderBy provide order by query condition, the input parameter is the content after order by on a sql statement.
func (*Session) Query ¶
func (session *Session) Query(sqlStr string, paramStr ...interface{}) (resultsSlice []map[string][]byte, err error)
Exec a raw sql and return records as []map[string][]byte
func (*Session) Rows ¶
Return sql.Rows compatible Rows obj, as a forward Iterator object for iterating record by record, bean's non-empty fields are conditions.
func (*Session) Sql ¶
Method Sql provides raw sql input parameter. When you have a complex SQL statement and cannot use Where, Id, In and etc. Methods to describe, you can use Sql.
func (*Session) StoreEngine ¶
Method StoreEngine is only avialble mysql dialect currently
func (*Session) Table ¶
Method Table can input a string or pointer to struct for special a table to operate.
func (*Session) Update ¶
Update records, bean's non-empty fields are updated contents, condiBean' non-empty filds are conditions CAUTION:
1.bool will defaultly be updated content nor conditions You should call UseBool if you have bool to use. 2.float32 & float64 may be not inexact as conditions
type SimpleConnectPool ¶
type SimpleConnectPool struct {
// contains filtered or unexported fields
}
Struct SimpleConnectPool is a simple implementation for IConnectPool. It's a custom connection pool and not use system connection pool. Opening or Closing a database connection must be enter a lock. This implements will be improved in furture.
func (*SimpleConnectPool) Close ¶
func (p *SimpleConnectPool) Close(engine *Engine) error
Close release all db
func (*SimpleConnectPool) Init ¶
func (s *SimpleConnectPool) Init(engine *Engine) error
func (*SimpleConnectPool) MaxIdleConns ¶
func (p *SimpleConnectPool) MaxIdleConns() int
func (*SimpleConnectPool) ReleaseDB ¶
func (p *SimpleConnectPool) ReleaseDB(engine *Engine, db *sql.DB)
ReleaseDB release a db from connection pool
func (*SimpleConnectPool) RetrieveDB ¶
func (p *SimpleConnectPool) RetrieveDB(engine *Engine) (*sql.DB, error)
RetrieveDB get a connection from connection pool
func (*SimpleConnectPool) SetMaxConns ¶
func (p *SimpleConnectPool) SetMaxConns(conns int)
not implemented
func (*SimpleConnectPool) SetMaxIdleConns ¶
func (p *SimpleConnectPool) SetMaxIdleConns(conns int)
type SnakeMapper ¶
type SnakeMapper struct { }
SnakeMapper implements IMapper and provides name transaltion between struct and database table
func (SnakeMapper) Obj2Table ¶
func (mapper SnakeMapper) Obj2Table(name string) string
func (SnakeMapper) Table2Obj ¶
func (mapper SnakeMapper) Table2Obj(name string) string
type Statement ¶
type Statement struct { RefTable *Table Engine *Engine Start int LimitN int WhereStr string IdParam *PK Params []interface{} OrderStr string JoinStr string GroupByStr string HavingStr string ColumnStr string OmitStr string ConditionStr string AltTableName string RawSQL string RawParams []interface{} UseCascade bool UseAutoJoin bool StoreEngine string Charset string BeanArgs []interface{} UseCache bool UseAutoTime bool IsDistinct bool // contains filtered or unexported fields }
statement save all the sql info for executing SQL
func (*Statement) Id ¶
Generate "where id = ? " statment or for composite key "where key1 = ? and key2 = ?"
func (*Statement) Join ¶
The join_operator should be one of INNER, LEFT OUTER, CROSS etc - this will be prepended to JOIN
type SuffixMapper ¶
provide suffix table name support
func NewSuffixMapper ¶
func NewSuffixMapper(mapper IMapper, suffix string) SuffixMapper
func (SuffixMapper) Obj2Table ¶
func (mapper SuffixMapper) Obj2Table(name string) string
func (SuffixMapper) Table2Obj ¶
func (mapper SuffixMapper) Table2Obj(name string) string
type SysConnectPool ¶
type SysConnectPool struct {
// contains filtered or unexported fields
}
Struct SysConnectPool is a simple wrapper for using system default connection pool. About the system connection pool, you can review the code database/sql/sql.go It's currently default Pool implments.
func (*SysConnectPool) Close ¶
func (p *SysConnectPool) Close(engine *Engine) error
Close closed the only db
func (*SysConnectPool) Init ¶
func (s *SysConnectPool) Init(engine *Engine) error
Init create a db immediately and keep it util engine closed.
func (*SysConnectPool) MaxIdleConns ¶
func (p *SysConnectPool) MaxIdleConns() int
func (*SysConnectPool) ReleaseDB ¶
func (s *SysConnectPool) ReleaseDB(engine *Engine, db *sql.DB)
ReleaseDB do nothing
func (*SysConnectPool) RetrieveDB ¶
func (s *SysConnectPool) RetrieveDB(engine *Engine) (db *sql.DB, err error)
RetrieveDB just return the only db
func (*SysConnectPool) SetMaxConns ¶
func (p *SysConnectPool) SetMaxConns(conns int)
not implemented
func (*SysConnectPool) SetMaxIdleConns ¶
func (p *SysConnectPool) SetMaxIdleConns(conns int)
type Table ¶
type Table struct { Name string Type reflect.Type ColumnsSeq []string Columns map[string]*Column Indexes map[string]*Index PrimaryKeys []string AutoIncrement string Created map[string]bool Updated string Version string Cacher Cacher }
database table