Class CollectionContainsMethod

  • All Implemented Interfaces:
    SQLMethod

    public class CollectionContainsMethod
    extends Object
    implements SQLMethod
    Method for evaluating {collExpr1}.contains({elemExpr}). Returns a BooleanExpression.
    • Constructor Detail

      • CollectionContainsMethod

        public CollectionContainsMethod()
    • 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,
                                           SQLExpression collExpr,
                                           SQLExpression elemExpr)
        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
        collExpr - SQL Expression for the collection
        elemExpr - SQL Expression for the element
        Returns:
        Whether to use a subquery
      • containsAsJoin

        protected SQLExpression containsAsJoin​(SQLStatement stmt,
                                               CollectionExpression collExpr,
                                               SQLExpression elemExpr,
                                               SQLJoin.JoinType joinType)
        Method to return an expression for Collection.contains using INNER JOIN to the element. This is only for use when there are no "!contains" and no "OR" operations. Creates SQL by adding INNER JOIN to the join table (where it exists), and also to the element table adding an AND condition on the element (with value of the elemExpr). Returns a BooleanExpression "TRUE" (since the INNER JOIN will guarantee if the element is contained of not).
        Parameters:
        stmt - SQLStatement
        collExpr - Collection expression
        elemExpr - Expression for the element
        joinType - Join type
        Returns:
        Contains expression
      • containsAsSubquery

        protected SQLExpression containsAsSubquery​(SQLStatement stmt,
                                                   CollectionExpression collExpr,
                                                   SQLExpression elemExpr)
        Method to return an expression for Collection.contains using a subquery "EXISTS". This is for use when there are "!contains" or "OR" operations in the filter. Creates the following SQL,
        • Collection of NonPC using join table
           SELECT 1 FROM JOIN_TBL A0_SUB 
           WHERE A0_SUB.JOIN_OWN_ID = A0.ID AND A0_SUB.JOIN_ELEM_ID = {elemExpr}
           
        • Collection of PC using join table
           SELECT 1 FROM ELEM_TABLE A0_SUB INNER JOIN JOIN_TBL B0 ON ... 
           WHERE B0.JOIN_OWN_ID = A0.ID AND A0_SUB.ID = {elemExpr}
           
        • Collection of PC using FK
           SELECT 1 FROM ELEM_TABLE A0_SUB
           WHERE A0_SUB.OWN_ID = A0.ID AND A0_SUB.ID = {elemExpr}
           
        and returns a BooleanSubqueryExpression ("EXISTS (subquery)")
        Parameters:
        stmt - SQLStatement
        collExpr - Collection expression
        elemExpr - Expression for the element
        Returns:
        Contains expression
      • elementTypeCompatible

        protected boolean elementTypeCompatible​(Class elementType,
                                                Class collectionElementType)