Co-authored-by: anqiansong <anqiansong@bytedance.com>
This commit is contained in:
anqiansong
2022-04-07 10:40:21 +08:00
committed by GitHub
parent 9fe868ade9
commit 8dd764679c
7 changed files with 19 additions and 55 deletions

View File

@@ -21,7 +21,7 @@ CREATE TABLE `user`
CREATE TABLE `student` CREATE TABLE `student`
( (
`id` bigint NOT NULL, `type` bigint NOT NULL,
`class` varchar(255) COLLATE utf8mb4_bin NOT NULL DEFAULT '', `class` varchar(255) COLLATE utf8mb4_bin NOT NULL DEFAULT '',
`name` varchar(255) COLLATE utf8mb4_bin NOT NULL DEFAULT '', `name` varchar(255) COLLATE utf8mb4_bin NOT NULL DEFAULT '',
`age` tinyint DEFAULT NULL, `age` tinyint DEFAULT NULL,
@@ -29,6 +29,6 @@ CREATE TABLE `student`
) DEFAULT NULL, ) DEFAULT NULL,
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` timestamp NULL DEFAULT NULL, `update_time` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE, PRIMARY KEY (`type`) USING BTREE,
UNIQUE KEY `class_name_index` (`class`,`name`) UNIQUE KEY `class_name_index` (`class`,`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

View File

@@ -32,7 +32,7 @@ func genDelete(table Table, withCache, postgreSql bool) (string, string, error)
"upperStartCamelObject": camel, "upperStartCamelObject": camel,
"withCache": withCache, "withCache": withCache,
"containsIndexCache": table.ContainsUniqueCacheKey, "containsIndexCache": table.ContainsUniqueCacheKey,
"lowerStartCamelPrimaryKey": stringx.From(table.PrimaryKey.Name.ToCamel()).Untitle(), "lowerStartCamelPrimaryKey": util.EscapeGolangKeyword(stringx.From(table.PrimaryKey.Name.ToCamel()).Untitle()),
"dataType": table.PrimaryKey.DataType, "dataType": table.PrimaryKey.DataType,
"keys": strings.Join(keySet.KeysStr(), "\n"), "keys": strings.Join(keySet.KeysStr(), "\n"),
"originalPrimaryKey": wrapWithRawString(table.PrimaryKey.Name.Source(), postgreSql), "originalPrimaryKey": wrapWithRawString(table.PrimaryKey.Name.Source(), postgreSql),
@@ -53,7 +53,7 @@ func genDelete(table Table, withCache, postgreSql bool) (string, string, error)
deleteMethodOut, err := util.With("deleteMethod"). deleteMethodOut, err := util.With("deleteMethod").
Parse(text). Parse(text).
Execute(map[string]interface{}{ Execute(map[string]interface{}{
"lowerStartCamelPrimaryKey": stringx.From(table.PrimaryKey.Name.ToCamel()).Untitle(), "lowerStartCamelPrimaryKey": util.EscapeGolangKeyword(stringx.From(table.PrimaryKey.Name.ToCamel()).Untitle()),
"dataType": table.PrimaryKey.DataType, "dataType": table.PrimaryKey.DataType,
"data": table, "data": table,
}) })

View File

