You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by je...@apache.org on 2012/09/14 06:26:38 UTC
svn commit: r1384637 - in
/chemistry/opencmis/trunk/chemistry-opencmis-client:
chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/
chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runti...
Author: jens
Date: Fri Sep 14 04:26:37 2012
New Revision: 1384637
URL: http://svn.apache.org/viewvc?rev=1384637&view=rev
Log:
add escaping support for CONTAINS in query
Modified:
chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/QueryStatement.java
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-api/src/main/java/org/apache/chemistry/opencmis/client/api/QueryStatement.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/QueryStatement.java?rev=1384637&r1=1384636&r2=1384637&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/QueryStatement.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/QueryStatement.java Fri Sep 14 04:26:37 2012
@@ -89,11 +89,17 @@ public interface QueryStatement extends
/**
* Sets the designated parameter to the given string. It does not escape
- * backslashes ('\') in front of "%' and '_'.
+ * backslashes ('\') in front of '%' and '_'.
*/
void setStringLike(int parameterIndex, String str);
/**
+ * Sets the designated parameter to the given string. It does not escape
+ * backslashes ('\') in front of '*', '?' and '-'.
+ */
+ void setStringContains(int parameterIndex, String str);
+
+ /**
* Sets the designated parameter to the given object id.
*/
void setId(int parameterIndex, ObjectId... id);
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=1384637&r1=1384636&r2=1384637&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 Fri Sep 14 04:26:37 2012
@@ -142,6 +142,15 @@ public class QueryStatementImpl implemen
parametersMap.put(parameterIndex, sb.toString());
}
+
+ public void setStringContains(int parameterIndex, String str) {
+ if (str == null) {
+ throw new IllegalArgumentException("String must be set!");
+ }
+
+ parametersMap.put(parameterIndex, escapeContains(str));
+ }
+
public void setStringLike(int parameterIndex, String str) {
if (str == null) {
throw new IllegalArgumentException("String must be set!");
@@ -419,6 +428,29 @@ public class QueryStatementImpl implemen
return sb.toString();
}
+ private static String escapeContains(String str) {
+ StringBuilder sb = new StringBuilder("'");
+ for (int i = 0; i < str.length(); i++) {
+ char c = str.charAt(i);
+
+ if (c == '\'') {
+ sb.append("\\\\");
+ } else if (c == '\\') {
+ if (i + 1 < str.length() && (str.charAt(i + 1) == '*' || str.charAt(i + 1) == '?' || str.charAt(i + 1) == '-')) {
+ // no additional back slash
+ } else {
+ sb.append("\\\\");
+ }
+ }
+
+ sb.append(c);
+ }
+
+ sb.append("'");
+
+ return sb.toString();
+ }
+
private static String convert(Date date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
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=1384637&r1=1384636&r2=1384637&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 Fri Sep 14 04:26:37 2012
@@ -79,6 +79,13 @@ public class QueryStatementTest {
assertEquals("SELECT * FROM cmis:document WHERE abc:string LIKE '\\_test\\%blah\\\\\\\\blah'",
st.toQueryString());
+ // contains
+ query = "SELECT * FROM cmis:document WHERE CONTAINS(?)";
+ st = new QueryStatementImpl(session, query);
+ st.setStringContains(1, "John'sPresentation\\-Version2");
+ assertEquals("SELECT * FROM cmis:document WHERE CONTAINS('John\\\\'sPresentation\\-Version2')",
+ st.toQueryString());
+
// ids
query = "SELECT * FROM cmis:document WHERE abc:id = ?";
st = new QueryStatementImpl(session, query);