parser: github.com/pingcap/parser Index | Files | Directories

package parser

import "github.com/pingcap/parser"

Index

Package Files

digester.go hintparser.go hintparserimpl.go lexer.go misc.go parser.go yy_parser.go

Variables

var (
    ErrWarnOptimizerHintUnsupportedHint = terror.ClassParser.New(mysql.ErrWarnOptimizerHintUnsupportedHint, mysql.MySQLErrName[mysql.ErrWarnOptimizerHintUnsupportedHint])
    ErrWarnOptimizerHintInvalidToken    = terror.ClassParser.New(mysql.ErrWarnOptimizerHintInvalidToken, mysql.MySQLErrName[mysql.ErrWarnOptimizerHintInvalidToken])
    ErrWarnMemoryQuotaOverflow          = terror.ClassParser.New(mysql.ErrWarnMemoryQuotaOverflow, mysql.MySQLErrName[mysql.ErrWarnMemoryQuotaOverflow])
    ErrWarnOptimizerHintParseError      = terror.ClassParser.New(mysql.ErrWarnOptimizerHintParseError, mysql.MySQLErrName[mysql.ErrWarnOptimizerHintParseError])
    ErrWarnOptimizerHintInvalidInteger  = terror.ClassParser.New(mysql.ErrWarnOptimizerHintInvalidInteger, mysql.MySQLErrName[mysql.ErrWarnOptimizerHintInvalidInteger])
)
var (
    // ErrSyntax returns for sql syntax error.
    ErrSyntax = terror.ClassParser.New(mysql.ErrSyntax, mysql.MySQLErrName[mysql.ErrSyntax])
    // ErrParse returns for sql parse error.
    ErrParse = terror.ClassParser.New(mysql.ErrParse, mysql.MySQLErrName[mysql.ErrParse])
    // ErrUnknownCharacterSet returns for no character set found error.
    ErrUnknownCharacterSet = terror.ClassParser.New(mysql.ErrUnknownCharacterSet, mysql.MySQLErrName[mysql.ErrUnknownCharacterSet])
    // ErrInvalidYearColumnLength returns for illegal column length for year type.
    ErrInvalidYearColumnLength = terror.ClassParser.New(mysql.ErrInvalidYearColumnLength, mysql.MySQLErrName[mysql.ErrInvalidYearColumnLength])
    // ErrWrongArguments returns for illegal argument.
    ErrWrongArguments = terror.ClassParser.New(mysql.ErrWrongArguments, mysql.MySQLErrName[mysql.ErrWrongArguments])
    // ErrWrongFieldTerminators returns for illegal field terminators.
    ErrWrongFieldTerminators = terror.ClassParser.New(mysql.ErrWrongFieldTerminators, mysql.MySQLErrName[mysql.ErrWrongFieldTerminators])
    // ErrTooBigDisplayWidth returns for data display width exceed limit .
    ErrTooBigDisplayWidth = terror.ClassParser.New(mysql.ErrTooBigDisplaywidth, mysql.MySQLErrName[mysql.ErrTooBigDisplaywidth])
    // ErrTooBigPrecision returns for data precision exceed limit.
    ErrTooBigPrecision = terror.ClassParser.New(mysql.ErrTooBigPrecision, mysql.MySQLErrName[mysql.ErrTooBigPrecision])
    // ErrUnknownAlterLock returns for no alter lock type found error.
    ErrUnknownAlterLock = terror.ClassParser.New(mysql.ErrUnknownAlterLock, mysql.MySQLErrName[mysql.ErrUnknownAlterLock])
    // ErrUnknownAlterAlgorithm returns for no alter algorithm found error.
    ErrUnknownAlterAlgorithm = terror.ClassParser.New(mysql.ErrUnknownAlterAlgorithm, mysql.MySQLErrName[mysql.ErrUnknownAlterAlgorithm])
    // ErrWrongValue returns for wrong value
    ErrWrongValue = terror.ClassParser.New(mysql.ErrWrongValue, mysql.MySQLErrName[mysql.ErrWrongValue])
    // SpecFieldPattern special result field pattern
    SpecFieldPattern = regexp.MustCompile(`(\/\*!(M?[0-9]{5,6})?|\*\/)`)

    // SpecVersionCodePattern is a pattern for special comments with version.
    SpecVersionCodePattern = regexp.MustCompile(`\/\*T![0-9]{5,6}([^*]|\*+[^*/])*\*+\/`)
)

func DigestHash Uses

func DigestHash(sql string) (result string)

DigestHash generates the digest of statements. it will generate a hash on normalized form of statement text which removes general property of a statement but keeps specific property.

for example: both DigestHash('select 1') and DigestHash('select 2') => e1c71d1661ae46e09b7aaec1c390957f0d6260410df4e4bc71b9c8d681021471

Deprecated: It is logically consistent with NormalizeDigest.

func DigestNormalized Uses

