/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.spatial.dialect.oracle;
import java.util.List;
import org.hibernate.QueryException;
import org.hibernate.dialect.function.SQLFunction;
import org.hibernate.engine.spi.Mapping;
import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.hibernate.type.Type;
/**
* Special function for accessing a member variable of an Oracle Object
*
* @author Karel Maesen
*/
class SDOObjectProperty implements SQLFunction {
private final Type type;
private final String name;
public SDOObjectProperty(String name, Type type) {
this.type = type;
this.name = name;
}
/*
* (non-Javadoc)
*
* @see org.hibernate.dialect.function.SQLFunction#getReturnType(org.hibernate.type.Type,
* org.hibernate.engine.Mapping)
*/
public Type getReturnType(Type columnType, Mapping mapping)
throws QueryException {
return type == null ? columnType : type;
}
/*
* (non-Javadoc)
*
* @see org.hibernate.dialect.function.SQLFunction#hasArguments()
*/
public boolean hasArguments() {
return true;
}
/*
* (non-Javadoc)
*
* @see org.hibernate.dialect.function.SQLFunction#hasParenthesesIfNoArguments()
*/
public boolean hasParenthesesIfNoArguments() {
return false;
}
public String getName() {
return this.name;
}
/*
* (non-Javadoc)
*
* @see org.hibernate.dialect.function.SQLFunction#render(java.util.List,
* org.hibernate.engine.SessionFactoryImplementor)
*/
public String render(Type firstArgtype, List args, SessionFactoryImplementor factory)
throws QueryException {
final StringBuffer buf = new StringBuffer();
if ( args.isEmpty() ) {
throw new QueryException(
"First Argument in arglist must be object of which property is queried"
);
}
buf.append( args.get( 0 ) ).append( "." ).append( name );
return buf.toString();
}
}