aboutsummaryrefslogtreecommitdiff
path: root/vendor/github.com/go-xorm/core/table.go
diff options
context:
space:
mode:
authorUnknwon <u@gogs.io>2017-02-09 19:48:13 -0500
committerUnknwon <u@gogs.io>2017-02-09 19:48:13 -0500
commit2fd69f13d9599a6c58b47225565163fd7d87889f (patch)
treefd19e868e1c2e95a5fb83a268f6e393669d6ee79 /vendor/github.com/go-xorm/core/table.go
parenteb66060cd7b9bce996b1d75ae80ce1ef31d5ce62 (diff)
vendor: check in vendors
Bye bye glide...
Diffstat (limited to 'vendor/github.com/go-xorm/core/table.go')
-rw-r--r--vendor/github.com/go-xorm/core/table.go151
1 files changed, 151 insertions, 0 deletions
diff --git a/vendor/github.com/go-xorm/core/table.go b/vendor/github.com/go-xorm/core/table.go
new file mode 100644
index 00000000..e6f6a751
--- /dev/null
+++ b/vendor/github.com/go-xorm/core/table.go
@@ -0,0 +1,151 @@
+package core
+
+import (
+ "reflect"
+ "strings"
+)
+
+// database table
+type Table struct {
+ Name string
+ Type reflect.Type
+ columnsSeq []string
+ columnsMap map[string][]*Column
+ columns []*Column
+ Indexes map[string]*Index
+ PrimaryKeys []string
+ AutoIncrement string
+ Created map[string]bool
+ Updated string
+ Deleted string
+ Version string
+ Cacher Cacher
+ StoreEngine string
+ Charset string
+}
+
+func (table *Table) Columns() []*Column {
+ return table.columns
+}
+
+func (table *Table) ColumnsSeq() []string {
+ return table.columnsSeq
+}
+
+func NewEmptyTable() *Table {
+ return NewTable("", nil)
+}
+
+func NewTable(name string, t reflect.Type) *Table {
+ return &Table{Name: name, Type: t,
+ columnsSeq: make([]string, 0),
+ columns: make([]*Column, 0),
+ columnsMap: make(map[string][]*Column),
+ Indexes: make(map[string]*Index),
+ Created: make(map[string]bool),
+ PrimaryKeys: make([]string, 0),
+ }
+}
+
+func (table *Table) columnsByName(name string) []*Column {
+
+ n := len(name)
+
+ for k := range table.columnsMap {
+ if len(k) != n {
+ continue
+ }
+ if strings.EqualFold(k, name) {
+ return table.columnsMap[k]
+ }
+ }
+ return nil
+}
+
+func (table *Table) GetColumn(name string) *Column {
+
+ cols := table.columnsByName(name)
+
+ if cols != nil {
+ return cols[0]
+ }
+
+ return nil
+}
+
+func (table *Table) GetColumnIdx(name string, idx int) *Column {
+
+ cols := table.columnsByName(name)
+
+ if cols != nil && idx < len(cols) {
+ return cols[idx]
+ }
+
+ return nil
+}
+
+// if has primary key, return column
+func (table *Table) PKColumns() []*Column {
+ columns := make([]*Column, len(table.PrimaryKeys))
+ for i, name := range table.PrimaryKeys {
+ columns[i] = table.GetColumn(name)
+ }
+ return columns
+}
+
+func (table *Table) ColumnType(name string) reflect.Type {
+ t, _ := table.Type.FieldByName(name)
+ return t.Type
+}
+
+func (table *Table) AutoIncrColumn() *Column {
+ return table.GetColumn(table.AutoIncrement)
+}
+
+func (table *Table) VersionColumn() *Column {
+ return table.GetColumn(table.Version)
+}
+
+func (table *Table) UpdatedColumn() *Column {
+ return table.GetColumn(table.Updated)
+}
+
+func (table *Table) DeletedColumn() *Column {
+ return table.GetColumn(table.Deleted)
+}
+
+// add a column to table
+func (table *Table) AddColumn(col *Column) {
+ table.columnsSeq = append(table.columnsSeq, col.Name)
+ table.columns = append(table.columns, col)
+ colName := strings.ToLower(col.Name)
+ if c, ok := table.columnsMap[colName]; ok {
+ table.columnsMap[colName] = append(c, col)
+ } else {
+ table.columnsMap[colName] = []*Column{col}
+ }
+
+ if col.IsPrimaryKey {
+ table.PrimaryKeys = append(table.PrimaryKeys, col.Name)
+ }
+ if col.IsAutoIncrement {
+ table.AutoIncrement = col.Name
+ }
+ if col.IsCreated {
+ table.Created[col.Name] = true
+ }
+ if col.IsUpdated {
+ table.Updated = col.Name
+ }
+ if col.IsDeleted {
+ table.Deleted = col.Name
+ }
+ if col.IsVersion {
+ table.Version = col.Name
+ }
+}
+
+// add an index or an unique to table
+func (table *Table) AddIndex(index *Index) {
+ table.Indexes[index.Name] = index
+}