Class Lexer
- java.lang.Object
-
- org.datanucleus.store.query.compiler.Lexer
-
public class Lexer extends Object
Lexer for a Query. Allows a class to work its way through the parsed string, obtaining relevant components with each call, or peeking ahead before deciding what component to parse next. Would work with JDOQL or JPQL, the only difference being the input of parameter prefixes. With JDOQL all parameters are prefixed ":", whereas in JPQL you can have numbered parameters "?" and named parameters ":".
-
-
Field Summary
Fields Modifier and Type Field Description protected CharacterIterator
ci
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description int
getIndex()
Accessor for the current index in the input string.String
getInput()
Accessor for the input string.boolean
nextIsDot()
Utility to return if the next character is a dot.boolean
nextIsSingleQuote()
Utility to return if the next non-whitespace character is a single quote.Boolean
parseBooleanLiteral()
Parse a boolean from the current position.Boolean
parseBooleanLiteralIgnoreCase()
Parse a boolean from the current position (case insensitive).String
parseCast()
Parse a cast in the query from the current position, returning the name of the class that is being cast to.boolean
parseChar(char c)
Check if charc
is foundboolean
parseChar(char c, char unlessFollowedBy)
Check if charc
is foundCharacter
parseCharacterLiteral()
Parse a Character literalboolean
parseEOS()
Check if END OF TEXT is reached.Number
parseFloatingPointLiteral()
Parse a floating point number from the current position.String
parseIdentifier()
Parse a java identifier from the current position.Number
parseIntegerLiteral()
Parse an integer number from the current position.String
parseMethod()
Checks if a java Method is foundString
parseName()
Parses the text string (up to the next space) and returns it.boolean
parseNullLiteral()
Checks if null literal is parsedboolean
parseNullLiteralIgnoreCase()
Checks if null literal is parsed (case insensitive).boolean
parseString(String s)
Check if Strings
is foundboolean
parseStringIgnoreCase(String s)
Check if Strings
is found ignoring the caseString
parseStringLiteral()
Parse a String literalboolean
peekString(String s)
Check if String "s" is found and not moving the cursor position.boolean
peekStringIgnoreCase(String s)
Check if String "s" is found ignoring the case, and not moving the cursor position.String
remaining()
Method to return the remaining part of the string not yet processed.void
setIndex(int idx)
int
skipWS()
Skip over any whitespace from the current position.String
toString()
-
-
-
Field Detail
-
ci
protected final CharacterIterator ci
-
-
Method Detail
-
getInput
public String getInput()
Accessor for the input string.- Returns:
- The input string.
-
getIndex
public int getIndex()
Accessor for the current index in the input string.- Returns:
- The current index.
-
setIndex
public void setIndex(int idx)
-
skipWS
public int skipWS()
Skip over any whitespace from the current position.- Returns:
- The new position
-
parseEOS
public boolean parseEOS()
Check if END OF TEXT is reached.- Returns:
- true if END OF TEXT is reached
-
parseChar
public boolean parseChar(char c)
Check if charc
is found- Parameters:
c
- the Character to find- Returns:
- true if
c
is found
-
parseChar
public boolean parseChar(char c, char unlessFollowedBy)
Check if charc
is found- Parameters:
c
- the Character to findunlessFollowedBy
- the character to validate it does not followc
- Returns:
- true if
c
is found and not followed byunlessFollowedBy
-
parseString
public boolean parseString(String s)
Check if Strings
is found- Parameters:
s
- the String to find- Returns:
- true if
s
is found
-
parseStringIgnoreCase
public boolean parseStringIgnoreCase(String s)
Check if Strings
is found ignoring the case- Parameters:
s
- the String to find- Returns:
- true if
s
is found
-
peekString
public boolean peekString(String s)
Check if String "s" is found and not moving the cursor position.- Parameters:
s
- the String to find- Returns:
- true if string is found
-
peekStringIgnoreCase
public boolean peekStringIgnoreCase(String s)
Check if String "s" is found ignoring the case, and not moving the cursor position.- Parameters:
s
- the String to find- Returns:
- true if string is found
-
parseIdentifier
public String parseIdentifier()
Parse a java identifier from the current position.- Returns:
- The identifier
-
parseMethod
public String parseMethod()
Checks if a java Method is found- Returns:
- true if a Method is found
-
parseName
public String parseName()
Parses the text string (up to the next space) and returns it. The name includes '.' characters. This can be used, for example, when parsing a class name wanting to read in the full name (including package) so that it can then be checked for existence in the CLASSPATH.- Returns:
- The name
-
parseCast
public String parseCast()
Parse a cast in the query from the current position, returning the name of the class that is being cast to. Returns null if the current position doesn't have a cast. Does no checking as to whether the name is a valid class name, just whether there is "({name})" from the current position.- Returns:
- The name of the class to cast to
-
parseIntegerLiteral
public Number parseIntegerLiteral()
Parse an integer number from the current position.- Returns:
- The integer number parsed (null if not valid).
-
parseFloatingPointLiteral
public Number parseFloatingPointLiteral()
Parse a floating point number from the current position.- Returns:
- The floating point number parsed (null if not valid).
-
parseBooleanLiteral
public Boolean parseBooleanLiteral()
Parse a boolean from the current position.- Returns:
- The boolean parsed (null if not valid).
-
parseBooleanLiteralIgnoreCase
public Boolean parseBooleanLiteralIgnoreCase()
Parse a boolean from the current position (case insensitive).- Returns:
- The boolean parsed (null if not valid).
-
nextIsSingleQuote
public boolean nextIsSingleQuote()
Utility to return if the next non-whitespace character is a single quote.- Returns:
- Whether it is a single quote at the current point (ignoring whitespace)
-
nextIsDot
public boolean nextIsDot()
Utility to return if the next character is a dot.- Returns:
- Whether it is a dot at the current point
-
parseCharacterLiteral
public Character parseCharacterLiteral()
Parse a Character literal- Returns:
- the Character parsed. null if single quotes is found
- Throws:
NucleusUserException
- if an invalid character is found or the CharacterIterator is finished
-
parseStringLiteral
public String parseStringLiteral()
Parse a String literal- Returns:
- the String parsed. null if single quotes or double quotes is found
- Throws:
NucleusUserException
- if an invalid character is found or the CharacterIterator is finished
-
parseNullLiteral
public boolean parseNullLiteral()
Checks if null literal is parsed- Returns:
- true if null literal is found
-
parseNullLiteralIgnoreCase
public boolean parseNullLiteralIgnoreCase()
Checks if null literal is parsed (case insensitive).- Returns:
- true if null literal is found
-
remaining
public String remaining()
Method to return the remaining part of the string not yet processed. Doesn't move the current position.- Returns:
- The remaining part of the string
-
-