Author: sergiykarpenko
Date: 2011-07-27 09:44:30 -0400 (Wed, 27 Jul 2011)
New Revision: 4681
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/MSSQLMultiDbJDBCConnection.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/MSSQLSingleDbJDBCConnection.java
Log:
EXOJCR-1393: mssql range pattern symbols escape added
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/MSSQLMultiDbJDBCConnection.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/MSSQLMultiDbJDBCConnection.java 2011-07-26
11:44:20 UTC (rev 4680)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/MSSQLMultiDbJDBCConnection.java 2011-07-27
13:44:30 UTC (rev 4681)
@@ -75,7 +75,7 @@
+ " from JCR_SITEM I where I.I_CLASS=1) as A where A.r__ <= ? and
A.r__ > ?) J on P.PARENT_ID = J.ID"
+ " where P.I_CLASS=2 and V.PROPERTY_ID=P.ID order by J.ID";
}
-
+
/**
* {@inheritDoc}
*/
@@ -95,5 +95,36 @@
findNodesAndProperties.setInt(2, offset);
return findNodesAndProperties.executeQuery();
- }
+ }
+
+ /**
+ * Replace underscore in pattern with escaped symbol. Replace jcr-wildcard '*'
with sql-wildcard '%'.
+ * <p>
+ * MSSQL have a range pattern '[..]' so we need to escape it too.
+ *
+ * @param pattern
+ * @return pattern with escaped underscore and fixed wildcard symbols
+ */
+ protected String fixEscapeSymbols(String pattern)
+ {
+ char[] chars = pattern.toCharArray();
+ StringBuilder sb = new StringBuilder();
+ for (int i = 0; i < chars.length; i++)
+ {
+ switch (chars[i])
+ {
+ case '*' :
+ sb.append('%');
+ break;
+ case '_' :
+ case '%' :
+ case '[' :
+ case ']' :
+ sb.append(getWildcardEscapeSymbold());
+ default :
+ sb.append(chars[i]);
+ }
+ }
+ return sb.toString();
+ }
}
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/MSSQLSingleDbJDBCConnection.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/MSSQLSingleDbJDBCConnection.java 2011-07-26
11:44:20 UTC (rev 4680)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/MSSQLSingleDbJDBCConnection.java 2011-07-27
13:44:30 UTC (rev 4681)
@@ -78,7 +78,7 @@
+ " ) J on P.PARENT_ID = J.ID"
+ " where P.I_CLASS=2 and P.CONTAINER_NAME=? and V.PROPERTY_ID=P.ID
order by J.ID";
}
-
+
/**
* {@inheritDoc}
*/
@@ -100,5 +100,37 @@
findNodesAndProperties.setString(4, containerName);
return findNodesAndProperties.executeQuery();
- }
+ }
+
+ /**
+ * Replace underscore in pattern with escaped symbol. Replace jcr-wildcard '*'
with sql-wildcard '%'.
+ * <p>
+ * MSSQL have a range pattern '[..]' so we need to escape it too.
+ *
+ * @param pattern
+ * @return pattern with escaped underscore and fixed wildcard symbols
+ */
+ protected String fixEscapeSymbols(String pattern)
+ {
+ char[] chars = pattern.toCharArray();
+ StringBuilder sb = new StringBuilder();
+ for (int i = 0; i < chars.length; i++)
+ {
+ switch (chars[i])
+ {
+ case '*' :
+ sb.append('%');
+ break;
+ case '_' :
+ case '%' :
+ case '[' :
+ case ']' :
+ sb.append(getWildcardEscapeSymbold());
+ default :
+ sb.append(chars[i]);
+ }
+ }
+ return sb.toString();
+ }
+
}