我正在使用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类型的(子)字段,该字段包含语句中请求的表。

08-04 17:59