Top Description Inners Fields Constructors Methods
org.eclipse.persistence.jpa.jpql

public Class AbstractEclipseLinkSemanticValidator

extends AbstractSemanticValidator
implements EclipseLinkExpressionVisitor
Class Inheritance
All Implemented Interfaces
org.eclipse.persistence.jpa.jpql.parser.EclipseLinkExpressionVisitor, org.eclipse.persistence.jpa.jpql.parser.ExpressionVisitor
Known Direct Subclasses
org.eclipse.persistence.jpa.jpql.tools.EclipseLinkSemanticValidator
Imports
org.eclipse.persistence.jpa.jpql.parser.AbstractEclipseLinkExpressionVisitor, .AnonymousExpressionVisitor, .AsOfClause, .BadExpression, .CastExpression, .CollectionExpression, .CollectionValuedPathExpression, .ConnectByClause, .DatabaseType, .EclipseLinkExpressionVisitor, .Expression, .ExtractExpression, .FunctionExpression, .HierarchicalQueryClause, .InExpression, .NullExpression, .OrderSiblingsByClause, .RangeVariableDeclaration, .RegexpExpression, .SimpleSelectClause, .SimpleSelectStatement, .StartWithClause, .StateFieldPathExpression, .TableExpression, .TableVariableDeclaration, .UnionClause

This validator is responsible to gather the problems found in a JPQL query by validating the content to make sure it is semantically valid for EclipseLink. The grammar is not validated by this visitor.

For instance, the function AVG accepts a state field path. The property it represents has to be of numeric type. AVG(e.name) is parsable but is not semantically valid because the type of name is a string (the property signature is: "private String name").

Note

EclipseLink does not validate types, but leaves it to the database. This is because some databases such as Oracle allow different types to different functions and perform implicit type conversion. i.e. CONCAT('test', 2) returns 'test2'. Also the FUNC function has an unknown type, so should be allowed with any function.

Provisional API: This interface is part of an interim API that is still under development and expected to change significantly before reaching stability. It is available at this early stage to solicit feedback from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken (repeatedly) as the API evolves.

Author
Pascal Filion
Since
2.4
Version
2.5.1
See Also
EclipseLinkGrammarValidator

Nested and Inner Type Summary

Modifier and TypeClass and Description
public static class
AbstractEclipseLinkSemanticValidator.EclipseLinkOwningClauseVisitor

This visitor retrieves the clause owning the visited Expression.

protected static class
protected static class
protected static class

Field Summary

Modifier and TypeField and Description
private EclipseLinkSemanticValidatorExtension
extension

The following extension can be used to give access to non-JPA metadata artifacts, such as database tables and columns.

private AbstractEclipseLinkSemanticValidator.SubquerySelectItemCalculator
subquerySelectItemCalculator

This visitor calculates the number of items the subquery SELECT clause has.

private AbstractEclipseLinkSemanticValidator.TableExpressionVisitor
tableExpressionVisitor

This visitor determines if the Expression being visited is a TableExpression.

Inherited from org.eclipse.persistence.jpa.jpql.AbstractSemanticValidator:
collectionValuedPathExpressionVisitorhelperregisterIdentificationVariablestateFieldPathExpressionVisitorusedIdentificationVariablesvirtualIdentificationVariableFinder

Constructor Summary

AccessConstructor and Description
protected
AbstractEclipseLinkSemanticValidator(SemanticValidatorHelper
The given helper allows this validator to access the JPA artifacts without using Hermes SPI
helper
,
EclipseLinkSemanticValidatorExtension
The following extension can be used to give access to non-JPA metadata artifacts, such as database tables and columns
extension
)

Creates a new AbstractEclipseLinkSemanticValidator.

Method Summary

Modifier and TypeMethod and Description
protected LiteralVisitor
buildLiteralVisitor()

Implements abstract org.eclipse.persistence.jpa.jpql.AbstractValidator.buildLiteralVisitor.

Creates the visitor that can retrieve some information about various literal.
protected AbstractValidator.OwningClauseVisitor
buildOwningClauseVisitor()

Implements abstract org.eclipse.persistence.jpa.jpql.AbstractValidator.buildOwningClauseVisitor.

Creates the visitor that traverses the parent hierarchy of any Expression and stops at the first Expression that is a clause.
protected AbstractEclipseLinkSemanticValidator.SubquerySelectItemCalculator
protected AbstractEclipseLinkSemanticValidator.TableExpressionVisitor
protected AbstractEclipseLinkSemanticValidator.TopLevelFirstDeclarationVisitor
protected JPQLQueryDeclaration
getDeclaration(String variableName)

protected EclipseLinkSemanticValidatorExtension

Returns:

An extension giving access to non-JPA metadata artifacts or EclipseLinkSemanticValidatorExtension#NULL_EXTENSION if no extension was provided
getExtension
()

Returns the extension that gives access to non-JPA metadata artifacts, such as database tables and columns.

protected AbstractEclipseLinkSemanticValidator.SubquerySelectItemCalculator
protected AbstractEclipseLinkSemanticValidator.TableExpressionVisitor
protected boolean
protected AbstractSemanticValidator.PathType
selectClausePathExpressionPathType()

