Form Storage -- Flat Table: Difference between revisions

From IHRIS Wiki
 
(28 intermediate revisions by 3 users not shown)
Line 1: Line 1:
The ''Flat Table'' storage mechanism allows you to map any flat table that you have in your database into a form.   
The ''Flat Table'' storage mechanism allows you to map any flat table that you have in your database into a form.   
==Storage Options in Magic Data==
==Specifying Flat Storage==
To specify that the form $form has a flat table storage mechanism set by setting
To specify that the form $form has a flat table storage mechanism set by setting
  modules/forms/forms/$form/storage
  modules/forms/forms/$form/storage
to have value '''flat.'''
to have value '''flat.'''
==Form Storage Options==
The flat storage mechanism is defined so that, by default, it can read in the cached "hippo_" tables of form data.  If you situation, is not exactly this, then you can take advantage of the options as described in this section.


The options specifying a flat table storage for $form are stored at:
The options specifying a flat table storage for $form are stored at:
  /modules/forms/forms/$form/storage_options/flat
  /modules/forms/forms/$form/storage_options/flat
It has the following structure:
It has the following structure:
*table: Required scalar node. The table to use.  E.g. my_table, `my weird_table`, `some_other_database`.`table`.  You are responsible for back-tics if required.
*table: Optional scalar node. The table to use.  E.g. my_table, `my weird_table`, `some_other_database`.`table`.  You are responsible for back-tics if required. If it is not set, it determines the table name from the table_prefix set in the [[Technical Overview: Form Storage -- Flat Table#Global Options|global options]].
*id: Required parent node.  The data defining how to associate an id per row of this table.  At least one of the following must be specified, with ''col'' taking precedence:
*id: Optional parent node.  The data defining how to associate an id per row of this table.  If it is not set, the the data is populate from the column 'id.'
**col: Optional scalar node.  Specifies a column of the table to be used as the id.
**col: Optional scalar node.  Specifies a column of the table to be used as the id.  You are responsible for back-tics.
**function: Optional scalar node.  Specifies a SQL function whose result will be used as the id.
**function: Optional scalar node.  Specifies a SQL function  whose result will the id for the form. 'col' takes precedence.
**form_prepended: Optional scalar node. Defaults to true. If true, it means the form name has been prepended to the id.  Otherwise, it assume that the column is just the id.  If true, this form is not writable.
*fields: Optional parent node.  Specifies how the data of the your form is associate to a row of your table.  Each child of this node is the name of a field $field of your form.  By default, all fields of a form are populated, and are all assumed to come from the column with that field name. 
**$field:  Parent node with the following child nodes. 
***col: Optional scalar node.  Specifies a column of the table to be used as the id. You are responsible for back-tics.
***function: Optional scalar node.  Optional scalar node.  Specifies a SQL function  whose result will as the value for the field. 'col' takes precedence.
***enabled: Optional scalar node.  If present and evaluates to false, it means we should not populate this field.
*parent: Optional parent node.  If not present, we assume the parent is populated from the column 'parent'.  It has the following child nodes:
**enabled: Optional scalar node.  If present and evaluates to false, it means getParent() should return the trivial parent id, '0'.
**col: Optional scalar node.  Specifies a "column" of the table to be used as the id for the parent. You are responsible for back-tics.
**function: Optional scalar node.  Optional scalar node.  Optional scalar node.  Specifies a SQL function whose result will as the value for the parent form's id. 'col' takes precedence.
*writable: Optional scalar node.  Defines the write access to the table.  If not present or its value cast to false, then the table is not consider to be writable.  If its value casts to true, then it is considered writable and the save() method will actually do something.
*writable: Optional scalar node.  Defines the write access to the table.  If not present or its value cast to false, then the table is not consider to be writable.  If its value casts to true, then it is considered writable and the save() method will actually do something.
*fields: Optional parent node.  Specifies how the data of the your form is associate to a row of your tableEach child of this node is the name of a field $field of your form.
*last_modified: Optional parent node.  If not present, we assume the last modified time is populated from the column 'last_modified'It has the following child nodes:
**$field: Parent node with the following child nodesAt least one of 'col' or 'function' need to be specified with 'col' taking precedence:
**enabled: Optional scalar node.  If present and evaluates to false, it means the modified time is always taken to be NULL
***col: Optional scalar node.  Specifies a column of the table to be used as the id.
**col: Optional scalar node.  Specifies a "column" of the table to be used as the modified time.  Column should have type datetime. You are responsible for back-tics.
***function: Optional scalar node.  Specifies a SQL function whose result will be used as the id.
**function: Optional scalar node.  Optional scalar node.  Optional scalar node.  Specifies a SQL function whose result (of type datetime) will as the value for the modified time. 'col' takes precedence.
***type: Required scalar node. The formfield type of this node, e.g. INT, INT_LIST.
 
*parent: Optional parent node.  If not present, this form has no parent and getParent() returns 0. It has the following child nodes:
==Global Options==
**form: Optional scalar valued.  If present and set this is the name of parent form is considered to have a parentAt least on of the following needs to be specified, with 'col' taking precedence:
There are global options for specifying a the mapping between components and databases
**col: Optional scalar nodeSpecifies a column of the table to be used as the id for the parent.
  /modules/forms/storage_options/flat
**function: Optional scalar nodeSpecifies a SQL function whose result will be used as the id.
This has the structure:
*table_prefix: Optional scalar node.  The value pre-pended to a form name to give the table name where the data is stored.  If not set it is 'hippo_', the prefix used for the caching of form data to flat tablesFor example the person form would use the table 'hippo_person'.
 
==Example==
To read in the cached ''hippo_person'' tables for the person forms from a cached table we would set:
/modules/forms/forms/person/storage => 'flat'
 
==Writing==
Only fields which are columns are writableIf the data specifying the id is not writable, then the form is not writable.
 
'''Warning:''' It is assumed that the columns associated to each field (besides the id) is either allowed to be null or has a default value, otherwise the column is not writableBasically we need to allow that for a new form, each column can be saved in an independent.
 
'''Warning:''' The id column cannot have 'form_prepended' set to true for the field to be writable
 
[[Category:Developer Resources]]

Latest revision as of 19:08, 1 March 2019

The Flat Table storage mechanism allows you to map any flat table that you have in your database into a form.

Specifying Flat Storage

To specify that the form $form has a flat table storage mechanism set by setting

modules/forms/forms/$form/storage

to have value flat.

Form Storage Options

The flat storage mechanism is defined so that, by default, it can read in the cached "hippo_" tables of form data. If you situation, is not exactly this, then you can take advantage of the options as described in this section.


The options specifying a flat table storage for $form are stored at:

/modules/forms/forms/$form/storage_options/flat

It has the following structure:

  • table: Optional scalar node. The table to use. E.g. my_table, `my weird_table`, `some_other_database`.`table`. You are responsible for back-tics if required. If it is not set, it determines the table name from the table_prefix set in the global options.
  • id: Optional parent node. The data defining how to associate an id per row of this table. If it is not set, the the data is populate from the column 'id.'
    • col: Optional scalar node. Specifies a column of the table to be used as the id. You are responsible for back-tics.
    • function: Optional scalar node. Specifies a SQL function whose result will the id for the form. 'col' takes precedence.
    • form_prepended: Optional scalar node. Defaults to true. If true, it means the form name has been prepended to the id. Otherwise, it assume that the column is just the id. If true, this form is not writable.
  • fields: Optional parent node. Specifies how the data of the your form is associate to a row of your table. Each child of this node is the name of a field $field of your form. By default, all fields of a form are populated, and are all assumed to come from the column with that field name.
    • $field: Parent node with the following child nodes.
      • col: Optional scalar node. Specifies a column of the table to be used as the id. You are responsible for back-tics.
      • function: Optional scalar node. Optional scalar node. Specifies a SQL function whose result will as the value for the field. 'col' takes precedence.
      • enabled: Optional scalar node. If present and evaluates to false, it means we should not populate this field.
  • parent: Optional parent node. If not present, we assume the parent is populated from the column 'parent'. It has the following child nodes:
    • enabled: Optional scalar node. If present and evaluates to false, it means getParent() should return the trivial parent id, '0'.
    • col: Optional scalar node. Specifies a "column" of the table to be used as the id for the parent. You are responsible for back-tics.
    • function: Optional scalar node. Optional scalar node. Optional scalar node. Specifies a SQL function whose result will as the value for the parent form's id. 'col' takes precedence.
  • writable: Optional scalar node. Defines the write access to the table. If not present or its value cast to false, then the table is not consider to be writable. If its value casts to true, then it is considered writable and the save() method will actually do something.
  • last_modified: Optional parent node. If not present, we assume the last modified time is populated from the column 'last_modified'. It has the following child nodes:
    • enabled: Optional scalar node. If present and evaluates to false, it means the modified time is always taken to be NULL
    • col: Optional scalar node. Specifies a "column" of the table to be used as the modified time. Column should have type datetime. You are responsible for back-tics.
    • function: Optional scalar node. Optional scalar node. Optional scalar node. Specifies a SQL function whose result (of type datetime) will as the value for the modified time. 'col' takes precedence.

Global Options

There are global options for specifying a the mapping between components and databases

/modules/forms/storage_options/flat

This has the structure:

  • table_prefix: Optional scalar node. The value pre-pended to a form name to give the table name where the data is stored. If not set it is 'hippo_', the prefix used for the caching of form data to flat tables. For example the person form would use the table 'hippo_person'.

Example

To read in the cached hippo_person tables for the person forms from a cached table we would set:

/modules/forms/forms/person/storage => 'flat'

Writing

Only fields which are columns are writable. If the data specifying the id is not writable, then the form is not writable.

Warning: It is assumed that the columns associated to each field (besides the id) is either allowed to be null or has a default value, otherwise the column is not writable. Basically we need to allow that for a new form, each column can be saved in an independent.

Warning: The id column cannot have 'form_prepended' set to true for the field to be writable