Skip to content

Commit 18a3a3d

Browse files
authored
support postgres comment (#48)
support postgres comment
1 parent 42d8e46 commit 18a3a3d

File tree

12 files changed

+163
-88
lines changed

12 files changed

+163
-88
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ func main() {
116116
* Support **generate** comment, using option `sql_builder.WithCommentGenerate()`
117117
* Support automatic addition of `s` to table names (plural naming convention), using option `sql_builder.WithPluralTableName()`
118118
* Accept tag convention: `snake_case` or `camelCase`, Eg: `sql:"primary_key"` equalize `sql:"primaryKey"`
119+
* Custom column name: `sql:"column:column_name"`
119120
* Primary key for this field: `sql:"primary_key"`
120121
* Foreign key: `sql:"foreign_key:user_id;references:user_id"`
121122
* Auto increment: `sql:"auto_increment"`

element/column.go

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import (
1212
"github.com/pingcap/parser/format"
1313
"github.com/pingcap/parser/types"
1414
sqlite "github.com/rqlite/sql"
15-
"github.com/sunary/sqlize/utils"
15+
sql_templates "github.com/sunary/sqlize/sql-templates"
1616
)
1717

1818
const (
@@ -53,7 +53,7 @@ func (c Column) HasDefaultValue() bool {
5353
}
5454

5555
func (c Column) hashValue() string {
56-
strHash := utils.EscapeSqlName(sql.GetDialect(), c.Name)
56+
strHash := sql.EscapeSqlName(c.Name)
5757
strHash += c.typeDefinition()
5858
hash := md5.Sum([]byte(strHash))
5959
return hex.EncodeToString(hash[:])
@@ -65,7 +65,7 @@ func (c Column) migrationUp(tbName, after string, ident int) []string {
6565
return nil
6666

6767
case MigrateAddAction:
68-
strSql := utils.EscapeSqlName(sql.GetDialect(), c.Name)
68+
strSql := sql.EscapeSqlName(c.Name)
6969

7070
if ident > len(c.Name) {
7171
strSql += strings.Repeat(" ", ident-len(c.Name))
@@ -75,31 +75,40 @@ func (c Column) migrationUp(tbName, after string, ident int) []string {
7575

7676
if ident < 0 {
7777
if after != "" {
78-
return []string{fmt.Sprintf(sql.AlterTableAddColumnAfterStm(), utils.EscapeSqlName(sql.GetDialect(), tbName), strSql, utils.EscapeSqlName(sql.GetDialect(), after))}
78+
return []string{fmt.Sprintf(sql.AlterTableAddColumnAfterStm(), sql.EscapeSqlName(tbName), strSql, sql.EscapeSqlName(after))}
7979
}
80-
return []string{fmt.Sprintf(sql.AlterTableAddColumnFirstStm(), utils.EscapeSqlName(sql.GetDialect(), tbName), strSql)}
80+
return []string{fmt.Sprintf(sql.AlterTableAddColumnFirstStm(), sql.EscapeSqlName(tbName), strSql)}
8181
}
8282

83-
return []string{strSql}
83+
return append([]string{strSql}, c.migrationCommentUp(tbName)...)
8484

8585
case MigrateRemoveAction:
8686
if sql.IsSqlite() {
8787
return nil
8888
}
8989

90-
return []string{fmt.Sprintf(sql.AlterTableDropColumnStm(), utils.EscapeSqlName(sql.GetDialect(), tbName), utils.EscapeSqlName(sql.GetDialect(), c.Name))}
90+
return []string{fmt.Sprintf(sql.AlterTableDropColumnStm(), sql.EscapeSqlName(tbName), sql.EscapeSqlName(c.Name))}
9191

9292
case MigrateModifyAction:
93-
return []string{fmt.Sprintf(sql.AlterTableModifyColumnStm(), utils.EscapeSqlName(sql.GetDialect(), tbName), utils.EscapeSqlName(sql.GetDialect(), c.Name)+c.definition())}
93+
return []string{fmt.Sprintf(sql.AlterTableModifyColumnStm(), sql.EscapeSqlName(tbName), sql.EscapeSqlName(c.Name)+c.definition())}
9494

9595
case MigrateRenameAction:
96-
return []string{fmt.Sprintf(sql.AlterTableRenameColumnStm(), utils.EscapeSqlName(sql.GetDialect(), tbName), utils.EscapeSqlName(sql.GetDialect(), c.OldName), utils.EscapeSqlName(sql.GetDialect(), c.Name))}
96+
return []string{fmt.Sprintf(sql.AlterTableRenameColumnStm(), sql.EscapeSqlName(tbName), sql.EscapeSqlName(c.OldName), sql.EscapeSqlName(c.Name))}
9797

9898
default:
9999
return nil
100100
}
101101
}
102102

103+
func (c Column) migrationCommentUp(tbName string) []string {
104+
if c.Comment == "" || sql.GetDialect() != sql_templates.PostgresDialect {
105+
return nil
106+
}
107+
108+
// apply for postgres only
109+
return []string{fmt.Sprintf(sql.ColumnComment(), tbName, c.Name, c.Comment)}
110+
}
111+
103112
func (c Column) migrationDown(tbName, after string) []string {
104113
switch c.Action {
105114
case MigrateNoAction:

element/foreign_key.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@ import (
55
"encoding/hex"
66
"fmt"
77
"strings"
8-
9-
"github.com/sunary/sqlize/utils"
108
)
119

1210
// ForeignKey ...
@@ -32,12 +30,12 @@ func (fk ForeignKey) migrationUp(tbName string) []string {
3230

3331
case MigrateAddAction:
3432
return []string{fmt.Sprintf(sql.CreateForeignKeyStm(),
35-
utils.EscapeSqlName(sql.GetDialect(), tbName), utils.EscapeSqlName(sql.GetDialect(), fk.Name), utils.EscapeSqlName(sql.GetDialect(), fk.Column),
36-
utils.EscapeSqlName(sql.GetDialect(), fk.RefTable), utils.EscapeSqlName(sql.GetDialect(), fk.RefColumn))}
33+
sql.EscapeSqlName(tbName), sql.EscapeSqlName(fk.Name), sql.EscapeSqlName(fk.Column),
34+
sql.EscapeSqlName(fk.RefTable), sql.EscapeSqlName(fk.RefColumn))}
3735

3836
case MigrateRemoveAction:
3937
return []string{fmt.Sprintf(sql.DropForeignKeyStm(),
40-
utils.EscapeSqlName(sql.GetDialect(), tbName), utils.EscapeSqlName(sql.GetDialect(), fk.Name))}
38+
sql.EscapeSqlName(tbName), sql.EscapeSqlName(fk.Name))}
4139

4240
case MigrateModifyAction:
4341
return nil

element/index.go

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import (
88

99
"github.com/pingcap/parser/ast"
1010
"github.com/pingcap/parser/model"
11-
"github.com/sunary/sqlize/utils"
1211
)
1312

1413
// Index ...
@@ -34,20 +33,20 @@ func (i Index) migrationUp(tbName string) []string {
3433
case MigrateAddAction:
3534
if i.CnsTyp == ast.ConstraintPrimaryKey {
3635
return []string{fmt.Sprintf(sql.CreatePrimaryKeyStm(),
37-
utils.EscapeSqlName(sql.GetDialect(), tbName),
38-
strings.Join(utils.EscapeSqlNames(sql.GetDialect(), i.Columns), ", "))}
36+
sql.EscapeSqlName(tbName),
37+
strings.Join(sql.EscapeSqlNames(i.Columns), ", "))}
3938
}
4039

4140
switch i.Typ {
4241
case ast.IndexKeyTypeNone:
4342
return []string{fmt.Sprintf(sql.CreateIndexStm(i.IndexType.String()),
44-
utils.EscapeSqlName(sql.GetDialect(), i.Name), utils.EscapeSqlName(sql.GetDialect(), tbName),
45-
strings.Join(utils.EscapeSqlNames(sql.GetDialect(), i.Columns), ", "))}
43+
sql.EscapeSqlName(i.Name), sql.EscapeSqlName(tbName),
44+
strings.Join(sql.EscapeSqlNames(i.Columns), ", "))}
4645

4746
case ast.IndexKeyTypeUnique:
4847
return []string{fmt.Sprintf(sql.CreateUniqueIndexStm(i.IndexType.String()),
49-
utils.EscapeSqlName(sql.GetDialect(), i.Name), utils.EscapeSqlName(sql.GetDialect(), tbName),
50-
strings.Join(utils.EscapeSqlNames(sql.GetDialect(), i.Columns), ", "))}
48+
sql.EscapeSqlName(i.Name), sql.EscapeSqlName(tbName),
49+
strings.Join(sql.EscapeSqlNames(i.Columns), ", "))}
5150

