Class ExtractExpression
- java.lang.Object
-
- org.eclipse.persistence.jpa.jpql.parser.AbstractExpression
-
- org.eclipse.persistence.jpa.jpql.parser.AbstractEncapsulatedExpression
-
- org.eclipse.persistence.jpa.jpql.parser.AbstractSingleEncapsulatedExpression
-
- org.eclipse.persistence.jpa.jpql.parser.ExtractExpression
-
- All Implemented Interfaces:
Expression
public final class ExtractExpression extends AbstractSingleEncapsulatedExpression
The EXTRACT function extracts a date part from a date/time value. The date part can beYEAR
,MONTH
,DAY
,HOUR
,MINUTE
,SECOND
. Some databases may support other parts.BNF:extract_expression ::= EXTRACT(date_part_literal [FROM] scalar_expression)
date_part_literal ::= { MICROSECOND | SECOND | MINUTE | HOUR | DAY | WEEK | MONTH | QUARTER | YEAR | SECOND_MICROSECOND | MINUTE_MICROSECOND | MINUTE_SECOND | HOUR_MICROSECOND | HOUR_SECOND | HOUR_MINUTE | DAY_MICROSECOND | DAY_SECOND | DAY_MINUTE | DAY_HOUR | YEAR_MONTH, etc }
- Version:
- 2.5
- Author:
- James Sutherland
- Since:
- 2.4
-
-
Field Summary
-
Fields inherited from class org.eclipse.persistence.jpa.jpql.parser.AbstractExpression
COMMA, DOT, DOUBLE_QUOTE, LEFT_CURLY_BRACKET, LEFT_PARENTHESIS, NOT_DEFINED, RIGHT_CURLY_BRACKET, RIGHT_PARENTHESIS, SINGLE_QUOTE, SPACE, UNDERSCORE
-
Fields inherited from interface org.eclipse.persistence.jpa.jpql.parser.Expression
ABS, ALL, AND, ANY, AS, AS_OF, ASC, AVG, BETWEEN, BIT_LENGTH, BOTH, CASE, CAST, CHAR_LENGTH, CHARACTER_LENGTH, CLASS, COALESCE, COLUMN, CONCAT, CONNECT_BY, COUNT, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, DELETE, DELETE_FROM, DESC, DIFFERENT, DISTINCT, DIVISION, ELSE, EMPTY, END, ENTRY, EQUAL, ESCAPE, EXCEPT, EXISTS, EXTRACT, FALSE, FETCH, FIRST, FROM, FUNC, FUNCTION, GREATER_THAN, GREATER_THAN_OR_EQUAL, GROUP_BY, HAVING, IN, INDEX, INNER, INNER_JOIN, INNER_JOIN_FETCH, INTERSECT, IS, IS_EMPTY, IS_NOT_EMPTY, IS_NOT_NULL, IS_NULL, JOIN, JOIN_FETCH, KEY, LAST, LEADING, LEFT, LEFT_JOIN, LEFT_JOIN_FETCH, LEFT_OUTER_JOIN, LEFT_OUTER_JOIN_FETCH, LENGTH, LIKE, LOCATE, LOWER, LOWER_THAN, LOWER_THAN_OR_EQUAL, MAX, MEMBER, MEMBER_OF, MIN, MINUS, MOD, MULTIPLICATION, NAMED_PARAMETER, NEW, NOT, NOT_BETWEEN, NOT_EQUAL, NOT_EXISTS, NOT_IN, NOT_LIKE, NOT_MEMBER, NOT_MEMBER_OF, NULL, NULLIF, NULLS, NULLS_FIRST, NULLS_LAST, OBJECT, OF, ON, OPERATOR, OR, ORDER_BY, ORDER_SIBLINGS_BY, OUTER, PLUS, POSITION, POSITIONAL_PARAMETER, QUOTE, REGEXP, SCN, SELECT, SET, SIZE, SOME, SQL, SQRT, START_WITH, SUBSTRING, SUM, TABLE, THEN, TIMESTAMP, TRAILING, TREAT, TRIM, TRUE, TYPE, UNION, UNKNOWN, UPDATE, UPPER, VALUE, WHEN, WHERE
-
-
Constructor Summary
Constructors Constructor Description ExtractExpression(AbstractExpression parent)
Creates a newExtractExpression
.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
accept(ExpressionVisitor visitor)
Visits thisExpression
by the givenvisitor
.protected void
addOrderedEncapsulatedExpressionTo(java.util.List<Expression> children)
Adds theExpressions
representing the encapsulatedExpression
.java.lang.String
getActualFromIdentifier()
Returns the actual FROM identifier found in the string representation of the JPQL query, which has the actual case that was used.java.lang.String
getDatePart()
Returns the date part that was parsed, it is used to extract a single part of a date/time, such as year, month, day, your, etc.java.lang.String
getEncapsulatedExpressionQueryBNFId()
Returns the BNF used to parse the encapsulated expression.JPQLQueryBNF
getQueryBNF()
Returns the BNF of thisExpression
.boolean
hasDatePart()
Determines whether the date part literal was parsed or not.boolean
hasEncapsulatedExpression()
Determines whether something was parsed after the left parenthesis.boolean
hasFrom()
Determines whether the identifier FROM was part of the query.boolean
hasSpaceAfterDatePart()
Determines whether a whitespace was found after the date part literal.boolean
hasSpaceAfterFrom()
Determines whether a whitespace was found after FROM.protected boolean
isParsingComplete(WordParser wordParser, java.lang.String word, Expression expression)
Determines whether the parsing is complete based on what is left in the given text.protected void
parseEncapsulatedExpression(WordParser wordParser, int whitespaceCount, boolean tolerant)
Parses the encapsulated expression by starting at the current position, which is part of the givenWordParser
.protected void
removeEncapsulatedExpression()
Removes the encapsulatedExpression
that was parsed, it should not be part of this one.protected void
toParsedTextEncapsulatedExpression(java.lang.StringBuilder writer, boolean actual)
Generates a string representation of the encapsulatedExpression
.-
Methods inherited from class org.eclipse.persistence.jpa.jpql.parser.AbstractSingleEncapsulatedExpression
acceptChildren, addChildrenTo, findQueryBNF, getExpression, hasExpression, setExpression
-
Methods inherited from class org.eclipse.persistence.jpa.jpql.parser.AbstractEncapsulatedExpression
addOrderedChildrenTo, areLogicalIdentifiersSupported, getActualIdentifier, getIdentifier, hasLeftParenthesis, hasRightParenthesis, hasSpaceAfterIdentifier, parse, shouldParseRightParenthesis, toParsedText
-
Methods inherited from class org.eclipse.persistence.jpa.jpql.parser.AbstractExpression
acceptUnknownVisitor, acceptUnknownVisitor, buildExpressionFromFallingBack, buildNullExpression, buildStringExpression, buildStringExpression, buildUnknownExpression, calculatePosition, children, findFallBackExpressionFactory, getExpressionFactory, getExpressionRegistry, getGrammar, getIdentifierVersion, getJPAVersion, getLength, getOffset, getParent, getQueryBNF, getRoot, getText, handleAggregate, handleCollection, isAncestor, isIdentifier, isNull, isTolerant, isUnknown, isVirtual, orderedChildren, parse, parseUsingExpressionFactory, populatePosition, rebuildActualText, rebuildParsedText, setParent, setText, shouldParseWithFactoryFirst, shouldSkipLiteral, toActualText, toParsedText, toString
-
-
-
-
Constructor Detail
-
ExtractExpression
public ExtractExpression(AbstractExpression parent)
Creates a newExtractExpression
.- Parameters:
parent
- The parent of this expression
-
-
Method Detail
-
accept
public void accept(ExpressionVisitor visitor)
Visits thisExpression
by the givenvisitor
.- Parameters:
visitor
- TheExpressionVisitor
to visit this object
-
addOrderedEncapsulatedExpressionTo
protected void addOrderedEncapsulatedExpressionTo(java.util.List<Expression> children)
Adds theExpressions
representing the encapsulatedExpression
.- Overrides:
addOrderedEncapsulatedExpressionTo
in classAbstractSingleEncapsulatedExpression
- Parameters:
children
- The list used to store the string representation of the encapsulatedExpression
-
getEncapsulatedExpressionQueryBNFId
public java.lang.String getEncapsulatedExpressionQueryBNFId()
Returns the BNF used to parse the encapsulated expression.- Specified by:
getEncapsulatedExpressionQueryBNFId
in classAbstractSingleEncapsulatedExpression
- Returns:
- The BNF used to parse the encapsulated expression
-
getActualFromIdentifier
public java.lang.String getActualFromIdentifier()
Returns the actual FROM identifier found in the string representation of the JPQL query, which has the actual case that was used.- Returns:
- The FROM identifier that was actually parsed, or an empty string if it was not parsed
-
getDatePart
public java.lang.String getDatePart()
Returns the date part that was parsed, it is used to extract a single part of a date/time, such as year, month, day, your, etc.- Returns:
- The part of the date/time to retrieve
-
getQueryBNF
public JPQLQueryBNF getQueryBNF()
Returns the BNF of thisExpression
.- Returns:
- The
JPQLQueryBNF
, which represents the grammar of thisExpression
-
hasDatePart
public boolean hasDatePart()
Determines whether the date part literal was parsed or not.- Returns:
true
if the date part literal was parsed;false
otherwise
-
hasEncapsulatedExpression
public boolean hasEncapsulatedExpression()
Determines whether something was parsed after the left parenthesis.- Overrides:
hasEncapsulatedExpression
in classAbstractSingleEncapsulatedExpression
- Returns:
true
if something was parsed;false
otherwise
-
hasFrom
public boolean hasFrom()
Determines whether the identifier FROM was part of the query.- Returns:
true
if the identifier FROM was parsed;false
otherwise
-
hasSpaceAfterDatePart
public boolean hasSpaceAfterDatePart()
Determines whether a whitespace was found after the date part literal.- Returns:
true
if there was a whitespace after the date part literal;false
otherwise
-
hasSpaceAfterFrom
public boolean hasSpaceAfterFrom()
Determines whether a whitespace was found after FROM.- Returns:
true
if there was a whitespace after FROM;false
otherwise
-
isParsingComplete
protected boolean isParsingComplete(WordParser wordParser, java.lang.String word, Expression expression)
Determines whether the parsing is complete based on what is left in the given text. The text is never empty.- Overrides:
isParsingComplete
in classAbstractEncapsulatedExpression
- Parameters:
wordParser
- The text to parse based on the current position of the cursorword
- The word that was retrieved from the given text, which is the first word in the textexpression
- TheExpression
that has already been parsed- Returns:
true
if the text no longer can't be parsed by the current expression;false
if more can be parsed
-
parseEncapsulatedExpression
protected void parseEncapsulatedExpression(WordParser wordParser, int whitespaceCount, boolean tolerant)
Parses the encapsulated expression by starting at the current position, which is part of the givenWordParser
.- Overrides:
parseEncapsulatedExpression
in classAbstractSingleEncapsulatedExpression
- Parameters:
wordParser
- The text to parse based on the current position of the cursorwhitespaceCount
- The number of whitespace characters that were parsed after '('tolerant
- Determines whether the parsing system should be tolerant, meaning if it should try to parse invalid or incomplete queries
-
removeEncapsulatedExpression
protected void removeEncapsulatedExpression()
Removes the encapsulatedExpression
that was parsed, it should not be part of this one. This happens when the parsed information does not have both '(' and ')'.- Overrides:
removeEncapsulatedExpression
in classAbstractSingleEncapsulatedExpression
-
toParsedTextEncapsulatedExpression
protected void toParsedTextEncapsulatedExpression(java.lang.StringBuilder writer, boolean actual)
Generates a string representation of the encapsulatedExpression
.- Overrides:
toParsedTextEncapsulatedExpression
in classAbstractSingleEncapsulatedExpression
- Parameters:
writer
- The buffer used to append the encapsulatedExpression
's string representationactual
- Determines whether to include any characters that are considered virtual, i.e. that was parsed when the query is incomplete and is needed for functionality like content assist
-
-