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,7 +53,7 @@ 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
@@ -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
}