You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by fm...@apache.org on 2015/09/01 17:26:08 UTC
svn commit: r1700589 - in
/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src:
main/java/org/apache/chemistry/opencmis/client/runtime/
test/java/org/apache/chemistry/opencmis/client/runtime/
Author: fmui
Date: Tue Sep 1 15:26:08 2015
New Revision: 1700589
URL: http://svn.apache.org/r1700589
Log:
CMIS-946: fixed escaping of CONTAINS queries
Modified:
chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/QueryStatementImpl.java
chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/test/java/org/apache/chemistry/opencmis/client/runtime/QueryStatementTest.java
Modified: chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/QueryStatementImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/QueryStatementImpl.java?rev=1700589&r1=1700588&r2=1700589&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/QueryStatementImpl.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/QueryStatementImpl.java Tue Sep 1 15:26:08 2015
@@ -643,9 +643,7 @@ public class QueryStatementImpl implemen
}
private static String escapeContains(String str) {
- StringBuilder sb = new StringBuilder(str.length() + 16);
-
- sb.append('\'');
+ StringBuilder sb = new StringBuilder(str.length() + 64);
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
@@ -653,15 +651,22 @@ public class QueryStatementImpl implemen
if (c == '\\') {
sb.append('\\');
} else if (c == '\'' || c == '\"') {
- sb.append("\\\\\\");
+ sb.append('\\');
+ } else if (c == '-') {
+ if (i > 0) {
+ char cb = str.charAt(i - 1);
+ if (cb == '\\') {
+ sb.deleteCharAt(sb.length() - 1);
+ } else if (cb != ' ') {
+ sb.append('\\');
+ }
+ }
}
sb.append(c);
}
- sb.append('\'');
-
- return sb.toString();
+ return escape(sb.toString());
}
private static String convert(Date date) {
Modified: chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/test/java/org/apache/chemistry/opencmis/client/runtime/QueryStatementTest.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/test/java/org/apache/chemistry/opencmis/client/runtime/QueryStatementTest.java?rev=1700589&r1=1700588&r2=1700589&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/test/java/org/apache/chemistry/opencmis/client/runtime/QueryStatementTest.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/test/java/org/apache/chemistry/opencmis/client/runtime/QueryStatementTest.java Tue Sep 1 15:26:08 2015
@@ -99,6 +99,10 @@ public class QueryStatementTest {
st = new QueryStatementImpl(session, query);
st.setStringContains(1, "John's");
assertEquals("SELECT * FROM cmis:document WHERE CONTAINS('John\\\\\\'s')", st.toQueryString());
+ st.setStringContains(1, "John'sPresentation-Version2");
+ assertEquals("SELECT * FROM cmis:document WHERE CONTAINS('John\\\\\\'sPresentation\\\\-Version2')", st.toQueryString());
+ st.setStringContains(1, "search\\'");
+ assertEquals("SELECT * FROM cmis:document WHERE CONTAINS('search\\\\\\\\\\\\\\'')", st.toQueryString());
st.setStringContains(1, "foo -bar");
assertEquals("SELECT * FROM cmis:document WHERE CONTAINS('foo -bar')", st.toQueryString());
st.setStringContains(1, "foo*");
@@ -108,13 +112,13 @@ public class QueryStatementTest {
st.setStringContains(1, "foo\\-bar");
assertEquals("SELECT * FROM cmis:document WHERE CONTAINS('foo\\\\-bar')", st.toQueryString());
st.setStringContains(1, "foo\\*");
- assertEquals("SELECT * FROM cmis:document WHERE CONTAINS('foo\\\\*')", st.toQueryString());
+ assertEquals("SELECT * FROM cmis:document WHERE CONTAINS('foo\\\\\\\\*')", st.toQueryString());
st.setStringContains(1, "foo\\?");
- assertEquals("SELECT * FROM cmis:document WHERE CONTAINS('foo\\\\?')", st.toQueryString());
+ assertEquals("SELECT * FROM cmis:document WHERE CONTAINS('foo\\\\\\\\?')", st.toQueryString());
st.setStringContains(1, "\"Cool\"");
- assertEquals("SELECT * FROM cmis:document WHERE CONTAINS('\\\\\\\"Cool\\\\\\\"')", st.toQueryString());
- st.setStringContains(1, "c:\\MyDcuments");
- assertEquals("SELECT * FROM cmis:document WHERE CONTAINS('c:\\\\MyDcuments')", st.toQueryString());
+ assertEquals("SELECT * FROM cmis:document WHERE CONTAINS('\\\\\"Cool\\\\\"')", st.toQueryString());
+ st.setStringContains(1, "c:\\MyDocuments");
+ assertEquals("SELECT * FROM cmis:document WHERE CONTAINS('c:\\\\\\\\MyDocuments')", st.toQueryString());
// ids
query = "SELECT * FROM cmis:document WHERE abc:id = ?";