I am using golang SQL parser to fetch query related information from actual SQL query string. I am able to find the type of query using following code:
queryType := sqlparser.StmtType(sqlparser.Preview(sql)) fmt.Println(queryType)
but i am not sure how to get actual table names from sql query. The documentation is not clear as well. Only information i get from parse function is a statement
Can someone guide me how can get this information using golang sqlparser?
Advertisement
Answer
To get all the table names, you will have to pull them out from the Statement
returned by Parse
, possibly using reflection. If you run the following code:
stmt, _ := sqlparser.Parse("insert into my_table set my_column=1") fmt.Printf("%#vn", stmt)
you get the output (indented for readability):
&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) }
as you can see, this contains a (sub)field of type TableIdent
which contains the requested table from the statement.