Ignore:
Timestamp:
Apr 6, 2011, 5:24:14 PM (11 years ago)
Author:
robert@…
Message:

Implemented searching for 'any field' in advanced query

File:
1 edited

Legend:

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

    r1482 r1717  
    3838       
    3939        /**
     40         * Retrieves a human readable description of the combination of the entity and field
     41         * @return
     42         */
     43        public String humanReadableEntityField() {
     44                if( field == '*' ) {
     45                        return "any field in " + entity.toString();
     46                } else {
     47                        return entityField();
     48                }
     49        }
     50       
     51        /**
    4052         * Retrieves the correct value for this criterion in the given object (with template)
    4153         *
     
    5466                        } else if( field == "Template" ) {
    5567                                fieldValue = entity.template?.name
     68                        } else if( field == "*" ) {
     69                                fieldValue = entity.giveFields().collect{
     70                                        if( it && it.name ) {
     71                                                Search.prepare( entity.getFieldValue( it.name ), entity.giveFieldType( it.name ) )
     72                                        }
     73                                }
    5674                        } else {
    5775                                fieldValue = Search.prepare( entity.getFieldValue( field ), entity.giveFieldType( field ) )
    5876                        }
    59 
     77                       
    6078                        return fieldValue
    6179                } catch( Exception e ) {
     
    7391         * @return                      True iff there the entity satisfies the given criterion.
    7492         */
    75         public boolean matchEntity( TemplateEntity entity ) {
     93        public boolean matchOneEntity( TemplateEntity entity ) {
    7694                def fieldValue = this.getFieldValue( entity );
    7795
     
    163181                classname = classname[classname.lastIndexOf( '.' ) + 1..-1].toLowerCase();
    164182
     183                def matches = false;
    165184                try {
    166185                        switch( classname ) {
    167                                 case "integer":                                 return longCompare( new Long( fieldValue.longValue() ) );
    168                                 case "long":                                    return longCompare( fieldValue );
    169                                 case "float":                                   return doubleCompare( new Long( fieldValue.doubleValue() ) );
    170                                 case "double":                                  return doubleCompare( fieldValue );
    171                                 case "boolean":                                 return booleanCompare( fieldValue );
    172                                 case "date":                                    return dateCompare( fieldValue);
    173                                 case "reltime":                                 return relTimeCompare( fieldValue );
     186                                case "integer":                                 matches = longCompare( new Long( fieldValue.longValue() ) ); break;
     187                                case "long":                                    matches = longCompare( fieldValue ); break;
     188                                case "float":                                   matches = doubleCompare( new Long( fieldValue.doubleValue() ) ); break;
     189                                case "double":                                  matches = doubleCompare( fieldValue ); break;
     190                                case "boolean":                                 matches = booleanCompare( fieldValue ); break;
     191                                case "date":                                    matches = dateCompare( fieldValue); break;
     192                                case "reltime":                                 matches = relTimeCompare( fieldValue ); break;
    174193                                case "assaymodule":
    175194                                case "template":
     
    177196                                case "templatefieldlistitem":
    178197                                case "string":
    179                                 default:                                                return compareValues( fieldValue.toString().trim().toLowerCase(), this.operator, value.toString().toLowerCase().trim() );
     198                                default:                                                matches = compareValues( fieldValue.toString().trim().toLowerCase(), this.operator, value.toString().toLowerCase().trim() ); break;
    180199                        }
     200                       
     201                        return matches;
    181202                } catch( Exception e ) {
    182203                        log.error e.class.getName() + ": " + e.getMessage();
     
    252273                                longCriterion = new Long( doubleCriterion.longValue() );
    253274                        } catch( Exception e2 ) {
    254                                 log.error e2.class.getName() + ": " + e2.getMessage();
     275                                log.debug "Can't convert value to long for comparison: " + e2.class.getName() + ": " + e2.getMessage();
    255276                                return false;
    256277                        }
     
    270291                        return compareValues( fieldValue, this.operator, doubleCriterion );
    271292                } catch( Exception e ) {
    272                         log.error e.class.getName() + ": " + e.getMessage();
     293                        log.debug "Can't convert value to double for comparison: " + e.class.getName() + ": " + e.getMessage();
    273294                        return false;
    274295                }
     
    284305        protected boolean booleanCompare( Boolean fieldValue ) {
    285306                try {
     307                        // The comparison should only be performed iff the value
     308                        // contains 'true' or 'false' (case insensitive)
     309                        def lowerCaseValue = value.toString().toLowerCase();
     310                        if( lowerCaseValue != 'true' && lowerCaseValue != 'false' )
     311                                return false;
     312                               
    286313                        Boolean booleanCriterion = Boolean.parseBoolean( value );
    287314                        return compareValues( fieldValue, this.operator, booleanCriterion );
    288315                } catch( Exception e ) {
    289                         log.error e.class.getName() + ": " + e.getMessage();
     316                        log.debug "Can't convert value to boolean for comparison: " + e.class.getName() + ": " + e.getMessage();
    290317                        return false;
    291318                }
     
    311338                        return compareValues( fieldValue, this.operator, rt );
    312339                } catch( Exception e ) {
    313                         log.error e.class.getName() + ": " + e.getMessage();
     340                        log.debug "Can't convert value to reltime for comparison: " + e.class.getName() + ": " + e.getMessage();
    314341                        return false;
    315342                }
Note: See TracChangeset for help on using the changeset viewer.