MDB2_Schema
[ class tree: MDB2_Schema ] [ index: MDB2_Schema ] [ all elements ]

Source for file Parser.php

Documentation is available at Parser.php

  1. <?php
  2. // +----------------------------------------------------------------------+
  3. // | PHP versions 4 and 5                                                 |
  4. // +----------------------------------------------------------------------+
  5. // | Copyright (c) 1998-2006 Manuel Lemos, Tomas V.V.Cox,                 |
  6. // | Stig. S. Bakken, Lukas Smith                                         |
  7. // | All rights reserved.                                                 |
  8. // +----------------------------------------------------------------------+
  9. // | MDB2 is a merge of PEAR DB and Metabases that provides a unified DB  |
  10. // | API as well as database abstraction for PHP applications.            |
  11. // | This LICENSE is in the BSD license style.                            |
  12. // |                                                                      |
  13. // | Redistribution and use in source and binary forms, with or without   |
  14. // | modification, are permitted provided that the following conditions   |
  15. // | are met:                                                             |
  16. // |                                                                      |
  17. // | Redistributions of source code must retain the above copyright       |
  18. // | notice, this list of conditions and the following disclaimer.        |
  19. // |                                                                      |
  20. // | Redistributions in binary form must reproduce the above copyright    |
  21. // | notice, this list of conditions and the following disclaimer in the  |
  22. // | documentation and/or other materials provided with the distribution. |
  23. // |                                                                      |
  24. // | Neither the name of Manuel Lemos, Tomas V.V.Cox, Stig. S. Bakken,    |
  25. // | Lukas Smith nor the names of his contributors may be used to endorse |
  26. // | or promote products derived from this software without specific prior|
  27. // | written permission.                                                  |
  28. // |                                                                      |
  29. // | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  |
  30. // | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT    |
  31. // | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS    |
  32. // | FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE      |
  33. // | REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,          |
  34. // | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, |
  35. // | BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS|
  36. // |  OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  |
  37. // | AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT          |
  38. // | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY|
  39. // | WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE          |
  40. // | POSSIBILITY OF SUCH DAMAGE.                                          |
  41. // +----------------------------------------------------------------------+
  42. // | Author: Christian Dickmann <dickmann@php.net>                        |
  43. // +----------------------------------------------------------------------+
  44. //
  45. // $Id: Parser.php,v 1.64 2007/08/20 03:19:20 ifeghali Exp $
  46. //
  47.  
  48. require_once 'XML/Parser.php';
  49. require_once 'MDB2/Schema/Validate.php';
  50.  
  51. /**
  52.  * Parses an XML schema file
  53.  *
  54.  * @package MDB2_Schema
  55.  * @category Database
  56.  * @access protected
  57.  * @author  Christian Dickmann <dickmann@php.net>
  58.  */
  59. class MDB2_Schema_Parser extends XML_Parser
  60. {
  61.     var $database_definition = array();
  62.     var $elements = array();
  63.     var $element = '';
  64.     var $count = 0;
  65.     var $table = array();
  66.     var $table_name = '';
  67.     var $field = array();
  68.     var $field_name = '';
  69.     var $init = array();
  70.     var $init_function = array();
  71.     var $init_expression = array();
  72.     var $init_field = array();
  73.     var $index = array();
  74.     var $index_name = '';
  75.     var $constraint = array();
  76.     var $constraint_name = '';
  77.     var $var_mode = false;
  78.     var $variables = array();
  79.     var $sequence = array();
  80.     var $sequence_name = '';
  81.     var $error;
  82.     var $structure = false;
  83.     var $val;
  84.  
  85.     function __construct($variables$fail_on_invalid_names = true$structure = false$valid_types = array()$force_defaults = true)
  86.     {
  87.         // force ISO-8859-1 due to different defaults for PHP4 and PHP5
  88.         // todo: this probably needs to be investigated some more andcleaned up
  89.         parent::XML_Parser('ISO-8859-1');
  90.         $this->variables = $variables;
  91.         $this->structure = $structure;
  92.         $this->val =new MDB2_Schema_Validate($fail_on_invalid_names$valid_types$force_defaults);
  93.     }
  94.  
  95.     function MDB2_Schema_Parser($variables$fail_on_invalid_names = true$structure = false$valid_types = array()$force_defaults = true)
  96.     {
  97.         $this->__construct($variables$fail_on_invalid_names$structure$valid_types$force_defaults);
  98.     }
  99.  
  100.     function startHandler($xp$element$attribs)
  101.     {
  102.         if (strtolower($element== 'variable'{
  103.             $this->var_mode = true;
  104.             return;
  105.         }
  106.  
  107.         $this->elements[$this->count++strtolower($element);
  108.         $this->element = implode('-'$this->elements);
  109.  
  110.         switch ($this->element{
  111.         /* Initialization */
  112.         case 'database-table-initialization':
  113.             $this->table['initialization'= array();
  114.             break;
  115.  
  116.         /* Insert */
  117.         /* insert: field+ */
  118.         case 'database-table-initialization-insert':
  119.             $this->init = array('type' => 'insert''data' => array('field' => array()));
  120.             break;
  121.         /* insert-select: field+, table, where? */
  122.         case 'database-table-initialization-insert-select':
  123.             $this->init['data']['table''';
  124.             break;
  125.  
  126.         /* Update */
  127.         /* update: field+, where? */
  128.         case 'database-table-initialization-update':
  129.             $this->init = array('type' => 'update''data' => array('field' => array()));
  130.             break;
  131.  
  132.         /* Delete */
  133.         /* delete: where */
  134.         case 'database-table-initialization-delete':
  135.             $this->init = array('type' => 'delete''data' => array('where' => array()));
  136.             break;
  137.  
  138.         /* Insert and Update */
  139.         case 'database-table-initialization-insert-field':
  140.         case 'database-table-initialization-insert-select-field':
  141.         case 'database-table-initialization-update-field':
  142.             $this->init_field = array('name' => '''group' => array());
  143.             break;
  144.         case 'database-table-initialization-insert-field-value':
  145.         case 'database-table-initialization-insert-select-field-value':
  146.         case 'database-table-initialization-update-field-value':
  147.             /* if value tag is empty cdataHandler is not called so we must force value element creation here */
  148.             $this->init_field['group'= array('type' => 'value''data' => '');
  149.             break;
  150.         case 'database-table-initialization-insert-field-null':
  151.         case 'database-table-initialization-insert-select-field-null':
  152.         case 'database-table-initialization-update-field-null':
  153.             $this->init_field['group'= array('type' => 'null');
  154.             break;
  155.         case 'database-table-initialization-insert-field-function':
  156.         case 'database-table-initialization-insert-select-field-function':
  157.         case 'database-table-initialization-update-field-function':
  158.             $this->init_function = array('name' => '');
  159.             break;
  160.         case 'database-table-initialization-insert-field-expression':
  161.         case 'database-table-initialization-insert-select-field-expression':
  162.         case 'database-table-initialization-update-field-expression':
  163.             $this->init_expression = array();
  164.             break;
  165.  
  166.         /* All */
  167.         case 'database-table-initialization-insert-select-where':
  168.         case 'database-table-initialization-update-where':
  169.         case 'database-table-initialization-delete-where':
  170.             $this->init['data']['where'= array('type' => '''data' => array());
  171.             break;
  172.         case 'database-table-initialization-insert-select-where-expression':
  173.         case 'database-table-initialization-update-where-expression':
  174.         case 'database-table-initialization-delete-where-expression':
  175.             $this->init_expression = array();
  176.             break;
  177.  
  178.         /* One level simulation of expression-function recursion */
  179.         case 'database-table-initialization-insert-field-expression-function':
  180.         case 'database-table-initialization-insert-select-field-expression-function':
  181.         case 'database-table-initialization-insert-select-where-expression-function':
  182.         case 'database-table-initialization-update-field-expression-function':
  183.         case 'database-table-initialization-update-where-expression-function':
  184.         case 'database-table-initialization-delete-where-expression-function':
  185.             $this->init_function = array('name' => '');
  186.             break;
  187.  
  188.         /* One level simulation of function-expression recursion */
  189.         case 'database-table-initialization-insert-field-function-expression':
  190.         case 'database-table-initialization-insert-select-field-function-expression':
  191.         case 'database-table-initialization-insert-select-where-function-expression':
  192.         case 'database-table-initialization-update-field-function-expression':
  193.         case 'database-table-initialization-update-where-function-expression':
  194.         case 'database-table-initialization-delete-where-function-expression':
  195.             $this->init_expression = array();
  196.             break;
  197.  
  198.         /* Definition */
  199.         case 'database':
  200.             $this->database_definition = array(
  201.                 'name' => '',
  202.                 'create' => '',
  203.                 'overwrite' => '',
  204.                 'description' => '',
  205.                 'comments' => '',
  206.                 'tables' => array(),
  207.                 'sequences' => array()
  208.             );
  209.             break;
  210.         case 'database-table':
  211.             $this->table_name = '';
  212.             $this->table = array(
  213.                 'was' => '',
  214.                 'description' => '',
  215.                 'comments' => '',
  216.                 'fields' => array(),
  217.                 'indexes' => array(),
  218.                 'constraints' => array(),
  219.                 'initialization' => array()
  220.             );
  221.             break;
  222.         case 'database-table-declaration-field':
  223.         case 'database-table-declaration-foreign-field':
  224.         case 'database-table-declaration-foreign-references-field':
  225.             $this->field_name = '';
  226.             $this->field = array();
  227.             break;
  228.         case 'database-table-declaration-index-field':
  229.             $this->field_name = '';
  230.             $this->field = array('sorting' => '');
  231.             break;
  232.         /* force field attributes to be initialized when the tag is empty in the XML */
  233.         case 'database-table-declaration-field-was':
  234.             $this->field['was''';
  235.             break;
  236.         case 'database-table-declaration-field-type':
  237.             $this->field['type''';
  238.             break;
  239.         case 'database-table-declaration-field-fixed':
  240.             $this->field['fixed''';
  241.             break;
  242.         case 'database-table-declaration-field-default':
  243.             $this->field['default''';
  244.             break;
  245.         case 'database-table-declaration-field-notnull':
  246.             $this->field['notnull''';
  247.             break;
  248.         case 'database-table-declaration-field-autoincrement':
  249.             $this->field['autoincrement''';
  250.             break;
  251.         case 'database-table-declaration-field-unsigned':
  252.             $this->field['unsigned''';
  253.             break;
  254.         case 'database-table-declaration-field-length':
  255.             $this->field['length''';
  256.             break;
  257.         case 'database-table-declaration-field-description':
  258.             $this->field['description''';
  259.             break;
  260.         case 'database-table-declaration-field-comments':
  261.             $this->field['comments''';
  262.             break;
  263.         case 'database-table-declaration-index':
  264.             $this->index_name = '';
  265.             $this->index = array(
  266.                 'was' => '',
  267.                 'unique' =>'',
  268.                 'primary' => '',
  269.                 'fields' => array()
  270.             );
  271.             break;
  272.         case 'database-table-declaration-foreign':
  273.             $this->constraint_name = '';
  274.             $this->constraint = array(
  275.                 'was' => '',
  276.                 'match' => '',
  277.                 'ondelete' => '',
  278.                 'onupdate' => '',
  279.                 'deferrable' => '',
  280.                 'initiallydeferred' => '',
  281.                 'foreign' => true,
  282.                 'fields' => array(),
  283.                 'references' => array('table' => '''fields' => array())
  284.             );
  285.             break;
  286.         case 'database-sequence':
  287.             $this->sequence_name = '';
  288.             $this->sequence = array(
  289.                 'was' => '',
  290.                 'start' => '',
  291.                 'description' => '',
  292.                 'comments' => '',
  293.                 'on' => array('table' => '''field' => '')
  294.             );
  295.             break;
  296.         }
  297.     }
  298.  
  299.     function endHandler($xp$element)
  300.     {
  301.         if (strtolower($element== 'variable'{
  302.             $this->var_mode = false;
  303.             return;
  304.         }
  305.  
  306.         switch ($this->element{
  307.         /* Initialization */
  308.  
  309.         /* Insert */
  310.         case 'database-table-initialization-insert-select':
  311.             $this->init['data'= array('select' => $this->init['data']);
  312.             break;
  313.  
  314.         /* Insert and Delete */
  315.         case 'database-table-initialization-insert-field':
  316.         case 'database-table-initialization-insert-select-field':
  317.         case 'database-table-initialization-update-field':
  318.             $result $this->val->validateDataField($this->table['fields']$this->init['data']['field']$this->init_field);
  319.             if (PEAR::isError($result)) {
  320.                 $this->raiseError($result->getUserinfo()0$xp$result->getCode());
  321.             else {
  322.                 $this->init['data']['field'][$this->init_field;
  323.             }
  324.             break;
  325.         case 'database-table-initialization-insert-field-function':
  326.         case 'database-table-initialization-insert-select-field-function':
  327.         case 'database-table-initialization-update-field-function':
  328.             $this->init_field['group'= array('type' => 'function''data' => $this->init_function);
  329.             break;
  330.         case 'database-table-initialization-insert-field-expression':
  331.         case 'database-table-initialization-insert-select-field-expression':
  332.         case 'database-table-initialization-update-field-expression':
  333.             $this->init_field['group'= array('type' => 'expression''data' => $this->init_expression);
  334.             break;
  335.         
  336.         /* All */
  337.         case 'database-table-initialization-insert-select-where-expression':
  338.         case 'database-table-initialization-update-where-expression':
  339.         case 'database-table-initialization-delete-where-expression':
  340.             $this->init['data']['where']['type''expression';
  341.             $this->init['data']['where']['data'$this->init_expression;
  342.             break;
  343.         case 'database-table-initialization-insert':
  344.         case 'database-table-initialization-delete':
  345.         case 'database-table-initialization-update':
  346.             $this->table['initialization'][$this->init;
  347.             break;
  348.  
  349.         /* One level simulation of expression-function recursion */
  350.         case 'database-table-initialization-insert-field-expression-function':
  351.         case 'database-table-initialization-insert-select-field-expression-function':
  352.         case 'database-table-initialization-insert-select-where-expression-function':
  353.         case 'database-table-initialization-update-field-expression-function':
  354.         case 'database-table-initialization-update-where-expression-function':
  355.         case 'database-table-initialization-delete-where-expression-function':
  356.             $this->init_expression['operants'][= array('type' => 'function''data' => $this->init_function);
  357.             break;
  358.  
  359.         /* One level simulation of function-expression recursion */
  360.         case 'database-table-initialization-insert-field-function-expression':
  361.         case 'database-table-initialization-insert-select-field-function-expression':
  362.         case 'database-table-initialization-insert-select-where-function-expression':
  363.         case 'database-table-initialization-update-field-function-expression':
  364.         case 'database-table-initialization-update-where-function-expression':
  365.         case 'database-table-initialization-delete-where-function-expression':
  366.             $this->init_function['arguments'][= array('type' => 'expression''data' => $this->init_expression);
  367.             break;
  368.  
  369.         /* Table definition */
  370.         case 'database-table':
  371.             $result $this->val->validateTable($this->database_definition['tables']$this->table$this->table_name);
  372.             if (PEAR::isError($result)) {
  373.                 $this->raiseError($result->getUserinfo()0$xp$result->getCode());
  374.             else {
  375.                 $this->database_definition['tables'][$this->table_name$this->table;
  376.             }
  377.             break;
  378.         case 'database-table-name':
  379.             if (isset($this->structure['tables'][$this->table_name])) {
  380.                 $this->table = $this->structure['tables'][$this->table_name];
  381.             }
  382.             break;
  383.  
  384.         /* Field declaration */
  385.         case 'database-table-declaration-field':
  386.             $result $this->val->validateField($this->table['fields']$this->field$this->field_name);
  387.             if (PEAR::isError($result)) {
  388.                 $this->raiseError($result->getUserinfo()0$xp$result->getCode());
  389.             else {
  390.                 $this->table['fields'][$this->field_name$this->field;
  391.             }
  392.             break;
  393.  
  394.         /* Index declaration */
  395.         case 'database-table-declaration-index':
  396.             $result $this->val->validateIndex($this->table['indexes']$this->index$this->index_name);
  397.             if (PEAR::isError($result)) {
  398.                 $this->raiseError($result->getUserinfo()0$xp$result->getCode());
  399.             else {
  400.                 $this->table['indexes'][$this->index_name$this->index;
  401.             }
  402.             break;
  403.         case 'database-table-declaration-index-field':
  404.             $result $this->val->validateIndexField($this->index['fields']$this->field$this->field_name);
  405.             if (PEAR::isError($result)) {
  406.                 $this->raiseError($result->getUserinfo()0$xp$result->getCode());
  407.             else {
  408.                 $this->index['fields'][$this->field_name$this->field;
  409.             }
  410.             break;
  411.  
  412.         /* Foreign Key declaration */
  413.         case 'database-table-declaration-foreign':
  414.             $result $this->val->validateConstraint($this->table['constraints']$this->constraint$this->constraint_name);
  415.             if (PEAR::isError($result)) {
  416.                 $this->raiseError($result->getUserinfo()0$xp$result->getCode());
  417.             else {
  418.                 $this->table['constraints'][$this->constraint_name$this->constraint;
  419.             }
  420.             break;
  421.         case 'database-table-declaration-foreign-field':
  422.             $result $this->val->validateConstraintField($this->constraint['fields']$this->field_name);
  423.             if (PEAR::isError($result)) {
  424.                 $this->raiseError($result->getUserinfo()0$xp$result->getCode());
  425.             else {
  426.                 $this->constraint['fields'][$this->field_name'';
  427.             }
  428.             break;
  429.         case 'database-table-declaration-foreign-references-field':
  430.             $result $this->val->validateConstraintReferencedField($this->constraint['references']['fields']$this->field_name);
  431.             if (PEAR::isError($result)) {
  432.                 $this->raiseError($result->getUserinfo()0$xp$result->getCode());
  433.             else {
  434.                 $this->constraint['references']['fields'][$this->field_name'';
  435.             }
  436.             break;
  437.  
  438.         /* Sequence declaration */
  439.         case 'database-sequence':
  440.             $result $this->val->validateSequence($this->database_definition['sequences']$this->sequence$this->sequence_name);
  441.             if (PEAR::isError($result)) {
  442.                 $this->raiseError($result->getUserinfo()0$xp$result->getCode());
  443.             else {
  444.                 $this->database_definition['sequences'][$this->sequence_name$this->sequence;
  445.             }
  446.             break;
  447.  
  448.         /* End of File */
  449.         case 'database':
  450.             $result $this->val->validateDatabase($this->database_definition);
  451.             if (PEAR::isError($result)) {
  452.                 $this->raiseError($result->getUserinfo()0$xp$result->getCode());
  453.             }
  454.             break;
  455.         }
  456.  
  457.         unset($this->elements[--$this->count]);
  458.         $this->element = implode('-'$this->elements);
  459.     }
  460.  
  461.     function &raiseError($msg = null$xmlecode = 0$xp = null$ecode = MDB2_SCHEMA_ERROR_PARSE)
  462.     {
  463.         if (is_null($this->error)) {
  464.             $error '';
  465.             if (is_resource($msg)) {
  466.                 $error.= 'Parser error: '.xml_error_string(xml_get_error_code($msg));
  467.                 $xp $msg;
  468.             else {
  469.                 $error.= 'Parser error: '.$msg;
  470.                 if (!is_resource($xp)) {
  471.                     $xp $this->parser;
  472.                 }
  473.             }
  474.             if ($error_string xml_error_string($xmlecode)) {
  475.                 $error.= ' - '.$error_string;
  476.             }
  477.             if (is_resource($xp)) {
  478.                 $byte @xml_get_current_byte_index($xp);
  479.                 $line @xml_get_current_line_number($xp);
  480.                 $column @xml_get_current_column_number($xp);
  481.                 $error.= " - Byte: $byte; Line: $line; Col: $column";
  482.             }
  483.             $error.= "\n";
  484.             $this->error =MDB2_Schema::raiseError($ecodenullnull$error);
  485.         }
  486.         return $this->error;
  487.     }
  488.  
  489.     function cdataHandler($xp$data)
  490.     {
  491.         if ($this->var_mode == true{
  492.             if (!isset($this->variables[$data])) {
  493.                 $this->raiseError('variable "'.$data.'" not found'null$xp);
  494.                 return;
  495.             }
  496.             $data $this->variables[$data];
  497.         }
  498.  
  499.         switch ($this->element{
  500.         /* Initialization */
  501.  
  502.         /* Insert */
  503.         case 'database-table-initialization-insert-select-table':
  504.             $this->init['data']['table'$data;
  505.             break;
  506.  
  507.         /* Insert and Update */
  508.         case 'database-table-initialization-insert-field-name':
  509.         case 'database-table-initialization-insert-select-field-name':
  510.         case 'database-table-initialization-update-field-name':
  511.             $this->init_field['name'].= $data;
  512.             break;
  513.         case 'database-table-initialization-insert-field-value':
  514.         case 'database-table-initialization-insert-select-field-value':
  515.         case 'database-table-initialization-update-field-value':
  516.             $this->init_field['group']['data'].= $data;
  517.             break;
  518.         case 'database-table-initialization-insert-field-function-name':
  519.         case 'database-table-initialization-insert-select-field-function-name':
  520.         case 'database-table-initialization-update-field-function-name':
  521.             $this->init_function['name'].= $data;
  522.             break;
  523.         case 'database-table-initialization-insert-field-function-value':
  524.         case 'database-table-initialization-insert-select-field-function-value':
  525.         case 'database-table-initialization-update-field-function-value':
  526.             $this->init_function['arguments'][= array('type' => 'value''data' => $data);
  527.             break;
  528.         case 'database-table-initialization-insert-field-function-column':
  529.         case 'database-table-initialization-insert-select-field-function-column':
  530.         case 'database-table-initialization-update-field-function-column':
  531.             $this->init_function['arguments'][= array('type' => 'column''data' => $data);
  532.             break;
  533.         case 'database-table-initialization-insert-field-column':
  534.         case 'database-table-initialization-insert-select-field-column':
  535.         case 'database-table-initialization-update-field-column':
  536.             $this->init_field['group'= array('type' => 'column''data' => $data);
  537.             break;
  538.  
  539.         /* All */
  540.         case 'database-table-initialization-insert-field-expression-operator':
  541.         case 'database-table-initialization-insert-select-field-expression-operator':
  542.         case 'database-table-initialization-insert-select-where-expression-operator':
  543.         case 'database-table-initialization-update-field-expression-operator':
  544.         case 'database-table-initialization-update-where-expression-operator':
  545.         case 'database-table-initialization-delete-where-expression-operator':
  546.             $this->init_expression['operator'$data;
  547.             break;
  548.         case 'database-table-initialization-insert-field-expression-value':
  549.         case 'database-table-initialization-insert-select-field-expression-value':
  550.         case 'database-table-initialization-insert-select-where-expression-value':
  551.         case 'database-table-initialization-update-field-expression-value':
  552.         case 'database-table-initialization-update-where-expression-value':
  553.         case 'database-table-initialization-delete-where-expression-value':
  554.             $this->init_expression['operants'][= array('type' => 'value''data' => $data);
  555.             break;
  556.         case 'database-table-initialization-insert-field-expression-column':
  557.         case 'database-table-initialization-insert-select-field-expression-column':
  558.         case 'database-table-initialization-insert-select-where-expression-column':
  559.         case 'database-table-initialization-update-field-expression-column':
  560.         case 'database-table-initialization-update-where-expression-column':
  561.         case 'database-table-initialization-delete-where-expression-column':
  562.             $this->init_expression['operants'][= array('type' => 'column''data' => $data);
  563.             break;
  564.  
  565.         case 'database-table-initialization-insert-field-function-function':
  566.         case 'database-table-initialization-insert-field-function-expression':
  567.         case 'database-table-initialization-insert-field-expression-expression':
  568.         case 'database-table-initialization-update-field-function-function':
  569.         case 'database-table-initialization-update-field-function-expression':
  570.         case 'database-table-initialization-update-field-expression-expression':
  571.         case 'database-table-initialization-update-where-expression-expression':
  572.         case 'database-table-initialization-delete-where-expression-expression':
  573.             /* Recursion to be implemented yet */
  574.             break;
  575.  
  576.         /* One level simulation of expression-function recursion */
  577.         case 'database-table-initialization-insert-field-expression-function-name':
  578.         case 'database-table-initialization-insert-select-field-expression-function-name':
  579.         case 'database-table-initialization-insert-select-where-expression-function-name':
  580.         case 'database-table-initialization-update-field-expression-function-name':
  581.         case 'database-table-initialization-update-where-expression-function-name':
  582.         case 'database-table-initialization-delete-where-expression-function-name':
  583.             $this->init_function['name'].= $data;
  584.             break;
  585.         case 'database-table-initialization-insert-field-expression-function-value':
  586.         case 'database-table-initialization-insert-select-field-expression-function-value':
  587.         case 'database-table-initialization-insert-select-where-expression-function-value':
  588.         case 'database-table-initialization-update-field-expression-function-value':
  589.         case 'database-table-initialization-update-where-expression-function-value':
  590.         case 'database-table-initialization-delete-where-expression-function-value':
  591.             $this->init_function['arguments'][= array('type' => 'value''data' => $data);
  592.             break;
  593.         case 'database-table-initialization-insert-field-expression-function-column':
  594.         case 'database-table-initialization-insert-select-field-expression-function-column':
  595.         case 'database-table-initialization-insert-select-where-expression-function-column':
  596.         case 'database-table-initialization-update-field-expression-function-column':
  597.         case 'database-table-initialization-update-where-expression-function-column':
  598.         case 'database-table-initialization-delete-where-expression-function-column':
  599.             $this->init_function['arguments'][= array('type' => 'column''data' => $data);
  600.             break;
  601.  
  602.         /* One level simulation of function-expression recursion */
  603.         case 'database-table-initialization-insert-field-function-expression-operator':
  604.         case 'database-table-initialization-insert-select-field-function-expression-operator':
  605.         case 'database-table-initialization-update-field-function-expression-operator':
  606.             $this->init_expression['operator'$data;
  607.             break;
  608.         case 'database-table-initialization-insert-field-function-expression-value':
  609.         case 'database-table-initialization-insert-select-field-function-expression-value':
  610.         case 'database-table-initialization-update-field-function-expression-value':
  611.             $this->init_expression['operants'][= array('type' => 'value''data' => $data);
  612.             break;
  613.         case 'database-table-initialization-insert-field-function-expression-column':
  614.         case 'database-table-initialization-insert-select-field-function-expression-column':
  615.         case 'database-table-initialization-update-field-function-expression-column':
  616.             $this->init_expression['operants'][= array('type' => 'column''data' => $data);
  617.             break;
  618.  
  619.         /* Database */
  620.         case 'database-name':
  621.             $this->database_definition['name'].= $data;
  622.             break;
  623.         case 'database-create':
  624.             $this->database_definition['create'].= $data;
  625.             break;
  626.         case 'database-overwrite':
  627.             $this->database_definition['overwrite'].= $data;
  628.             break;
  629.         case 'database-description':
  630.             $this->database_definition['description'].= $data;
  631.             break;
  632.         case 'database-comments':
  633.             $this->database_definition['comments'].= $data;
  634.             break;
  635.  
  636.         /* Table declaration */
  637.         case 'database-table-name':
  638.             $this->table_name.= $data;
  639.             break;
  640.         case 'database-table-was':
  641.             $this->table['was'].= $data;
  642.             break;
  643.         case 'database-table-description':
  644.             $this->table['description'].= $data;
  645.             break;
  646.         case 'database-table-comments':
  647.             $this->table['comments'].= $data;
  648.             break;
  649.  
  650.         /* Field declaration */
  651.         case 'database-table-declaration-field-name':
  652.             $this->field_name.= $data;
  653.             break;
  654.         case 'database-table-declaration-field-was':
  655.             $this->field['was'].= $data;
  656.             break;
  657.         case 'database-table-declaration-field-type':
  658.             $this->field['type'].= $data;
  659.             break;
  660.         case 'database-table-declaration-field-fixed':
  661.             $this->field['fixed'].= $data;
  662.             break;
  663.         case 'database-table-declaration-field-default':
  664.             $this->field['default'].= $data;
  665.             break;
  666.         case 'database-table-declaration-field-notnull':
  667.             $this->field['notnull'].= $data;
  668.             break;
  669.         case 'database-table-declaration-field-autoincrement':
  670.             $this->field['autoincrement'].= $data;
  671.             break;
  672.         case 'database-table-declaration-field-unsigned':
  673.             $this->field['unsigned'].= $data;
  674.             break;
  675.         case 'database-table-declaration-field-length':
  676.             $this->field['length'].= $data;
  677.             break;
  678.         case 'database-table-declaration-field-description':
  679.             $this->field['description'].= $data;
  680.             break;
  681.         case 'database-table-declaration-field-comments':
  682.             $this->field['comments'].= $data;
  683.             break;
  684.  
  685.         /* Index declaration */
  686.         case 'database-table-declaration-index-name':
  687.             $this->index_name.= $data;
  688.             break;
  689.         case 'database-table-declaration-index-was':
  690.             $this->index['was'].= $data;
  691.             break;
  692.         case 'database-table-declaration-index-unique':
  693.             $this->index['unique'].= $data;
  694.             break;
  695.         case 'database-table-declaration-index-primary':
  696.             $this->index['primary'].= $data;
  697.             break;
  698.         case 'database-table-declaration-index-field-name':
  699.             $this->field_name.= $data;
  700.             break;
  701.         case 'database-table-declaration-index-field-sorting':
  702.             $this->field['sorting'].= $data;
  703.             break;
  704.         /* todo: check the following attribute as it is not documented anywhere */
  705.         /* Add by Leoncx */
  706.         case 'database-table-declaration-index-field-length':
  707.             if (isset($this->field['length'])) {
  708.                 $this->field['length'].= $data;
  709.             else {
  710.                 $this->field['length'$data;
  711.             }
  712.             break;
  713.  
  714.         /* Foreign Key declaration */
  715.         case 'database-table-declaration-foreign-name':
  716.             $this->constraint_name.= $data;
  717.             break;
  718.         case 'database-table-declaration-foreign-was':
  719.             $this->constraint['was'].= $data;
  720.             break;
  721.         case 'database-table-declaration-foreign-match':
  722.             $this->constraint['match'].= $data;
  723.             break;
  724.         case 'database-table-declaration-foreign-ondelete':
  725.             $this->constraint['ondelete'].= $data;
  726.             break;
  727.         case 'database-table-declaration-foreign-onupdate':
  728.             $this->constraint['onupdate'].= $data;
  729.             break;
  730.         case 'database-table-declaration-foreign-deferrable':
  731.             $this->constraint['deferrable'].= $data;
  732.             break;
  733.         case 'database-table-declaration-foreign-initiallydeferred':
  734.             $this->constraint['initiallydeferred'].= $data;
  735.             break;
  736.         case 'database-table-declaration-foreign-field':
  737.             $this->field_name.= $data;
  738.             break;
  739.         case 'database-table-declaration-foreign-references-table':
  740.             $this->constraint['references']['table'].= $data;
  741.             break;
  742.         case 'database-table-declaration-foreign-references-field':
  743.             $this->field_name.= $data;
  744.             break;
  745.  
  746.         /* Sequence declaration */
  747.         case 'database-sequence-name':
  748.             $this->sequence_name.= $data;
  749.             break;
  750.         case 'database-sequence-was':
  751.             $this->sequence['was'].= $data;
  752.             break;
  753.         case 'database-sequence-start':
  754.             $this->sequence['start'].= $data;
  755.             break;
  756.         case 'database-sequence-description':
  757.             $this->sequence['description'].= $data;
  758.             break;
  759.         case 'database-sequence-comments':
  760.             $this->sequence['comments'].= $data;
  761.             break;
  762.         case 'database-sequence-on-table':
  763.             $this->sequence['on']['table'].= $data;
  764.             break;
  765.         case 'database-sequence-on-field':
  766.             $this->sequence['on']['field'].= $data;
  767.             break;
  768.         }
  769.     }
  770. }
  771.  
  772. ?>

Documentation generated on Mon, 11 Mar 2019 14:44:34 -0400 by phpDocumentor 1.4.4. PEAR Logo Copyright © PHP Group 2004.