mirror of
				https://github.com/go-gitea/gitea
				synced 2025-10-30 19:08:37 +00:00 
			
		
		
		
	* Dropped unused codekit config * Integrated dynamic and static bindata for public * Ignore public bindata * Add a general generate make task * Integrated flexible public assets into web command * Updated vendoring, added all missiong govendor deps * Made the linter happy with the bindata and dynamic code * Moved public bindata definition to modules directory * Ignoring the new bindata path now * Updated to the new public modules import path * Updated public bindata command and drop the new prefix
		
			
				
	
	
		
			200 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			200 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Copyright 2015 PingCAP, Inc.
 | |
| //
 | |
| // Licensed under the Apache License, Version 2.0 (the "License");
 | |
| // you may not use this file except in compliance with the License.
 | |
| // You may obtain a copy of the License at
 | |
| //
 | |
| //     http://www.apache.org/licenses/LICENSE-2.0
 | |
| //
 | |
| // Unless required by applicable law or agreed to in writing, software
 | |
| // distributed under the License is distributed on an "AS IS" BASIS,
 | |
| // See the License for the specific language governing permissions and
 | |
| // limitations under the License.
 | |
| 
 | |
| package model
 | |
| 
 | |
| import (
 | |
| 	"strings"
 | |
| 
 | |
| 	"github.com/pingcap/tidb/util/types"
 | |
| )
 | |
| 
 | |
| // SchemaState is the state for schema elements.
 | |
| type SchemaState byte
 | |
| 
 | |
| const (
 | |
| 	// StateNone means this schema element is absent and can't be used.
 | |
| 	StateNone SchemaState = iota
 | |
| 	// StateDeleteOnly means we can only delete items for this schema element.
 | |
| 	StateDeleteOnly
 | |
| 	// StateWriteOnly means we can use any write operation on this schema element,
 | |
| 	// but outer can't read the changed data.
 | |
| 	StateWriteOnly
 | |
| 	// StateWriteReorganization means we are re-organizating whole data after write only state.
 | |
| 	StateWriteReorganization
 | |
| 	// StateDeleteReorganization means we are re-organizating whole data after delete only state.
 | |
| 	StateDeleteReorganization
 | |
| 	// StatePublic means this schema element is ok for all write and read operations.
 | |
| 	StatePublic
 | |
| )
 | |
| 
 | |
| // String implements fmt.Stringer interface.
 | |