5251
default:
5352
return nil
@@ -56,17 +55,17 @@ func (i Index) migrationUp(tbName string) []string {
5655
case MigrateRemoveAction:
5756
if i.CnsTyp == ast.ConstraintPrimaryKey {
5857
return []string{fmt.Sprintf(sql.DropPrimaryKeyStm(),
59-
utils.EscapeSqlName(sql.GetDialect(), tbName))}
58+
sql.EscapeSqlName(tbName))}
6059
}
6160

6261
if sql.IsSqlite() {
6362
return []string{fmt.Sprintf(sql.DropIndexStm(),
64-
utils.EscapeSqlName(sql.GetDialect(), i.Name))}
63+
sql.EscapeSqlName(i.Name))}
6564
}
6665

6766
return []string{fmt.Sprintf(sql.DropIndexStm(),
68-
utils.EscapeSqlName(sql.GetDialect(), i.Name),
69-
utils.EscapeSqlName(sql.GetDialect(), tbName))}
67+
sql.EscapeSqlName(i.Name),
68+
sql.EscapeSqlName(tbName))}
7069

7170
case MigrateModifyAction:
7271
strRems := make([]string, 2)
@@ -78,9 +77,9 @@ func (i Index) migrationUp(tbName string) []string {
7877

7978
case MigrateRenameAction:
8079
return []string{fmt.Sprintf(sql.AlterTableRenameIndexStm(),
81-
utils.EscapeSqlName(sql.GetDialect(), tbName),
82-
utils.EscapeSqlName(sql.GetDialect(), i.OldName),
83-
utils.EscapeSqlName(sql.GetDialect(), i.Name))}
80+
sql.EscapeSqlName(tbName),
81+
sql.EscapeSqlName(i.OldName),
82+
sql.EscapeSqlName(i.Name))}
8483

