sqlgroup: Formats complex SQL expressions

  The 'sqlgroup' tag formats complex boolean SQL expressions. You can
  use it along with the 'sqltest' tag to build dynamic SQL queries
  that tailor themselves to the environment. This tag is used in SQL
  Methods.

  Syntax

    'sqlgroup' tag syntax::

      <dtml-sqlgroup>
      [<dtml-or>]
      [<dtml-and>]
      ...
      </dtml-sqlgroup>

    The 'sqlgroup' tag is a block tag. It is divided into blocks with
    one or more optional 'or' and 'and' tags. 'sqlgroup' tags can be
    nested to produce complex logic.

  Attributes

    required=boolean -- Indicates whether the group is required. If it
    is not required and contains nothing, it is excluded from the DTML
    output.

    where=boolean -- If true, includes the string "where". This is
    useful for the outermost 'sqlgroup' tag in a SQL 'select' query.

  Examples

    Sample usage::

      select * from employees 
      <dtml-sqlgroup where>
        <dtml-sqltest salary op=gt type=float optional>
      <dtml-and>
        <dtml-sqltest first op=eq type=string multiple optional>
      <dtml-and>
        <dtml-sqltest last  op=eq type=string multiple optional>
      </dtml-sqlgroup>  

    If 'first' is 'Bob' and 'last' is 'Smith, McDonald' it renders::

      select * from employees
      where
      (first='Bob'
       and
       last in ('Smith', 'McDonald')
      )

    If 'salary' is 50000 and 'last' is 'Smith' it renders::

      select * from employees
      where 
      (salary > 50000.0
       and
       last='Smith'
      )

    Nested 'sqlgroup' tags::

      select * from employees
      <dtml-sqlgroup where>
        <dtml-sqlgroup>
           <dtml-sqltest first op=like type=string>
        <dtml-and>
           <dtml-sqltest last op=like type=string>
        <dtml-sqlgroup>
      <dtml-or>
        <dtml-sqltest salary op=gt type=float>
      </dtml-sqlgroup>

    Given sample arguments, this template renders to SQL like so::

      select * form employees
      where
      (
        (
         name like 'A*'
         and
         last like 'Smith'
         )
       or
       salary > 20000.0
      )

  See Also

    "sqltest tag":dtml-sqltest.stx







