mirror of
https://github.com/apache/openjpa.git
synced 2025-02-22 01:55:29 +00:00
OPENJPA-2282 do not append escape clause by default.
git-svn-id: https://svn.apache.org/repos/asf/openjpa/trunk@1413890 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
404d9491f5
commit
af3df6bd11
@ -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;
|
||||
|
@ -64,6 +64,7 @@ public class JDataStoreDictionary
|
||||
"SHORT", "INT", "LONG", "DOUBLE PRECISION", "BOOLEAN",
|
||||
}));
|
||||
|
||||
requiresSearchStringEscapeForLike = true;
|
||||
searchStringEscape = "";
|
||||
}
|
||||
|
||||
|
@ -149,6 +149,7 @@ public class MySQLDictionary
|
||||
"INDEX",
|
||||
}));
|
||||
|
||||
requiresSearchStringEscapeForLike = true;
|
||||
// MySQL requires double-escape for strings
|
||||
searchStringEscape = "\\\\";
|
||||
|
||||
|
@ -216,7 +216,6 @@ public class OracleDictionary
|
||||
super.setBatchLimit(defaultBatchLimit);
|
||||
selectWordSet.add("WITH");
|
||||
reportsSuccessNoInfoOnBatchUpdates = true;
|
||||
requiresSearchStringEscapeForLike = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -767,6 +767,7 @@ public class PostgresDictionary
|
||||
}
|
||||
// Old PostgreSQL requires double-escape for strings.
|
||||
if ((maj <= 8 || (maj == 9 && min == 0))) {
|
||||
requiresSearchStringEscapeForLike = true;
|
||||
searchStringEscape = "\\\\";
|
||||
}
|
||||
}
|
||||
|
@ -42,13 +42,16 @@ public class TestEJBQLCondExpression extends AbstractTestCase {
|
||||
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 extends AbstractTestCase {
|
||||
userid4 = user4.getUserid();
|
||||
em.persist(user5);
|
||||
userid5 = user5.getUserid();
|
||||
em.persist(user6);
|
||||
|
||||
endTx(em);
|
||||
endEm(em);
|
||||
@ -72,7 +76,7 @@ public class TestEJBQLCondExpression extends AbstractTestCase {
|
||||
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 extends AbstractTestCase {
|
||||
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"));
|
||||
@ -155,6 +159,14 @@ public class TestEJBQLCondExpression extends AbstractTestCase {
|
||||
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 extends AbstractTestCase {
|
||||
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 extends AbstractTestCase {
|
||||
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"));
|
||||
|
@ -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>
|
||||
|
@ -2243,7 +2243,7 @@ languages, such as JDOQL. Defaults to <literal>"\\"</literal>
|
||||
<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">
|
||||
|
Loading…
x
Reference in New Issue
Block a user