8584
default:
8685
return nil

element/migration.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,25 @@ func (m *Migration) RenameColumn(tbName, oldName, newName string) {
131131
}
132132
}
133133

134+
// AddIndex ...
135+
func (m *Migration) AddComment(tbName, colName, comment string) {
136+
if tbName == "" {
137+
tbName = m.currentTable
138+
}
139+
140+
id := m.getIndexTable(tbName)
141+
if id == -1 {
142+
return
143+
}
144+
145+
colIdx := m.Tables[id].getIndexColumn(colName)
146+
if colIdx == -1 {
147+
return
148+
}
149+
150+
m.Tables[id].Columns[colIdx].Comment = comment
151+
}
152+
134153
// AddIndex ...
135154
func (m *Migration) AddIndex(tbName string, idx Index) {
136155
if tbName == "" {

element/table.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -404,6 +404,7 @@ func (t Table) MigrationColumnUp() ([]string, map[string]struct{}) {
404404
}
405405

406406
strCols := make([]string, 0)
407+
commentCols := make([]string, 0)
407408
for i := range t.Columns {
408409
if t.Columns[i].Action == MigrateAddAction {
409410
strCols = append(strCols, " "+t.Columns[i].migrationUp("", "", maxIdent)[0])
@@ -412,12 +413,14 @@ func (t Table) MigrationColumnUp() ([]string, map[string]struct{}) {
412413
nCol.Action = MigrateAddAction
413414
strCols = append(strCols, " "+nCol.migrationUp("", "", maxIdent)[0])
414415
}
416+
417+
commentCols = append(commentCols, t.Columns[i].migrationCommentUp(t.Name)...)
415418
}
416419

417-
return []string{fmt.Sprintf(sql.CreateTableStm(), utils.EscapeSqlName(sql.GetDialect(), t.Name), strings.Join(strCols, ",\n"), "")}, nil
420+
return append([]string{fmt.Sprintf(sql.CreateTableStm(), sql.EscapeSqlName(t.Name), strings.Join(strCols, ",\n"), "")}, commentCols...), nil
418421

419422
case MigrateRemoveAction:
420-
return []string{fmt.Sprintf(sql.DropTableStm(), utils.EscapeSqlName(sql.GetDialect(), t.Name))}, nil
423+
return []string{fmt.Sprintf(sql.DropTableStm(), sql.EscapeSqlName(t.Name))}, nil
421424

422425
case MigrateModifyAction:
423426
// TODO

0 commit comments

Comments
 (0)