@@ -21,7 +21,7 @@ func genFindOne(table Table, withCache, postgreSql bool) (string, string, error)
"upperStartCamelObject": camel, "upperStartCamelObject": camel,
"lowerStartCamelObject": stringx.From(camel).Untitle(), "lowerStartCamelObject": stringx.From(camel).Untitle(),
"originalPrimaryKey": wrapWithRawString(table.PrimaryKey.Name.Source(), postgreSql), "originalPrimaryKey": wrapWithRawString(table.PrimaryKey.Name.Source(), postgreSql),
"lowerStartCamelPrimaryKey": stringx.From(table.PrimaryKey.Name.ToCamel()).Untitle(), "lowerStartCamelPrimaryKey": util.EscapeGolangKeyword(stringx.From(table.PrimaryKey.Name.ToCamel()).Untitle()),
"dataType": table.PrimaryKey.DataType, "dataType": table.PrimaryKey.DataType,
"cacheKey": table.PrimaryCacheKey.KeyExpression, "cacheKey": table.PrimaryCacheKey.KeyExpression,
"cacheKeyVariable": table.PrimaryCacheKey.KeyLeft, "cacheKeyVariable": table.PrimaryCacheKey.KeyLeft,
@@ -41,7 +41,7 @@ func genFindOne(table Table, withCache, postgreSql bool) (string, string, error)
Parse(text). Parse(text).
Execute(map[string]interface{}{ Execute(map[string]interface{}{
"upperStartCamelObject": camel, "upperStartCamelObject": camel,
"lowerStartCamelPrimaryKey": stringx.From(table.PrimaryKey.Name.ToCamel()).Untitle(), "lowerStartCamelPrimaryKey": util.EscapeGolangKeyword(stringx.From(table.PrimaryKey.Name.ToCamel()).Untitle()),
"dataType": table.PrimaryKey.DataType, "dataType": table.PrimaryKey.DataType,
"data": table, "data": table,
}) })

View File

