https://github.com/xwb1989/sqlparser
来自Vitess的SQL词法解析器, 被单独抽出来做为一个独立库,可以用来实现很多好玩的东西
Vitess使用SQL的词法解析来实现像数据自动分片这类功能.
sql := "SELECT * FROM test_table WHERE a = 'abc'"
stmt, err := sqlparser.Parse(sql)
if err != nil {
// Do something with the err
}
// Otherwise do something with stmt
switch stmt := stmt.(type) {
case *sqlparser.Select:
_ = stmt
case *sqlparser.Insert:
}
https://github.com/blastrain/vitess-sqlparser
这个添加了几个不支持的功能的实现
Compare SQL parser libraries in Go
library | supports offset (or other complexity) query | supports DDL |
---|---|---|
xwb1989/sqlparser | ✗ | △ |
zhenjl/sqlparser | ○ | △ |
knocknote/vitess-sqlparser | ○ | ○ |
这个注明了需要go1.9版本以上
package main
import (
"fmt"
"github.com/blastrain/vitess-sqlparser/sqlparser"
)
func main() {
stmt, err := sqlparser.Parse("select * from user_items where user_id=1 order by created_at limit 3 offset 10")
if err != nil {
panic(err)
}
fmt.Printf("stmt = %+v\n", stmt)
}