diff --git a/sql2go/define.go b/sql2go/define.go index b89a632..d43356f 100644 --- a/sql2go/define.go +++ b/sql2go/define.go @@ -7,47 +7,50 @@ // Date : 2021-10-25 4:50 下午 package sql2go +import "git.zhangdeman.cn/zhangdeman/consts" + // sqlTypeMap mysql数据类型 => go 数据类型映射 // // Author : go_developer@163.com<白茶清欢> // // Date : 4:50 下午 2021/10/25 var sqlTypeMap = map[string]string{ - "int": "int", - "integer": "int", - "tinyint": "int8", - "smallint": "int16", - "mediumint": "int32", - "bigint": "int64", - "int unsigned": "uint", - "integer unsigned": "uint", - "tinyint unsigned": "uint8", - "smallint unsigned": "uint16", - "mediumint unsigned": "uint32", - "bigint unsigned": "uint64", + "int": consts.DataTypeInt.String(), + "integer": consts.DataTypeInt.String(), + "tinyint": consts.DataTypeInt8.String(), + "smallint": consts.DataTypeInt16.String(), + "mediumint": consts.DataTypeInt32.String(), + "bigint": consts.DataTypeInt64.String(), + "int unsigned": consts.DataTypeUint.String(), + "integer unsigned": consts.DataTypeUint.String(), + "tinyint unsigned": consts.DataTypeUint8.String(), + "smallint unsigned": consts.DataTypeUint16.String(), + "mediumint unsigned": consts.DataTypeUint32.String(), + "bigint unsigned": consts.DataTypeUint64.String(), "bit": "byte", - "bool": "bool", - "enum": "string", - "set": "string", - "varchar": "string", - "char": "string", - "tinytext": "string", - "mediumtext": "string", - "text": "string", - "longtext": "string", - "blob": "string", - "tinyblob": "string", - "mediumblob": "string", - "longblob": "string", + "bool": consts.DataTypeBool.String(), + "enum": consts.DataTypeString.String(), + "set": consts.DataTypeString.String(), + "varchar": consts.DataTypeString.String(), + "char": consts.DataTypeString.String(), + "tinytext": consts.DataTypeString.String(), + "mediumtext": consts.DataTypeString.String(), + "text": consts.DataTypeString.String(), + "longtext": consts.DataTypeString.String(), + "blob": consts.DataTypeString.String(), + "tinyblob": consts.DataTypeString.String(), + "mediumblob": consts.DataTypeString.String(), + "longblob": consts.DataTypeString.String(), "date": "time.Time", "datetime": "time.Time", "timestamp": "time.Time", "time": "time.Time", - "float": "float64", - "double": "float64", - "decimal": "float64", - "binary": "string", - "varbinary": "string", + "float": consts.DataTypeFloat64.String(), + "double": consts.DataTypeFloat64.String(), + "decimal": consts.DataTypeFloat64.String(), + "binary": consts.DataTypeString.String(), + "varbinary": consts.DataTypeString.String(), + "json": consts.DataTypeString.String(), } const ( diff --git a/sql2go/parser.go b/sql2go/parser.go index 0aa588e..73e2c55 100644 --- a/sql2go/parser.go +++ b/sql2go/parser.go @@ -9,9 +9,10 @@ package sql2go import ( "errors" - wrapperType "git.zhangdeman.cn/zhangdeman/wrapper" "strings" + wrapperType "git.zhangdeman.cn/zhangdeman/wrapper" + "github.com/xwb1989/sqlparser" ) @@ -93,11 +94,14 @@ func generateTable(tableName string, modelStructName string, columnList []*sqlpa for _, item := range columnList { comment := "" - if item.Type.Comment == nil { + if item.Type.Comment == nil || item.Type.Comment.Val == nil { comment = item.Name.String() } else { comment = string(item.Type.Comment.Val) } + if comment == "" { + comment = item.Name.String() + } data := map[string]string{ "{FIELD}": wrapperType.String(item.Name.String()).SnakeCaseToCamel(), "{COLUMN}": item.Name.String(), @@ -106,6 +110,10 @@ func generateTable(tableName string, modelStructName string, columnList []*sqlpa "{COMMENT}": comment, "{TYPE}": sqlTypeMap[item.Type.Type], } + if item.Type.Unsigned { + // 无符号 + data["{TYPE}"] = sqlTypeMap[item.Type.Type+" unsigned"] + } /*if data["{FIELD}"] == "ID" { basic.PrimaryFieldType = data["{TYPE}"] }*/ @@ -150,17 +158,20 @@ return "{{TABLE_NAME}}" func generateTableColumnDefined(modelStructName string, columnList []*sqlparser.ColumnDefinition) (string, string, string) { columnDefineName := modelStructName + "Column" structFieldResult := "type " + columnDefineName + " struct { \n" - structFieldDescInstanceResult := "&" + columnDefineName + "{ \n" + structFieldDescInstanceResult := columnDefineName + "{ \n" structFieldCommentInstanceResult := "map[string]string{ \n" for _, column := range columnList { + comment := column.Name.String() + if nil != column.Type.Comment { + comment = string(column.Type.Comment.Val) + } + if comment == "" { + comment = column.Name.String() + } dataMap := map[string]string{ - "{FIELD}": wrapperType.String(column.Name.String()).SnakeCaseToCamel(), - "{JSON_TAG}": column.Name.String(), - "{FIELD_COMMENT}": wrapperType.TernaryOperator.String( - column.Type.Comment == nil, - wrapperType.String(column.Name.String()), - wrapperType.String(string(column.Type.Comment.Val)), - ).Value(), + "{FIELD}": wrapperType.String(column.Name.String()).SnakeCaseToCamel(), + "{JSON_TAG}": column.Name.String(), + "{FIELD_COMMENT}": comment, } structFieldDefine := TableColumnTpl @@ -181,7 +192,7 @@ func generateTableColumnDefined(modelStructName string, columnList []*sqlparser. tableColumnFunction := ` // Columns 获取表字段定义 -func ({TABLE_FIRST} {MODEL_STRUCT_NAME}) Columns() *{COLUMN_DEFINED} { +func ({TABLE_FIRST} {MODEL_STRUCT_NAME}) Columns() {COLUMN_DEFINED} { return {STRUCT_FIELD_DESC_DEFINED_RESULT} }