1 Star 1 Fork 0

bigbase / pg

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
model_table_slice.go 2.84 KB
一键复制 编辑 原始数据 按行查看 历史
Vladimir Mihailenco 提交于 2017-05-06 15:04 . Recognize SQL arrays types
package orm
import "reflect"
type sliceTableModel struct {
structTableModel
slice reflect.Value
sliceOfPtr bool
}
var _ tableModel = (*sliceTableModel)(nil)
func (m *sliceTableModel) init(sliceType reflect.Type) {
switch sliceType.Elem().Kind() {
case reflect.Ptr, reflect.Interface:
m.sliceOfPtr = true
}
}
func (sliceTableModel) useQueryOne() {}
func (m *sliceTableModel) Join(name string, apply func(*Query) (*Query, error)) (bool, *join) {
return m.join(m.Value(), name, apply)
}
func (m *sliceTableModel) Bind(bind reflect.Value) {
m.slice = bind.Field(m.index[len(m.index)-1])
}
func (m *sliceTableModel) Value() reflect.Value {
return m.slice
}
func (m *sliceTableModel) Reset() error {
if m.slice.IsValid() && m.slice.Len() > 0 {
m.slice.Set(m.slice.Slice(0, 0))
}
return nil
}
func (m *sliceTableModel) NewModel() ColumnScanner {
m.strct = m.nextElem()
m.bindChildren()
return m
}
func (m *sliceTableModel) AfterQuery(db DB) error {
if !m.table.HasFlag(AfterQueryHookFlag) {
return nil
}
return callAfterQueryHookSlice(m.slice, m.sliceOfPtr, db)
}
func (m *sliceTableModel) AfterSelect(db DB) error {
if !m.table.HasFlag(AfterSelectHookFlag) {
return nil
}
return callAfterSelectHookSlice(m.slice, m.sliceOfPtr, db)
}
func (m *sliceTableModel) BeforeInsert(db DB) error {
if !m.table.HasFlag(BeforeInsertHookFlag) {
return nil
}
return callBeforeInsertHookSlice(m.slice, m.sliceOfPtr, db)
}
func (m *sliceTableModel) AfterInsert(db DB) error {
if !m.table.HasFlag(AfterInsertHookFlag) {
return nil
}
return callAfterInsertHookSlice(m.slice, m.sliceOfPtr, db)
}
func (m *sliceTableModel) BeforeUpdate(db DB) error {
if !m.table.HasFlag(BeforeUpdateHookFlag) {
return nil
}
return callBeforeUpdateHookSlice(m.slice, m.sliceOfPtr, db)
}
func (m *sliceTableModel) AfterUpdate(db DB) error {
if !m.table.HasFlag(AfterUpdateHookFlag) {
return nil
}
return callAfterUpdateHookSlice(m.slice, m.sliceOfPtr, db)
}
func (m *sliceTableModel) BeforeDelete(db DB) error {
if !m.table.HasFlag(BeforeDeleteHookFlag) {
return nil
}
return callBeforeDeleteHookSlice(m.slice, m.sliceOfPtr, db)
}
func (m *sliceTableModel) AfterDelete(db DB) error {
if !m.table.HasFlag(AfterDeleteHookFlag) {
return nil
}
return callAfterDeleteHookSlice(m.slice, m.sliceOfPtr, db)
}
func (m *sliceTableModel) nextElem() reflect.Value {
if m.slice.Len() < m.slice.Cap() {
m.slice.Set(m.slice.Slice(0, m.slice.Len()+1))
elem := m.slice.Index(m.slice.Len() - 1)
if m.sliceOfPtr {
if elem.IsNil() {
elem.Set(reflect.New(elem.Type().Elem()))
}
return elem.Elem()
} else {
return elem
}
}
if m.sliceOfPtr {
elem := reflect.New(m.table.Type)
m.slice.Set(reflect.Append(m.slice, elem))
return elem.Elem()
} else {
m.slice.Set(reflect.Append(m.slice, m.table.zeroStruct))
return m.slice.Index(m.slice.Len() - 1)
}
}
Go
1
https://gitee.com/bigbase/pg.git
git@gitee.com:bigbase/pg.git
bigbase
pg
pg
v6.2.2

搜索帮助