Ignore:
Timestamp:
May 17, 2011, 10:57:14 AM (10 years ago)
Author:
robert@…
Message:

Made searching in text case insensitive

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/groovy/dbnp/query/Criterion.groovy

    r1820 r1850  
    148148         */
    149149        public boolean isComplexCriterion() {
     150                if( this.field == '*' )
     151                        return false;
     152
    150153                if( isDomainCriterion() )
    151154                        return false;
     
    390393        protected Map extendWhereClause( String hql, String fieldName, String uniquePrefix, String fieldType, def fieldValue ) {
    391394                def parameters = [:]
    392 
     395                def textFieldTypes = [ 'String', 'Text', 'File', 'StringList', 'ExtendableStringList', 'Term', 'Template', 'Module' ];
     396               
    393397                switch( this.operator ) {
    394398                        case Operator.contains:
    395                                 hql = sprintf( hql, fieldName + " like :" + uniquePrefix + "ValueLike" );
     399                                // Text fields should be handled case insensitive
     400                                if( textFieldTypes.contains( fieldType ) ) {
     401                                        hql = sprintf( hql, "lower( " + fieldName + ") like lower( :" + uniquePrefix + "ValueLike )" );
     402                                } else {
     403                                        hql = sprintf( hql, fieldName + " like :" + uniquePrefix + "ValueLike" );
     404                                }
    396405                                parameters[ uniquePrefix + "ValueLike" ] = "%" + fieldValue + "%"
    397406                                break;
     
    401410                        case Operator.lte:
    402411                        case Operator.lt:
    403                                 hql = sprintf( hql, fieldName + " "  + this.operator.name + " :" + uniquePrefix + "Value" + fieldType );
     412                                if( textFieldTypes.contains( fieldType ) ) {
     413                                        hql = sprintf( hql, "lower( " + fieldName + " ) "  + this.operator.name + " lower( :" + uniquePrefix + "Value" + fieldType + ")" );
     414                                } else {
     415                                        hql = sprintf( hql, fieldName + " "  + this.operator.name + " :" + uniquePrefix + "Value" + fieldType );
     416                                }
    404417                                parameters[ uniquePrefix + "Value" + fieldType ] = fieldValue
    405418                                break;
Note: See TracChangeset for help on using the changeset viewer.