Page: http://wiki.cocoondev.org/Wiki.jsp?page=ModularDatabaseActions , version: 
5 on Thu May  1 07:35:10 2003 by AntonioGallardo

+ # Transactional operations over more than one table
- All the metadata are stored in a XML file, that can contain the description 
of any number of tables. The tag {{table-set}} define the current used set of 
tables. Into this file we can include description rules for others Actions like 
[Form Validator Action]. IN this way we can have all the database metadata in 
the same file.
?                                                                               
           -------------------------------------------------------------        
                                                                                
                      ^

+ All the metadata are stored in a single XML file, that can contain the 
description of any number of tables. Into this file we can include description 
rules for others Actions like [Form Validator Action]. In this way we can have 
all the database metadata in the same file.
?                                 +++++++                                       
                                                                                
                                                ^

- ! The {{alias}} attribute of {{table}} element
- The optional attribute __alias__ in the {{table}} element, is used to create 
an alternative name of the table, wich can be used inside a {{table-set}}. This 
tag can be used if a complex join expresions is used as table name.
- Another usage is when different number of columns will be affected by 
different operations or if a table contains several candidate keys that are 
used alternatively. This way we can create "different views" of the same table
+ ! The {{<root>}} tag
+ The {{root}} element of the document is ignored, and can have any name. This 
allows a single document to contain both database description and form 
validation configuration.
- To find a table, the descriptor file is searched top-down for tables whose 
{{name}} or {{alias}} match.
+ ! The {{<connection>}} tag
+ This tag identifies a database connection pool, see [ConnectionPooling].
- !Key Columns
+ ! The {{<table>}} tag
+ Describes a complete table. The file can contain several table elements. It 
has two attributes:
+ 
+ * {{name}} -- is the name of the table into the database. 
+ * {{alias}} -- is and optional attribute. Is used to create an alternative 
name of a table, wich can be used inside a {{table-set}} element. The 
{{table-set}} tag can be used if a complex join expresions is used as table 
name. Another usage is when different number of columns will be affected by 
different operations or if a table contains several candidate keys that are 
used alternatively. This way we can create "different views" of the same table.
+ 
+ To find a table, the descriptor file is searched top-down for tables whose 
{{name}} or {{alias}} match. The first that matches is used.
+ 
+ ! The {{<key>}} Tag - Defining Key Columns
- The new __name__ attribute specifies the database column name and corresponds 
to the {{dbcol}} attribute.
?         ^^    ^^

+ * The new {{name}} attribute specifies the database column name and 
corresponds to the old {{dbcol}} attribute.
? ++        ^^    ^^                                                            
         ++++

+ * The {{autoincrement}} attribute indicate if a column is of this type. 
Autoincrement columns will be handled differently on insert operations. 
- The __autoincrement__ attribute indicate if a column is of this type. Auto 
increment columns will be handled differently on insert operations. 
- 
- Instead of specifying a parameter name, the actions support to use different 
input modules for each operation through the nested {{mode}} elements.
?                                                              ^

+ Instead of specifying a parameter name, the modular actions support the use 
of different [input modules|InputModules] for each operation through the nested 
{{mode}} elements.
?                                             ++++++++                 ^^    
+++           +             ++++++++++++++

- !Other Columns
+ ! The {{<value>}} Tag - Defining No key or Other Columns
- Everything said above applies to value columns as well. Except the 
__autoincrement__ attribute.
+ Everything said above about the __Key Columns__ applies to value columns as 
well. Except for the __autoincrement__ attribute.
?                      ++++++++++++++++++++++++++                               
           ++++

- Basically, two different mode types exist: __autoincrement__ which is used 
only on INSERT when a key has set this attribute and __others__ for all other 
requirements. 
+ Describes the modes of operation against the database. Basically, two 
different mode types exist:
+ * __autoincrement__ which is used only on INSERT when a key has set this 
attribute and 
+ * __others__ for all other requirements.
- In addition, a table-set can specify different mode types to use instead of 
the predefined type names. Through this, and the fact that every mode can 
specify a different input module, it is easy to use different input modules for 
different tasks and forms.
+ In addition, a {{table-set}} can specify different mode types to use instead 
of the predefined type names. Through this, and the fact that every mode can 
specify a different [input module|InputModules], it is easy to use different 
input modules for different tasks and forms.
?                ++         ++                                                  
                                                                                
                +            ++++++++++++++

- One special mode type name exists that matches all requested ones: {{all}}. 
This makes it easier to configure only some columns differently for each 
table-set. 
?                     -----

+ One special mode type exists that matches all requested ones: {{all}}. This 
makes it easier to configure only some columns differently for each table-set. 
- !!How to obtain Values 
?                       -

+ !!How to obtain Values
- As said above, the actions default to reading from request parameters with a 
default parameter name. This can be overridden using __mode__ elements. Any 
component that implements the InputModule interface can be used to obtain 
values. How to make such modules known to Apache Cocoon is described in 
http://xml.apache.org/cocoon/userdocs/concepts/modules.html. 
?                                                                               
                                                    ^^    ^^                    
                                                                                
                                                                                
                                         -

