Changeset 1850

Show
Ignore:
Timestamp:
17-05-11 10:57:14 (3 years ago)
Author:
robert@…
Message:

Made searching in text case insensitive

Location:
trunk/src/groovy/dbnp/query
Files:
2 modified

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; 
  • trunk/src/groovy/dbnp/query/Search.groovy

    r1822 r1850  
    152152                } 
    153153                 
    154                 println fullHQL; 
    155                  
    156154                // Search in all entities 
    157155                resultsFound = addWildcardConditions( fullHQL, entityNames ) 
     
    160158                } 
    161159                 
    162                 println fullHQL; 
    163  
    164160                // Combine all parts to generate a full HQL query 
    165161                def hqlQuery = selectClause + " " + fullHQL.from + ( fullHQL.where ? "  WHERE " + fullHQL.where.join( " " + searchMode.toString() + " "  ) : "" ); 
     
    586582         * This method is needed because hibernate contains a bug in the HQL INDEX() function. 
    587583         * See also Criterion.manyToManyWhereCondition and 
    588          *http://opensource.atlassian.com/projects/hibernate/browse/HHH-4615 
     584         * http://opensource.atlassian.com/projects/hibernate/browse/HHH-4615 
    589585         *  
    590586         * @param entities                      List of entities 
     
    594590        protected filterForComplexCriteria( def entities, def entityCriteria ) { 
    595591                def complexCriteria = entityCriteria.findAll { it.isComplexCriterion() } 
     592 
    596593                if( complexCriteria ) { 
    597594                        def checkCallback = { entity, criterion ->