org.hibernate.hql.ast
Class HqlSqlWalker
java.lang.Object
antlr.TreeParser
org.hibernate.hql.antlr.HqlSqlBaseWalker
org.hibernate.hql.ast.HqlSqlWalker
- All Implemented Interfaces:
- ParameterBinder.NamedParameterSource, org.hibernate.hql.antlr.HqlSqlTokenTypes, ErrorReporter
public class HqlSqlWalker
- extends org.hibernate.hql.antlr.HqlSqlBaseWalker
- implements ErrorReporter, ParameterBinder.NamedParameterSource
Implements methods used by the HQL->SQL tree transform grammar (a.k.a. the second phase).
- Isolates the Hibernate API-specific code from the ANTLR generated code.
- Handles the SQL framgents generated by the persisters in order to create the SELECT and FROM clauses,
taking into account the joins and projections that are implied by the mappings (persister/queryable).
- Uses SqlASTFactory to create customized AST nodes.
- See Also:
SqlASTFactory
Fields inherited from class org.hibernate.hql.antlr.HqlSqlBaseWalker |
_tokenNames, _tokenSet_0, _tokenSet_1 |
Fields inherited from class antlr.TreeParser |
_retTree, astFactory, ASTNULL, inputState, returnAST, tokenNames |
Fields inherited from interface org.hibernate.hql.antlr.HqlSqlTokenTypes |
AGGREGATE, ALIAS, ALIAS_REF, ALL, AND, ANY, AS, ASCENDING, AVG, BETWEEN, BOGUS, BOTH, CASE, CASE2, CLASS, CLOSE, CLOSE_BRACKET, COLON, COMMA, CONCAT, CONSTANT, CONSTRUCTOR, COUNT, DELETE, DESCENDING, DISTINCT, DIV, DOT, ELEMENTS, ELSE, EMPTY, END, ENTRY, EOF, EQ, ESCAPE, ESCqs, EXISTS, EXPONENT, EXPR_LIST, FALSE, FETCH, FILTER_ENTITY, FILTERS, FLOAT_SUFFIX, FROM, FROM_FRAGMENT, FULL, GE, GROUP, GT, HAVING, HEX_DIGIT, ID_LETTER, ID_START_LETTER, IDENT, IMPLIED_FROM, IN, IN_LIST, INDEX_OP, INDICES, INNER, INSERT, INTO, IS, IS_NOT_NULL, IS_NULL, JAVA_CONSTANT, JOIN, JOIN_FRAGMENT, KEY, LE, LEADING, LEFT, LEFT_OUTER, LIKE, LITERAL_ascending, LITERAL_by, LITERAL_descending, LT, MAX, MEMBER, METHOD_CALL, METHOD_NAME, MIN, MINUS, MOD, NAMED_PARAM, NE, NEW, NOT, NOT_BETWEEN, NOT_IN, NOT_LIKE, NULL, NULL_TREE_LOOKAHEAD, NUM_BIG_DECIMAL, NUM_BIG_INTEGER, NUM_DOUBLE, NUM_FLOAT, NUM_INT, NUM_LONG, OBJECT, OF, ON, OPEN, OPEN_BRACKET, OR, ORDER, ORDER_ELEMENT, OUTER, PARAM, PLUS, PROPERTIES, PROPERTY_REF, QUERY, QUOTED_STRING, RANGE, RIGHT, RIGHT_OUTER, ROW_STAR, SELECT, SELECT_CLAUSE, SELECT_COLUMNS, SELECT_EXPR, SELECT_FROM, SET, SOME, SQL_NE, SQL_TOKEN, STAR, SUM, THEN, THETA_JOINS, TRAILING, TRUE, UNARY_MINUS, UNARY_PLUS, UNION, UPDATE, VALUE, VECTOR_EXPR, VERSIONED, WEIRD_IDENT, WHEN, WHERE, WITH, WS |
Method Summary |
void |
addQuerySpaces(Serializable[] spaces)
|
protected void |
beforeSelectClause()
|
protected antlr.collections.AST |
createFromElement(String path,
antlr.collections.AST alias,
antlr.collections.AST propertyFetch)
|
protected antlr.collections.AST |
createFromFilterElement(antlr.collections.AST filterEntity,
antlr.collections.AST alias)
|
protected void |
createFromJoinElement(antlr.collections.AST path,
antlr.collections.AST alias,
int joinType,
antlr.collections.AST fetchNode,
antlr.collections.AST propertyFetch,
antlr.collections.AST with)
|
protected antlr.collections.AST |
createIntoClause(String path,
antlr.collections.AST propertySpec)
|
protected void |
evaluateAssignment(antlr.collections.AST eq)
|
protected antlr.collections.AST |
generateNamedParameter(antlr.collections.AST delimiterNode,
antlr.collections.AST nameNode)
|
protected antlr.collections.AST |
generatePositionalParameter(antlr.collections.AST inputNode)
|
AliasGenerator |
getAliasGenerator()
|
ArrayList |
getAssignmentSpecifications()
|
ASTPrinter |
getASTPrinter()
|
String |
getCollectionFilterRole()
|
FromClause |
getCurrentFromClause()
|
Map |
getEnabledFilters()
|
FromClause |
getFinalFromClause()
|
int |
getImpliedJoinType()
|
LiteralProcessor |
getLiteralProcessor()
|
int[] |
getNamedParameterLocations(String name)
Returns the locations of all occurrences of the named parameter. |
int |
getNumberOfParametersInSetClause()
|
ArrayList |
getParameters()
|
ParseErrorHandler |
getParseErrorHandler()
|
Set |
getQuerySpaces()
Returns the set of unique query spaces (a.k.a. |
String[] |
getReturnAliases()
|
Type[] |
getReturnTypes()
|
SelectClause |
getSelectClause()
|
SessionFactoryHelper |
getSessionFactoryHelper()
|
Map |
getTokenReplacements()
|
boolean |
isFilter()
|
protected boolean |
isNonQualifiedPropertyRef(antlr.collections.AST ident)
|
boolean |
isShallowQuery()
|
protected void |
lookupAlias(antlr.collections.AST aliasRef)
|
protected antlr.collections.AST |
lookupNonQualifiedProperty(antlr.collections.AST property)
|
protected antlr.collections.AST |
lookupProperty(antlr.collections.AST dot,
boolean root,
boolean inSelect)
|
static void |
panic()
|
protected void |
postProcessDelete(antlr.collections.AST delete)
|
protected void |
postProcessDML(RestrictableStatement statement)
|
protected void |
postProcessInsert(antlr.collections.AST insert)
|
protected void |
postProcessUpdate(antlr.collections.AST update)
|
protected void |
prepareArithmeticOperator(antlr.collections.AST operator)
|
protected void |
prepareFromClauseInputTree(antlr.collections.AST fromClauseInput)
|
protected void |
prepareLogicOperator(antlr.collections.AST operator)
|
protected void |
prepareVersioned(antlr.collections.AST updateNode,
antlr.collections.AST versioned)
|
protected void |
processAggregation(antlr.collections.AST node,
boolean inSelect)
|
protected void |
processBoolean(antlr.collections.AST constant)
|
protected void |
processConstant(antlr.collections.AST constant)
|
protected void |
processConstructor(antlr.collections.AST constructor)
|
protected void |
processFunction(antlr.collections.AST functionCall,
boolean inSelect)
|
protected void |
processIndex(antlr.collections.AST indexOp)
|
protected void |
processNumericLiteral(antlr.collections.AST literal)
|
protected void |
processQuery(antlr.collections.AST select,
antlr.collections.AST query)
|
protected void |
pushFromClause(antlr.collections.AST fromNode,
antlr.collections.AST inputFromNode)
Sets the current 'FROM' context. |
void |
reportError(antlr.RecognitionException e)
|
void |
reportError(String s)
|
void |
reportWarning(String s)
|
protected void |
resolve(antlr.collections.AST node)
|
protected void |
resolveSelectExpression(antlr.collections.AST node)
|
protected void |
setAlias(antlr.collections.AST selectExpr,
antlr.collections.AST ident)
|
protected void |
setImpliedJoinType(int joinType)
|
static boolean |
supportsIdGenWithBulkInsertion(IdentifierGenerator generator)
|
void |
traceIn(String ruleName,
antlr.collections.AST tree)
|
void |
traceOut(String ruleName,
antlr.collections.AST tree)
|
protected void |
validateMapPropertyExpression(antlr.collections.AST node)
|
Methods inherited from class org.hibernate.hql.antlr.HqlSqlBaseWalker |
addrExpr, addrExprLhs, aggregateExpr, aliasedSelectExpr, aliasRef, arithmeticExpr, assignment, caseExpr, collectionFunction, collectionFunctionOrSubselect, comparisonExpr, constant, constructor, count, deleteStatement, expr, exprOrSubquery, fromClause, fromElement, fromElementList, functionCall, getCurrentClauseType, getCurrentStatementType, getCurrentTopLevelClauseType, getStatementType, groupClause, identifier, inRhs, insertablePropertySpec, insertStatement, intoClause, isComparativeExpressionClause, isInCase, isInFrom, isInFunctionCall, isInSelect, isSelectStatement, isSubQuery, joinElement, joinType, literal, logicalExpr, mapComponentReference, mapPropertyExpression, newValue, numericInteger, orderClause, orderExprs, parameter, path, pathAsIdent, processMapComponentReference, propertyName, propertyRef, propertyRefLhs, query, selectClause, selectExpr, selectExprList, selectStatement, setClause, statement, updateStatement, whereClause, withClause |
Methods inherited from class antlr.TreeParser |
getAST, getASTFactory, getTokenName, getTokenNames, match, match, matchNot, setASTFactory, setASTNodeClass, setASTNodeType, traceIndent |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
HqlSqlWalker
public HqlSqlWalker(QueryTranslatorImpl qti,
SessionFactoryImplementor sfi,
HqlParser parser,
Map tokenReplacements,
String collectionRole)
- Create a new tree transformer.
- Parameters:
qti
- Back pointer to the query translator implementation that is using this tree transform.sfi
- The session factory implementor where the Hibernate mappings can be found.parser
- A reference to the phase-1 parsertokenReplacements
- Registers the token replacement map with the walker. This map will
be used to substitute function names and constants.collectionRole
- The collection role name of the collection used as the basis for the
filter, NULL if this is not a collection filter compilation.
traceIn
public void traceIn(String ruleName,
antlr.collections.AST tree)
- Overrides:
traceIn
in class antlr.TreeParser
traceOut
public void traceOut(String ruleName,
antlr.collections.AST tree)
- Overrides:
traceOut
in class antlr.TreeParser
prepareFromClauseInputTree
protected void prepareFromClauseInputTree(antlr.collections.AST fromClauseInput)
- Overrides:
prepareFromClauseInputTree
in class org.hibernate.hql.antlr.HqlSqlBaseWalker
isFilter
public boolean isFilter()
getCollectionFilterRole
public String getCollectionFilterRole()
getSessionFactoryHelper
public SessionFactoryHelper getSessionFactoryHelper()
getTokenReplacements
public Map getTokenReplacements()
getAliasGenerator
public AliasGenerator getAliasGenerator()
getCurrentFromClause
public FromClause getCurrentFromClause()
getParseErrorHandler
public ParseErrorHandler getParseErrorHandler()
reportError
public void reportError(antlr.RecognitionException e)
- Specified by:
reportError
in interface ErrorReporter
- Overrides:
reportError
in class antlr.TreeParser
reportError
public void reportError(String s)
- Specified by:
reportError
in interface ErrorReporter
- Overrides:
reportError
in class antlr.TreeParser
reportWarning
public void reportWarning(String s)
- Specified by:
reportWarning
in interface ErrorReporter
- Overrides:
reportWarning
in class antlr.TreeParser
getQuerySpaces
public Set getQuerySpaces()
- Returns the set of unique query spaces (a.k.a.
table names) that occurred in the query.
- Returns:
- A set of table names (Strings).
createFromElement
protected antlr.collections.AST createFromElement(String path,
antlr.collections.AST alias,
antlr.collections.AST propertyFetch)
throws antlr.SemanticException
- Overrides:
createFromElement
in class org.hibernate.hql.antlr.HqlSqlBaseWalker
- Throws:
antlr.SemanticException
createFromFilterElement
protected antlr.collections.AST createFromFilterElement(antlr.collections.AST filterEntity,
antlr.collections.AST alias)
throws antlr.SemanticException
- Overrides:
createFromFilterElement
in class org.hibernate.hql.antlr.HqlSqlBaseWalker
- Throws:
antlr.SemanticException
createFromJoinElement
protected void createFromJoinElement(antlr.collections.AST path,
antlr.collections.AST alias,
int joinType,
antlr.collections.AST fetchNode,
antlr.collections.AST propertyFetch,
antlr.collections.AST with)
throws antlr.SemanticException
- Overrides:
createFromJoinElement
in class org.hibernate.hql.antlr.HqlSqlBaseWalker
- Throws:
antlr.SemanticException
pushFromClause
protected void pushFromClause(antlr.collections.AST fromNode,
antlr.collections.AST inputFromNode)
- Sets the current 'FROM' context.
- Overrides:
pushFromClause
in class org.hibernate.hql.antlr.HqlSqlBaseWalker
- Parameters:
fromNode
- The new 'FROM' context.inputFromNode
- The from node from the input AST.
lookupAlias
protected void lookupAlias(antlr.collections.AST aliasRef)
throws antlr.SemanticException
- Overrides:
lookupAlias
in class org.hibernate.hql.antlr.HqlSqlBaseWalker
- Throws:
antlr.SemanticException
setImpliedJoinType
protected void setImpliedJoinType(int joinType)
- Overrides:
setImpliedJoinType
in class org.hibernate.hql.antlr.HqlSqlBaseWalker
getImpliedJoinType
public int getImpliedJoinType()
lookupProperty
protected antlr.collections.AST lookupProperty(antlr.collections.AST dot,
boolean root,
boolean inSelect)
throws antlr.SemanticException
- Overrides:
lookupProperty
in class org.hibernate.hql.antlr.HqlSqlBaseWalker
- Throws:
antlr.SemanticException
isNonQualifiedPropertyRef
protected boolean isNonQualifiedPropertyRef(antlr.collections.AST ident)
- Overrides:
isNonQualifiedPropertyRef
in class org.hibernate.hql.antlr.HqlSqlBaseWalker
lookupNonQualifiedProperty
protected antlr.collections.AST lookupNonQualifiedProperty(antlr.collections.AST property)
throws antlr.SemanticException
- Overrides:
lookupNonQualifiedProperty
in class org.hibernate.hql.antlr.HqlSqlBaseWalker
- Throws:
antlr.SemanticException
processQuery
protected void processQuery(antlr.collections.AST select,
antlr.collections.AST query)
throws antlr.SemanticException
- Overrides:
processQuery
in class org.hibernate.hql.antlr.HqlSqlBaseWalker
- Throws:
antlr.SemanticException
postProcessDML
protected void postProcessDML(RestrictableStatement statement)
throws antlr.SemanticException
- Throws:
antlr.SemanticException
postProcessUpdate
protected void postProcessUpdate(antlr.collections.AST update)
throws antlr.SemanticException
- Overrides:
postProcessUpdate
in class org.hibernate.hql.antlr.HqlSqlBaseWalker
- Throws:
antlr.SemanticException
postProcessDelete
protected void postProcessDelete(antlr.collections.AST delete)
throws antlr.SemanticException
- Overrides:
postProcessDelete
in class org.hibernate.hql.antlr.HqlSqlBaseWalker
- Throws:
antlr.SemanticException
supportsIdGenWithBulkInsertion
public static boolean supportsIdGenWithBulkInsertion(IdentifierGenerator generator)
postProcessInsert
protected void postProcessInsert(antlr.collections.AST insert)
throws antlr.SemanticException,
QueryException
- Overrides:
postProcessInsert
in class org.hibernate.hql.antlr.HqlSqlBaseWalker
- Throws:
antlr.SemanticException
QueryException
resolve
protected void resolve(antlr.collections.AST node)
throws antlr.SemanticException
- Overrides:
resolve
in class org.hibernate.hql.antlr.HqlSqlBaseWalker
- Throws:
antlr.SemanticException
resolveSelectExpression
protected void resolveSelectExpression(antlr.collections.AST node)
throws antlr.SemanticException
- Overrides:
resolveSelectExpression
in class org.hibernate.hql.antlr.HqlSqlBaseWalker
- Throws:
antlr.SemanticException
beforeSelectClause
protected void beforeSelectClause()
throws antlr.SemanticException
- Overrides:
beforeSelectClause
in class org.hibernate.hql.antlr.HqlSqlBaseWalker
- Throws:
antlr.SemanticException
generatePositionalParameter
protected antlr.collections.AST generatePositionalParameter(antlr.collections.AST inputNode)
throws antlr.SemanticException
- Overrides:
generatePositionalParameter
in class org.hibernate.hql.antlr.HqlSqlBaseWalker
- Throws:
antlr.SemanticException
generateNamedParameter
protected antlr.collections.AST generateNamedParameter(antlr.collections.AST delimiterNode,
antlr.collections.AST nameNode)
throws antlr.SemanticException
- Overrides:
generateNamedParameter
in class org.hibernate.hql.antlr.HqlSqlBaseWalker
- Throws:
antlr.SemanticException
processConstant
protected void processConstant(antlr.collections.AST constant)
throws antlr.SemanticException
- Overrides:
processConstant
in class org.hibernate.hql.antlr.HqlSqlBaseWalker
- Throws:
antlr.SemanticException
processBoolean
protected void processBoolean(antlr.collections.AST constant)
throws antlr.SemanticException
- Overrides:
processBoolean
in class org.hibernate.hql.antlr.HqlSqlBaseWalker
- Throws:
antlr.SemanticException
processNumericLiteral
protected void processNumericLiteral(antlr.collections.AST literal)
- Overrides:
processNumericLiteral
in class org.hibernate.hql.antlr.HqlSqlBaseWalker
processIndex
protected void processIndex(antlr.collections.AST indexOp)
throws antlr.SemanticException
- Overrides:
processIndex
in class org.hibernate.hql.antlr.HqlSqlBaseWalker
- Throws:
antlr.SemanticException
processFunction
protected void processFunction(antlr.collections.AST functionCall,
boolean inSelect)
throws antlr.SemanticException
- Overrides:
processFunction
in class org.hibernate.hql.antlr.HqlSqlBaseWalker
- Throws:
antlr.SemanticException
processAggregation
protected void processAggregation(antlr.collections.AST node,
boolean inSelect)
throws antlr.SemanticException
- Overrides:
processAggregation
in class org.hibernate.hql.antlr.HqlSqlBaseWalker
- Throws:
antlr.SemanticException
processConstructor
protected void processConstructor(antlr.collections.AST constructor)
throws antlr.SemanticException
- Overrides:
processConstructor
in class org.hibernate.hql.antlr.HqlSqlBaseWalker
- Throws:
antlr.SemanticException
setAlias
protected void setAlias(antlr.collections.AST selectExpr,
antlr.collections.AST ident)
- Overrides:
setAlias
in class org.hibernate.hql.antlr.HqlSqlBaseWalker
getNamedParameterLocations
public int[] getNamedParameterLocations(String name)
throws QueryException
- Returns the locations of all occurrences of the named parameter.
- Specified by:
getNamedParameterLocations
in interface ParameterBinder.NamedParameterSource
- Throws:
QueryException
addQuerySpaces
public void addQuerySpaces(Serializable[] spaces)
getReturnTypes
public Type[] getReturnTypes()
getReturnAliases
public String[] getReturnAliases()
getSelectClause
public SelectClause getSelectClause()
getFinalFromClause
public FromClause getFinalFromClause()
isShallowQuery
public boolean isShallowQuery()
getEnabledFilters
public Map getEnabledFilters()
getLiteralProcessor
public LiteralProcessor getLiteralProcessor()
getASTPrinter
public ASTPrinter getASTPrinter()
getParameters
public ArrayList getParameters()
getNumberOfParametersInSetClause
public int getNumberOfParametersInSetClause()
evaluateAssignment
protected void evaluateAssignment(antlr.collections.AST eq)
throws antlr.SemanticException
- Overrides:
evaluateAssignment
in class org.hibernate.hql.antlr.HqlSqlBaseWalker
- Throws:
antlr.SemanticException
getAssignmentSpecifications
public ArrayList getAssignmentSpecifications()
createIntoClause
protected antlr.collections.AST createIntoClause(String path,
antlr.collections.AST propertySpec)
throws antlr.SemanticException
- Overrides:
createIntoClause
in class org.hibernate.hql.antlr.HqlSqlBaseWalker
- Throws:
antlr.SemanticException
prepareVersioned
protected void prepareVersioned(antlr.collections.AST updateNode,
antlr.collections.AST versioned)
throws antlr.SemanticException
- Overrides:
prepareVersioned
in class org.hibernate.hql.antlr.HqlSqlBaseWalker
- Throws:
antlr.SemanticException
prepareLogicOperator
protected void prepareLogicOperator(antlr.collections.AST operator)
throws antlr.SemanticException
- Overrides:
prepareLogicOperator
in class org.hibernate.hql.antlr.HqlSqlBaseWalker
- Throws:
antlr.SemanticException
prepareArithmeticOperator
protected void prepareArithmeticOperator(antlr.collections.AST operator)
throws antlr.SemanticException
- Overrides:
prepareArithmeticOperator
in class org.hibernate.hql.antlr.HqlSqlBaseWalker
- Throws:
antlr.SemanticException
validateMapPropertyExpression
protected void validateMapPropertyExpression(antlr.collections.AST node)
throws antlr.SemanticException
- Overrides:
validateMapPropertyExpression
in class org.hibernate.hql.antlr.HqlSqlBaseWalker
- Throws:
antlr.SemanticException
panic
public static void panic()
Copyright © 2001-2010 Red Hat, Inc. All Rights Reserved.