Documentation ¶
Overview ¶
Example (ParseSQL) ¶
This example show how to parse a text sql into ast.
package main import ( "fmt" "github.com/XiaoMi/Gaea/parser" _ "github.com/XiaoMi/Gaea/parser/tidb-types/parser_driver" ) func main() { // 0. make sure import parser_driver implemented by TiDB(user also can implement own driver by self). // and add `import _ "github.com/pingcap/tidb/types/parser_driver"` in the head of file. // 1. Create a parser. The parser is NOT goroutine safe and should // not be shared among multiple goroutines. However, parser is also // heavy, so each goroutine should reuse its own local instance if // possible. p := parser.New() // 2. Parse a text SQL into AST([]ast.StmtNode). stmtNodes, _, err := p.Parse("select * from tbl where id = 1", "", "") // 3. Use AST to do cool things. fmt.Println(stmtNodes[0], err) }
Output:
Index ¶
- Constants
- Variables
- func NodeToStringWithoutQuote(node ast.Node) (string, error)
- func ParseErrorWith(errstr string, lineno int) error
- func ParseSQL(sql string) (ast.StmtNode, error)
- func Preview(sql string) int
- func StmtType(stmtType int) string
- func StripLeadingComments(sql string) string
- func TrimComment(txt string) string
- type CommentDirectives
- type MarginComments
- type Parser
- type Pos
- type Scanner
Examples ¶
Constants ¶
const ( StmtSelect = iota StmtStream StmtInsert StmtReplace StmtUpdate StmtDelete StmtDDL StmtBegin StmtCommit StmtRollback StmtSet StmtShow StmtUse StmtOther StmtUnknown StmtComment )
These constants are used to identify the SQL statement type.
Variables ¶
var ( // ErrSyntax returns for sql syntax error. ErrSyntax = terror.ClassParser.New(codeErrSyntax, mysql.MySQLErrName[mysql.ErrSyntax]) // ErrParse returns for sql parse error. ErrParse = terror.ClassParser.New(codeErrParse, mysql.MySQLErrName[mysql.ErrParse]) // SpecFieldPattern special result field pattern SpecFieldPattern = regexp.MustCompile(`(\/\*!(M?[0-9]{5,6})?|\*\/)`) )
Functions ¶
func NodeToStringWithoutQuote ¶
NodeToStringWithoutQuote get node text
func ParseErrorWith ¶
ParseErrorWith returns "You have a syntax error near..." error message compatible with mysql.
func Preview ¶
Preview analyzes the beginning of the query using a simpler and faster textual comparison to identify the statement type.
func StripLeadingComments ¶
StripLeadingComments trims the SQL string and removes any leading comments
func TrimComment ¶
TrimComment trim comment for special comment code of MySQL.
Types ¶
type CommentDirectives ¶
type CommentDirectives map[string]interface{}
CommentDirectives is the parsed representation for execution directives conveyed in query comments
func (CommentDirectives) IsSet ¶
func (d CommentDirectives) IsSet(key string) bool
IsSet checks the directive map for the named directive and returns true if the directive is set and has a true/false or 0/1 value
type MarginComments ¶
MarginComments holds the leading and trailing comments that surround a query.
func SplitMarginComments ¶
func SplitMarginComments(sql string) (query string, comments MarginComments)
SplitMarginComments pulls out any leading or trailing comments from a raw sql query. This function also trims leading (if there's a comment) and trailing whitespace.
type Parser ¶
type Parser struct {
// contains filtered or unexported fields
}
Parser represents a parser instance. Some temporary objects are stored in it to reduce object allocation during Parse function.
func (*Parser) EnableWindowFunc ¶
EnableWindowFunc controls whether the parser to parse syntax related with window function.
func (*Parser) Parse ¶
func (parser *Parser) Parse(sql, charset, collation string) (stmt []ast.StmtNode, warns []error, err error)
Parse parses a query string to raw ast.StmtNode. If charset or collation is "", default charset and collation will be used.
func (*Parser) ParseOneStmt ¶
ParseOneStmt parses a query and returns an ast.StmtNode. The query must have one statement, otherwise ErrSyntax is returned.
func (*Parser) SetSQLMode ¶
SetSQLMode sets the SQL mode for parser.
type Scanner ¶
type Scanner struct {
// contains filtered or unexported fields
}
Scanner implements the yyLexer interface.
func (*Scanner) EnableWindowFunc ¶
EnableWindowFunc controls whether the scanner recognize the keywords of window function.
func (*Scanner) Errorf ¶
Errorf tells scanner something is wrong. Scanner satisfies yyLexer interface which need this function.
func (*Scanner) GetSQLMode ¶
GetSQLMode return the SQL mode of scanner.
func (*Scanner) Lex ¶
Lex returns a token and store the token value in v. Scanner satisfies yyLexer interface. 0 and invalid are special token id this function would return: return 0 tells parser that scanner meets EOF, return invalid tells parser that scanner meets illegal character.
func (*Scanner) SetSQLMode ¶
SetSQLMode sets the SQL mode for scanner.