Implements abstract org.eclipse.persistence.jpa.jpql.AbstractSemanticValidator.selectClausePathExpressionPathType.

Returns the type of path expression that is allowed in the SELECT clause.
protected int

Returns:

The number of select items or 0 if the subquery is malformed or incomplete
subquerySelectItemCount
(Expression
The Expression to visit, which should represents a subquery
subquery
)

Retrieves the number of select items the given subquery has.

protected void
protected void
protected void
protected Boolean
protected AbstractSemanticValidator.PathType
validPathExpressionTypeForCountFunction()

Overrides org.eclipse.persistence.jpa.jpql.AbstractSemanticValidator.validPathExpressionTypeForCountFunction.

Returns the type of path expression that is valid for a count function; which is the left expression in a COUNT expression.
protected AbstractSemanticValidator.PathType
validPathExpressionTypeForInExpression()

Overrides org.eclipse.persistence.jpa.jpql.AbstractSemanticValidator.validPathExpressionTypeForInExpression.

Returns the type of path expression that is valid for the expression being tested by an IN expression; which is the left expression.
protected AbstractSemanticValidator.PathType
validPathExpressionTypeForInItem()

Overrides org.eclipse.persistence.jpa.jpql.AbstractSemanticValidator.validPathExpressionTypeForInItem.

Returns the type of path expression that is valid for an IN items; which is the left expression in a IN expression.
protected AbstractSemanticValidator.PathType
validPathExpressionTypeForStringExpression()

Overrides org.eclipse.persistence.jpa.jpql.AbstractSemanticValidator.validPathExpressionTypeForStringExpression.

Returns the type of path expression that is valid for a string expression; which is the left expression in a LIKE expression.
public void
public void
public void
public void
public void
public void
public void
public void
public void
public void
public void
public void
Inherited from org.eclipse.persistence.jpa.jpql.AbstractSemanticValidator:
buildComparingEntityTypeLiteralVisitorbuildInItemsVisitorbuildSubqueryFirstDeclarationVisitordisposefindVirtualIdentificationVariablegetCollectionValuedPathExpressiongetCollectionValuedPathExpressionVisitorgetComparingEntityTypeLiteralVisitorgetComparisonExpressionVisitorgetGrammargetInItemsVisitorgetStateFieldPathExpressiongetStateFieldPathExpressionVisitorgetVirtualIdentificationVariableFinderinitializeisComparingEntityTypeLiteralisIdentificationVariableDeclaredAfterisIdentificationVariableValidInComparisonisOrderComparisonisValidsubqueryFirstDeclarationVisitortopLevelFirstDeclarationVisitorupdateStatusvalidateAbsExpressionvalidateAbstractFromClausevalidateAbstractSchemaNamevalidateAdditionExpressionvalidateAllOrAnyExpressionvalidateAndExpressionvalidateArithmeticExpressionvalidateArithmeticExpressionvalidateAvgFunctionvalidateBetweenExpressionvalidateCaseExpressionvalidateCoalesceExpressionvalidateCollectionMemberDeclarationvalidateCollectionMemberExpressionvalidateCollectionValuedPathExpressionvalidateComparisonExpressionvalidateConcatExpressionvalidateConstructorExpressionvalidateCountFunctionvalidateDateTimevalidateDeleteClausevalidateDeleteStatementvalidateDivisionExpressionvalidateEntityTypeLiteralvalidateEntryExpressionvalidateExistsExpressionvalidateFirstDeclarationvalidateFromClausevalidateFunctionPathExpressionvalidateFunctionPathExpressionvalidateGroupByClausevalidateHavingClausevalidateIdentificationVariablevalidateIdentificationVariablevalidateIdentificationVariableDeclarationvalidateIdentificationVariablesvalidateIndexExpressionvalidateJoinvalidateJoinCollectionValuedPathExpressionvalidateJoinsIdentificationVariablevalidateKeyExpressionvalidateLengthExpressionvalidateLikeExpressionvalidateLocateExpressionvalidateLowerExpressionvalidateMaxFunctionvalidateMinFunctionvalidateModExpressionvalidateMultiplicationExpressionvalidateNotExpressionvalidateNullComparisonExpressionvalidateNullIfExpressionvalidateObjectExpressionvalidateOnClausevalidateOrderByClausevalidateOrderByItemvalidateOrExpressionvalidateRangeVariableDeclarationvalidateResultVariablevalidateSelectClausevalidateSelectStatementvalidateSimpleFromClausevalidateSimpleSelectClausevalidateSimpleSelectStatementvalidateSizeExpressionvalidateSqrtExpressionvalidateStateFieldPathExpressionvalidateSubstringExpressionvalidateSubtractionExpressionvalidateSumFunctionvalidateTreatExpressionvalidateTrimExpressionvalidateTypeExpressionvalidateUpdateClausevalidateUpdateItemvalidateUpdateStatementvalidateUpperExpressionvalidateValueExpressionvalidateWhenClausevalidateWhereClausevisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisitvisit