org.datanucleus.store.rdbms.sql.method
Class MapContainsValueMethod
java.lang.Object
org.datanucleus.store.rdbms.sql.method.AbstractSQLMethod
org.datanucleus.store.rdbms.sql.method.MapContainsValueMethod
- All Implemented Interfaces:
- SQLMethod
public class MapContainsValueMethod
- extends AbstractSQLMethod
Method for evaluating {mapExpr}.containsValue(valueExpr).
Returns a BooleanExpression.
| Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
MapContainsValueMethod
public MapContainsValueMethod()
getExpression
public SQLExpression getExpression(SQLExpression expr,
List args)
- Description copied from interface:
SQLMethod
- Return the expression for this SQL function.
- Parameters:
expr - The expression that it is invoked onargs - Arguments passed in
- Returns:
- The SQL expression using the SQL function
getNeedsSubquery
protected boolean getNeedsSubquery()
- Convenience method to decide if we handle the contains() by using a subquery, or otherwise
via an inner join. If there is an OR or a NOT in the query then uses a subquery.
- Returns:
- Whether to use a subquery
containsAsInnerJoin
protected SQLExpression containsAsInnerJoin(MapExpression mapExpr,
SQLExpression valExpr)
- Method to return an expression for Map.containsValue using INNER JOIN to the element.
This is only for use when there are no "!containsValue" and no "OR" operations.
Creates SQL by adding INNER JOIN to the join table (where it exists), and also to the value table
adding an AND condition on the value (with value of the valueExpr).
Returns a BooleanExpression "TRUE" (since the INNER JOIN will guarantee if the value is
contained of not).
- Parameters:
mapExpr - Map expressionvalExpr - Expression for the value
- Returns:
- Contains expression
containsAsSubquery
protected SQLExpression containsAsSubquery(MapExpression mapExpr,
SQLExpression valExpr)
- Method to return an expression for Map.containsValue using a subquery "EXISTS".
This is for use when there are "!contains" or "OR" operations in the filter.
Creates the following SQL,
- Map using join table
SELECT 1 FROM JOIN_TBL A0_SUB
WHERE A0_SUB.JOIN_OWN_ID = A0.ID AND A0_SUB.JOIN_VAL_ID = {valExpr}
- Map with key stored in value
SELECT 1 FROM VAL_TABLE A0_SUB INNER JOIN KEY_TBL B0 ON ...
WHERE B0.JOIN_OWN_ID = A0.ID AND A0_SUB.ID = {valExpr}
- Map of value stored in key
SELECT 1 FROM VAL_TABLE A0_SUB
WHERE A0_SUB.OWN_ID = A0.ID AND A0_SUB.ID = {valExpr}
and returns a BooleanSubqueryExpression ("EXISTS (subquery)")
- Parameters:
mapExpr - Map expressionvalExpr - Expression for the value
- Returns:
- Contains expression
Copyright © 2012. All Rights Reserved.