add some comments and improvements
This commit is contained in:
parent
cf44e45230
commit
7c1515f50f
|
@ -904,6 +904,11 @@ func (engine *Engine) mapType(v reflect.Value) (*core.Table, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
for j, key := range tags {
|
for j, key := range tags {
|
||||||
|
if ctx.ignoreNext {
|
||||||
|
ctx.ignoreNext = false
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
k := strings.ToUpper(key)
|
k := strings.ToUpper(key)
|
||||||
ctx.tagName = k
|
ctx.tagName = k
|
||||||
|
|
||||||
|
@ -934,9 +939,6 @@ func (engine *Engine) mapType(v reflect.Value) (*core.Table, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if ctx.preTag == "DEFAULT" {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if strings.HasPrefix(key, "'") && strings.HasSuffix(key, "'") {
|
if strings.HasPrefix(key, "'") && strings.HasSuffix(key, "'") {
|
||||||
col.Name = key[1 : len(key)-1]
|
col.Name = key[1 : len(key)-1]
|
||||||
} else {
|
} else {
|
||||||
|
|
78
tag.go
78
tag.go
|
@ -27,6 +27,7 @@ type tagContext struct {
|
||||||
engine *Engine
|
engine *Engine
|
||||||
hasCacheTag bool
|
hasCacheTag bool
|
||||||
hasNoCacheTag bool
|
hasNoCacheTag bool
|
||||||
|
ignoreNext bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// tagHandler describes tag handler for XORM
|
// tagHandler describes tag handler for XORM
|
||||||
|
@ -35,8 +36,8 @@ type tagHandler func(ctx *tagContext) error
|
||||||
var (
|
var (
|
||||||
// defaultTagHandlers enumerates all the default tag handler
|
// defaultTagHandlers enumerates all the default tag handler
|
||||||
defaultTagHandlers = map[string]tagHandler{
|
defaultTagHandlers = map[string]tagHandler{
|
||||||
"<-": DirectTagHandler,
|
"<-": OnlyFromDBTagHandler,
|
||||||
"->": DirectTagHandler,
|
"->": OnlyToDBTagHandler,
|
||||||
"PK": PKTagHandler,
|
"PK": PKTagHandler,
|
||||||
"NULL": NULLTagHandler,
|
"NULL": NULLTagHandler,
|
||||||
"NOT": IgnoreTagHandler,
|
"NOT": IgnoreTagHandler,
|
||||||
|
@ -52,90 +53,100 @@ var (
|
||||||
"INDEX": IndexTagHandler,
|
"INDEX": IndexTagHandler,
|
||||||
"UNIQUE": UniqueTagHandler,
|
"UNIQUE": UniqueTagHandler,
|
||||||
"CACHE": CacheTagHandler,
|
"CACHE": CacheTagHandler,
|
||||||
"NOCACHE": CacheTagHandler,
|
"NOCACHE": NoCacheTagHandler,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
for k, _ := range core.SqlTypes {
|
for k := range core.SqlTypes {
|
||||||
defaultTagHandlers[k] = SQLTypeTagHandler
|
defaultTagHandlers[k] = SQLTypeTagHandler
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IgnoreTagHandler describes ignored tag handler
|
||||||
func IgnoreTagHandler(ctx *tagContext) error {
|
func IgnoreTagHandler(ctx *tagContext) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// DirectTagHandler describes handle mapping type handler
|
// OnlyFromDBTagHandler describes mapping direction tag handler
|
||||||
func DirectTagHandler(ctx *tagContext) error {
|
func OnlyFromDBTagHandler(ctx *tagContext) error {
|
||||||
if ctx.tagName == "<-" {
|
|
||||||
ctx.col.MapType = core.ONLYFROMDB
|
ctx.col.MapType = core.ONLYFROMDB
|
||||||
} else if ctx.tagName == "->" {
|
|
||||||
ctx.col.MapType = core.ONLYTODB
|
|
||||||
}
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// PKTagHandler decribes handle pk
|
// OnlyToDBTagHandler describes mapping direction tag handler
|
||||||
|
func OnlyToDBTagHandler(ctx *tagContext) error {
|
||||||
|
ctx.col.MapType = core.ONLYTODB
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// PKTagHandler decribes primary key tag handler
|
||||||
func PKTagHandler(ctx *tagContext) error {
|
func PKTagHandler(ctx *tagContext) error {
|
||||||
ctx.col.IsPrimaryKey = true
|
ctx.col.IsPrimaryKey = true
|
||||||
ctx.col.Nullable = false
|
ctx.col.Nullable = false
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// NULLTagHandler
|
// NULLTagHandler describes null tag handler
|
||||||
func NULLTagHandler(ctx *tagContext) error {
|
func NULLTagHandler(ctx *tagContext) error {
|
||||||
if len(ctx.preTag) == 0 {
|
|
||||||
ctx.col.Nullable = true
|
|
||||||
} else {
|
|
||||||
ctx.col.Nullable = (strings.ToUpper(ctx.preTag) != "NOT")
|
ctx.col.Nullable = (strings.ToUpper(ctx.preTag) != "NOT")
|
||||||
}
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NotNullTagHandler describes notnull tag handler
|
||||||
func NotNullTagHandler(ctx *tagContext) error {
|
func NotNullTagHandler(ctx *tagContext) error {
|
||||||
ctx.col.Nullable = false
|
ctx.col.Nullable = false
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// AutoIncrTagHandler describes autoincr tag handler
|
||||||
func AutoIncrTagHandler(ctx *tagContext) error {
|
func AutoIncrTagHandler(ctx *tagContext) error {
|
||||||
ctx.col.IsAutoIncrement = true
|
ctx.col.IsAutoIncrement = true
|
||||||
//col.AutoIncrStart = 1
|
/*
|
||||||
|
if len(ctx.params) > 0 {
|
||||||
// TODO: for postgres how add autoincr?
|
autoStartInt, err := strconv.Atoi(ctx.params[0])
|
||||||
/*case strings.HasPrefix(k, "AUTOINCR(") && strings.HasSuffix(k, ")"):
|
|
||||||
col.IsAutoIncrement = true
|
|
||||||
|
|
||||||
autoStart := k[len("AUTOINCR")+1 : len(k)-1]
|
|
||||||
autoStartInt, err := strconv.Atoi(autoStart)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
engine.LogError(err)
|
return err
|
||||||
}
|
}
|
||||||
col.AutoIncrStart = autoStartInt*/
|
ctx.col.AutoIncrStart = autoStartInt
|
||||||
|
} else {
|
||||||
|
ctx.col.AutoIncrStart = 1
|
||||||
|
}
|
||||||
|
*/
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DefaultTagHandler describes default tag handler
|
||||||
func DefaultTagHandler(ctx *tagContext) error {
|
func DefaultTagHandler(ctx *tagContext) error {
|
||||||
|
if len(ctx.params) > 0 {
|
||||||
|
ctx.col.Default = ctx.params[0]
|
||||||
|
} else {
|
||||||
ctx.col.Default = ctx.nextTag
|
ctx.col.Default = ctx.nextTag
|
||||||
|
ctx.ignoreNext = true
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CreatedTagHandler describes created tag handler
|
||||||
func CreatedTagHandler(ctx *tagContext) error {
|
func CreatedTagHandler(ctx *tagContext) error {
|
||||||
ctx.col.IsCreated = true
|
ctx.col.IsCreated = true
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// VersionTagHandler describes version tag handler
|
||||||
func VersionTagHandler(ctx *tagContext) error {
|
func VersionTagHandler(ctx *tagContext) error {
|
||||||
ctx.col.IsVersion = true
|
ctx.col.IsVersion = true
|
||||||
ctx.col.Default = "1"
|
ctx.col.Default = "1"
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UTCTagHandler describes utc tag handler
|
||||||
func UTCTagHandler(ctx *tagContext) error {
|
func UTCTagHandler(ctx *tagContext) error {
|
||||||
ctx.col.TimeZone = time.UTC
|
ctx.col.TimeZone = time.UTC
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// LocalTagHandler describes local tag handler
|
||||||
func LocalTagHandler(ctx *tagContext) error {
|
func LocalTagHandler(ctx *tagContext) error {
|
||||||
if len(ctx.params) == 0 {
|
if len(ctx.params) == 0 {
|
||||||
ctx.col.TimeZone = time.Local
|
ctx.col.TimeZone = time.Local
|
||||||
|
@ -149,16 +160,19 @@ func LocalTagHandler(ctx *tagContext) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UpdatedTagHandler describes updated tag handler
|
||||||
func UpdatedTagHandler(ctx *tagContext) error {
|
func UpdatedTagHandler(ctx *tagContext) error {
|
||||||
ctx.col.IsUpdated = true
|
ctx.col.IsUpdated = true
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DeletedTagHandler describes deleted tag handler
|
||||||
func DeletedTagHandler(ctx *tagContext) error {
|
func DeletedTagHandler(ctx *tagContext) error {
|
||||||
ctx.col.IsDeleted = true
|
ctx.col.IsDeleted = true
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IndexTagHandler describes index tag handler
|
||||||
func IndexTagHandler(ctx *tagContext) error {
|
func IndexTagHandler(ctx *tagContext) error {
|
||||||
if len(ctx.params) > 0 {
|
if len(ctx.params) > 0 {
|
||||||
ctx.indexNames[ctx.params[0]] = core.IndexType
|
ctx.indexNames[ctx.params[0]] = core.IndexType
|
||||||
|
@ -168,6 +182,7 @@ func IndexTagHandler(ctx *tagContext) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UniqueTagHandler describes unique tag handler
|
||||||
func UniqueTagHandler(ctx *tagContext) error {
|
func UniqueTagHandler(ctx *tagContext) error {
|
||||||
if len(ctx.params) > 0 {
|
if len(ctx.params) > 0 {
|
||||||
ctx.indexNames[ctx.params[0]] = core.UniqueType
|
ctx.indexNames[ctx.params[0]] = core.UniqueType
|
||||||
|
@ -177,6 +192,7 @@ func UniqueTagHandler(ctx *tagContext) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SQLTypeTagHandler describes SQL Type tag handler
|
||||||
func SQLTypeTagHandler(ctx *tagContext) error {
|
func SQLTypeTagHandler(ctx *tagContext) error {
|
||||||
ctx.col.SQLType = core.SQLType{Name: ctx.tagName}
|
ctx.col.SQLType = core.SQLType{Name: ctx.tagName}
|
||||||
if len(ctx.params) > 0 {
|
if len(ctx.params) > 0 {
|
||||||
|
@ -216,6 +232,7 @@ func SQLTypeTagHandler(ctx *tagContext) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ExtendsTagHandler describes extends tag handler
|
||||||
func ExtendsTagHandler(ctx *tagContext) error {
|
func ExtendsTagHandler(ctx *tagContext) error {
|
||||||
var fieldValue = ctx.fieldValue
|
var fieldValue = ctx.fieldValue
|
||||||
switch fieldValue.Kind() {
|
switch fieldValue.Kind() {
|
||||||
|
@ -247,15 +264,18 @@ func ExtendsTagHandler(ctx *tagContext) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CacheTagHandler describes cache tag handler
|
||||||
func CacheTagHandler(ctx *tagContext) error {
|
func CacheTagHandler(ctx *tagContext) error {
|
||||||
if ctx.tagName == "CACHE" {
|
|
||||||
if !ctx.hasCacheTag {
|
if !ctx.hasCacheTag {
|
||||||
ctx.hasCacheTag = true
|
ctx.hasCacheTag = true
|
||||||
}
|
}
|
||||||
} else if ctx.tagName == "NOCACHE" {
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// NoCacheTagHandler describes nocache tag handler
|
||||||
|
func NoCacheTagHandler(ctx *tagContext) error {
|
||||||
if !ctx.hasNoCacheTag {
|
if !ctx.hasNoCacheTag {
|
||||||
ctx.hasNoCacheTag = true
|
ctx.hasNoCacheTag = true
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue