org.grails.datastore.mapping.query.criteria.FunctionCallingCriterion.getFunctionName() - java examples

Here are the examples of the java api org.grails.datastore.mapping.query.criteria.FunctionCallingCriterion.getFunctionName() taken from open source projects. By voting up you can indicate which examples are most useful and appropriate.

1 Examples 7

12 View Complete Implementation : AbstractHibernateQuery.java
Copyright Apache License 2.0
Author : grails
org.hibernate.criterion.Criterion getRestrictionForFunctionCall(FunctionCallingCriterion criterion, PersistentEnreplacedy enreplacedy) {
    org.hibernate.criterion.Criterion sqlRestriction;
    SessionFactory sessionFactory = ((IHibernateTemplate) session.getNativeInterface()).getSessionFactory();
    String property = criterion.getProperty();
    Criterion datastoreCriterion = criterion.getPropertyCriterion();
    PersistentProperty pp = enreplacedy.getPropertyByName(property);
    if (pp == null)
        throw new InvalidDataAccessResourceUsageException("Cannot execute function defined in query [" + criterion.getFunctionName() + "] on non-existent property [" + property + "] of [" + enreplacedy.getJavaClreplaced() + "]");
    String functionName = criterion.getFunctionName();
    Dialect dialect = getDialect(sessionFactory);
    SQLFunction sqlFunction = dialect.getFunctions().get(functionName);
    if (sqlFunction != null) {
        TypeResolver typeResolver = getTypeResolver(sessionFactory);
        BasicType basic = typeResolver.basic(pp.getType().getName());
        if (basic != null && datastoreCriterion instanceof PropertyCriterion) {
            PropertyCriterion pc = (PropertyCriterion) datastoreCriterion;
            final org.hibernate.criterion.Criterion hibernateCriterion = getHibernateCriterionAdapter().toHibernateCriterion(this, datastoreCriterion, alias);
            if (hibernateCriterion instanceof SimpleExpression) {
                SimpleExpression expr = (SimpleExpression) hibernateCriterion;
                Object op = ReflectionUtils.getField(opField, expr);
                PropertyMapping mapping = getEnreplacedyPersister(enreplacedy.getJavaClreplaced().getName(), sessionFactory);
                String[] columns;
                if (alias != null) {
                    columns = mapping.toColumns(alias, property);
                } else {
                    columns = mapping.toColumns(property);
                }
                String root = render(basic, Arrays.asList(columns), sessionFactory, sqlFunction);
                Object value = pc.getValue();
                if (value != null) {
                    sqlRestriction = Restrictions.sqlRestriction(root + op + "?", value, typeResolver.basic(value.getClreplaced().getName()));
                } else {
                    sqlRestriction = Restrictions.sqlRestriction(root + op + "?", value, basic);
                }
            } else {
                throw new InvalidDataAccessResourceUsageException("Unsupported function [" + functionName + "] defined in query for property [" + property + "] with type [" + pp.getType() + "]");
            }
        } else {
            throw new InvalidDataAccessResourceUsageException("Unsupported function [" + functionName + "] defined in query for property [" + property + "] with type [" + pp.getType() + "]");
        }
    } else {
        throw new InvalidDataAccessResourceUsageException("Unsupported function defined in query [" + functionName + "]");
    }
    return sqlRestriction;
}