Water 5-System Interfaces-Database
class group
Takes a list of objects, and returns a group hierarchy the objects
Contract
Parameter keyDefault valueType
group_byopttype.<one_of method <ref type.vector_of/>/>
sort_byobject_less_or_equalmethod
last_sortobject_less_or_equalmethod
depth0integer
levelsoptvector
field_orderingopttype.<vector_of string/>
classopt
fields_to_sumopt
itemsopt
group_methodopt
sort_methodopt
to_htm_smallopt
nameopt
Parameter kindDefault valueType
Other unkeyed argumentsopt with ekind of expressionwob
Water Contract
<class group
  group_by      =opt=<type.one_of method <type.vector_of method/>/>
  sort_by       =object_less_or_equal
  last_sort     =object_less_or_equal
  depth         =0=number.integer
  _name         ="group"
  levels        =opt=vector
  field_ordering=opt=<type.vector_of string/>
  class         =opt
  fields_to_sum =opt
  items         =opt
  group_method  =opt
  sort_method   =opt
  to_htm_small  =opt
  name          =opt
  _other_unkeyed=opt=wob=ekind.expression="_add_to_environment"
/>
The content area optionally holds a list of Water expressions for specifying what groups to create.
Example:
<class person first=req last=req age=req/>
<vector <person "Joe" "S" 21/> <person "Mary" "S" 23/> <person "Mike" "S" 34/> />.
    <group> .first.<subvector end=1/> .age </>.<to_htm/>
Instances of person
firstlastage

J first

21 age

JoeS21

M first

23 age

MaryS23

34 age

MikeS34
Example: Using custom method for describing a group
<class event name=required=string on=required=datetime/>
<doc on=datetime.to_quarters>
   Converts a datetime into a datetime with a day of Jan 1, Apr 1, Jul 1, or Oct 1.
 
   <test
    result=<datetime 2004 4 1 0 0 0 0/>
    <datetime 2004 6 10/>.<to_quarters/>
   />
  </doc>
<method datetime.to_quarters>
   <if> .month.<less_or_equal 3/> 1
        .month.<less_or_equal 6/> 2
        .month.<less_or_equal 9/> 3
        else                      4
   </if>
  </method>
<vector
   <event "event1" <datetime 2004 2 10/> />
   <event "event1" <datetime 2004 1 13/> />
   <event "event2" <datetime 2004 5 19/> /> 
   <event "event3" <datetime 2004 6 12/> />
  />.<group 
    group_by=<v> <method by_year>    .on.year </> 
                 <method by_quarter> .on.<to_quarters/> </> 
             </v>
  />.<to_htm/>
Instances of event
nameon

1 Q

event1Feb 10, 2004
event1Jan 13, 2004

2 Q

event2May 19, 2004
event3Jun 12, 2004