我正在使用golang SQL parser从实际的SQL查询字符串中获取与查询相关的信息。我可以使用以下代码找到查询的类型:
queryType := sqlparser.StmtType(sqlparser.Preview(sql))
fmt.Println(queryType)
但是我不确定如何从sql查询中获取实际的表名。该文档也不清楚。我从parse函数获得的唯一信息是一条语句有人可以指导我如何使用golang sqlparser获取此信息吗?
最佳答案
要获取所有表名,您可能必须使用反射将它们从Statement
返回的Parse
中拉出。如果运行以下代码:
stmt, _ := sqlparser.Parse("insert into my_table set my_column=1")
fmt.Printf("%#v\n", stmt)
您将获得输出(为便于阅读而缩进):
&sqlparser.Insert{
Action:"insert",
Comments:sqlparser.Comments(nil),
Ignore:"",
Table:sqlparser.TableName{
Name:sqlparser.TableIdent{v:"my_table"},
Qualifier:sqlparser.TableIdent{v:""}
},
Partitions:sqlparser.Partitions(nil),
Columns:sqlparser.Columns{sqlparser.ColIdent{_:[0]struct { _ []uint8 }{}, val:"my_column", lowered:""}},
Rows:sqlparser.Values{sqlparser.ValTuple{(*sqlparser.SQLVal)(0xc00000a0c0)}},
OnDup:sqlparser.OnDup(nil)
}
如您所见,它包含
TableIdent
类型的(子)字段,该字段包含语句中请求的表。