| func (s SchemaState) String() string {
 | |
| 	switch s {
 | |
| 	case StateDeleteOnly:
 | |
| 		return "delete only"
 | |
| 	case StateWriteOnly:
 | |
| 		return "write only"
 | |
| 	case StateWriteReorganization:
 | |
| 		return "write reorganization"
 | |
| 	case StateDeleteReorganization:
 | |
| 		return "delete reorganization"
 | |
| 	case StatePublic:
 | |
| 		return "public"
 | |
| 	default:
 | |
| 		return "none"
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // ColumnInfo provides meta data describing of a table column.
 | |
| type ColumnInfo struct {
 | |
| 	ID              int64       `json:"id"`
 | |
| 	Name            CIStr       `json:"name"`
 | |
| 	Offset          int         `json:"offset"`
 | |
| 	DefaultValue    interface{} `json:"default"`
 | |
| 	types.FieldType `json:"type"`
 | |
| 	State           SchemaState `json:"state"`
 | |
| }
 | |
| 
 | |
| // Clone clones ColumnInfo.
 | |
| func (c *ColumnInfo) Clone() *ColumnInfo {
 | |
| 	nc := *c
 | |
| 	return &nc
 | |
| }
 | |
| 
 | |
| // TableInfo provides meta data describing a DB table.
 | |
| type TableInfo struct {
 | |
| 	ID      int64  `json:"id"`
 | |
| 	Name    CIStr  `json:"name"`
 | |
| 	Charset string `json:"charset"`
 | |
| 	Collate string `json:"collate"`
 | |
| 	// Columns are listed in the order in which they appear in the schema.
 | |
| 	Columns    []*ColumnInfo `json:"cols"`
 | |
| 	Indices    []*IndexInfo  `json:"index_info"`
 | |
| 	State      SchemaState   `json:"state"`
 | |
| 	PKIsHandle bool          `json:"pk_is_handle"`
 | |
| 	Comment    string        `json:"comment"`
 | |
| }
 | |
| 
 | |
| // Clone clones TableInfo.
 | |
| func (t *TableInfo) Clone() *TableInfo {
 | |
| 	nt := *t
 | |
| 	nt.Columns = make([]*ColumnInfo, len(t.Columns))
 | |
| 	nt.Indices = make([]*IndexInfo, len(t.Indices))
 | |
| 
 | |
| 	for i := range t.Columns {
 | |
| 		nt.Columns[i] = t.Columns[i].Clone()
 | |
| 	}
 | |
| 
 | |
| 	for i := range t.Indices {
 | |
| 		nt.Indices[i] = t.Indices[i].Clone()
 | |
| 	}
 | |
| 	return &nt
 | |
| }
 | |
| 
 | |
| // IndexColumn provides index column info.
 | |
| type IndexColumn struct {
 | |
| 	Name   CIStr `json:"name"`   // Index name
 | |
| 	Offset int   `json:"offset"` // Index offset
 | |
| 	Length int   `json:"length"` // Index length
 | |
| }
 | |
| 
 | |
| // Clone clones IndexColumn.
 | |
| func (i *IndexColumn) Clone() *IndexColumn {
 | |
| 	ni := *i
 | |
| 	return &ni
 | |
| }
 | |
| 
 | |
| // IndexType is the type of index
 | |
| type IndexType int
 | |
| 
 | |
| // String implements Stringer interface.
 | |
| func (t IndexType) String() string {
 | |
| 	switch t {
 | |
| 	case IndexTypeBtree:
 | |
| 		return "BTREE"
 | |
| 	case IndexTypeHash:
 | |
| 		return "HASH"
 | |
| 	}
 | |
| 	return ""
 | |
| }
 | |
| 
 | |
| // IndexTypes
 | |
| const (
 | |
| 	IndexTypeBtree IndexType = iota + 1
 | |
| 	IndexTypeHash
 | |
| )
 | |
| 
 | |
| // IndexInfo provides meta data describing a DB index.
 | |
| // It corresponds to the statement `CREATE INDEX Name ON Table (Column);`
 | |
| // See: https://dev.mysql.com/doc/refman/5.7/en/create-index.html
 | |
| type IndexInfo struct {
 | |
| 	ID      int64          `json:"id"`
 | |
| 	Name    CIStr          `json:"idx_name"`   // Index name.
 | |
| 	Table   CIStr          `json:"tbl_name"`   // Table name.
 | |
| 	Columns []*IndexColumn `json:"idx_cols"`   // Index columns.
 | |
| 	Unique  bool           `json:"is_unique"`  // Whether the index is unique.
 | |
| 	Primary bool           `json:"is_primary"` // Whether the index is primary key.
 | |
| 	State   SchemaState    `json:"state"`
 | |
| 	Comment string         `json:"comment"`    // Comment
 | |
| 	Tp      IndexType      `json:"index_type"` // Index type: Btree or Hash
 | |
| }
 | |
| 
 | |
| // Clone clones IndexInfo.
 | |
| func (index *IndexInfo) Clone() *IndexInfo {
 | |
| 	ni := *index
 | |
| 	ni.Columns = make([]*IndexColumn, len(index.Columns))
 | |
| 	for i := range index.Columns {
 | |
| 		ni.Columns[i] = index.Columns[i].Clone()
 | |
| 	}
 | |
| 	return &ni
 | |
| }
 | |
| 
 | |
| // DBInfo provides meta data describing a DB.
 | |
| type DBInfo struct {
 | |
| 	ID      int64        `json:"id"`      // Database ID
 | |
| 	Name    CIStr        `json:"db_name"` // DB name.
 | |
| 	Charset string       `json:"charset"`
 | |
| 	Collate string       `json:"collate"`
 | |
| 	Tables  []*TableInfo `json:"-"` // Tables in the DB.
 | |
| 	State   SchemaState  `json:"state"`
 | |
| }
 | |
| 
 | |
| // Clone clones DBInfo.
 | |
| func (db *DBInfo) Clone() *DBInfo {
 | |
| 	newInfo := *db
 | |
| 	newInfo.Tables = make([]*TableInfo, len(db.Tables))
 | |
| 	for i := range db.Tables {
 | |
| 		newInfo.Tables[i] = db.Tables[i].Clone()
 | |
| 	}
 | |
| 	return &newInfo
 | |
| }
 | |
| 
 | |
| // CIStr is case insensitve string.
 | |
| type CIStr struct {
 | |
| 	O string `json:"O"` // Original string.
 | |
| 	L string `json:"L"` // Lower case string.
 | |
| }
 | |
| 
 | |
| // String implements fmt.Stringer interface.
 | |
| func (cis CIStr) String() string {
 | |
| 	return cis.O
 | |
| }
 | |
| 
 | |
| // NewCIStr creates a new CIStr.
 | |
| func NewCIStr(s string) (cs CIStr) {
 | |
| 	cs.O = s
 | |
| 	cs.L = strings.ToLower(s)
 | |
| 	return
 | |
| }
 |