Changeset 16551

Show
Ignore:
Timestamp:
20/08/08 16:22:09 (5 months ago)
Author:
kmr
Message:

Try to fix problems with quick search by always using a MATCHES constraint
even if there are no wildcards.
Refs #1798.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/intermine/web/main/src/org/intermine/web/logic/query/MainHelper.java

    r16021 r16551  
    695695        QueryExpression qf = new QueryExpression(QueryExpression.LOWER, (QueryField) qn); 
    696696        String lowerCaseValue = ((String) c.getValue()).toLowerCase(); 
    697         if (lowerCaseValue.indexOf('%') != -1 || lowerCaseValue.indexOf('_') != -1) { 
    698             if (c.getOp().equals(ConstraintOp.EQUALS)) { 
    699                 return new SimpleConstraint(qf, ConstraintOp.MATCHES, 
     697 
     698        // notes: 
     699        //   - we always turn EQUALS into a MATCHES(LIKE) constraint and rely on Postgres 
     700        //     to be sensible 
     701        //   - lowerCaseValue is quoted in a way suitable for a LIKE constraint, but not for an 
     702        //     normal equals.  for example 'Dpse\GA10108' needs to be 'Dpse\\GA10108' for equals 
     703        //     but 'Dpse\\\\GA10108' (and hence "Dpse\\\\\\\\GA10108" as a Java string because 
     704        //     backslash must be quoted with a backslash) 
     705        if (c.getOp().equals(ConstraintOp.EQUALS)) { 
     706            return new SimpleConstraint(qf, ConstraintOp.MATCHES, new QueryValue(lowerCaseValue)); 
     707        } else { 
     708            if (c.getOp().equals(ConstraintOp.NOT_EQUALS)) { 
     709                return new SimpleConstraint(qf, ConstraintOp.DOES_NOT_MATCH, 
    700710                                            new QueryValue(lowerCaseValue)); 
    701711            } else { 
    702                 if (c.getOp().equals(ConstraintOp.NOT_EQUALS)) { 
    703                     return new SimpleConstraint(qf, ConstraintOp.DOES_NOT_MATCH
    704                                                 new QueryValue(lowerCaseValue)); 
     712                if (c.getOp().equals(ConstraintOp.CONTAINS)) { 
     713                    return new SimpleConstraint(qf, ConstraintOp.MATCHES
     714                                                new QueryValue("%" + lowerCaseValue + "%")); 
    705715                } else { 
    706                     // fail through 
    707                 } 
    708             } 
    709         } 
    710         if (c.getOp().equals(ConstraintOp.CONTAINS)) { 
    711             return new SimpleConstraint(qf, ConstraintOp.MATCHES, 
    712                                         new QueryValue("%" + lowerCaseValue + "%")); 
    713         } 
    714         return new SimpleConstraint(qf, c.getOp(), new QueryValue(lowerCaseValue)); 
     716                    return new SimpleConstraint(qf, c.getOp(), new QueryValue(lowerCaseValue)); 
     717                } 
     718            } 
     719        } 
    715720    } 
    716721