Merge pull request '优化数据库工具相关逻辑' (#11) from feature/fix_generate_tool into master

Reviewed-on: #11
This commit is contained in:
2025-08-17 12:59:53 +08:00
2 changed files with 55 additions and 41 deletions

View File

@ -7,47 +7,50 @@
// Date : 2021-10-25 4:50 下午 // Date : 2021-10-25 4:50 下午
package sql2go package sql2go
import "git.zhangdeman.cn/zhangdeman/consts"
// sqlTypeMap mysql数据类型 => go 数据类型映射 // sqlTypeMap mysql数据类型 => go 数据类型映射
// //
// Author : go_developer@163.com<白茶清欢> // Author : go_developer@163.com<白茶清欢>
// //
// Date : 4:50 下午 2021/10/25 // Date : 4:50 下午 2021/10/25
var sqlTypeMap = map[string]string{ var sqlTypeMap = map[string]string{
"int": "int", "int": consts.DataTypeInt.String(),
"integer": "int", "integer": consts.DataTypeInt.String(),
"tinyint": "int8", "tinyint": consts.DataTypeInt8.String(),
"smallint": "int16", "smallint": consts.DataTypeInt16.String(),
"mediumint": "int32", "mediumint": consts.DataTypeInt32.String(),
"bigint": "int64", "bigint": consts.DataTypeInt64.String(),
"int unsigned": "uint", "int unsigned": consts.DataTypeUint.String(),
"integer unsigned": "uint", "integer unsigned": consts.DataTypeUint.String(),
"tinyint unsigned": "uint8", "tinyint unsigned": consts.DataTypeUint8.String(),
"smallint unsigned": "uint16", "smallint unsigned": consts.DataTypeUint16.String(),
"mediumint unsigned": "uint32", "mediumint unsigned": consts.DataTypeUint32.String(),
"bigint unsigned": "uint64", "bigint unsigned": consts.DataTypeUint64.String(),
"bit": "byte", "bit": "byte",
"bool": "bool", "bool": consts.DataTypeBool.String(),
"enum": "string", "enum": consts.DataTypeString.String(),
"set": "string", "set": consts.DataTypeString.String(),
"varchar": "string", "varchar": consts.DataTypeString.String(),
"char": "string", "char": consts.DataTypeString.String(),
"tinytext": "string", "tinytext": consts.DataTypeString.String(),
"mediumtext": "string", "mediumtext": consts.DataTypeString.String(),
"text": "string", "text": consts.DataTypeString.String(),
"longtext": "string", "longtext": consts.DataTypeString.String(),
"blob": "string", "blob": consts.DataTypeString.String(),
"tinyblob": "string", "tinyblob": consts.DataTypeString.String(),
"mediumblob": "string", "mediumblob": consts.DataTypeString.String(),
"longblob": "string", "longblob": consts.DataTypeString.String(),
"date": "time.Time", "date": "time.Time",
"datetime": "time.Time", "datetime": "time.Time",
"timestamp": "time.Time", "timestamp": "time.Time",
"time": "time.Time", "time": "time.Time",
"float": "float64", "float": consts.DataTypeFloat64.String(),
"double": "float64", "double": consts.DataTypeFloat64.String(),
"decimal": "float64", "decimal": consts.DataTypeFloat64.String(),
"binary": "string", "binary": consts.DataTypeString.String(),
"varbinary": "string", "varbinary": consts.DataTypeString.String(),
"json": consts.DataTypeString.String(),
} }
const ( const (

View File

@ -9,9 +9,10 @@ package sql2go
import ( import (
"errors" "errors"
wrapperType "git.zhangdeman.cn/zhangdeman/wrapper"
"strings" "strings"
wrapperType "git.zhangdeman.cn/zhangdeman/wrapper"
"github.com/xwb1989/sqlparser" "github.com/xwb1989/sqlparser"
) )
@ -93,11 +94,14 @@ func generateTable(tableName string, modelStructName string, columnList []*sqlpa
for _, item := range columnList { for _, item := range columnList {
comment := "" comment := ""
if item.Type.Comment == nil { if item.Type.Comment == nil || item.Type.Comment.Val == nil {
comment = item.Name.String() comment = item.Name.String()
} else { } else {
comment = string(item.Type.Comment.Val) comment = string(item.Type.Comment.Val)
} }
if comment == "" {
comment = item.Name.String()
}
data := map[string]string{ data := map[string]string{
"{FIELD}": wrapperType.String(item.Name.String()).SnakeCaseToCamel(), "{FIELD}": wrapperType.String(item.Name.String()).SnakeCaseToCamel(),
"{COLUMN}": item.Name.String(), "{COLUMN}": item.Name.String(),
@ -106,6 +110,10 @@ func generateTable(tableName string, modelStructName string, columnList []*sqlpa
"{COMMENT}": comment, "{COMMENT}": comment,
"{TYPE}": sqlTypeMap[item.Type.Type], "{TYPE}": sqlTypeMap[item.Type.Type],
} }
if item.Type.Unsigned {
// 无符号
data["{TYPE}"] = sqlTypeMap[item.Type.Type+" unsigned"]
}
/*if data["{FIELD}"] == "ID" { /*if data["{FIELD}"] == "ID" {
basic.PrimaryFieldType = data["{TYPE}"] basic.PrimaryFieldType = data["{TYPE}"]
}*/ }*/
@ -150,17 +158,20 @@ return "{{TABLE_NAME}}"
func generateTableColumnDefined(modelStructName string, columnList []*sqlparser.ColumnDefinition) (string, string, string) { func generateTableColumnDefined(modelStructName string, columnList []*sqlparser.ColumnDefinition) (string, string, string) {
columnDefineName := modelStructName + "Column" columnDefineName := modelStructName + "Column"
structFieldResult := "type " + columnDefineName + " struct { \n" structFieldResult := "type " + columnDefineName + " struct { \n"
structFieldDescInstanceResult := "&" + columnDefineName + "{ \n" structFieldDescInstanceResult := columnDefineName + "{ \n"
structFieldCommentInstanceResult := "map[string]string{ \n" structFieldCommentInstanceResult := "map[string]string{ \n"
for _, column := range columnList { 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{ dataMap := map[string]string{
"{FIELD}": wrapperType.String(column.Name.String()).SnakeCaseToCamel(), "{FIELD}": wrapperType.String(column.Name.String()).SnakeCaseToCamel(),
"{JSON_TAG}": column.Name.String(), "{JSON_TAG}": column.Name.String(),
"{FIELD_COMMENT}": wrapperType.TernaryOperator.String( "{FIELD_COMMENT}": comment,
column.Type.Comment == nil,
wrapperType.String(column.Name.String()),
wrapperType.String(string(column.Type.Comment.Val)),
).Value(),
} }
structFieldDefine := TableColumnTpl structFieldDefine := TableColumnTpl
@ -181,7 +192,7 @@ func generateTableColumnDefined(modelStructName string, columnList []*sqlparser.
tableColumnFunction := ` tableColumnFunction := `
// Columns 获取表字段定义 // 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} return {STRUCT_FIELD_DESC_DEFINED_RESULT}
} }