pingcap / parser

A MySQL Compatible SQL Parser
Apache License 2.0
1.41k stars 489 forks source link

The current parser does not support multi-statement SQL parsing. Is there any alternative method to solve this problem? #1427

Open tchen-coder opened 1 year ago

tchen-coder commented 1 year ago

Feature Request

SQL Query


-- SQL query
set @temp=0;
select cnt into @temp from tst ORDER BY cnt DESC LIMIT 1;
Update tst set cnt=@temp+100 where id in(10);

// Go code for parsing the SQL query
sql := "set @temp=0;select cnt into @temp from tst ORDER BY cnt DESC LIMIT 1;Update tst set cnt=@temp+100 where id in(10);"
p := parser.New()
stmtNodes, _, err := p.Parse(sql, "", "")

if err != nil {
    fmt.Println("Error parsing SQL:", err)
    return
}
for _, stmtNode := range stmtNodes {
    fmt.Println("Parsed statement:", stmtNode.Text())
}

Error parsing SQL: line 1 column 27 near "into @temp from tst ORDER BY cnt DESC LIMIT 1;Update tst set cnt=@temp+100 where id in(10);"

-- SQL for creating database table
CREATE TABLE `tst` (
    `id` int(10) DEFAULT NULL,
    `cnt` int(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;