Expression 使用手册

buildin Function映射表

mysql中支持内置函数,内置函数在词法分析阶段就会被解析成特定的终结符类型,下面给出内置函数到终结符类型的映射关系表。

函数名

终结符类型

ADDDATE

builtinAddDate

BIT_AND

builtinBitAnd

BIT_OR

builtinBitOr

BIT_XOR

builtinBitXor

CAST

builtinCast

COUNT

builtinCount

CURDATE

builtinCurDate

CURTIME

builtinCurTime

DATE_ADD

builtinDateAdd

DATE_SUB

builtinDateSub

EXTRACT

builtinExtract

GROUP_CONCAT

builtinGroupConcat

MAX

builtinMax

MID

builtinSubstring

MIN

builtinMin

NOW

builtinNow

POSITION

builtinPosition

SESSION_USER

builtinUser

STD

builtinStddevPop

STDDEV

builtinStddevPop

STDDEV_POP

builtinStddevPop

STDDEV_SAMP

builtinStddevSamp

SUBDATE

builtinSubDate

SUBSTR

builtinSubstring

SUBSTRING

builtinSubstring

SUM

builtinSum

SYSDATE

builtinSysDate

SYSTEM_USER

builtinUser

TRIM

builtinTrim

VARIANCE

builtinVarPop

VAR_POP

builtinVarPop

VAR_SAMP

builtinVarSamp

%token      <ident>

pipes “||”

singleAtIdentifier “identifier with single leading at”

doubleAtIdentifier “identifier with double leading at”

binaryType “BINARY”

%token <item>

assignmentEq “:=”

/* The following tokens belong to ReservedKeyword. Notice: make sure these tokens are contained in ReservedKeyword. */ falseKwd “FALSE” trueKwd “TRUE”

/* The following tokens belong to UnReservedKeyword. Notice: make sure these tokens are contained in UnReservedKeyword. */ pipesAsOr weightString “WEIGHT_STRING”

/* The following tokens belong to TiDBKeyword. Notice: make sure these tokens are contained in TiDBKeyword. */ builtinAddDate builtinBitAnd builtinBitOr builtinBitXor builtinCast builtinCount builtinCurDate builtinCurTime builtinDateAdd builtinDateSub builtinExtract builtinGroupConcat builtinMax builtinMin builtinNow builtinPosition builtinSubDate builtinSubstring builtinSum builtinSysDate builtinStddevPop builtinStddevSamp builtinTrim builtinUser builtinVarPop builtinVarSamp

%token <item>

jss “->” juss “->>”

%%

Expression:

singleAtIdentifier assignmentEq Expression

Expression logOr Expression
Expression “XOR” Expression
Expression logAnd Expression
“NOT” Expression
BoolPri IsOrNotOp trueKwd
BoolPri IsOrNotOp falseKwd
BoolPri
BitExpr:

BitExpr ‘|’ BitExpr

BitExpr ‘&’ BitExpr
BitExpr “<<” BitExpr
BitExpr “>>” BitExpr
BitExpr ‘+’ BitExpr
BitExpr ‘-’ BitExpr
BitExpr ‘*’ BitExpr
BitExpr ‘/’ BitExpr
BitExpr ‘%’ BitExpr
BitExpr “DIV” BitExpr
BitExpr “MOD” BitExpr
BitExpr ‘^’ BitExpr
SimpleExpr
SimpleExpr:

SimpleIdent

FunctionCallKeyword
FunctionCallNonKeyword
FunctionCallGeneric
Literal
SumExpr
‘!’ SimpleExpr
‘~’ SimpleExpr
‘-’ SimpleExpr
‘+’ SimpleExpr
SimpleExpr pipes SimpleExpr
not2 SimpleExpr
SubSelect
‘(’ Expression ‘)’
‘(’ ExpressionList ‘,’ Expression ‘)’
“ROW” ‘(’ ExpressionList ‘,’ Expression ‘)’
“EXISTS” SubSelect
“BINARY” SimpleExpr
builtinCast ‘(’ Expression “AS” CastType ‘)’
“CASE” ExpressionOpt WhenClauseList ElseOpt “END”
“CONVERT” ‘(’ Expression ‘,’ CastType ‘)’
SimpleIdent:

Identifier

Identifier ‘.’ Identifier
‘.’ Identifier ‘.’ Identifier
BoolPri:

BoolPri IsOrNotOp “NULL”

BoolPri CompareOp PredicateExpr
BoolPri CompareOp AnyOrAll SubSelect
PredicateExpr
PredicateExpr:

BitExpr InOrNotOp ‘(’ ExpressionList ‘)’

BitExpr InOrNotOp SubSelect
BitExpr BetweenOrNotOp BitExpr “AND” PredicateExpr
BitExpr LikeOrNotOp SimpleExpr LikeEscapeOpt
BitExpr RegexpOrNotOp SimpleExpr
BitExpr
InOrNotOp:

“IN”

“NOT” “IN”
ExpressionList:

Expression

ExpressionList ‘,’ Expression

//FulltextSearchModifierOpt: // /* empty */

ColumnNameList:

ColumnName

ColumnNameList ‘,’ ColumnName
ColumnName:

Identifier

Identifier ‘.’ Identifier
IsOrNotOp:

“IS”

“IS” “NOT”
BetweenOrNotOp:

“BETWEEN”

“NOT” “BETWEEN”
LikeOrNotOp:

“LIKE”

“NOT” “LIKE”
LikeEscapeOpt:

/* empty */

“ESCAPE” stringLit
RegexpOrNotOp:

RegexpSym

“NOT” RegexpSym
RegexpSym:

“REGEXP”

“RLIKE”
logOr:

pipesAsOr

“OR”
CompareOp:

“>=”

