Methods Summary |
---|
private void | collectionProperty(antlr.collections.AST path, antlr.collections.AST name)
if ( path == null ) {
throw new SemanticException( "Collection function " + name.getText() + " has no path!" );
}
SqlNode expr = ( SqlNode ) path;
Type type = expr.getDataType();
if ( log.isDebugEnabled() ) {
log.debug( "collectionProperty() : name=" + name + " type=" + type );
}
resolveCollectionProperty( expr );
|
private void | dialectFunction(antlr.collections.AST exprList)
function = getSessionFactoryHelper().findSQLFunction( methodName );
if ( function != null ) {
AST firstChild = exprList != null ? exprList.getFirstChild() : null;
Type functionReturnType = getSessionFactoryHelper()
.findFunctionReturnType( methodName, firstChild );
setDataType( functionReturnType );
}
//TODO:
/*else {
methodName = (String) getWalker().getTokenReplacements().get( methodName );
}*/
|
public java.lang.String | getDisplayText()
return "{" +
"method=" + getMethodName() +
",selectColumns=" + ( selectColumns == null ?
null : Arrays.asList( selectColumns ) ) +
",fromElement=" + fromElement.getTableAlias() +
"}";
|
public FromElement | getFromElement()
return fromElement;
|
private java.lang.String | getMethodName()
return methodName;
|
public org.hibernate.dialect.function.SQLFunction | getSQLFunction()
return function;
|
private void | handleElements(FromReferenceNode collectionNode, java.lang.String propertyName)
FromElement collectionFromElement = collectionNode.getFromElement();
QueryableCollection queryableCollection = collectionFromElement.getQueryableCollection();
String path = collectionNode.getPath() + "[]." + propertyName;
log.debug( "Creating elements for " + path );
fromElement = collectionFromElement;
if ( !collectionFromElement.isCollectionOfValuesOrComponents() ) {
getWalker().addQuerySpaces( queryableCollection.getElementPersister().getQuerySpaces() );
}
setDataType( queryableCollection.getElementType() );
selectColumns = collectionFromElement.toColumns( fromElement.getTableAlias(), propertyName, inSelect );
|
public void | initializeMethodNode(antlr.collections.AST name, boolean inSelect)
name.setType( SqlTokenTypes.METHOD_NAME );
String text = name.getText();
methodName = text.toLowerCase(); // Use the lower case function name.
this.inSelect = inSelect; // Remember whether we're in a SELECT clause or not.
|
public boolean | isCollectionPropertyMethod()
return CollectionProperties.isAnyCollectionProperty( methodName );
|
public boolean | isScalar()
// Method expressions in a SELECT should always be considered scalar.
return true;
|
private void | prepareAnyImplicitJoins(DotNode dotNode)
if ( dotNode.getLhs() instanceof DotNode ) {
DotNode lhs = ( DotNode ) dotNode.getLhs();
FromElement lhsOrigin = lhs.getFromElement();
if ( lhsOrigin != null && "".equals( lhsOrigin.getText() ) ) {
String lhsOriginText = lhsOrigin.getQueryable().getTableName() +
" " + lhsOrigin.getTableAlias();
lhsOrigin.setText( lhsOriginText );
}
prepareAnyImplicitJoins( lhs );
}
|
protected void | prepareSelectColumns(java.lang.String[] columns)
return;
|
public void | resolve(boolean inSelect)
// Get the function name node.
AST name = getFirstChild();
initializeMethodNode( name, inSelect );
AST exprList = name.getNextSibling();
// If the expression list has exactly one expression, and the type of the expression is a collection
// then this might be a collection function, such as index(c) or size(c).
if ( ASTUtil.hasExactlyOneChild( exprList ) && isCollectionPropertyMethod() ) {
collectionProperty( exprList.getFirstChild(), name );
}
else {
dialectFunction( exprList );
}
|
public void | resolveCollectionProperty(antlr.collections.AST expr)
String propertyName = CollectionProperties.getNormalizedPropertyName( getMethodName() );
if ( expr instanceof FromReferenceNode ) {
FromReferenceNode collectionNode = ( FromReferenceNode ) expr;
// If this is 'elements' then create a new FROM element.
if ( CollectionPropertyNames.COLLECTION_ELEMENTS.equals( propertyName ) ) {
handleElements( collectionNode, propertyName );
}
else {
// Not elements(x)
fromElement = collectionNode.getFromElement();
setDataType( fromElement.getPropertyType( propertyName, propertyName ) );
selectColumns = fromElement.toColumns( fromElement.getTableAlias(), propertyName, inSelect );
}
if ( collectionNode instanceof DotNode ) {
prepareAnyImplicitJoins( ( DotNode ) collectionNode );
}
if ( !inSelect ) {
fromElement.setText( "" );
fromElement.setUseWhereFragment( false );
}
prepareSelectColumns( selectColumns );
setText( selectColumns[0] );
setType( SqlTokenTypes.SQL_TOKEN );
}
else {
throw new SemanticException(
"Unexpected expression " + expr +
" found for collection function " + propertyName
);
}
|
public void | setScalarColumnText(int i)
if ( selectColumns == null ) { // Dialect function
ColumnHelper.generateSingleScalarColumn( this, i );
}
else { // Collection 'property function'
ColumnHelper.generateScalarColumns( this, selectColumns, i );
}
|