summaryrefslogtreecommitdiff
path: root/vendor/github.com/uptrace/bun/migrate/sqlschema/column.go
blob: 60f7ea8a69a416c8e700e7d0a3380a1797b7d06c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package sqlschema

import (
	"fmt"

	"github.com/uptrace/bun/schema"
)

type Column interface {
	GetName() string
	GetSQLType() string
	GetVarcharLen() int
	GetDefaultValue() string
	GetIsNullable() bool
	GetIsAutoIncrement() bool
	GetIsIdentity() bool
	AppendQuery(schema.Formatter, []byte) ([]byte, error)
}

var _ Column = (*BaseColumn)(nil)

// BaseColumn is a base column definition that stores various attributes of a column.
//
// Dialects and only dialects can use it to implement the Column interface.
// Other packages must use the Column interface.
type BaseColumn struct {
	Name            string
	SQLType         string
	VarcharLen      int
	DefaultValue    string
	IsNullable      bool
	IsAutoIncrement bool
	IsIdentity      bool
	// TODO: add Precision and Cardinality for timestamps/bit-strings/floats and arrays respectively.
}

func (cd BaseColumn) GetName() string {
	return cd.Name
}

func (cd BaseColumn) GetSQLType() string {
	return cd.SQLType
}

func (cd BaseColumn) GetVarcharLen() int {
	return cd.VarcharLen
}

func (cd BaseColumn) GetDefaultValue() string {
	return cd.DefaultValue
}

func (cd BaseColumn) GetIsNullable() bool {
	return cd.IsNullable
}

func (cd BaseColumn) GetIsAutoIncrement() bool {
	return cd.IsAutoIncrement
}

func (cd BaseColumn) GetIsIdentity() bool {
	return cd.IsIdentity
}

// AppendQuery appends full SQL data type.
func (c *BaseColumn) AppendQuery(fmter schema.Formatter, b []byte) (_ []byte, err error) {
	b = append(b, c.SQLType...)
	if c.VarcharLen == 0 {
		return b, nil
	}
	b = append(b, "("...)
	b = append(b, fmt.Sprint(c.VarcharLen)...)
	b = append(b, ")"...)
	return b, nil
}