improved docs & delete or private codes
This commit is contained in:
parent
65d079fc2c
commit
e1644f7c98
26
doc.go
26
doc.go
|
@ -13,10 +13,34 @@ First, we should new a engine for a database
|
||||||
Method NewEngine's parameters is the same as sql.Open. It depends
|
Method NewEngine's parameters is the same as sql.Open. It depends
|
||||||
drivers' implementation. Generally, one engine is enough.
|
drivers' implementation. Generally, one engine is enough.
|
||||||
|
|
||||||
engine.Get(...)
|
There are 7 major methods and many helpful methods to use to operate database.
|
||||||
|
|
||||||
|
1. Insert one or multipe records to database
|
||||||
|
|
||||||
engine.Insert(...)
|
engine.Insert(...)
|
||||||
|
|
||||||
|
2. Query one record from database
|
||||||
|
|
||||||
|
engine.Get(...)
|
||||||
|
|
||||||
|
3. Query multiple records from database
|
||||||
|
|
||||||
engine.Find(...)
|
engine.Find(...)
|
||||||
|
|
||||||
|
4. Query multiple records and record by record handle
|
||||||
|
|
||||||
engine.Iterate(...)
|
engine.Iterate(...)
|
||||||
|
|
||||||
|
5. Update one or more records
|
||||||
|
|
||||||
|
engine.Update(...)
|
||||||
|
|
||||||
|
6. Delete one or more records
|
||||||
|
|
||||||
engine.Delete(...)
|
engine.Delete(...)
|
||||||
|
|
||||||
|
7. Count records
|
||||||
|
|
||||||
|
engine.Count(...)
|
||||||
*/
|
*/
|
||||||
package xorm
|
package xorm
|
||||||
|
|
|
@ -391,6 +391,9 @@ Having的参数字符串
|
||||||
* NoAutoTime()
|
* NoAutoTime()
|
||||||
如果此方法执行,则此次生成的语句中Created和Updated字段将不自动赋值为当前时间
|
如果此方法执行,则此次生成的语句中Created和Updated字段将不自动赋值为当前时间
|
||||||
|
|
||||||
|
* NoCache()
|
||||||
|
如果此方法执行,则此次生成的语句则在非缓存模式下执行
|
||||||
|
|
||||||
* UseBool(...string)
|
* UseBool(...string)
|
||||||
当从一个struct来生成查询条件或更新字段时,xorm会判断struct的field是否为0,"",nil,如果为以上则不当做查询条件或者更新内容。因为bool类型只有true和false两种值,因此默认所有bool类型不会作为查询条件或者更新字段。如果可以使用此方法,如果默认不传参数,则所有的bool字段都将会被使用,如果参数不为空,则参数中指定的为字段名,则这些字段对应的bool值将被使用。
|
当从一个struct来生成查询条件或更新字段时,xorm会判断struct的field是否为0,"",nil,如果为以上则不当做查询条件或者更新内容。因为bool类型只有true和false两种值,因此默认所有bool类型不会作为查询条件或者更新字段。如果可以使用此方法,如果默认不传参数,则所有的bool字段都将会被使用,如果参数不为空,则参数中指定的为字段名,则这些字段对应的bool值将被使用。
|
||||||
|
|
||||||
|
|
84
engine.go
84
engine.go
|
@ -37,6 +37,8 @@ type dialect interface {
|
||||||
GetIndexes(tableName string) (map[string]*Index, error)
|
GetIndexes(tableName string) (map[string]*Index, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Engine is the major struct of xorm, it means a database manager.
|
||||||
|
// Commonly, an application only need one engine
|
||||||
type Engine struct {
|
type Engine struct {
|
||||||
Mapper IMapper
|
Mapper IMapper
|
||||||
TagIdentifier string
|
TagIdentifier string
|
||||||
|
@ -122,7 +124,7 @@ func (engine *Engine) NoCache() *Session {
|
||||||
// Set a table use a special cacher
|
// Set a table use a special cacher
|
||||||
func (engine *Engine) MapCacher(bean interface{}, cacher Cacher) {
|
func (engine *Engine) MapCacher(bean interface{}, cacher Cacher) {
|
||||||
t := rType(bean)
|
t := rType(bean)
|
||||||
engine.AutoMapType(t)
|
engine.autoMapType(t)
|
||||||
engine.Tables[t].Cacher = cacher
|
engine.Tables[t].Cacher = cacher
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -143,11 +145,6 @@ func (engine *Engine) Close() error {
|
||||||
return engine.Pool.Close(engine)
|
return engine.Pool.Close(engine)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test method is deprecated, use Ping() method.
|
|
||||||
func (engine *Engine) Test() error {
|
|
||||||
return engine.Ping()
|
|
||||||
}
|
|
||||||
|
|
||||||
// Ping tests if database is alive.
|
// Ping tests if database is alive.
|
||||||
func (engine *Engine) Ping() error {
|
func (engine *Engine) Ping() error {
|
||||||
session := engine.NewSession()
|
session := engine.NewSession()
|
||||||
|
@ -184,20 +181,29 @@ func (engine *Engine) LogWarn(contents ...interface{}) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// execute 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 *Engine) Sql(querystring string, args ...interface{}) *Session {
|
func (engine *Engine) Sql(querystring string, args ...interface{}) *Session {
|
||||||
session := engine.NewSession()
|
session := engine.NewSession()
|
||||||
session.IsAutoClose = true
|
session.IsAutoClose = true
|
||||||
return session.Sql(querystring, args...)
|
return session.Sql(querystring, args...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 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 *Engine) NoAutoTime() *Session {
|
func (engine *Engine) NoAutoTime() *Session {
|
||||||
session := engine.NewSession()
|
session := engine.NewSession()
|
||||||
session.IsAutoClose = true
|
session.IsAutoClose = true
|
||||||
return session.NoAutoTime()
|
return session.NoAutoTime()
|
||||||
}
|
}
|
||||||
|
|
||||||
// retrieve all tables, columns, indexes' informations from database.
|
// Retrieve all tables, columns, indexes' informations from database.
|
||||||
func (engine *Engine) DBMetas() ([]*Table, error) {
|
func (engine *Engine) DBMetas() ([]*Table, error) {
|
||||||
tables, err := engine.dialect.GetTables()
|
tables, err := engine.dialect.GetTables()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -266,60 +272,82 @@ func (engine *Engine) StoreEngine(storeEngine string) *Session {
|
||||||
return session.StoreEngine(storeEngine)
|
return session.StoreEngine(storeEngine)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 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 *Engine) Distinct(columns ...string) *Session {
|
func (engine *Engine) Distinct(columns ...string) *Session {
|
||||||
session := engine.NewSession()
|
session := engine.NewSession()
|
||||||
session.IsAutoClose = true
|
session.IsAutoClose = true
|
||||||
return session.Distinct(columns...)
|
return session.Distinct(columns...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// only use the paramters as select or update columns
|
||||||
func (engine *Engine) Cols(columns ...string) *Session {
|
func (engine *Engine) Cols(columns ...string) *Session {
|
||||||
session := engine.NewSession()
|
session := engine.NewSession()
|
||||||
session.IsAutoClose = true
|
session.IsAutoClose = true
|
||||||
return session.Cols(columns...)
|
return session.Cols(columns...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Xorm automatically retrieve condition according struct, but
|
||||||
|
// if struct has bool field, it will ignore them. So use UseBool
|
||||||
|
// to tell system to do not ignore them.
|
||||||
|
// If no paramters, it will use all the bool field of struct, or
|
||||||
|
// it will use paramters's columns
|
||||||
func (engine *Engine) UseBool(columns ...string) *Session {
|
func (engine *Engine) UseBool(columns ...string) *Session {
|
||||||
session := engine.NewSession()
|
session := engine.NewSession()
|
||||||
session.IsAutoClose = true
|
session.IsAutoClose = true
|
||||||
return session.UseBool(columns...)
|
return session.UseBool(columns...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Only not use the paramters as select or update columns
|
||||||
func (engine *Engine) Omit(columns ...string) *Session {
|
func (engine *Engine) Omit(columns ...string) *Session {
|
||||||
session := engine.NewSession()
|
session := engine.NewSession()
|
||||||
session.IsAutoClose = true
|
session.IsAutoClose = true
|
||||||
return session.Omit(columns...)
|
return session.Omit(columns...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This method will generate "column IN (?, ?)"
|
||||||
func (engine *Engine) In(column string, args ...interface{}) *Session {
|
func (engine *Engine) In(column string, args ...interface{}) *Session {
|
||||||
session := engine.NewSession()
|
session := engine.NewSession()
|
||||||
session.IsAutoClose = true
|
session.IsAutoClose = true
|
||||||
return session.In(column, args...)
|
return session.In(column, args...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Temporarily change the Get, Find, Update's table
|
||||||
func (engine *Engine) Table(tableNameOrBean interface{}) *Session {
|
func (engine *Engine) Table(tableNameOrBean interface{}) *Session {
|
||||||
session := engine.NewSession()
|
session := engine.NewSession()
|
||||||
session.IsAutoClose = true
|
session.IsAutoClose = true
|
||||||
return session.Table(tableNameOrBean)
|
return session.Table(tableNameOrBean)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This method will generate "LIMIT start, limit"
|
||||||
func (engine *Engine) Limit(limit int, start ...int) *Session {
|
func (engine *Engine) Limit(limit int, start ...int) *Session {
|
||||||
session := engine.NewSession()
|
session := engine.NewSession()
|
||||||
session.IsAutoClose = true
|
session.IsAutoClose = true
|
||||||
return session.Limit(limit, start...)
|
return session.Limit(limit, start...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Method Desc will generate "ORDER BY column1 DESC, column2 DESC"
|
||||||
|
// This will
|
||||||
func (engine *Engine) Desc(colNames ...string) *Session {
|
func (engine *Engine) Desc(colNames ...string) *Session {
|
||||||
session := engine.NewSession()
|
session := engine.NewSession()
|
||||||
session.IsAutoClose = true
|
session.IsAutoClose = true
|
||||||
return session.Desc(colNames...)
|
return session.Desc(colNames...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 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 *Engine) Asc(colNames ...string) *Session {
|
func (engine *Engine) Asc(colNames ...string) *Session {
|
||||||
session := engine.NewSession()
|
session := engine.NewSession()
|
||||||
session.IsAutoClose = true
|
session.IsAutoClose = true
|
||||||
return session.Asc(colNames...)
|
return session.Asc(colNames...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Method OrderBy will generate "ORDER BY order"
|
||||||
func (engine *Engine) OrderBy(order string) *Session {
|
func (engine *Engine) OrderBy(order string) *Session {
|
||||||
session := engine.NewSession()
|
session := engine.NewSession()
|
||||||
session.IsAutoClose = true
|
session.IsAutoClose = true
|
||||||
|
@ -345,21 +373,20 @@ func (engine *Engine) Having(conditions string) *Session {
|
||||||
return session.Having(conditions)
|
return session.Having(conditions)
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
func (engine *Engine) autoMapType(t reflect.Type) *Table {
|
||||||
func (engine *Engine) AutoMapType(t reflect.Type) *Table {
|
|
||||||
engine.mutex.Lock()
|
engine.mutex.Lock()
|
||||||
defer engine.mutex.Unlock()
|
defer engine.mutex.Unlock()
|
||||||
table, ok := engine.Tables[t]
|
table, ok := engine.Tables[t]
|
||||||
if !ok {
|
if !ok {
|
||||||
table = engine.MapType(t)
|
table = engine.mapType(t)
|
||||||
engine.Tables[t] = table
|
engine.Tables[t] = table
|
||||||
}
|
}
|
||||||
return table
|
return table
|
||||||
}
|
}
|
||||||
|
|
||||||
func (engine *Engine) AutoMap(bean interface{}) *Table {
|
func (engine *Engine) autoMap(bean interface{}) *Table {
|
||||||
t := rType(bean)
|
t := rType(bean)
|
||||||
return engine.AutoMapType(t)
|
return engine.autoMapType(t)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (engine *Engine) newTable() *Table {
|
func (engine *Engine) newTable() *Table {
|
||||||
|
@ -371,7 +398,7 @@ func (engine *Engine) newTable() *Table {
|
||||||
return table
|
return table
|
||||||
}
|
}
|
||||||
|
|
||||||
func (engine *Engine) MapType(t reflect.Type) *Table {
|
func (engine *Engine) mapType(t reflect.Type) *Table {
|
||||||
table := engine.newTable()
|
table := engine.newTable()
|
||||||
table.Name = engine.Mapper.Obj2Table(t.Name())
|
table.Name = engine.Mapper.Obj2Table(t.Name())
|
||||||
table.Type = t
|
table.Type = t
|
||||||
|
@ -395,7 +422,7 @@ func (engine *Engine) MapType(t reflect.Type) *Table {
|
||||||
}
|
}
|
||||||
if (strings.ToUpper(tags[0]) == "EXTENDS") &&
|
if (strings.ToUpper(tags[0]) == "EXTENDS") &&
|
||||||
(fieldType.Kind() == reflect.Struct) {
|
(fieldType.Kind() == reflect.Struct) {
|
||||||
parentTable := engine.MapType(fieldType)
|
parentTable := engine.mapType(fieldType)
|
||||||
for name, col := range parentTable.Columns {
|
for name, col := range parentTable.Columns {
|
||||||
col.FieldName = fmt.Sprintf("%v.%v", fieldType.Name(), col.FieldName)
|
col.FieldName = fmt.Sprintf("%v.%v", fieldType.Name(), col.FieldName)
|
||||||
table.Columns[name] = col
|
table.Columns[name] = col
|
||||||
|
@ -540,36 +567,36 @@ func (engine *Engine) MapType(t reflect.Type) *Table {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Map a struct to a table
|
// Map a struct to a table
|
||||||
func (engine *Engine) Map(beans ...interface{}) (e error) {
|
func (engine *Engine) mapping(beans ...interface{}) (e error) {
|
||||||
engine.mutex.Lock()
|
engine.mutex.Lock()
|
||||||
defer engine.mutex.Unlock()
|
defer engine.mutex.Unlock()
|
||||||
for _, bean := range beans {
|
for _, bean := range beans {
|
||||||
t := rType(bean)
|
t := rType(bean)
|
||||||
engine.Tables[t] = engine.MapType(t)
|
engine.Tables[t] = engine.mapType(t)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Is a table has any reocrd
|
// If a table has any reocrd
|
||||||
func (engine *Engine) IsTableEmpty(bean interface{}) (bool, error) {
|
func (engine *Engine) IsTableEmpty(bean interface{}) (bool, error) {
|
||||||
t := rType(bean)
|
t := rType(bean)
|
||||||
if t.Kind() != reflect.Struct {
|
if t.Kind() != reflect.Struct {
|
||||||
return false, errors.New("bean should be a struct or struct's point")
|
return false, errors.New("bean should be a struct or struct's point")
|
||||||
}
|
}
|
||||||
engine.AutoMapType(t)
|
engine.autoMapType(t)
|
||||||
session := engine.NewSession()
|
session := engine.NewSession()
|
||||||
defer session.Close()
|
defer session.Close()
|
||||||
rows, err := session.Count(bean)
|
rows, err := session.Count(bean)
|
||||||
return rows > 0, err
|
return rows > 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Is a table is exist
|
// If a table is exist
|
||||||
func (engine *Engine) IsTableExist(bean interface{}) (bool, error) {
|
func (engine *Engine) IsTableExist(bean interface{}) (bool, error) {
|
||||||
t := rType(bean)
|
t := rType(bean)
|
||||||
if t.Kind() != reflect.Struct {
|
if t.Kind() != reflect.Struct {
|
||||||
return false, errors.New("bean should be a struct or struct's point")
|
return false, errors.New("bean should be a struct or struct's point")
|
||||||
}
|
}
|
||||||
table := engine.AutoMapType(t)
|
table := engine.autoMapType(t)
|
||||||
session := engine.NewSession()
|
session := engine.NewSession()
|
||||||
defer session.Close()
|
defer session.Close()
|
||||||
has, err := session.isTableExist(table.Name)
|
has, err := session.isTableExist(table.Name)
|
||||||
|
@ -596,7 +623,7 @@ func (engine *Engine) ClearCacheBean(bean interface{}, id int64) error {
|
||||||
if t.Kind() != reflect.Struct {
|
if t.Kind() != reflect.Struct {
|
||||||
return errors.New("error params")
|
return errors.New("error params")
|
||||||
}
|
}
|
||||||
table := engine.AutoMap(bean)
|
table := engine.autoMap(bean)
|
||||||
if table.Cacher != nil {
|
if table.Cacher != nil {
|
||||||
table.Cacher.ClearIds(table.Name)
|
table.Cacher.ClearIds(table.Name)
|
||||||
table.Cacher.DelBean(table.Name, id)
|
table.Cacher.DelBean(table.Name, id)
|
||||||
|
@ -611,7 +638,7 @@ func (engine *Engine) ClearCache(beans ...interface{}) error {
|
||||||
if t.Kind() != reflect.Struct {
|
if t.Kind() != reflect.Struct {
|
||||||
return errors.New("error params")
|
return errors.New("error params")
|
||||||
}
|
}
|
||||||
table := engine.AutoMap(bean)
|
table := engine.autoMap(bean)
|
||||||
if table.Cacher != nil {
|
if table.Cacher != nil {
|
||||||
table.Cacher.ClearIds(table.Name)
|
table.Cacher.ClearIds(table.Name)
|
||||||
table.Cacher.ClearBeans(table.Name)
|
table.Cacher.ClearBeans(table.Name)
|
||||||
|
@ -620,12 +647,12 @@ func (engine *Engine) ClearCache(beans ...interface{}) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sync the new struct change to database, this method will automatically add
|
// Sync the new struct changes to database, this method will automatically add
|
||||||
// table, column, index, unique. but will not delete or change anything.
|
// table, column, index, unique. but will not delete or change anything.
|
||||||
// If you change some field, you should change the database manually.
|
// If you change some field, you should change the database manually.
|
||||||
func (engine *Engine) Sync(beans ...interface{}) error {
|
func (engine *Engine) Sync(beans ...interface{}) error {
|
||||||
for _, bean := range beans {
|
for _, bean := range beans {
|
||||||
table := engine.AutoMap(bean)
|
table := engine.autoMap(bean)
|
||||||
|
|
||||||
s := engine.NewSession()
|
s := engine.NewSession()
|
||||||
defer s.Close()
|
defer s.Close()
|
||||||
|
@ -715,7 +742,7 @@ func (engine *Engine) Sync(beans ...interface{}) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (engine *Engine) UnMap(beans ...interface{}) (e error) {
|
func (engine *Engine) unMap(beans ...interface{}) (e error) {
|
||||||
engine.mutex.Lock()
|
engine.mutex.Lock()
|
||||||
defer engine.mutex.Unlock()
|
defer engine.mutex.Unlock()
|
||||||
for _, bean := range beans {
|
for _, bean := range beans {
|
||||||
|
@ -728,7 +755,7 @@ func (engine *Engine) UnMap(beans ...interface{}) (e error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Drop all mapped table
|
// Drop all mapped table
|
||||||
func (engine *Engine) DropAll() error {
|
func (engine *Engine) dropAll() error {
|
||||||
session := engine.NewSession()
|
session := engine.NewSession()
|
||||||
defer session.Close()
|
defer session.Close()
|
||||||
|
|
||||||
|
@ -781,7 +808,7 @@ func (engine *Engine) DropTables(beans ...interface{}) error {
|
||||||
return session.Commit()
|
return session.Commit()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (engine *Engine) CreateAll() error {
|
func (engine *Engine) createAll() error {
|
||||||
session := engine.NewSession()
|
session := engine.NewSession()
|
||||||
defer session.Close()
|
defer session.Close()
|
||||||
return session.CreateAll()
|
return session.CreateAll()
|
||||||
|
@ -823,6 +850,7 @@ func (engine *Engine) Delete(bean interface{}) (int64, error) {
|
||||||
return session.Delete(bean)
|
return session.Delete(bean)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get retrieve one record from table
|
||||||
func (engine *Engine) Get(bean interface{}) (bool, error) {
|
func (engine *Engine) Get(bean interface{}) (bool, error) {
|
||||||
session := engine.NewSession()
|
session := engine.NewSession()
|
||||||
defer session.Close()
|
defer session.Close()
|
||||||
|
|
35
iterator.go
35
iterator.go
|
@ -1,35 +0,0 @@
|
||||||
package xorm
|
|
||||||
|
|
||||||
import (
|
|
||||||
"database/sql"
|
|
||||||
)
|
|
||||||
|
|
||||||
type Iterator struct {
|
|
||||||
session *Session
|
|
||||||
startId int
|
|
||||||
rows *sql.Rows
|
|
||||||
}
|
|
||||||
|
|
||||||
func (iter *Iterator) IsValid() bool {
|
|
||||||
return iter.session != nil && iter.rows != nil
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
func (iter *Iterator) Next(bean interface{}) (bool, error) {
|
|
||||||
if !iter.IsValid() {
|
|
||||||
return errors.New("iterator is not valied.")
|
|
||||||
}
|
|
||||||
if iter.rows.Next() {
|
|
||||||
iter.rows.Scan(...)
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
|
|
||||||
// close the iterator
|
|
||||||
func (iter *Iterator) Close() {
|
|
||||||
if iter.rows != nil {
|
|
||||||
iter.rows.Close()
|
|
||||||
}
|
|
||||||
if iter.session != nil && iter.session.IsAutoClose {
|
|
||||||
iter.session.Close()
|
|
||||||
}
|
|
||||||
}
|
|
28
session.go
28
session.go
|
@ -248,7 +248,7 @@ func (session *Session) scanMapIntoStruct(obj interface{}, objMap map[string][]b
|
||||||
return errors.New("Expected a pointer to a struct")
|
return errors.New("Expected a pointer to a struct")
|
||||||
}
|
}
|
||||||
|
|
||||||
table := session.Engine.AutoMapType(rType(obj))
|
table := session.Engine.autoMapType(rType(obj))
|
||||||
|
|
||||||
for key, data := range objMap {
|
for key, data := range objMap {
|
||||||
if _, ok := table.Columns[key]; !ok {
|
if _, ok := table.Columns[key]; !ok {
|
||||||
|
@ -329,7 +329,7 @@ func (session *Session) Exec(sql string, args ...interface{}) (sql.Result, error
|
||||||
|
|
||||||
// this function create a table according a bean
|
// this function create a table according a bean
|
||||||
func (session *Session) CreateTable(bean interface{}) error {
|
func (session *Session) CreateTable(bean interface{}) error {
|
||||||
session.Statement.RefTable = session.Engine.AutoMap(bean)
|
session.Statement.RefTable = session.Engine.autoMap(bean)
|
||||||
|
|
||||||
err := session.newDb()
|
err := session.newDb()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -344,7 +344,7 @@ func (session *Session) CreateTable(bean interface{}) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (session *Session) CreateIndexes(bean interface{}) error {
|
func (session *Session) CreateIndexes(bean interface{}) error {
|
||||||
session.Statement.RefTable = session.Engine.AutoMap(bean)
|
session.Statement.RefTable = session.Engine.autoMap(bean)
|
||||||
|
|
||||||
err := session.newDb()
|
err := session.newDb()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -366,7 +366,7 @@ func (session *Session) CreateIndexes(bean interface{}) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (session *Session) CreateUniques(bean interface{}) error {
|
func (session *Session) CreateUniques(bean interface{}) error {
|
||||||
session.Statement.RefTable = session.Engine.AutoMap(bean)
|
session.Statement.RefTable = session.Engine.autoMap(bean)
|
||||||
|
|
||||||
err := session.newDb()
|
err := session.newDb()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -450,7 +450,7 @@ func (session *Session) DropTable(bean interface{}) error {
|
||||||
if t.Kind() == reflect.String {
|
if t.Kind() == reflect.String {
|
||||||
session.Statement.AltTableName = bean.(string)
|
session.Statement.AltTableName = bean.(string)
|
||||||
} else if t.Kind() == reflect.Struct {
|
} else if t.Kind() == reflect.Struct {
|
||||||
session.Statement.RefTable = session.Engine.AutoMap(bean)
|
session.Statement.RefTable = session.Engine.autoMap(bean)
|
||||||
} else {
|
} else {
|
||||||
return errors.New("Unsupported type")
|
return errors.New("Unsupported type")
|
||||||
}
|
}
|
||||||
|
@ -715,7 +715,7 @@ func (session *Session) Iterate(bean interface{}, fun IterFunc) error {
|
||||||
|
|
||||||
var sql string
|
var sql string
|
||||||
var args []interface{}
|
var args []interface{}
|
||||||
session.Statement.RefTable = session.Engine.AutoMap(bean)
|
session.Statement.RefTable = session.Engine.autoMap(bean)
|
||||||
if session.Statement.RawSQL == "" {
|
if session.Statement.RawSQL == "" {
|
||||||
sql, args = session.Statement.genGetSql(bean)
|
sql, args = session.Statement.genGetSql(bean)
|
||||||
} else {
|
} else {
|
||||||
|
@ -780,7 +780,7 @@ func (session *Session) Get(bean interface{}) (bool, error) {
|
||||||
session.Statement.Limit(1)
|
session.Statement.Limit(1)
|
||||||
var sql string
|
var sql string
|
||||||
var args []interface{}
|
var args []interface{}
|
||||||
session.Statement.RefTable = session.Engine.AutoMap(bean)
|
session.Statement.RefTable = session.Engine.autoMap(bean)
|
||||||
if session.Statement.RawSQL == "" {
|
if session.Statement.RawSQL == "" {
|
||||||
sql, args = session.Statement.genGetSql(bean)
|
sql, args = session.Statement.genGetSql(bean)
|
||||||
} else {
|
} else {
|
||||||
|
@ -871,12 +871,12 @@ func (session *Session) Find(rowsSlicePtr interface{}, condiBean ...interface{})
|
||||||
if session.Statement.RefTable == nil {
|
if session.Statement.RefTable == nil {
|
||||||
if sliceElementType.Kind() == reflect.Ptr {
|
if sliceElementType.Kind() == reflect.Ptr {
|
||||||
if sliceElementType.Elem().Kind() == reflect.Struct {
|
if sliceElementType.Elem().Kind() == reflect.Struct {
|
||||||
table = session.Engine.AutoMapType(sliceElementType.Elem())
|
table = session.Engine.autoMapType(sliceElementType.Elem())
|
||||||
} else {
|
} else {
|
||||||
return errors.New("slice type")
|
return errors.New("slice type")
|
||||||
}
|
}
|
||||||
} else if sliceElementType.Kind() == reflect.Struct {
|
} else if sliceElementType.Kind() == reflect.Struct {
|
||||||
table = session.Engine.AutoMapType(sliceElementType)
|
table = session.Engine.autoMapType(sliceElementType)
|
||||||
} else {
|
} else {
|
||||||
return errors.New("slice type")
|
return errors.New("slice type")
|
||||||
}
|
}
|
||||||
|
@ -1306,7 +1306,7 @@ func (session *Session) innerInsertMulti(rowsSlicePtr interface{}) (int64, error
|
||||||
bean := sliceValue.Index(0).Interface()
|
bean := sliceValue.Index(0).Interface()
|
||||||
sliceElementType := rType(bean)
|
sliceElementType := rType(bean)
|
||||||
|
|
||||||
table := session.Engine.AutoMapType(sliceElementType)
|
table := session.Engine.autoMapType(sliceElementType)
|
||||||
session.Statement.RefTable = table
|
session.Statement.RefTable = table
|
||||||
|
|
||||||
size := sliceValue.Len()
|
size := sliceValue.Len()
|
||||||
|
@ -1538,7 +1538,7 @@ func (session *Session) bytes2Value(col *Column, fieldValue *reflect.Value, data
|
||||||
v = x
|
v = x
|
||||||
fieldValue.Set(reflect.ValueOf(v))
|
fieldValue.Set(reflect.ValueOf(v))
|
||||||
} else if session.Statement.UseCascade {
|
} else if session.Statement.UseCascade {
|
||||||
table := session.Engine.AutoMapType(fieldValue.Type())
|
table := session.Engine.autoMapType(fieldValue.Type())
|
||||||
if table != nil {
|
if table != nil {
|
||||||
x, err := strconv.ParseInt(string(data), 10, 64)
|
x, err := strconv.ParseInt(string(data), 10, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -1656,7 +1656,7 @@ func (session *Session) value2Interface(col *Column, fieldValue reflect.Value) (
|
||||||
}
|
}
|
||||||
|
|
||||||
func (session *Session) innerInsert(bean interface{}) (int64, error) {
|
func (session *Session) innerInsert(bean interface{}) (int64, error) {
|
||||||
table := session.Engine.AutoMap(bean)
|
table := session.Engine.autoMap(bean)
|
||||||
session.Statement.RefTable = table
|
session.Statement.RefTable = table
|
||||||
|
|
||||||
colNames, args, err := table.genCols(session, bean, false, false)
|
colNames, args, err := table.genCols(session, bean, false, false)
|
||||||
|
@ -1931,7 +1931,7 @@ func (session *Session) Update(bean interface{}, condiBean ...interface{}) (int6
|
||||||
var table *Table
|
var table *Table
|
||||||
|
|
||||||
if t.Kind() == reflect.Struct {
|
if t.Kind() == reflect.Struct {
|
||||||
table = session.Engine.AutoMap(bean)
|
table = session.Engine.autoMap(bean)
|
||||||
session.Statement.RefTable = table
|
session.Statement.RefTable = table
|
||||||
|
|
||||||
if session.Statement.ColumnStr == "" {
|
if session.Statement.ColumnStr == "" {
|
||||||
|
@ -2078,7 +2078,7 @@ func (session *Session) Delete(bean interface{}) (int64, error) {
|
||||||
defer session.Close()
|
defer session.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
table := session.Engine.AutoMap(bean)
|
table := session.Engine.autoMap(bean)
|
||||||
session.Statement.RefTable = table
|
session.Statement.RefTable = table
|
||||||
colNames, args := buildConditions(session.Engine, table, bean, true,
|
colNames, args := buildConditions(session.Engine, table, bean, true,
|
||||||
session.Statement.allUseBool, session.Statement.boolColumnMap)
|
session.Statement.allUseBool, session.Statement.boolColumnMap)
|
||||||
|
|
|
@ -98,7 +98,7 @@ func (statement *Statement) Table(tableNameOrBean interface{}) {
|
||||||
if t.Kind() == reflect.String {
|
if t.Kind() == reflect.String {
|
||||||
statement.AltTableName = tableNameOrBean.(string)
|
statement.AltTableName = tableNameOrBean.(string)
|
||||||
} else if t.Kind() == reflect.Struct {
|
} else if t.Kind() == reflect.Struct {
|
||||||
statement.RefTable = statement.Engine.AutoMapType(t)
|
statement.RefTable = statement.Engine.autoMapType(t)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -166,7 +166,7 @@ func buildConditions(engine *Engine, table *Table, bean interface{}, includeVers
|
||||||
val = t
|
val = t
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
engine.AutoMapType(fieldValue.Type())
|
engine.autoMapType(fieldValue.Type())
|
||||||
if table, ok := engine.Tables[fieldValue.Type()]; ok {
|
if table, ok := engine.Tables[fieldValue.Type()]; ok {
|
||||||
pkField := reflect.Indirect(fieldValue).FieldByName(table.PKColumn().FieldName)
|
pkField := reflect.Indirect(fieldValue).FieldByName(table.PKColumn().FieldName)
|
||||||
if pkField.Int() != 0 {
|
if pkField.Int() != 0 {
|
||||||
|
@ -431,7 +431,7 @@ func (s *Statement) genDropSQL() string {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (statement Statement) genGetSql(bean interface{}) (string, []interface{}) {
|
func (statement Statement) genGetSql(bean interface{}) (string, []interface{}) {
|
||||||
table := statement.Engine.AutoMap(bean)
|
table := statement.Engine.autoMap(bean)
|
||||||
statement.RefTable = table
|
statement.RefTable = table
|
||||||
|
|
||||||
colNames, args := buildConditions(statement.Engine, table, bean, true,
|
colNames, args := buildConditions(statement.Engine, table, bean, true,
|
||||||
|
@ -469,7 +469,7 @@ func (s *Statement) genAddUniqueStr(uqeName string, cols []string) (string, []in
|
||||||
}
|
}
|
||||||
|
|
||||||
func (statement Statement) genCountSql(bean interface{}) (string, []interface{}) {
|
func (statement Statement) genCountSql(bean interface{}) (string, []interface{}) {
|
||||||
table := statement.Engine.AutoMap(bean)
|
table := statement.Engine.autoMap(bean)
|
||||||
statement.RefTable = table
|
statement.RefTable = table
|
||||||
|
|
||||||
colNames, args := buildConditions(statement.Engine, table, bean, true, statement.allUseBool, statement.boolColumnMap)
|
colNames, args := buildConditions(statement.Engine, table, bean, true, statement.allUseBool, statement.boolColumnMap)
|
||||||
|
|
Loading…
Reference in New Issue