Class ArrayContainsMethod

java.lang.Object
org.datanucleus.store.rdbms.sql.method.ArrayContainsMethod
All Implemented Interfaces:
SQLMethod

public class ArrayContainsMethod extends Object implements SQLMethod
Method for evaluating {arrExpr}.contains(elemExpr). Returns a BooleanExpression.
  • Constructor Details

    • ArrayContainsMethod

      public ArrayContainsMethod()
  • Method Details

    • 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
    • containsAsSubquery

      protected SQLExpression containsAsSubquery(SQLStatement stmt, ArrayExpression arrExpr, 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}
         
      and returns a BooleanSubqueryExpression ("EXISTS (subquery)")
      Parameters:
      stmt - SQLStatement
      arrExpr - Collection expression
      elemExpr - Expression for the element
      Returns:
      Contains expression
    • elementTypeCompatible

      protected boolean elementTypeCompatible(Class elementType, Class collectionElementType)