Skip to content

Commit 7873c4d

Browse files
committed
fix(sql_parser): normalize before parse
1 parent 9f2b86b commit 7873c4d

File tree

4 files changed

+11
-7
lines changed

4 files changed

+11
-7
lines changed

analyzer/analyzer.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,18 +45,16 @@ func (a *analyzer) analyzeQueries(queries []string) (domains.CachePlan, error) {
4545
planErr := &analyzerError{}
4646
for _, query := range queries {
4747
week := false
48-
normalized := normalizer.NormalizeQuery(query)
49-
parsed, err := sql_parser.ParseSQL(normalized)
48+
query = normalizer.NormalizeQuery(query)
49+
parsed, err := sql_parser.ParseSQL(query)
5050
if err != nil {
5151
weekParsed, weekErr := sql_parser.ParseSQLWeekly(query)
5252
if weekErr != nil {
53-
planErr.errors = append(planErr.errors, fmt.Errorf("failed to parse query: %s / %s", err, weekErr))
53+
planErr.errors = append(planErr.errors, fmt.Errorf("failed to parse query:\nmain -> %s\nweek -> %s", err, weekErr))
5454
continue
5555
}
5656
parsed = weekParsed
5757
week = true
58-
fmt.Printf("week: %s\n", query)
59-
fmt.Printf("err: %s\n", err)
6058
}
6159
analyzed, err := a.analyzeQuery(parsed)
6260
if err != nil {

analyzer/analyzer_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,7 @@ func TestAnalyzeQueries(t *testing.T) {
260260
},
261261
{
262262
CachePlanQueryBase: &domains.CachePlanQueryBase{
263-
Query: "UPDATE `users` SET `del_flg` = 1 WHERE `id` % 50 = 0;",
263+
Query: "UPDATE users SET del_flg = 1 WHERE id % 50 = 0;",
264264
Type: domains.CachePlanQueryType_UPDATE,
265265
},
266266
Update: &domains.CachePlanUpdateQuery{
@@ -340,7 +340,7 @@ func TestAnalyzeQueries(t *testing.T) {
340340
},
341341
{
342342
CachePlanQueryBase: &domains.CachePlanQueryBase{
343-
Query: "SELECT `id`, `user_id`, `body`, `mime`, `created_at` FROM `posts` WHERE `created_at` <= ? ORDER BY `created_at` DESC;",
343+
Query: "SELECT id, user_id, body, mime, created_at FROM posts WHERE created_at <= ? ORDER BY created_at DESC;",
344344
Type: domains.CachePlanQueryType_SELECT,
345345
},
346346
Select: &domains.CachePlanSelectQuery{

sql_parser/week_parser.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ func ParseSQLWeekly(query string) (SQLNode, error) {
2424
return InsertStmtNode{Table: TableNode{Name: match["table"]}}, nil
2525
}
2626

27+
// \n -> \\n
28+
query = fmt.Sprintf("%q", query)
2729
return nil, fmt.Errorf("failed to parse query: \"%s\"", query)
2830
}
2931

sql_parser/week_parser_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@ func TestParseSQLWeekly(t *testing.T) {
2323
query: "UPDATE users SET del_flg = 1 WHERE id % 50 = 0",
2424
node: UpdateStmtNode{Table: TableNode{Name: "users"}},
2525
},
26+
{
27+
query: "DELETE FROM livecomments WHERE id = ? AND livestream_id = ? AND (SELECT COUNT(*) FROM (SELECT ? AS text) AS texts INNER JOIN (SELECT CONCAT('%', ?, '%') AS pattern) AS patterns ON texts.text LIKE patterns.pattern) >= 1;",
28+
node: DeleteStmtNode{Table: TableNode{Name: "livecomments"}},
29+
},
2630
}
2731

2832
for _, test := range tests {

0 commit comments

Comments
 (0)