SYNOPSIS

   use Tangram;

   # or
   use Tangram::Core;
   use Tangram::Type::Array::FromOne;

   $schema = Tangram::Schema->new(

      classes => { Agenda => { fields => {

      iarray =>
      {
         # long form
         entries =>
         {
            class => 'Entry',
            coll => 'agenda',
         },

         # or (short form)
         entries => 'Entry',
      }

DESCRIPTION

This class maps references to a Perl array in an intrusive fashion. The persistent fields are grouped in a hash under the \*(C`iarray\*(C' key in the field hash.

The array may contain only objects of persistent classes. These classes must have a common persistent base class.

Tangram uses two columns on the element's table to store:

  • the id of the object containing the collection

  • the position of the element in the collection

\s-1CAUTION:\s0 the same object may not be an element of the same collection, in two different objects. This mapping may be used only for one-to-many relationships.

The field names are passed in a hash that associates a field name with a field descriptor. The field descriptor may be either a hash or a string. The hash uses the following fields:

  • class

  • aggreg

  • back

  • coll

  • slot

  • deep_update

Mandatory field \*(C`class\*(C' specifies the class of the elements.

Optional field \*(C`aggreg\*(C' specifies that the elements of the collection must be removed (erased) from persistent storage along with the containing object. The default is not to aggregate.

Optional field \*(C`back\*(C' sets the name of a field that is inserted in the elements. That field acts as a demand-loaded, read-only reference to the object containing the collection.

Optional field \*(C`coll\*(C' sets the name the column containing the id of the containing object. This defaults to 'C_m', where 'C' is the class of the containing object, and 'm' is the field name.

Optional field \*(C`slot\*(C' sets the name the column containing the id of the containing object. This defaults to 'C_m_slot', where 'C' is the class of the containing object, and 'm' is the field name.

The \*(L"C\*(R" in C_m and C_m_slot are passed through the schema normalisation function before being combined into a column name.

Optional field \*(C`deep_update\*(C' specificies that all elements have to be updated automatically when \*(C`update\*(C' is called on the collection object. Automatic update ensures consisitency between the Perl representation and the \s-1DBMS\s0 state, but degrades update performance so use it with caution. The default is not to do automatic updates.

If the descriptor is a string, it is interpreted as the name of the element's class. This is equivalent to specifying only the \*(C`class\*(C' field in the hash variant.