Package de.hybris.platform.util
Class FlexibleSearchUtils
- java.lang.Object
-
- de.hybris.platform.util.FlexibleSearchUtils
-
public class FlexibleSearchUtils extends java.lang.Object
-
-
Constructor Summary
Constructors Constructor Description FlexibleSearchUtils()
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static java.lang.StringbuildOracleCompatibleCollectionStatement(java.lang.String expression, java.lang.String parameter, java.lang.String expressionOperator, java.util.Collection originalParameters, java.util.Map<java.lang.String,java.lang.Object> paramsMap)Builds oracle-proof collection conditions which respect the 1000 element limit for expressions in oracle.
-
-
-
Method Detail
-
buildOracleCompatibleCollectionStatement
public static java.lang.String buildOracleCompatibleCollectionStatement(java.lang.String expression, java.lang.String parameter, java.lang.String expressionOperator, java.util.Collection originalParameters, java.util.Map<java.lang.String,java.lang.Object> paramsMap)Builds oracle-proof collection conditions which respect the 1000 element limit for expressions in oracle.Example: Consider a condition
{pk} IN ( ?coll ): This works fine on oracle provided that not more than 1000 elements are inside the collection. Otherwise you'll get the well known ORA-01795 error.
Using this method would work like this:
Collection params = ... MapqueryParams = new HashMap(); String query = "SELECT {PK} FROM {FOO} WHERE "; query += FlexibleSearchUtils.buildOracleCompatibleCollectionStatement( "{code} IN (?coll)","coll", "OR", params, queryParams ); Finally you'd end up with conditions like this:
( {code} IN (?coll0) ) OR ( {code} IN (?coll1) OR ... )which is accepted by oracle.
Another example with different connection operator
Collection params = ... MapqueryParams = new HashMap(); String query = "SELECT {PK} FROM {FOO} WHERE "; query += FlexibleSearchUtils.buildOracleCompatibleCollectionStatement( "{code} NOT IN (?coll)","coll", "AND", params, queryParams ); will end in
( {code} NOT IN (?coll0) ) AND ( {code} NOT IN (?coll1) OR ... )- Parameters:
expression- the condition containing the collection parameterparameter- the collection parameter alias (without '?')expressionOperator- the operator to be used in case the expression needs to be split uporiginalParameters- the original parameter value collectionparamsMap- the FlexibleSearch parameter map to add the parameter value collection(s) to
-
-