-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathprocessor.go
More file actions
92 lines (78 loc) · 2.56 KB
/
processor.go
File metadata and controls
92 lines (78 loc) · 2.56 KB
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
package sqlserver
import (
"fmt"
"strings"
"github.com/goravel/framework/contracts/database/driver"
"github.com/spf13/cast"
)
var _ driver.Processor = &Processor{}
type Processor struct {
}
func NewProcessor() *Processor {
return &Processor{}
}
func (r Processor) ProcessColumns(dbColumns []driver.DBColumn) []driver.Column {
var columns []driver.Column
for _, dbColumn := range dbColumns {
columns = append(columns, driver.Column{
Autoincrement: dbColumn.Autoincrement,
Collation: dbColumn.Collation,
Comment: dbColumn.Comment,
Default: dbColumn.Default,
Name: dbColumn.Name,
Nullable: cast.ToBool(dbColumn.Nullable),
Type: getType(dbColumn),
TypeName: dbColumn.TypeName,
})
}
return columns
}
func (r Processor) ProcessForeignKeys(dbForeignKeys []driver.DBForeignKey) []driver.ForeignKey {
var foreignKeys []driver.ForeignKey
for _, dbForeignKey := range dbForeignKeys {
foreignKeys = append(foreignKeys, driver.ForeignKey{
Name: dbForeignKey.Name,
Columns: strings.Split(dbForeignKey.Columns, ","),
ForeignSchema: dbForeignKey.ForeignSchema,
ForeignTable: dbForeignKey.ForeignTable,
ForeignColumns: strings.Split(dbForeignKey.ForeignColumns, ","),
OnUpdate: strings.ToLower(strings.ReplaceAll(dbForeignKey.OnUpdate, "_", " ")),
OnDelete: strings.ToLower(strings.ReplaceAll(dbForeignKey.OnDelete, "_", " ")),
})
}
return foreignKeys
}
func (r Processor) ProcessIndexes(dbIndexes []driver.DBIndex) []driver.Index {
var indexes []driver.Index
for _, dbIndex := range dbIndexes {
indexes = append(indexes, driver.Index{
Columns: strings.Split(dbIndex.Columns, ","),
Name: strings.ToLower(dbIndex.Name),
Type: strings.ToLower(dbIndex.Type),
Primary: dbIndex.Primary,
Unique: dbIndex.Unique,
})
}
return indexes
}
func (r Processor) ProcessTypes(types []driver.Type) []driver.Type {
return types
}
func getType(dbColumn driver.DBColumn) string {
var typeName string
switch dbColumn.TypeName {
case "binary", "varbinary", "char", "varchar", "nchar", "nvarchar":
if dbColumn.Length == -1 {
typeName = dbColumn.TypeName + "(max)"
} else {
typeName = fmt.Sprintf("%s(%d)", dbColumn.TypeName, dbColumn.Length)
}
case "decimal", "numeric":
typeName = fmt.Sprintf("%s(%d,%d)", dbColumn.TypeName, dbColumn.Precision, dbColumn.Places)
case "float", "datetime2", "datetimeoffset", "time":
typeName = fmt.Sprintf("%s(%d)", dbColumn.TypeName, dbColumn.Precision)
default:
typeName = dbColumn.TypeName
}
return typeName
}