git: https://github.com/jiunx/xsqlparser
解析SQL语句,支持mysql、oracle、sqlserver,sql92
一名golang新手的第一个开源项目,欢迎star, fork, 有什么需求、意见和建议尽管在issue里提,
我还可以通过antlr的TokenStreamRewrite来对sql的特定节点进行逻辑修改,项目内暂时还没有添加这项功能,如果需要的话我可以加上。
快速入门
安装
获取最新版本
go get github.com/jiunx/xsqlparser
运行测试
您可以使用 parser_test.go 中的测试代码来测试解析器是否正确解析了 sql 语句。
sql := "select id,name,address from t"
parserFactory := parser.GetParserFactoryInstance()
mysqlParser, err := parserFactory.GetParser(util.Mysql)
if err != nil {
fmt.Println(err)
return
}
statement, err2 := mysqlParser.Parse(context.Background(), sql)
if err2 != nil {
fmt.Println(err2)
}
fmt.Printf("%+v\n", statement)
你会得到这样的输出
&{Sql:select id,name,address from t SqlType:select Language:mysql Tables:[t] Columns:[id name address] Results:[id name address] Ast:0xc000246c00}
下面介绍statement的结构
statement.SqlType sql的类型, 如 select, insert, update, delete, create, drop, etc.
statement.Tables sql涉及到的表名, 如 t.
statement.Columns sql涉及到的字段名, 如 id, name, address.
statement.Results select语句的结果集, 如 id, name, address.
statement.Ast 这条sql的AST树,如果你熟悉ANTLR或者树操作的话你也可以通过listener来解析sql.