summaryrefslogtreecommitdiff
path: root/vendor/github.com/go-pg/pg/v10/orm/model_table.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/go-pg/pg/v10/orm/model_table.go')
-rw-r--r--vendor/github.com/go-pg/pg/v10/orm/model_table.go65
1 files changed, 65 insertions, 0 deletions
diff --git a/vendor/github.com/go-pg/pg/v10/orm/model_table.go b/vendor/github.com/go-pg/pg/v10/orm/model_table.go
new file mode 100644
index 000000000..afdc15ccc
--- /dev/null
+++ b/vendor/github.com/go-pg/pg/v10/orm/model_table.go
@@ -0,0 +1,65 @@
+package orm
+
+import (
+ "fmt"
+ "reflect"
+
+ "github.com/go-pg/pg/v10/types"
+)
+
+type TableModel interface {
+ Model
+
+ IsNil() bool
+ Table() *Table
+ Relation() *Relation
+ AppendParam(QueryFormatter, []byte, string) ([]byte, bool)
+
+ Join(string, func(*Query) (*Query, error)) *join
+ GetJoin(string) *join
+ GetJoins() []join
+ AddJoin(join) *join
+
+ Root() reflect.Value
+ Index() []int
+ ParentIndex() []int
+ Mount(reflect.Value)
+ Kind() reflect.Kind
+ Value() reflect.Value
+
+ setSoftDeleteField() error
+ scanColumn(types.ColumnInfo, types.Reader, int) (bool, error)
+}
+
+func newTableModelIndex(typ reflect.Type, root reflect.Value, index []int, rel *Relation) (TableModel, error) {
+ typ = typeByIndex(typ, index)
+
+ if typ.Kind() == reflect.Struct {
+ return &structTableModel{
+ table: GetTable(typ),
+ rel: rel,
+
+ root: root,
+ index: index,
+ }, nil
+ }
+
+ if typ.Kind() == reflect.Slice {
+ structType := indirectType(typ.Elem())
+ if structType.Kind() == reflect.Struct {
+ m := sliceTableModel{
+ structTableModel: structTableModel{
+ table: GetTable(structType),
+ rel: rel,
+
+ root: root,
+ index: index,
+ },
+ }
+ m.init(typ)
+ return &m, nil
+ }
+ }
+
+ return nil, fmt.Errorf("pg: NewModel(%s)", typ)
+}