You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-dev@db.apache.org by br...@apache.org on 2004/06/25 15:11:35 UTC

cvs commit: db-ojb/src/java/org/apache/ojb/broker/query LikeCriteria.java

brj         2004/06/25 06:11:35

  Modified:    src/java/org/apache/ojb/broker/platforms
                        PlatformPostgreSQLImpl.java PlatformMySQLImpl.java
               .        release-notes.txt
               src/test/org/apache/ojb/broker QueryTest.java
               src/java/org/apache/ojb/broker/query LikeCriteria.java
  Log:
  added platform dependent escaping for postgresql
  
  Revision  Changes    Path
  1.10      +19 -2     db-ojb/src/java/org/apache/ojb/broker/platforms/PlatformPostgreSQLImpl.java
  
  Index: PlatformPostgreSQLImpl.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/platforms/PlatformPostgreSQLImpl.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- PlatformPostgreSQLImpl.java	4 Apr 2004 23:53:35 -0000	1.9
  +++ PlatformPostgreSQLImpl.java	25 Jun 2004 13:11:35 -0000	1.10
  @@ -19,6 +19,8 @@
   import java.sql.SQLException;
   import java.sql.Types;
   
  +import org.apache.ojb.broker.query.LikeCriteria;
  +
   /**
    * This class extends <code>PlatformDefaultImpl</code> and defines specific
    * behavior for the PostgreSQL platform.
  @@ -83,5 +85,20 @@
           index++;
           return index;
       }
  -    
  +
  +    /**
  +     * @see org.apache.ojb.broker.platforms.Platform#getEscapeClause(org.apache.ojb.broker.query.LikeCriteria)
  +     */
  +    public String getEscapeClause(LikeCriteria aCriteria)
  +    {
  +        if (LikeCriteria.getEscapeCharacter() != LikeCriteria.DEFAULT_ESCPAPE_CHARACTER)  
  +        {
  +            // the default escape character is \, so there's no need for an escape clause
  +            return super.getEscapeClause(aCriteria);
  +        }
  +        else
  +        {
  +            return "";
  +        }
  +    }        
   }
  
  
  
  1.15      +2 -2      db-ojb/src/java/org/apache/ojb/broker/platforms/PlatformMySQLImpl.java
  
  Index: PlatformMySQLImpl.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/platforms/PlatformMySQLImpl.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- PlatformMySQLImpl.java	4 Apr 2004 23:53:35 -0000	1.14
  +++ PlatformMySQLImpl.java	25 Jun 2004 13:11:35 -0000	1.15
  @@ -153,7 +153,7 @@
        */
       public String getEscapeClause(LikeCriteria aCriteria)
       {
  -        if (LikeCriteria.getEscapeCharacter() != '\\')  
  +        if (LikeCriteria.getEscapeCharacter() != LikeCriteria.DEFAULT_ESCPAPE_CHARACTER)  
           {
               // the default escape character is \, so there's no need for an escape clause
               return super.getEscapeClause(aCriteria);
  
  
  
  1.52      +3 -3      db-ojb/release-notes.txt
  
  Index: release-notes.txt
  ===================================================================
  RCS file: /home/cvs/db-ojb/release-notes.txt,v
  retrieving revision 1.51
  retrieving revision 1.52
  diff -u -r1.51 -r1.52
  --- release-notes.txt	25 Jun 2004 12:20:57 -0000	1.51
  +++ release-notes.txt	25 Jun 2004 13:11:35 -0000	1.52
  @@ -12,14 +12,14 @@
   ---------------------------------------------------------------------
   
   KNOWN ISSUES:
  -- The default escape character '\' does not work on MySql and PostgreSql because it's the default there as well and
  +- The default ojb escape character '\' does not work for database using the same default as well and
   should therefore be double-escaped. As a workaround always use a custom escape character:
   
   	LikeCriteria.setEscapeCharacter('|');
   	Criteria crit = new Criteria();
   	crit.addLike("firstname", "h%|%");
   
  -
  +This issue is fixed for MySql and PostgreSql so far.
   
   ---------------------------------------------------------------------
   Release 1.0 rc7
  
  
  
  1.61      +1 -6      db-ojb/src/test/org/apache/ojb/broker/QueryTest.java
  
  Index: QueryTest.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/test/org/apache/ojb/broker/QueryTest.java,v
  retrieving revision 1.60
  retrieving revision 1.61
  diff -u -r1.60 -r1.61
  --- QueryTest.java	25 Jun 2004 12:20:57 -0000	1.60
  +++ QueryTest.java	25 Jun 2004 13:11:35 -0000	1.61
  @@ -9,8 +9,6 @@
   import java.util.Set;
   import java.util.Vector;
   
  -import junit.framework.TestCase;
  -
   import org.apache.ojb.broker.metadata.ClassDescriptor;
   import org.apache.ojb.broker.query.Criteria;
   import org.apache.ojb.broker.query.LikeCriteria;
  @@ -278,11 +276,8 @@
        */
       public void testLikeEscapedCriteria1()
       {
  -        // BRJ the default escape char '\' does not work for mysql and postgresql 
  -        LikeCriteria.setEscapeCharacter('!');
  -
           Criteria crit = new Criteria();
  -        crit.addLike("firstname", "h%!%");
  +        crit.addLike("firstname", "h%\\%");
           Query q = QueryFactory.newQuery(Person.class, crit);
   
           Collection results = broker.getCollectionByQuery(q);
  
  
  
  1.11      +10 -5     db-ojb/src/java/org/apache/ojb/broker/query/LikeCriteria.java
  
  Index: LikeCriteria.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/query/LikeCriteria.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- LikeCriteria.java	19 Jun 2004 09:21:37 -0000	1.10
  +++ LikeCriteria.java	25 Jun 2004 13:11:35 -0000	1.11
  @@ -57,9 +57,14 @@
   	}
   
       /**
  +     * The Dfault-Character used for Escaping Wildcards
  +     */
  +    public static final char DEFAULT_ESCPAPE_CHARACTER = '\\';
  +
  +    /**
        * The Character used for Escaping Wildcards
        */
  -    private static char escapeCharacter = '\\';
  +    private static char escapeCharacter = DEFAULT_ESCPAPE_CHARACTER;
   
       /**
        * Generate a SQL search string from the pattern string passed. 
  @@ -156,10 +161,10 @@
       
       /**
        * Global change of the escapeCharacter
  -     * @param escapeCharacter The escapeCharacter to set.
  +     * @param escChar The escapeCharacter to set.
        */
  -    public static void setEscapeCharacter(char escapeCharacter)
  +    public static void setEscapeCharacter(char escChar)
       {
  -        LikeCriteria.escapeCharacter = escapeCharacter;
  +        escapeCharacter = escChar;
       }
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org