‘>’
“<=”
‘<’
“!=”
“<>”
“=”
“<=>” // NullEQ
AnyOrAll:

“ANY”

“SOME”
“ALL”
SubSelect:

‘(’ SelectStmt ‘)’ // please see DQL

‘(’ SetOprStmt ‘)’ // please see DQL
FunctionCallKeyword:

FunctionNameConflict ‘(’ ExpressionListOpt ‘)’

FunctionNameOptionalBraces OptionalBraces
builtinCurDate ‘(’ ‘)’
FunctionNameDatetimePrecision FuncDatetimePrec
“MOD” ‘(’ BitExpr ‘,’ BitExpr ‘)’
FunctionCallNonKeyword:

builtinCurTime ‘(’ FuncDatetimePrecListOpt ‘)’

builtinTrim ‘(’ Expression ‘)’
builtinTrim ‘(’ Expression “FROM” Expression ‘)’
builtinTrim ‘(’ TrimDirection “FROM” Expression ‘)’
builtinTrim ‘(’ TrimDirection Expression “FROM” Expression ‘)’
FunctionCallGeneric:

identifier ‘(’ ExpressionListOpt ‘)’

Identifier ‘.’ Identifier ‘(’ ExpressionListOpt ‘)’
ExpressionListOpt:

/* empty */

ExpressionList

FunctionNameConflict: | “IF”

FunctionNameOptionalBraces: | “CURRENT_DATE” | “UTC_DATE”

FunctionNameDatetimePrecision:

“CURRENT_TIME”

“CURRENT_TIMESTAMP”
“UTC_TIME”
“UTC_TIMESTAMP”
OptionalBraces:

/* empty */

‘(’ ‘)’
FuncDatetimePrec:

/* empty */

‘(’ ‘)’
‘(’ intLit ‘)’
StringName:

stringLit

Identifier
FuncDatetimePrecListOpt:

/* empty */

FuncDatetimePrecList
FuncDatetimePrecList:

intLit

TableName:

Identifier

Identifier ‘.’ Identifier
SignedNum:

Int64Num

‘+’ Int64Num
‘-’ NUM
Int64Num:

NUM

NUM:

intLit

Literal:

“FALSE”

“NULL”
“TRUE”
floatLit
decLit
intLit
StringLiteral
“UNDERSCORE_CHARSET” stringLit
hexLit
bitLit
StringLiteral:

stringLit

StringLiteral stringLit
SumExpr:

“AVG” ‘(’ BuggyDefaultFalseDistinctOpt Expression ‘)’

builtinBitAnd ‘(’ Expression ‘)’
builtinBitAnd ‘(’ “ALL” Expression ‘)’
builtinBitOr ‘(’ Expression ‘)’
builtinBitOr ‘(’ “ALL” Expression ‘)’
builtinBitXor ‘(’ Expression ‘)’
builtinBitXor ‘(’ “ALL” Expression ‘)’
builtinCount ‘(’ DistinctKwd ExpressionList ‘)’
builtinCount ‘(’ “ALL” Expression ‘)’
builtinCount ‘(’ Expression ‘)’
builtinCount ‘(’ ‘*’ ‘)’
builtinGroupConcat ‘(’ BuggyDefaultFalseDistinctOpt ExpressionList OrderByOptional OptGConcatSeparator ‘)’
builtinMax ‘(’ BuggyDefaultFalseDistinctOpt Expression ‘)’
builtinMin ‘(’ BuggyDefaultFalseDistinctOpt Expression ‘)’
builtinSum ‘(’ BuggyDefaultFalseDistinctOpt Expression ‘)’
builtinStddevPop ‘(’ BuggyDefaultFalseDistinctOpt Expression ‘)’
builtinStddevSamp ‘(’ BuggyDefaultFalseDistinctOpt Expression ‘)’
builtinVarPop ‘(’ BuggyDefaultFalseDistinctOpt Expression ‘)’
builtinVarSamp ‘(’ BuggyDefaultFalseDistinctOpt Expression ‘)’
BuggyDefaultFalseDistinctOpt:

DefaultFalseDistinctOpt

DistinctKwd “ALL”
DefaultFalseDistinctOpt:

/* empty */

DistinctOpt
DistinctOpt:

“ALL”

DistinctKwd
DistinctKwd:

“DISTINCT”

“DISTINCTROW”
OrderByOptional:

/* empty */

OrderBy
OrderBy:

“ORDER” “BY” ByList

OrderBy:

“ORDER” “BY” ByList

ByList:

ByItem

ByList ‘,’ ByItem
ByItem:

Expression Order

Order:

/* EMPTY */

“ASC”
“DESC”
OptGConcatSeparator:

/* empty */

“SEPARATOR” stringLit
CastType:

“BINARY” OptFieldLen

Char OptFieldLen OptBinary
“DATE”
“DATETIME” OptFieldLen
“DECIMAL” FloatOpt
“TIME” OptFieldLen
“SIGNED” OptInteger
“UNSIGNED” OptInteger

//| “JSON” | “DOUBLE” | “FLOAT” FloatOpt | “REAL”

OptFieldLen:

/* empty */

FieldLen
FieldLen:

‘(’ LengthNum ‘)’

LengthNum:

NUM

NUM:

intLit

OptBinary:

/* empty */

FloatOpt:

/* empty */

FieldLen
Precision
Precision:

‘(’ LengthNum ‘,’ LengthNum ‘)’

OptInteger:

/* empty */

“INTEGER”
“INT”
ExpressionOpt:

/* empty */

Expression
WhenClauseList:

WhenClause

WhenClauseList WhenClause
WhenClause:

“WHEN” Expression “THEN” Expression

ElseOpt:

/* empty */

“ELSE” Expression