public class ExprParser
extends java.lang.Object
| Modifier and Type | Class and Description |
|---|---|
(package private) static interface |
ExprParser.ParseExpr
An expression parser.
|
(package private) static class |
ExprParser.Token
Token.
|
private static class |
ExprParser.TokenType
Token types used by the lexer.
|
| Modifier and Type | Field and Description |
|---|---|
private boolean |
allowRelationalColumns
Are relational columns identifiers allowed?
|
private static java.util.HashMap<java.lang.Character,java.lang.Character> |
escapeChars |
(package private) java.util.Map<java.lang.String,java.lang.Integer> |
placeholderNameToPosition
Mapping of names to positions for named placeholders.
|
(package private) int |
positionalPlaceholderCount
Number of positional placeholders.
|
(package private) static java.util.Map<java.lang.String,ExprParser.TokenType> |
reservedWords
Mapping of reserved words to token types.
|
(package private) java.lang.String |
string
String being parsed.
|
(package private) int |
tokenPos
Parser's position in token stream.
|
(package private) java.util.List<ExprParser.Token> |
tokens
Token stream produced by lexer.
|
| Constructor and Description |
|---|
ExprParser(java.lang.String s)
Constructor.
|
ExprParser(java.lang.String s,
boolean allowRelationalColumns)
Constructor.
|
| Modifier and Type | Method and Description |
|---|---|
(package private) MysqlxExpr.Expr |
addSubExpr() |
(package private) MysqlxExpr.Expr |
addSubIntervalExpr() |
(package private) MysqlxExpr.Expr |
andExpr() |
(package private) void |
assertTokenAt(int pos,
ExprParser.TokenType type)
Assert that the token at pos is of type type.
|
(package private) MysqlxExpr.Expr |
atomicExpr()
Parse an atomic expression.
|
(package private) MysqlxExpr.Expr |
bitExpr() |
(package private) MysqlxExpr.Expr |
buildUnaryOp(java.lang.String name,
MysqlxExpr.Expr param)
Build a unary operator expression.
|
(package private) MysqlxExpr.Expr |
columnIdentifier()
Parse a column identifier (which may optionally include a JSON document path).
|
(package private) MysqlxExpr.Expr |
compExpr() |
(package private) java.lang.String |
consumeToken(ExprParser.TokenType t)
Consume token.
|
(package private) boolean |
currentTokenTypeEquals(ExprParser.TokenType t)
Does the current token have type `t'?
|
(package private) MysqlxExpr.DocumentPathItem |
docPathArrayLoc()
Parse a document path array index.
|
(package private) MysqlxExpr.DocumentPathItem |
docPathMember()
Parse a document path member.
|
MysqlxExpr.Expr |
documentField()
Parse a document field.
|
java.util.List<MysqlxExpr.DocumentPathItem> |
documentPath()
Parse a JSON-style document path, like WL#7909, but prefix by @.
|
(package private) MysqlxExpr.Expr |
expr() |
(package private) MysqlxExpr.Expr |
functionCall()
Parse a function call of the form: IDENTIFIER PAREN_EXPR_LIST.
|
java.util.Map<java.lang.String,java.lang.Integer> |
getPlaceholderNameToPositionMap()
Get a mapping of parameter names to positions.
|
int |
getPositionalPlaceholderCount()
Return the number of positional placeholders in the expression.
|
(package private) MysqlxExpr.Identifier |
identifier()
Parse an identifier for a function call: [schema.]name
|
(package private) MysqlxExpr.Expr |
ilriExpr() |
(package private) void |
lex()
Lexer for X DevAPI expression language.
|
private int |
lexNumber(int i)
Helper function to match integer or floating point numbers.
|
(package private) MysqlxExpr.Expr |
mulDivExpr() |
(package private) boolean |
nextCharEquals(int i,
char c)
Does the next character equal the given character? (respects bounds)
|
(package private) boolean |
nextTokenTypeEquals(ExprParser.TokenType t)
Does the next token have type `t'?
|
(package private) MysqlxExpr.Expr |
orExpr() |
(package private) java.util.List<MysqlxExpr.Expr> |
parenExprList()
Parse a paren-enclosed expression list.
|
MysqlxExpr.Expr |
parse()
Parse the entire string as an expression.
|
private <T> java.util.List<T> |
parseCommaSeparatedList(java.util.function.Supplier<T> elementParser)
Utility method to wrap a parser of a list of elements separated by comma.
|
java.util.List<MysqlxCrud.Projection> |
parseDocumentProjection()
Parse a document projection which is similar to SELECT but with document paths as the target alias.
|
java.util.List<MysqlxExpr.Expr> |
parseExprList()
Parse a list of expressions used for GROUP BY.
|
(package private) MysqlxExpr.Expr |
parseLeftAssocBinaryOpExpr(ExprParser.TokenType[] types,
ExprParser.ParseExpr innerParser)
Parse a left-associated binary operator.
|
java.util.List<MysqlxCrud.Order> |
parseOrderSpec()
Parse an ORDER BY specification which is a comma-separated list of expressions, each may be optionally suffixed by ASC/DESC.
|
MysqlxCrud.Column |
parseTableInsertField()
Parse an INSERT field name.
|
java.util.List<MysqlxCrud.Projection> |
parseTableSelectProjection()
Parse a SELECT projection which is a comma-separated list of expressions, each optionally suffixed with a target alias.
|
MysqlxExpr.ColumnIdentifier |
parseTableUpdateField()
Parse an UPDATE field which can include can document paths.
|
(package private) boolean |
posTokenTypeEquals(int pos,
ExprParser.TokenType t)
Does the token at position `pos' have type `t'?
|
(package private) MysqlxExpr.Expr |
shiftExpr() |
(package private) MysqlxExpr.Expr |
starOperator() |
private static java.util.HashMap<java.lang.Character,java.lang.Character> escapeChars
java.lang.String string
java.util.List<ExprParser.Token> tokens
int tokenPos
java.util.Map<java.lang.String,java.lang.Integer> placeholderNameToPosition
int positionalPlaceholderCount
private boolean allowRelationalColumns
static java.util.Map<java.lang.String,ExprParser.TokenType> reservedWords
public ExprParser(java.lang.String s)
s - expression string to parsepublic ExprParser(java.lang.String s,
boolean allowRelationalColumns)
s - expression string to parseallowRelationalColumns - are relational columns identifiers allowed?boolean nextCharEquals(int i,
char c)
i - The current position in the stringc - character to compare withprivate int lexNumber(int i)
i - The current position in the stringvoid lex()
void assertTokenAt(int pos,
ExprParser.TokenType type)
pos - The current position in the stringtype - ExprParser.TokenTypeboolean currentTokenTypeEquals(ExprParser.TokenType t)
t - ExprParser.TokenTypeboolean nextTokenTypeEquals(ExprParser.TokenType t)
t - ExprParser.TokenTypeboolean posTokenTypeEquals(int pos,
ExprParser.TokenType t)
pos - The current position in the stringt - ExprParser.TokenTypejava.lang.String consumeToken(ExprParser.TokenType t)
t - ExprParser.TokenTypejava.util.List<MysqlxExpr.Expr> parenExprList()
MysqlxExpr.Expr functionCall()
MysqlxExpr.Expr starOperator()
MysqlxExpr.Identifier identifier()
MysqlxExpr.IdentifierMysqlxExpr.DocumentPathItem docPathMember()
MysqlxExpr.DocumentPathItemMysqlxExpr.DocumentPathItem docPathArrayLoc()
MysqlxExpr.DocumentPathItempublic java.util.List<MysqlxExpr.DocumentPathItem> documentPath()
MysqlxExpr.DocumentPathItem objectspublic MysqlxExpr.Expr documentField()
MysqlxExpr.ExprMysqlxExpr.Expr columnIdentifier()
MysqlxExpr.ExprMysqlxExpr.Expr buildUnaryOp(java.lang.String name, MysqlxExpr.Expr param)
name - operator nameparam - operator parameterMysqlxExpr.ExprMysqlxExpr.Expr atomicExpr()
MysqlxExpr.ExprMysqlxExpr.Expr parseLeftAssocBinaryOpExpr(ExprParser.TokenType[] types, ExprParser.ParseExpr innerParser)
types - The token types that denote this operator.innerParser - The inner parser that should be called to parse operands.MysqlxExpr.Expr addSubIntervalExpr()
MysqlxExpr.Expr mulDivExpr()
MysqlxExpr.Expr addSubExpr()
MysqlxExpr.Expr shiftExpr()
MysqlxExpr.Expr bitExpr()
MysqlxExpr.Expr compExpr()
MysqlxExpr.Expr ilriExpr()
MysqlxExpr.Expr andExpr()
MysqlxExpr.Expr orExpr()
MysqlxExpr.Expr expr()
public MysqlxExpr.Expr parse()
private <T> java.util.List<T> parseCommaSeparatedList(java.util.function.Supplier<T> elementParser)
T - the type of element to be parsedelementParser - the single element parserpublic java.util.List<MysqlxCrud.Order> parseOrderSpec()
MysqlxCrud.Order objectspublic java.util.List<MysqlxCrud.Projection> parseTableSelectProjection()
MysqlxCrud.Projection objectspublic MysqlxCrud.Column parseTableInsertField()
Columnpublic MysqlxExpr.ColumnIdentifier parseTableUpdateField()
MysqlxExpr.ColumnIdentifierpublic java.util.List<MysqlxCrud.Projection> parseDocumentProjection()
MysqlxCrud.Projection objectspublic java.util.List<MysqlxExpr.Expr> parseExprList()
MysqlxExpr.Expr objectspublic int getPositionalPlaceholderCount()
public java.util.Map<java.lang.String,java.lang.Integer> getPlaceholderNameToPositionMap()