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