64 lines
1.5 KiB
Go
64 lines
1.5 KiB
Go
|
package utils
|
||
|
|
||
|
import (
|
||
|
"log"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
type FieldDesc struct {
|
||
|
FiledName string `json:"field_name"`
|
||
|
Type string `json:"type"`
|
||
|
Primary bool `json:"primary"`
|
||
|
}
|
||
|
|
||
|
func TrimUnWanted(in string) string {
|
||
|
ret := ""
|
||
|
ret = strings.Trim(in, "\t")
|
||
|
ret = strings.Trim(in, "\n")
|
||
|
ret = strings.Trim(in, "\x09")
|
||
|
ret = strings.Trim(in, " ")
|
||
|
|
||
|
return ret
|
||
|
}
|
||
|
func DDL2Field(ddl string) (string, []FieldDesc) {
|
||
|
if "" == ddl {
|
||
|
return "", nil
|
||
|
}
|
||
|
ret := make([]FieldDesc, 0)
|
||
|
indexStart := strings.Index(ddl, "CREATE TABLE")
|
||
|
indexFirstParentheses := strings.Index(ddl, "(")
|
||
|
indexLastParentheses := strings.LastIndex(ddl, ")")
|
||
|
|
||
|
sTbNameUnTrim := ddl[indexStart+len("CREATE TABLE") : indexFirstParentheses]
|
||
|
sTableName := strings.Trim(sTbNameUnTrim, " ")
|
||
|
|
||
|
sTbDesc := ddl[indexFirstParentheses+1 : indexLastParentheses]
|
||
|
fields := strings.Split(sTbDesc, ",")
|
||
|
log.Print(fields)
|
||
|
primarykey := []string{}
|
||
|
for _, v := range fields {
|
||
|
if strings.Contains(v, "PRIMARY KEY") {
|
||
|
start := strings.Index(v, "(")
|
||
|
end := strings.LastIndex(v, ")")
|
||
|
primarykey = append(primarykey, v[start+1:end])
|
||
|
} else {
|
||
|
tmp := strings.Split(v, " ")
|
||
|
if len(tmp) > 1 {
|
||
|
ret = append(ret, FieldDesc{
|
||
|
FiledName: strings.Trim(tmp[0], "\n\x09\x09"),
|
||
|
Type: strings.Trim(tmp[1], " "),
|
||
|
Primary: false,
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
for _, key := range primarykey {
|
||
|
for k := range ret {
|
||
|
if 0 == strings.Compare(ret[k].FiledName, key) {
|
||
|
ret[k].Primary = true
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return sTableName, ret
|
||
|
}
|