You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by he...@apache.org on 2012/11/26 23:02:47 UTC
svn commit: r1413890 - in /openjpa/trunk:
openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/
openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jpql/expressions/
openjpa-project/src/doc/manual/
Author: helenxu
Date: Mon Nov 26 22:02:44 2012
New Revision: 1413890
URL: http://svn.apache.org/viewvc?rev=1413890&view=rev
Log:
OPENJPA-2282 do not append escape clause by default.
Modified:
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/JDataStoreDictionary.java
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/MySQLDictionary.java
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/PostgresDictionary.java
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jpql/expressions/TestEJBQLCondExpression.java
openjpa/trunk/openjpa-project/src/doc/manual/migration_considerations.xml
openjpa/trunk/openjpa-project/src/doc/manual/ref_guide_dbsetup.xml
Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java?rev=1413890&r1=1413889&r2=1413890&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java Mon Nov 26 22:02:44 2012
@@ -247,7 +247,7 @@ public class DBDictionary
public boolean requiresTargetForDelete = false;
public boolean allowsAliasInBulkClause = true;
public boolean supportsMultipleNontransactionalResultSets = true;
- public boolean requiresSearchStringEscapeForLike = true;
+ public boolean requiresSearchStringEscapeForLike = false;
public String searchStringEscape = "\\";
public boolean requiresCastForMathFunctions = false;
public boolean requiresCastForComparisons = false;
Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/JDataStoreDictionary.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/JDataStoreDictionary.java?rev=1413890&r1=1413889&r2=1413890&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/JDataStoreDictionary.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/JDataStoreDictionary.java Mon Nov 26 22:02:44 2012
@@ -64,6 +64,7 @@ public class JDataStoreDictionary
"SHORT", "INT", "LONG", "DOUBLE PRECISION", "BOOLEAN",
}));
+ requiresSearchStringEscapeForLike = true;
searchStringEscape = "";
}
Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/MySQLDictionary.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/MySQLDictionary.java?rev=1413890&r1=1413889&r2=1413890&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/MySQLDictionary.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/MySQLDictionary.java Mon Nov 26 22:02:44 2012
@@ -149,6 +149,7 @@ public class MySQLDictionary
"INDEX",
}));
+ requiresSearchStringEscapeForLike = true;
// MySQL requires double-escape for strings
searchStringEscape = "\\\\";
Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java?rev=1413890&r1=1413889&r2=1413890&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java Mon Nov 26 22:02:44 2012
@@ -216,7 +216,6 @@ public class OracleDictionary
super.setBatchLimit(defaultBatchLimit);
selectWordSet.add("WITH");
reportsSuccessNoInfoOnBatchUpdates = true;
- requiresSearchStringEscapeForLike = false;
}
@Override
Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/PostgresDictionary.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/PostgresDictionary.java?rev=1413890&r1=1413889&r2=1413890&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/PostgresDictionary.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/PostgresDictionary.java Mon Nov 26 22:02:44 2012
@@ -767,6 +767,7 @@ public class PostgresDictionary
}
// Old PostgreSQL requires double-escape for strings.
if ((maj <= 8 || (maj == 9 && min == 0))) {
+ requiresSearchStringEscapeForLike = true;
searchStringEscape = "\\\\";
}
}
Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jpql/expressions/TestEJBQLCondExpression.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jpql/expressions/TestEJBQLCondExpression.java?rev=1413890&r1=1413889&r2=1413890&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jpql/expressions/TestEJBQLCondExpression.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jpql/expressions/TestEJBQLCondExpression.java Mon Nov 26 22:02:44 2012
@@ -42,13 +42,16 @@ public class TestEJBQLCondExpression ext
new Address("24 Mink", "ANTIOCH", "USA", "94513"),
new Address("23 Ogbete", "CoalCamp", "NIGERIA", "00000"),
new Address("10 Wilshire", "Worcester", "CANADA", "80080"),
- new Address("23 Bellflower", "Ogui", "NIGERIA", "02000") };
+ new Address("23 Bellflower", "Ogui", "NIGERIA", "02000"),
+ new Address("24 Bellflower", "Ogui", "NIGERIA", "02000")};
+
CompUser user1 = createUser("Seetha", "MAC", add[0], 40, true);
CompUser user2 = createUser("Shannon", "PC", add[1], 36, false);
CompUser user3 = createUser("Ugo", "PC", add[2], 19, true);
CompUser user4 = createUser("Jacob", "LINUX", add[3], 10, true);
CompUser user5 = createUser("Famzy", "UNIX", add[4], 29, false);
+ CompUser user6 = createUser("tes\\ter", "Test", add[5], 10, true);
em.persist(user1);
userid1 = user1.getUserid();
@@ -60,6 +63,7 @@ public class TestEJBQLCondExpression ext
userid4 = user4.getUserid();
em.persist(user5);
userid5 = user5.getUserid();
+ em.persist(user6);
endTx(em);
endEm(em);
@@ -72,7 +76,7 @@ public class TestEJBQLCondExpression ext
List result = em.createQuery(query).getResultList();
assertNotNull("the list is null", result);
- assertEquals("the size of the list is not 5", 5, result.size());
+ assertEquals("the size of the list is not 6", 6, result.size());
endEm(em);
}
@@ -113,7 +117,7 @@ public class TestEJBQLCondExpression ext
List result = em.createQuery(query).getResultList();
assertNotNull("the list is null", result);
- assertEquals(3, result.size());
+ assertEquals(4, result.size());
assertTrue("seetha is not in the list", result.contains("Seetha"));
assertTrue("jacob is not in the list", result.contains("Jacob"));
assertTrue("famzy is not in the list", result.contains("Famzy"));
@@ -154,7 +158,15 @@ public class TestEJBQLCondExpression ext
assertNotNull(result);
assertEquals(1, result.size());
+
+ query = "SELECT o.computerName FROM CompUser o WHERE o.name " +
+ "LIKE 'tes\\%'";
+
+ result = em.createQuery(query).getResultList();
+ assertNotNull(result);
+ assertEquals(1, result.size());
+
query = "SELECT o.name FROM CompUser o WHERE o.name LIKE '_J%'";
result = em.createQuery(query).getResultList();
@@ -226,7 +238,7 @@ public class TestEJBQLCondExpression ext
List result = em.createQuery(query).getResultList();
assertNotNull("the list is null", result);
- assertEquals("they are not equal", 5, result.size());
+ assertEquals("they are not equal", 6, result.size());
endEm(em);
}
@@ -245,7 +257,7 @@ public class TestEJBQLCondExpression ext
List result = em.createQuery(query).getResultList();
assertNotNull("the list is null", result);
- assertEquals("they are not equal", 5, result.size());
+ assertEquals("they are not equal", 6, result.size());
assertTrue("Seetha is not list", result.contains("Seetha"));
assertTrue("Shannon is not list", result.contains("Shannon"));
assertTrue("jacob is not list", result.contains("Jacob"));
Modified: openjpa/trunk/openjpa-project/src/doc/manual/migration_considerations.xml
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-project/src/doc/manual/migration_considerations.xml?rev=1413890&r1=1413889&r2=1413890&view=diff
==============================================================================
--- openjpa/trunk/openjpa-project/src/doc/manual/migration_considerations.xml (original)
+++ openjpa/trunk/openjpa-project/src/doc/manual/migration_considerations.xml Mon Nov 26 22:02:44 2012
@@ -524,6 +524,25 @@
the <literal>javax.persistence.Column</literal> annotation.
</para>
</section>
+ <section id="jpa_2.3_RequiresSearchStringEscapeForLike">
+ <title>
+ RequiresSearchStringEscapeForLike DBDictionary Property
+ </title>
+ <!-- See OPENJPA-2282 for details. -->
+ <para>
+ In previous releases, the default value for the property RequiresSearchStringEscapeForLike is true and caused the
+ unexpected escape clause appended to the SQL statement.
+ For example, user created a named query like this:
+ <programlisting> SELECT o.computerName FROM CompUser o WHERE o.name LIKE ?</programlisting>
+ At run time the following query is generated:
+ <programlisting> SELECT t0.computerName FROM CompUser t0 WHERE (t0.name LIKE ? ESCAPE '\')</programlisting>
+ ESCAPE '\' shouldn't be appended to the query.
+ </para>
+ <para>
+ From the 2.3.0 release, RequiresSearchStringEscapeForLike property is set to false by default. You can configure
+ RequiresSearchStringEscapeForLike property to be true if the old behavior is desired.
+ </para>
+ </section>
</section>
</section>
</appendix>
Modified: openjpa/trunk/openjpa-project/src/doc/manual/ref_guide_dbsetup.xml
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-project/src/doc/manual/ref_guide_dbsetup.xml?rev=1413890&r1=1413889&r2=1413890&view=diff
==============================================================================
--- openjpa/trunk/openjpa-project/src/doc/manual/ref_guide_dbsetup.xml (original)
+++ openjpa/trunk/openjpa-project/src/doc/manual/ref_guide_dbsetup.xml Mon Nov 26 22:02:44 2012
@@ -2243,7 +2243,7 @@ languages, such as JDOQL. Defaults to <
<literal>RequiresSearchStringEscapeForLike</literal>:
When true, the database requires an escape string for queries that use
<literal>LIKE</literal>. The escape string can be specified using
-<literal>searchStringEscape</literal>. Defaults to <literal>true</literal>.
+<literal>searchStringEscape</literal>. Defaults to <literal>false</literal>.
</para>
</listitem>
<listitem id="DBDictionary.SelectWords">