+ As said above, the modular actions default to reading from __request 
parameters__ with a default parameter name. This can be overridden using 
{{mode}} elements. Any component that implements the InputModule interface can 
be used to obtain values. How to make such modules known to Apache Cocoon is 
described in [http://xml.apache.org/cocoon/userdocs/concepts/modules.html].
?                   ++++++++                                 ++                 
 ++                                                             ^^    ^^        
                                                                                
                                                                         +      
                                                     +

-       <mode name="request" parameter="user_groups.uid" type="request"/>
+       <mode name="request-param" parameter="user_groups.uid" 
type="request-param"/>
?                          ++++++                                           
++++++

-       <mode name="attribute"
?                       -----

+       <mode name="request-attr"
?                   ++++++++

-             
parameter="org.apache.cocoon.components.modules.output.OutputModule:user.uid[0]"
? ----

+         
parameter="org.apache.cocoon.components.modules.output.OutputModule:user.uid[0]"
-       type="attrib"/>
+       type="request-attr"/>
-       <mode name="request" parameter="user_groups.gid" type="all"/>
+       <mode name="request-param" parameter="user_groups.gid" type="all"/>
?                          ++++++

- The above example shows that: the __parameter__ attribute is not read by the 
database action itself but the complete mode configuration object is passed to 
the input module. Both the request attribute and the request parameter input 
modules understand this parameter attribute which takes precedence over the 
default one. 
?                                   ^^         ^^                               
                                                                                
                                                                                
                ^^

+ The above example shows that: the {{parameter}} attribute is not read by the 
database action itself but the complete mode configuration object is passed to 
the input module. Both the __request attribute__ and the __request parameter__ 
input modules understand the {{parameter}} attribute which takes precedence 
over the default one. 
?                                   ^^         ^^                               
                                                                                
                         ++                 ++         ++                 ++    
                        ^ ++         ++

- Another feature when obtaining values is tied to the __type__ attribute: 
Different modes can be used in different situations. The basic setup uses two 
different mode types:
?                                                      ^^    ^^

+ Another feature when obtaining values is tied to the {{type}} attribute: 
Different modes can be used in different situations. The basic setup uses two 
different mode types:
?                                                      ^^    ^^

- * __autoincrement__ when inserting in key columns that have an indicator that 
they are indeed auto increment columns and
+ * __autoincrement__ when inserting into key columns that have an indicator 
that they are indeed auto increment columns and
?                                      ++

- Table-sets can override the default names for these two mode type name 
categories with arbitrary names except the special name __all__, wich is used 
with all requested type names. Lookup obeys first match principle so that all 
modes are tested from top to bottom and the first that matches is used. 
+ __Table-sets__ can override the default names for these two mode type name 
categories with arbitrary names except the special name __all__, wich is used 
with all requested type names. Lookup obeys first match principle so that all 
modes are tested from top to bottom and the first that matches is used. 
? ++          ++

- A common task need to work on more than one row. If the rows are in different 
tables, this is catered for by table-sets. Operating on multiple rows of one 
table requires to mark columns that should vary and among those one, that 
determines the number of rows to work on. 
+ A common task need to work on more than one row. If the rows are in different 
tables, this is catered for by __table-sets__. Operating on multiple rows of 
one table requires to mark columns that should vary and among those one, that 
determines the number of rows to work on. 
?                                                                               
                               ++          ++

- This is done with sets. All columns that cary a __set__ attribute can vary, 
those, that don't, are kept fixed during the operation. The column that is used 
to determine the number of rows is required to have a value of __master__ while 
all others need to have a value of __slave__ for the set attribute. There may 
be only one master in a set. 
?                                                 ^^   ^^                       
                                                                                
                                                             ^^      ^^         
                                 ^^     ^^

+ This is done with sets. All columns that cary a {{set}} attribute can vary, 
those, that don't, are kept fixed during the operation. The column that is used 
to determine the number of rows is required to have a value of {{master}} while 
all others need to have a value of {{slave}} for the set attribute. There may 
be only one master in a set. 
?                                                 ^^   ^^                       
                                                                                
                                                             ^^      ^^         
                                 ^^     ^^

- Tables that should be used during an operation can be grouped together with a 
table-set. A table-set references tables by their name or their alias. 
?                                                                               
                                                                      -

+ Tables that should be used during an operation can be grouped together with a 
{{<table-set>}} tag. A table-set references tables by their name or their alias.
?                                                                               
+++         +++++++

- Also, a table-set can override the mode type names for the two categories 
{{autoincrement}} and {{others}}. 
?                                          ^^ ------

+ Also, a table-set can override the {{mode}} attribute for the two categories 
{{autoincrement}} and {{others}}. 
?                                    ++    ++ + ^^^^^^

- Operations spanning multiple tables in a table-set are done in a single 
transaction. Thus, if one fails, the other is rolled back. 
?                                                                               
                                                    -

+ Operations spanning multiple tables in a table-set are done in a single 
transaction. Thus, if one fails, the other is rolled back.
+ 
-       <table name="user_groups" others-mode="attrib"/>
?                                                  --

+       <table name="user_groups" others-mode="request-attr"/>
?                                              ++++++++

-       <table name="user_groups" others-mode="request"/>
+       <table name="user_groups" others-mode="request-param"/>
?                                                     ++++++



Reply via email to