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">