Changeset 1850


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

Made searching in text case insensitive

Location:
trunk/src/groovy/dbnp/query
Files:
2 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;
  • 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 ->
Note: See TracChangeset for help on using the changeset viewer.