FileDocCategorySizeDatePackage
SimpleExpression.javaAPI DocHibernate 3.2.52418Sun Jul 24 23:57:06 BST 2005org.hibernate.criterion

SimpleExpression

public class SimpleExpression extends Object implements Criterion
superclass for "simple" comparisons (with SQL binary operators)
author
Gavin King

Fields Summary
private final String
propertyName
private final Object
value
private boolean
ignoreCase
private final String
op
Constructors Summary
protected SimpleExpression(String propertyName, Object value, String op)

		this.propertyName = propertyName;
		this.value = value;
		this.op = op;
	
protected SimpleExpression(String propertyName, Object value, String op, boolean ignoreCase)

		this.propertyName = propertyName;
		this.value = value;
		this.ignoreCase = ignoreCase;
		this.op = op;
	
Methods Summary
protected final java.lang.StringgetOp()

		return op;
	
public org.hibernate.engine.TypedValue[]getTypedValues(org.hibernate.Criteria criteria, CriteriaQuery criteriaQuery)

		Object icvalue = ignoreCase ? value.toString().toLowerCase() : value;
		return new TypedValue[] { criteriaQuery.getTypedValue(criteria, propertyName, icvalue) };
	
public org.hibernate.criterion.SimpleExpressionignoreCase()

		ignoreCase = true;
		return this;
	
public java.lang.StringtoSqlString(org.hibernate.Criteria criteria, CriteriaQuery criteriaQuery)


		String[] columns = criteriaQuery.getColumnsUsingProjection(criteria, propertyName);
		Type type = criteriaQuery.getTypeUsingProjection(criteria, propertyName);
		StringBuffer fragment = new StringBuffer();
		if (columns.length>1) fragment.append('(");
		SessionFactoryImplementor factory = criteriaQuery.getFactory();
		int[] sqlTypes = type.sqlTypes( factory );
		for ( int i=0; i<columns.length; i++ ) {
			boolean lower = ignoreCase && 
					( sqlTypes[i]==Types.VARCHAR || sqlTypes[i]==Types.CHAR );
			if (lower) {
				fragment.append( factory.getDialect().getLowercaseFunction() )
					.append('(");
			}
			fragment.append( columns[i] );
			if (lower) fragment.append(')");
			fragment.append( getOp() ).append("?");
			if ( i<columns.length-1 ) fragment.append(" and ");
		}
		if (columns.length>1) fragment.append(')");
		return fragment.toString();

	
public java.lang.StringtoString()

		return propertyName + getOp() + value;