@@ -59,7 +59,7 @@ func genFindOneByField(table Table, withCache, postgreSql bool) (*findOneCode, e
for _, key := range table.UniqueCacheKey { for _, key := range table.UniqueCacheKey {
var inJoin, paramJoin Join var inJoin, paramJoin Join
for _, f := range key.Fields { for _, f := range key.Fields {
param := stringx.From(f.Name.ToCamel()).Untitle() param := util.EscapeGolangKeyword(stringx.From(f.Name.ToCamel()).Untitle())
inJoin = append(inJoin, fmt.Sprintf("%s %s", param, f.DataType)) inJoin = append(inJoin, fmt.Sprintf("%s %s", param, f.DataType))
paramJoin = append(paramJoin, param) paramJoin = append(paramJoin, param)
} }
@@ -115,7 +115,7 @@ func genFindOneByField(table Table, withCache, postgreSql bool) (*findOneCode, e
func convertJoin(key Key, postgreSql bool) (in, paramJoinString, originalFieldString string) { func convertJoin(key Key, postgreSql bool) (in, paramJoinString, originalFieldString string) {
var inJoin, paramJoin, argJoin Join var inJoin, paramJoin, argJoin Join
for index, f := range key.Fields { for index, f := range key.Fields {
param := stringx.From(f.Name.ToCamel()).Untitle() param := util.EscapeGolangKeyword(stringx.From(f.Name.ToCamel()).Untitle())
inJoin = append(inJoin, fmt.Sprintf("%s %s", param, f.DataType)) inJoin = append(inJoin, fmt.Sprintf("%s %s", param, f.DataType))
paramJoin = append(paramJoin, param) paramJoin = append(paramJoin, param)
if postgreSql { if postgreSql {

View File

@@ -53,8 +53,8 @@ func genCacheKeys(table parser.Table) (Key, []Key) {
func genCacheKey(db, table stringx.String, in []*parser.Field) Key { func genCacheKey(db, table stringx.String, in []*parser.Field) Key {
var ( var (
varLeftJoin, varRightJon, fieldNameJoin Join varLeftJoin, varRightJoin, fieldNameJoin Join
varLeft, varRight, varExpression string varLeft, varRight, varExpression string
keyLeftJoin, keyRightJoin, keyRightArgJoin, dataRightJoin Join keyLeftJoin, keyRightJoin, keyRightArgJoin, dataRightJoin Join
keyLeft, keyRight, dataKeyRight, keyExpression, dataKeyExpression string keyLeft, keyRight, dataKeyRight, keyExpression, dataKeyExpression string
@@ -63,19 +63,19 @@ func genCacheKey(db, table stringx.String, in []*parser.Field) Key {
dbName, tableName := util.SafeString(db.Source()), util.SafeString(table.Source()) dbName, tableName := util.SafeString(db.Source()), util.SafeString(table.Source())
if len(dbName) > 0 { if len(dbName) > 0 {
varLeftJoin = append(varLeftJoin, "cache", dbName, tableName) varLeftJoin = append(varLeftJoin, "cache", dbName, tableName)
varRightJon = append(varRightJon, "cache", dbName, tableName) varRightJoin = append(varRightJoin, "cache", dbName, tableName)
keyLeftJoin = append(keyLeftJoin, dbName, tableName) keyLeftJoin = append(keyLeftJoin, dbName, tableName)
} else { } else {
varLeftJoin = append(varLeftJoin, "cache", tableName) varLeftJoin = append(varLeftJoin, "cache", tableName)
varRightJon = append(varRightJon, "cache", tableName) varRightJoin = append(varRightJoin, "cache", tableName)
keyLeftJoin = append(keyLeftJoin, tableName) keyLeftJoin = append(keyLeftJoin, tableName)
} }
for _, each := range in { for _, each := range in {
varLeftJoin = append(varLeftJoin, each.Name.Source()) varLeftJoin = append(varLeftJoin, each.Name.Source())
varRightJon = append(varRightJon, each.Name.Source()) varRightJoin = append(varRightJoin, each.Name.Source())
keyLeftJoin = append(keyLeftJoin, each.Name.Source()) keyLeftJoin = append(keyLeftJoin, each.Name.Source())
keyRightJoin = append(keyRightJoin, stringx.From(each.Name.ToCamel()).Untitle()) keyRightJoin = append(keyRightJoin, util.EscapeGolangKeyword(stringx.From(each.Name.ToCamel()).Untitle()))
keyRightArgJoin = append(keyRightArgJoin, "%v") keyRightArgJoin = append(keyRightArgJoin, "%v")
dataRightJoin = append(dataRightJoin, "data."+each.Name.ToCamel()) dataRightJoin = append(dataRightJoin, "data."+each.Name.ToCamel())
fieldNameJoin = append(fieldNameJoin, each.Name.Source()) fieldNameJoin = append(fieldNameJoin, each.Name.Source())
@@ -84,7 +84,7 @@ func genCacheKey(db, table stringx.String, in []*parser.Field) Key {
keyLeftJoin = append(keyLeftJoin, "key") keyLeftJoin = append(keyLeftJoin, "key")
varLeft = util.SafeString(varLeftJoin.Camel().With("").Untitle()) varLeft = util.SafeString(varLeftJoin.Camel().With("").Untitle())
varRight = fmt.Sprintf(`"%s"`, varRightJon.Camel().Untitle().With(":").Source()+":") varRight = fmt.Sprintf(`"%s"`, varRightJoin.Camel().Untitle().With(":").Source()+":")
varExpression = fmt.Sprintf(`%s = %s`, varLeft, varRight) varExpression = fmt.Sprintf(`%s = %s`, varLeft, varRight)
keyLeft = util.SafeString(keyLeftJoin.Camel().With("").Untitle()) keyLeft = util.SafeString(keyLeftJoin.Camel().With("").Untitle())

View File

@@ -6,7 +6,6 @@ import (
"github.com/zeromicro/go-zero/core/stores/sqlx" "github.com/zeromicro/go-zero/core/stores/sqlx"
"github.com/zeromicro/go-zero/tools/goctl/model/sql/util" "github.com/zeromicro/go-zero/tools/goctl/model/sql/util"
su "github.com/zeromicro/go-zero/tools/goctl/util"
) )
const indexPri = "PRIMARY" const indexPri = "PRIMARY"
@@ -145,15 +144,14 @@ func (m *InformationSchemaModel) FindIndex(db, table, column string) ([]*DbIndex
// Convert converts column data into Table // Convert converts column data into Table
func (c *ColumnData) Convert() (*Table, error) { func (c *ColumnData) Convert() (*Table, error) {
var table Table var table Table
table.Table = su.EscapeGolangKeyword(c.Table) table.Table = c.Table
table.Db = su.EscapeGolangKeyword(c.Db) table.Db = c.Db
table.Columns = c.Columns table.Columns = c.Columns
table.UniqueIndex = map[string][]*Column{} table.UniqueIndex = map[string][]*Column{}
table.NormalIndex = map[string][]*Column{} table.NormalIndex = map[string][]*Column{}
m := make(map[string][]*Column) m := make(map[string][]*Column)
for _, each := range c.Columns { for _, each := range c.Columns {
each.Name = su.EscapeGolangKeyword(each.Name)
each.Comment = util.TrimNewLine(each.Comment) each.Comment = util.TrimNewLine(each.Comment)
if each.Index != nil { if each.Index != nil {
m[each.Index.IndexName] = append(m[each.Index.IndexName], each) m[each.Index.IndexName] = append(m[each.Index.IndexName], each)

View File

@@ -11,7 +11,6 @@ import (
"github.com/zeromicro/go-zero/tools/goctl/model/sql/converter" "github.com/zeromicro/go-zero/tools/goctl/model/sql/converter"
"github.com/zeromicro/go-zero/tools/goctl/model/sql/model" "github.com/zeromicro/go-zero/tools/goctl/model/sql/model"
"github.com/zeromicro/go-zero/tools/goctl/model/sql/util" "github.com/zeromicro/go-zero/tools/goctl/model/sql/util"
su "github.com/zeromicro/go-zero/tools/goctl/util"
"github.com/zeromicro/go-zero/tools/goctl/util/console" "github.com/zeromicro/go-zero/tools/goctl/util/console"
"github.com/zeromicro/go-zero/tools/goctl/util/stringx" "github.com/zeromicro/go-zero/tools/goctl/util/stringx"
) )
@@ -64,14 +63,13 @@ func parseNameOriginal(ts []*parser.Table) (nameOriginals [][]string) {
// Parse parses ddl into golang structure // Parse parses ddl into golang structure
func Parse(filename, database string) ([]*Table, error) { func Parse(filename, database string) ([]*Table, error) {
p := parser.NewParser() p := parser.NewParser()
ts, err := p.From(filename) tables, err := p.From(filename)
if err != nil { if err != nil {
return nil, err return nil, err
} }
nameOriginals := parseNameOriginal(ts) nameOriginals := parseNameOriginal(tables)
tables := GetSafeTables(ts)
indexNameGen := func(column ...string) string { indexNameGen := func(column ...string) string {
return strings.Join(column, "_") return strings.Join(column, "_")
} }
@@ -371,35 +369,3 @@ func getTableFields(table *model.Table) (map[string]*Field, error) {
} }
return fieldM, nil return fieldM, nil
} }
// GetSafeTables escapes the golang keywords from sql tables.
func GetSafeTables(tables []*parser.Table) []*parser.Table {
var list []*parser.Table
for _, t := range tables {
table := GetSafeTable(t)
list = append(list, table)
}
return list
}
// GetSafeTable escapes the golang keywords from sql table.
func GetSafeTable(table *parser.Table) *parser.Table {
table.Name = su.EscapeGolangKeyword(table.Name)
for _, c := range table.Columns {
c.Name = su.EscapeGolangKeyword(c.Name)
}
for _, e := range table.Constraints {
var uniqueKeys, primaryKeys []string
for _, u := range e.ColumnUniqueKey {
uniqueKeys = append(uniqueKeys, su.EscapeGolangKeyword(u))
}
for _, p := range e.ColumnPrimaryKey {
primaryKeys = append(primaryKeys, su.EscapeGolangKeyword(p))
}
e.ColumnUniqueKey = uniqueKeys
e.ColumnPrimaryKey = primaryKeys
}
return table
}