Class JRSqlAbstractInClause

java.lang.Object
net.sf.jasperreports.engine.query.JRSqlAbstractInClause
All Implemented Interfaces:
JRClauseFunction
Direct Known Subclasses:
JRSqlInClause, JRSqlNotInClause

public abstract class JRSqlAbstractInClause extends Object implements JRClauseFunction
Base (NOT) IN clause function for SQL queries.

The first token in the $X{...} syntax is the function ID token. Possible values for the (NOT) IN clause function ID token are:

  • IN
  • NOTIN

Author:
Lucian Chirita (lucianc@users.sourceforge.net)
  • Field Details

    • EXCEPTION_MESSAGE_KEY_QUERY_IN_CLAUSE_DB_COLUMN_TOKEN_MISSING

      public static final String EXCEPTION_MESSAGE_KEY_QUERY_IN_CLAUSE_DB_COLUMN_TOKEN_MISSING
      See Also:
    • EXCEPTION_MESSAGE_KEY_QUERY_IN_CLAUSE_INVALID_PARAMETER_TYPE

      public static final String EXCEPTION_MESSAGE_KEY_QUERY_IN_CLAUSE_INVALID_PARAMETER_TYPE
      See Also:
    • EXCEPTION_MESSAGE_KEY_QUERY_IN_CLAUSE_PARAMETER_TOKEN_MISSING

      public static final String EXCEPTION_MESSAGE_KEY_QUERY_IN_CLAUSE_PARAMETER_TOKEN_MISSING
      See Also:
    • POSITION_DB_COLUMN

      protected static final int POSITION_DB_COLUMN
      See Also:
    • POSITION_PARAMETER

      protected static final int POSITION_PARAMETER
      See Also:
    • POSITION_NO_VALUES_RESULT

      protected static final int POSITION_NO_VALUES_RESULT
      See Also:
  • Constructor Details

    • JRSqlAbstractInClause

      protected JRSqlAbstractInClause()
  • Method Details

    • apply

      public void apply(JRClauseTokens clauseTokens, JRQueryClauseContext queryContext)
      Creates a (NOT) IN SQL clause.

      The function expects two clause tokens (after the ID token), the third one being optional:

      • The first token is the SQL column to be used in the clause.
      • The second token is the name of the report parameter that contains the value list.
        The value of this parameter has to be an array, a java.util.Collection or null.
      • The third token is an optional boolean representing the logical value (true/false) that the clause should return in case the list of values is null or empty.

      The function constructs one of the following clauses:

      1. When the function ID token is IN:
        • If the parameter's value is a collection of not null values, the function constructs a <column_name> IN (?, ?, .., ?) clause
        • If the parameter's value is a collection containing both null and not null values, the function constructs a (<column_name> IS NULL OR <column_name> IN (?, ?, .., ?)) clause
        • If the parameter's value is a collection containing only null values, the function constructs a <column_name> IS NULL clause
      2. When the function ID token is NOTIN:
        • If the parameter's value is a collection of not null values, the function constructs a <column_name> NOT IN (?, ?, .., ?) clause
        • If the parameter's value is a collection containing both null and not null values, the function constructs a (<column_name> IS NOT NULL AND <column_name> NOT IN (?, ?, .., ?)) clause
        • If the parameter's value is a collection containing only null values, the function constructs a <column_name> IS NOT NULL clause
      3. If the values list is null or empty, both IN and NOTIN functions generate a SQL clause that will evaluate to true (e.g. 0 = 0) or false (e.g. 1 = 0) according to the value of the optional third parameter of the clause. This third optional parameter has itself a default value that is controlled by the net.sf.jasperreports.sql.clause.in.novalues.result and the net.sf.jasperreports.sql.clause.notin.novalues.result configuration properties, respectively.

      Specified by:
      apply in interface JRClauseFunction
      Parameters:
      clauseTokens -
      queryContext -
    • handleNoValues

      protected void handleNoValues(JRClauseTokens clauseTokens, JRQueryClauseContext queryContext)
      Generate a SQL clause that will always evaluate to true (e.g. '0 = 0').
      Parameters:
      queryContext - the query context
    • getNoValuesResultProperty

      protected abstract String getNoValuesResultProperty()
    • convert

      protected Collection<?> convert(String paramName, Object paramValue)
      Parameters:
      paramName - the parameter name
      paramValue - the parameter value
      Returns:
      a java.util.Collection type object obtained either by converting an array to a list or by a cast to java.util.Collection type.
    • appendInOperator

      protected abstract void appendInOperator(StringBuffer sBuffer)
    • appendNullOperator

      protected abstract void appendNullOperator(StringBuffer sBuffer)
    • appendAndOrOperator

      protected abstract void appendAndOrOperator(StringBuffer sBuffer)