Class MapContainsEntryMethod

  • All Implemented Interfaces:
    SQLMethod

    public class MapContainsEntryMethod
    extends Object
    implements SQLMethod
    Method for evaluating {mapExpr}.containsEntry(keyExpr, valueExpr). Returns a BooleanExpression.
    • Constructor Detail

      • MapContainsEntryMethod

        public MapContainsEntryMethod()
    • Method Detail

      • getExpression

        public SQLExpression getExpression​(SQLStatement stmt,
                                           SQLExpression expr,
                                           List<SQLExpression> args)
        Description copied from interface: SQLMethod
        Return the expression for this SQL function.
        Specified by:
        getExpression in interface SQLMethod
        Parameters:
        stmt - SQLStatement that this expression is for
        expr - The expression that it is invoked on
        args - Arguments passed in
        Returns:
        The SQL expression using the SQL function
      • getNeedsSubquery

        protected boolean getNeedsSubquery​(SQLStatement stmt)
        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.
        Parameters:
        stmt - SQLStatement
        Returns:
        Whether to use a subquery
      • containsAsInnerJoin

        protected SQLExpression containsAsInnerJoin​(SQLStatement stmt,
                                                    MapExpression mapExpr,
                                                    SQLExpression keyExpr,
                                                    SQLExpression valExpr)
        Method to return an expression for Map.containsEntry using INNER JOIN to the element. This is only for use when there are no "!containsEntry" 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 entry is contained of not).
        Parameters:
        stmt - SQLStatement
        mapExpr - Map expression
        keyExpr - Expression for the key
        valExpr - Expression for the value
        Returns:
        Contains expression
      • containsAsSubquery

        protected SQLExpression containsAsSubquery​(SQLStatement stmt,
                                                   MapExpression mapExpr,
                                                   SQLExpression keyExpr,
                                                   SQLExpression valExpr)
        Method to return an expression for Map.containsEntry 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}
           AND Ao_SUB.JOIN_KEY_ID = {keyExpr}
           
        • Map with key stored in value
           SELECT 1 FROM VAL_TABLE A0_SUB
           WHERE B0.JOIN_OWN_ID = A0.ID 
           AND A0_SUB.ID = {valExpr}
           AND A0_SUB.KEY_ID = {keyExpr}
           
        • Map of value stored in key
           SELECT 1 FROM KEY_TABLE A0_SUB
           WHERE A0_SUB.OWN_ID = A0.ID 
           AND A0_SUB.VAL_ID = {valExpr}
           AND A0_SUB.ID = {keyExpr}
           
        and returns a BooleanSubqueryExpression ("EXISTS (subquery)")
        Parameters:
        stmt - SQLStatement
        mapExpr - Map expression
        keyExpr - Expression for the key
        valExpr - Expression for the value
        Returns:
        Contains expression