func DigestNormalized(normalized string) (result string)

DigestNormalized generates the digest of a normalized sql. it will generate a hash on a normalized sql. Normalize + DigestNormalized equals to NormalizeDigest.

for example: DigestNormalized('select ?') DigestNormalized should be called with a normalized SQL string (like 'select ?') generated by function Normalize. do not call with SQL which is not normalized, DigestNormalized('select 1') and DigestNormalized('select 2') is not the same

func Normalize Uses

func Normalize(sql string) (result string)

Normalize generates the normalized statements. it will get normalized form of statement text which removes general property of a statement but keeps specific property.

for example: Normalize('select 1 from b where a = 1') => 'select ? from b where a = ?'

func NormalizeDigest Uses

func NormalizeDigest(sql string) (normalized, digest string)

NormalizeDigest combines Normalize and DigestNormalized into one method.

func ParseErrorWith Uses

func ParseErrorWith(errstr string, lineno int) error

ParseErrorWith returns "You have a syntax error near..." error message compatible with mysql.

func ParseHint Uses

func ParseHint(input string, sqlMode mysql.SQLMode, initPos Pos) ([]*ast.TableOptimizerHint, []error)

ParseHint parses an optimizer hint (the interior of `/*+ ... */`).

func TrimCodeVersionComment Uses

func TrimCodeVersionComment(txt string) string

func TrimComment Uses

func TrimComment(txt string) string

TrimComment trim comment for special comment code of MySQL.

func WrapStringWithCodeVersion Uses

func WrapStringWithCodeVersion(str string, ccv CommentCodeVersion) string

WrapStringWithCodeVersion convert a string `str` to `/*T!xxxxx str */`, where `xxxxx` is determined by CommentCodeVersion.

type CommentCodeVersion Uses

type CommentCodeVersion int

CommentCodeVersion is used to track the highest version can be parsed in the comment with pattern /*T!00001 xxx */

const (
    CommentCodeNoVersion  CommentCodeVersion = iota
    CommentCodeAutoRandom CommentCodeVersion = 40000

    CommentCodeCurrentVersion
)

func (CommentCodeVersion) String Uses

func (ccv CommentCodeVersion) String() string

type Parser Uses

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 New Uses

func New() *Parser

New returns a Parser object.

func (*Parser) EnableWindowFunc Uses

func (parser *Parser) EnableWindowFunc(val bool)

EnableWindowFunc controls whether the parser to parse syntax related with window function.

func (*Parser) Parse Uses

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 Uses

func (parser *Parser) ParseOneStmt(sql, charset, collation string) (ast.StmtNode, error)

ParseOneStmt parses a query and returns an ast.StmtNode. The query must have one statement, otherwise ErrSyntax is returned.

func (*Parser) SetSQLMode Uses

func (parser *Parser) SetSQLMode(mode mysql.SQLMode)

SetSQLMode sets the SQL mode for parser.

type Pos Uses

type Pos struct {
    Line   int
    Col    int
    Offset int
}

Pos represents the position of a token.

type Scanner Uses

type Scanner struct {
    // contains filtered or unexported fields
}

Scanner implements the yyLexer interface.

func NewScanner Uses

func NewScanner(s string) *Scanner

NewScanner returns a new scanner object.

func (*Scanner) AppendError Uses

func (s *Scanner) AppendError(err error)

AppendError sets error into scanner. Scanner satisfies yyLexer interface which need this function.

func (*Scanner) EnableWindowFunc Uses

func (s *Scanner) EnableWindowFunc(val bool)

EnableWindowFunc controls whether the scanner recognize the keywords of window function.

func (*Scanner) Errorf Uses

func (s *Scanner) Errorf(format string, a ...interface{}) (err error)

Errorf tells scanner something is wrong. Scanner satisfies yyLexer interface which need this function.

func (*Scanner) Errors Uses

func (s *Scanner) Errors() (warns []error, errs []error)

Errors returns the errors and warns during a scan.

func (*Scanner) GetSQLMode Uses

func (s *Scanner) GetSQLMode() mysql.SQLMode

GetSQLMode return the SQL mode of scanner.

func (*Scanner) InheritScanner Uses

func (s *Scanner) InheritScanner(sql string) *Scanner

InheritScanner returns a new scanner object which inherits configurations from the parent scanner.

func (*Scanner) Lex Uses

func (s *Scanner) Lex(v *yySymType) int

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 Uses

func (s *Scanner) SetSQLMode(mode mysql.SQLMode)

SetSQLMode sets the SQL mode for scanner.

Directories

PathSynopsis
astPackage ast is the abstract syntax tree parsed from a SQL statement by parser.
auth
charset
format
goyaccGoyacc is a version of yacc generating Go parsers.
model
mysql
opcode
terror
test_driver
types

Package parser imports 22 packages (graph) and is imported by 111 packages. Updated 2020-01-20. Refresh now. Tools for package owners.