Skip to content

Commit 3fbf0f7

Browse files
authored
fix: escape table name (#16)
* fix: escape table name This way, we can avoid issues when using table names that are reserved database keywords
1 parent 06a384a commit 3fbf0f7

File tree

2 files changed

+17
-18
lines changed

2 files changed

+17
-18
lines changed

sql/table.go

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ func DropTableQuery(name string, ifExists bool) string {
101101
ext = " IF EXISTS"
102102
}
103103

104-
return fmt.Sprintf("DROP TABLE%s %s", ext, name)
104+
return fmt.Sprintf("DROP TABLE%s `%s`", ext, name)
105105
}
106106

107107
func ShowTablesLikeQuery(name string) string {
@@ -111,24 +111,24 @@ func ShowTablesLikeQuery(name string) string {
111111
func InsertQuery(tableName string, columnNames []string) string {
112112
questionMarks := repeatComma(len(columnNames), "?")
113113

114-
return fmt.Sprintf("INSERT INTO %s (%s) VALUES (%s)",
114+
return fmt.Sprintf("INSERT INTO `%s` (%s) VALUES (%s)",
115115
tableName, strings.Join(quoteColumnNames(columnNames), ","), questionMarks)
116116
}
117117

118118
func ReplaceQuery(tableName string, columnNames []string) string {
119119
questionMarks := repeatComma(len(columnNames), "?")
120120

121-
return fmt.Sprintf("REPLACE INTO %s (%s) VALUES (%s)",
121+
return fmt.Sprintf("REPLACE INTO `%s` (%s) VALUES (%s)",
122122
tableName, strings.Join(quoteColumnNames(columnNames), ","), questionMarks)
123123
}
124124

125125
func SelectQuery(tableName string, columnNames []string) string {
126-
columns := strings.Join(columnNames, ",")
127-
if columns == "" {
128-
columns = "*"
126+
columns := "*"
127+
if len(columnNames) > 0 {
128+
columns = strings.Join(quoteColumnNames(columnNames), ", ")
129129
}
130130

131-
return fmt.Sprintf("SELECT %s FROM %s", columns, tableName)
131+
return fmt.Sprintf("SELECT %s FROM `%s`", columns, tableName)
132132
}
133133

134134
func UpdateQuery(tableName, index string, columnNames []string) string {
@@ -140,17 +140,16 @@ func UpdateAllQuery(tableName string, columnNames []string) string {
140140
}
141141

142142
func DeleteQuery(tableName, index string) string {
143-
return fmt.Sprintf("DELETE FROM %s WHERE %s=?", tableName, index)
143+
return fmt.Sprintf("DELETE FROM `%s` WHERE %s=?", tableName, index)
144144
}
145145

146146
func quoteColumnNames(columns []string) []string {
147-
quoted := []string{}
148-
147+
var cols []string
149148
for _, c := range columns {
150-
quoted = append(quoted, fmt.Sprintf("`%s`", c))
149+
cols = append(cols, "`"+c+"`")
151150
}
152151

153-
return quoted
152+
return cols
154153
}
155154

156155
func repeatComma(num int, char string) string {

sql/table_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -77,23 +77,23 @@ func TestNewTableQuery(t *testing.T) {
7777
}
7878

7979
func TestDropTableQuery(t *testing.T) {
80-
assert.Equal(t, sql.DropTableQuery("yolo", false), "DROP TABLE yolo")
81-
assert.Equal(t, sql.DropTableQuery("yolo", true), "DROP TABLE IF EXISTS yolo")
80+
assert.Equal(t, sql.DropTableQuery("yolo", false), "DROP TABLE `yolo`")
81+
assert.Equal(t, sql.DropTableQuery("yolo", true), "DROP TABLE IF EXISTS `yolo`")
8282
}
8383

8484
func TestSelectQuery(t *testing.T) {
85-
assert.Equal(t, sql.SelectQuery("yolo", []string{"foo", "bar"}), "SELECT foo,bar FROM yolo")
86-
assert.Equal(t, sql.SelectQuery("yolo", []string{}), "SELECT * FROM yolo")
85+
assert.Equal(t, sql.SelectQuery("yolo", []string{"foo", "bar"}), "SELECT `foo`, `bar` FROM `yolo`")
86+
assert.Equal(t, sql.SelectQuery("yolo", []string{}), "SELECT * FROM `yolo`")
8787
}
8888

8989
func TestInsertQuery(t *testing.T) {
90-
assert.Equal(t, sql.InsertQuery("yolo", []string{"name", "email", "age"}), "INSERT INTO yolo (`name`,`email`,`age`) VALUES (?,?,?)")
90+
assert.Equal(t, sql.InsertQuery("yolo", []string{"name", "email", "age"}), "INSERT INTO `yolo` (`name`,`email`,`age`) VALUES (?,?,?)")
9191
}
9292

9393
func TestUpdateQuery(t *testing.T) {
9494
assert.Equal(t, sql.UpdateQuery("yolo", "id", []string{"name", "email", "age"}), "UPDATE yolo SET `name`=?, `email`=?, `age`=? WHERE id=?")
9595
}
9696

9797
func TestDeleteQuery(t *testing.T) {
98-
assert.Equal(t, sql.DeleteQuery("yolo", "id"), "DELETE FROM yolo WHERE id=?")
98+
assert.Equal(t, sql.DeleteQuery("yolo", "id"), "DELETE FROM `yolo` WHERE id=?")
9999
}

0 commit comments

Comments
 (0)