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-2008 Manuel Lemos, Tomas V.V.Cox,                 |
  6. // | Stig. S. Bakken, Lukas Smith, Igor Feghali                           |
  7. // | All rights reserved.                                                 |
  8. // +----------------------------------------------------------------------+
  9. // | MDB2_Schema enables users to maintain RDBMS independant schema files |
  10. // | in XML that can be used to manipulate both data and database schemas |
  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, Igor Feghali nor the names of his contributors may be   |
  26. // | used to endorse or promote products derived from this software       |
  27. // | without specific prior 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. // | Author: Igor Feghali <ifeghali@php.net>                              |
  44. // +----------------------------------------------------------------------+
  45. //
  46. // $Id: Parser.php,v 1.67 2008/02/06 23:13:51 ifeghali Exp $
  47. //
  48.  
  49. require_once 'XML/Parser.php';
  50. require_once 'MDB2/Schema/Validate.php';
  51.  
  52. /**
  53.  * Parses an XML schema file
  54.  *
  55.  * @package MDB2_Schema
  56.  * @category Database
  57.  * @access protected
  58.  * @author  Christian Dickmann <dickmann@php.net>
  59.  */
  60. class MDB2_Schema_Parser extends XML_Parser
  61. {
  62.     var $database_definition = array();
  63.     var $elements = array();
  64.     var $element = '';
  65.     var $count = 0;
  66.     var $table = array();
  67.     var $table_name = '';
  68.     var $field = array();
  69.     var $field_name = '';
  70.     var $init = array();
  71.     var $init_function = array();
  72.     var $init_expression = array();
  73.     var $init_field = array();
  74.     var $index = array();
  75.     var $index_name = '';
  76.     var $constraint = array();
  77.     var $constraint_name = '';
  78.     var $var_mode = false;
  79.     var $variables = array();
  80.     var $sequence = array();
  81.     var $sequence_name = '';
  82.     var $error;
  83.     var $structure = false;
  84.     var $val;
  85.  
  86.     function __construct($variables$fail_on_invalid_names = true$structure = false$valid_types = array()$force_defaults = true)
  87.     {
  88.         // force ISO-8859-1 due to different defaults for PHP4 and PHP5
  89.         // todo: this probably needs to be investigated some more andcleaned up
  90.         parent::XML_Parser('ISO-8859-1');
  91.         $this->variables = $variables;
  92.         $this->structure = $structure;
  93.         $this->val =new MDB2_Schema_Validate($fail_on_invalid_names$valid_types$force_defaults);
  94.     }
  95.  
  96.     function MDB2_Schema_Parser($variables$fail_on_invalid_names = true$structure = false$valid_types = array()$force_defaults = true)
  97.     {
  98.         $this->__construct($variables$fail_on_invalid_names$structure$valid_types$force_defaults);
  99.     }
  100.  
  101.     function startHandler($xp$element$attribs)
  102.     {
  103.         if (strtolower($element== 'variable'{
  104.             $this->var_mode = true;
  105.             return;
  106.         }
  107.  
  108.         $this->elements[$this->count++strtolower($element);
  109.         $this->element = implode('-'$this->elements);
  110.  
  111.         switch ($this->element{
  112.         /* Initialization */
  113.         case 'database-table-initialization':
  114.             $this->table['initialization'= array();
  115.             break;
  116.  
  117.         /* Insert */
  118.         /* insert: field+ */
  119.         case 'database-table-initialization-insert':
  120.             $this->init = array('type' => 'insert''data' => array('field' => array()));
  121.             break;
  122.         /* insert-select: field+, table, where? */
  123.         case 'database-table-initialization-insert-select':
  124.             $this->init['data']['table''';
  125.             break;
  126.  
  127.         /* Update */
  128.         /* update: field+, where? */
  129.         case 'database-table-initialization-update':
  130.             $this->init = array('type' => 'update''data' => array('field' => array()));
  131.             break;
  132.  
  133.         /* Delete */
  134.         /* delete: where */
  135.         case 'database-table-initialization-delete':
  136.             $this->init = array('type' => 'delete''data' => array('where' => array()));
  137.             break;
  138.  
  139.         /* Insert and Update */
  140.         case 'database-table-initialization-insert-field':
  141.         case 'database-table-initialization-insert-select-field':
  142.         case 'database-table-initialization-update-field':
  143.             $this->init_field = array('name' => '''group' => array());
  144.             break;
  145.         case 'database-table-initialization-insert-field-value':
  146.         case 'database-table-initialization-insert-select-field-value':
  147.         case 'database-table-initialization-update-field-value':
  148.             /* if value tag is empty cdataHandler is not called so we must force value element creation here */
  149.             $this->init_field['group'= array('type' => 'value''data' => '');
  150.             break;
  151.         case 'database-table-initialization-insert-field-null':
  152.         case 'database-table-initialization-insert-select-field-null':
  153.         case 'database-table-initialization-update-field-null':
  154.             $this->init_field['group'= array('type' => 'null');
  155.             break;
  156.         case 'database-table-initialization-insert-field-function':
  157.         case 'database-table-initialization-insert-select-field-function':
  158.         case 'database-table-initialization-update-field-function':
  159.             $this->init_function = array('name' => '');
  160.             break;
  161.         case 'database-table-initialization-insert-field-expression':
  162.         case 'database-table-initialization-insert-select-field-expression':
  163.         case 'database-table-initialization-update-field-expression':
  164.             $this->init_expression = array();
  165.             break;
  166.  
  167.         /* All */
  168.         case 'database-table-initialization-insert-select-where':
  169.         case 'database-table-initialization-update-where':
  170.         case 'database-table-initialization-delete-where':
  171.             $this->init['data']['where'= array('type' => '''data' => array());
  172.             break;
  173.         case 'database-table-initialization-insert-select-where-expression':
  174.         case 'database-table-initialization-update-where-expression':
  175.         case 'database-table-initialization-delete-where-expression':
  176.             $this->init_expression = array();
  177.             break;
  178.  
  179.         /* One level simulation of expression-function recursion */
  180.         case 'database-table-initialization-insert-field-expression-function':
  181.         case 'database-table-initialization-insert-select-field-expression-function':
  182.         case 'database-table-initialization-insert-select-where-expression-function':
  183.         case 'database-table-initialization-update-field-expression-function':
  184.         case 'database-table-initialization-update-where-expression-function':
  185.         case 'database-table-initialization-delete-where-expression-function':
  186.             $this->init_function = array('name' => '');
  187.             break;
  188.  
  189.         /* One level simulation of function-expression recursion */
  190.         case 'database-table-initialization-insert-field-function-expression':
  191.         case 'database-table-initialization-insert-select-field-function-expression':
  192.         case 'database-table-initialization-insert-select-where-function-expression':
  193.         case 'database-table-initialization-update-field-function-expression':
  194.         case 'database-table-initialization-update-where-function-expression':
  195.         case 'database-table-initialization-delete-where-function-expression':
  196.             $this->init_expression = array();
  197.             break;
  198.  
  199.         /* Definition */
  200.         case 'database':
  201.             $this->database_definition = array(
  202.                 'name' => '',
  203.                 'create' => '',
  204.                 'overwrite' => '',
  205.                 'charset' => '',
  206.                 'description' => '',
  207.                 'comments' => '',
  208.                 'tables' => array(),
  209.                 'sequences' => array()
  210.             );
  211.             break;
  212.         case 'database-table':
  213.             $this->table_name = '';
  214.             $this->table = array(
  215.                 'was' => '',
  216.                 'description' => '',
  217.                 'comments' => '',
  218.                 'fields' => array(),
  219.                 'indexes' => array(),
  220.                 'constraints' => array(),
  221.                 'initialization' => array()
  222.             );
  223.             break;
  224.         case 'database-table-declaration-field':
  225.         case 'database-table-declaration-foreign-field':
  226.         case 'database-table-declaration-foreign-references-field':
  227.             $this->field_name = '';
  228.             $this->field = array();
  229.             break;
  230.         case 'database-table-declaration-index-field':
  231.             $this->field_name = '';
  232.             $this->field = array('sorting' => '''length' => '');
  233.             break;
  234.         /* force field attributes to be initialized when the tag is empty in the XML */
  235.         case 'database-table-declaration-field-was':
  236.             $this->field['was''';
  237.             break;
  238.         case 'database-table-declaration-field-type':
  239.             $this->field['type''';
  240.             break;
  241.         case 'database-table-declaration-field-fixed':
  242.             $this->field['fixed''';
  243.             break;
  244.         case 'database-table-declaration-field-default':
  245.             $this->field['default''';
  246.             break;
  247.         case 'database-table-declaration-field-notnull':
  248.             $this->field['notnull''';
  249.             break;
  250.         case 'database-table-declaration-field-autoincrement':
  251.             $this->field['autoincrement''';
  252.             break;
  253.         case 'database-table-declaration-field-unsigned':
  254.             $this->field['unsigned''';
  255.             break;
  256.         case 'database-table-declaration-field-length':
  257.             $this->field['length''';
  258.             break;
  259.         case 'database-table-declaration-field-description':
  260.             $this->field['description''';
  261.             break;
  262.         case 'database-table-declaration-field-comments':
  263.             $this->field['comments''';
  264.             break;
  265.         case 'database-table-declaration-index':
  266.             $this->index_name = '';
  267.             $this->index = array(
  268.                 'was' => '',
  269.                 'unique' =>'',
  270.                 'primary' => '',
  271.                 'fields' => array()
  272.             );
  273.             break;
  274.         case 'database-table-declaration-foreign':
  275.             $this->constraint_name = '';
  276.             $this->constraint = array(
  277.                 'was' => '',
  278.                 'match' => '',
  279.                 'ondelete' => '',
  280.                 'onupdate' => '',
  281.                 'deferrable' => '',
  282.                 'initiallydeferred' => '',
  283.                 'foreign' => true,
  284.                 'fields' => array(),
  285.                 'references' => array('table' => '''fields' => array())
  286.             );
  287.             break;
  288.         case 'database-sequence':
  289.             $this->sequence_name = '';
  290.             $this->sequence = array(
  291.                 'was' => '',
  292.                 'start' => '',
  293.                 'description' => '',
  294.                 'comments' => '',
  295.                 'on' => array('table' => '''field' => '')
  296.             );
  297.             break;
  298.         }
  299.     }
  300.  
  301.     function endHandler($xp$element)
  302.     {
  303.         if (strtolower($element== 'variable'{
  304.             $this->var_mode = false;
  305.             return;
  306.         }
  307.  
  308.         switch ($this->element{
  309.         /* Initialization */
  310.  
  311.         /* Insert */
  312.         case 'database-table-initialization-insert-select':
  313.             $this->init['data'= array('select' => $this->init['data']);
  314.             break;
  315.  
  316.         /* Insert and Delete */
  317.         case 'database-table-initialization-insert-field':
  318.         case 'database-table-initialization-insert-select-field':
  319.         case 'database-table-initialization-update-field':
  320.             $result $this->val->validateDataField($this->table['fields']$this->init['data']['field']$this->init_field);
  321.             if (PEAR::isError($result)) {
  322.                 $this->raiseError($result->getUserinfo()0$xp$result->getCode());
  323.             else {
  324.                 $this->init['data']['field'][$this->init_field;
  325.             }
  326.             break;
  327.         case 'database-table-initialization-insert-field-function':
  328.         case 'database-table-initialization-insert-select-field-function':
  329.         case 'database-table-initialization-update-field-function':
  330.             $this->init_field['group'= array('type' => 'function''data' => $this->init_function);
  331.             break;
  332.         case 'database-table-initialization-insert-field-expression':
  333.         case 'database-table-initialization-insert-select-field-expression':
  334.         case 'database-table-initialization-update-field-expression':
  335.             $this->init_field['group'= array('type' => 'expression''data' => $this->init_expression);
  336.             break;
  337.         
  338.         /* All */
  339.         case 'database-table-initialization-insert-select-where-expression':
  340.         case 'database-table-initialization-update-where-expression':
  341.         case 'database-table-initialization-delete-where-expression':
  342.             $this->init['data']['where']['type''expression';
  343.             $this->init['data']['where']['data'$this->init_expression;
  344.             break;
  345.         case 'database-table-initialization-insert':
  346.         case 'database-table-initialization-delete':
  347.         case 'database-table-initialization-update':
  348.             $this->table['initialization'][$this->init;
  349.             break;
  350.  
  351.         /* One level simulation of expression-function recursion */
  352.         case 'database-table-initialization-insert-field-expression-function':
  353.         case 'database-table-initialization-insert-select-field-expression-function':
  354.         case 'database-table-initialization-insert-select-where-expression-function':
  355.         case 'database-table-initialization-update-field-expression-function':
  356.         case 'database-table-initialization-update-where-expression-function':
  357.         case 'database-table-initialization-delete-where-expression-function':
  358.             $this->init_expression['operants'][= array('type' => 'function''data' => $this->init_function);
  359.             break;
  360.  
  361.         /* One level simulation of function-expression recursion */
  362.         case 'database-table-initialization-insert-field-function-expression':
  363.         case 'database-table-initialization-insert-select-field-function-expression':
  364.         case 'database-table-initialization-insert-select-where-function-expression':
  365.         case 'database-table-initialization-update-field-function-expression':
  366.         case 'database-table-initialization-update-where-function-expression':
  367.         case 'database-table-initialization-delete-where-function-expression':
  368.             $this->init_function['arguments'][= array('type' => 'expression''data' => $this->init_expression);
  369.             break;
  370.  
  371.         /* Table definition */
  372.         case 'database-table':
  373.             $result $this->val->validateTable($this->database_definition['tables']$this->table$this->table_name);
  374.             if (PEAR::isError($result)) {
  375.                 $this->raiseError($result->getUserinfo()0$xp$result->getCode());
  376.             else {
  377.                 $this->database_definition['tables'][$this->table_name$this->table;
  378.             }
  379.             break;
  380.         case 'database-table-name':
  381.             if (isset($this->structure['tables'][$this->table_name])) {
  382.                 $this->table = $this->structure['tables'][$this->table_name];
  383.             }
  384.             break;
  385.  
  386.         /* Field declaration */
  387.         case 'database-table-declaration-field':
  388.             $result $this->val->validateField($this->table['fields']$this->field$this->field_name);
  389.             if (PEAR::isError($result)) {
  390.                 $this->raiseError($result->getUserinfo()0$xp$result->getCode());
  391.             else {
  392.                 $this->table['fields'][$this->field_name$this->field;
  393.             }
  394.             break;
  395.  
  396.         /* Index declaration */
  397.         case 'database-table-declaration-index':
  398.             $result $this->val->validateIndex($this->table['indexes']$this->index$this->index_name);
  399.             if (PEAR::isError($result)) {
  400.                 $this->raiseError($result->getUserinfo()0$xp$result->getCode());
  401.             else {
  402.                 $this->table['indexes'][$this->index_name$this->index;
  403.             }
  404.             break;
  405.         case 'database-table-declaration-index-field':
  406.             $result $this->val->validateIndexField($this->index['fields']$this->field$this->field_name);
  407.             if (PEAR::isError($result)) {
  408.                 $this->raiseError($result->getUserinfo()0$xp$result->getCode());
  409.             else {
  410.                 $this->index['fields'][$this->field_name$this->field;
  411.             }
  412.             break;
  413.  
  414.         /* Foreign Key declaration */
  415.         case 'database-table-declaration-foreign':
  416.             $result $this->val->validateConstraint($this->table['constraints']$this->constraint$this->constraint_name);
  417.             if (PEAR::isError($result)) {
  418.                 $this->raiseError($result->getUserinfo()0$xp$result->getCode());
  419.             else {
  420.                 $this->table['constraints'][$this->constraint_name$this->constraint;
  421.             }
  422.             break;
  423.         case 'database-table-declaration-foreign-field':
  424.             $result $this->val->validateConstraintField($this->constraint['fields']$this->field_name);
  425.             if (PEAR::isError($result)) {
  426.                 $this->raiseError($result->getUserinfo()0$xp$result->getCode());
  427.             else {
  428.                 $this->constraint['fields'][$this->field_name'';
  429.             }
  430.             break;
  431.         case 'database-table-declaration-foreign-references-field':
  432.             $result $this->val->validateConstraintReferencedField($this->constraint['references']['fields']$this->field_name);
  433.             if (PEAR::isError($result)) {
  434.                 $this->raiseError($result->getUserinfo()0$xp$result->getCode());
  435.             else {
  436.                 $this->constraint['references']['fields'][$this->field_name'';
  437.             }
  438.             break;
  439.  
  440.         /* Sequence declaration */
  441.         case 'database-sequence':
  442.             $result $this->val->validateSequence($this->database_definition['sequences']$this->sequence$this->sequence_name);
  443.             if (PEAR::isError($result)) {
  444.                 $this->raiseError($result->getUserinfo()0$xp$result->getCode());
  445.             else {
  446.                 $this->database_definition['sequences'][$this->sequence_name$this->sequence;
  447.             }
  448.             break;
  449.  
  450.         /* End of File */
  451.         case 'database':
  452.             $result $this->val->validateDatabase($this->database_definition);
  453.             if (PEAR::isError($result)) {
  454.                 $this->raiseError($result->getUserinfo()0$xp$result->getCode());
  455.             }
  456.             break;
  457.         }
  458.  
  459.         unset($this->elements[--$this->count]);
  460.         $this->element = implode('-'$this->elements);
  461.     }
  462.  
  463.     function &raiseError($msg = null$xmlecode = 0$xp = null$ecode = MDB2_SCHEMA_ERROR_PARSE)
  464.     {
  465.         if (is_null($this->error)) {
  466.             $error '';
  467.             if (is_resource($msg)) {
  468.                 $error.= 'Parser error: '.xml_error_string(xml_get_error_code($msg));
  469.                 $xp $msg;
  470.             else {
  471.                 $error.= 'Parser error: '.$msg;
  472.                 if (!is_resource($xp)) {
  473.                     $xp $this->parser;
  474.                 }
  475.             }
  476.             if ($error_string xml_error_string($xmlecode)) {
  477.                 $error.= ' - '.$error_string;
  478.             }
  479.             if (is_resource($xp)) {
  480.                 $byte @xml_get_current_byte_index($xp);
  481.                 $line @xml_get_current_line_number($xp);
  482.                 $column @xml_get_current_column_number($xp);
  483.                 $error.= " - Byte: $byte; Line: $line; Col: $column";
  484.             }
  485.             $error.= "\n";
  486.             $this->error =MDB2_Schema::raiseError($ecodenullnull$error);
  487.         }
  488.         return $this->error;
  489.     }
  490.  
  491.     function cdataHandler($xp$data)
  492.     {
  493.         if ($this->var_mode == true{
  494.             if (!isset($this->variables[$data])) {
  495.                 $this->raiseError('variable "'.$data.'" not found'null$xp);
  496.                 return;
  497.             }
  498.             $data $this->variables[$data];
  499.         }
  500.  
  501.         switch ($this->element{
  502.         /* Initialization */
  503.  
  504.         /* Insert */
  505.         case 'database-table-initialization-insert-select-table':
  506.             $this->init['data']['table'$data;
  507.             break;
  508.  
  509.         /* Insert and Update */
  510.         case 'database-table-initialization-insert-field-name':
  511.         case 'database-table-initialization-insert-select-field-name':
  512.         case 'database-table-initialization-update-field-name':
  513.             $this->init_field['name'].= $data;
  514.             break;
  515.         case 'database-table-initialization-insert-field-value':
  516.         case 'database-table-initialization-insert-select-field-value':
  517.         case 'database-table-initialization-update-field-value':
  518.             $this->init_field['group']['data'].= $data;
  519.             break;
  520.         case 'database-table-initialization-insert-field-function-name':
  521.         case 'database-table-initialization-insert-select-field-function-name':
  522.         case 'database-table-initialization-update-field-function-name':
  523.             $this->init_function['name'].= $data;
  524.             break;
  525.         case 'database-table-initialization-insert-field-function-value':
  526.         case 'database-table-initialization-insert-select-field-function-value':
  527.         case 'database-table-initialization-update-field-function-value':
  528.             $this->init_function['arguments'][= array('type' => 'value''data' => $data);
  529.             break;
  530.         case 'database-table-initialization-insert-field-function-column':
  531.         case 'database-table-initialization-insert-select-field-function-column':
  532.         case 'database-table-initialization-update-field-function-column':
  533.             $this->init_function['arguments'][= array('type' => 'column''data' => $data);
  534.             break;
  535.         case 'database-table-initialization-insert-field-column':
  536.         case 'database-table-initialization-insert-select-field-column':
  537.         case 'database-table-initialization-update-field-column':
  538.             $this->init_field['group'= array('type' => 'column''data' => $data);
  539.             break;
  540.  
  541.         /* All */
  542.         case 'database-table-initialization-insert-field-expression-operator':
  543.         case 'database-table-initialization-insert-select-field-expression-operator':
  544.         case 'database-table-initialization-insert-select-where-expression-operator':
  545.         case 'database-table-initialization-update-field-expression-operator':
  546.         case 'database-table-initialization-update-where-expression-operator':
  547.         case 'database-table-initialization-delete-where-expression-operator':
  548.             $this->init_expression['operator'$data;
  549.             break;
  550.         case 'database-table-initialization-insert-field-expression-value':
  551.         case 'database-table-initialization-insert-select-field-expression-value':
  552.         case 'database-table-initialization-insert-select-where-expression-value':
  553.         case 'database-table-initialization-update-field-expression-value':
  554.         case 'database-table-initialization-update-where-expression-value':
  555.         case 'database-table-initialization-delete-where-expression-value':
  556.             $this->init_expression['operants'][= array('type' => 'value''data' => $data);
  557.             break;
  558.         case 'database-table-initialization-insert-field-expression-column':
  559.         case 'database-table-initialization-insert-select-field-expression-column':
  560.         case 'database-table-initialization-insert-select-where-expression-column':
  561.         case 'database-table-initialization-update-field-expression-column':
  562.         case 'database-table-initialization-update-where-expression-column':
  563.         case 'database-table-initialization-delete-where-expression-column':
  564.             $this->init_expression['operants'][= array('type' => 'column''data' => $data);
  565.             break;
  566.  
  567.         case 'database-table-initialization-insert-field-function-function':
  568.         case 'database-table-initialization-insert-field-function-expression':
  569.         case 'database-table-initialization-insert-field-expression-expression':
  570.         case 'database-table-initialization-update-field-function-function':
  571.         case 'database-table-initialization-update-field-function-expression':
  572.         case 'database-table-initialization-update-field-expression-expression':
  573.         case 'database-table-initialization-update-where-expression-expression':
  574.         case 'database-table-initialization-delete-where-expression-expression':
  575.             /* Recursion to be implemented yet */
  576.             break;
  577.  
  578.         /* One level simulation of expression-function recursion */
  579.         case 'database-table-initialization-insert-field-expression-function-name':
  580.         case 'database-table-initialization-insert-select-field-expression-function-name':
  581.         case 'database-table-initialization-insert-select-where-expression-function-name':
  582.         case 'database-table-initialization-update-field-expression-function-name':
  583.         case 'database-table-initialization-update-where-expression-function-name':
  584.         case 'database-table-initialization-delete-where-expression-function-name':
  585.             $this->init_function['name'].= $data;
  586.             break;
  587.         case 'database-table-initialization-insert-field-expression-function-value':
  588.         case 'database-table-initialization-insert-select-field-expression-function-value':
  589.         case 'database-table-initialization-insert-select-where-expression-function-value':
  590.         case 'database-table-initialization-update-field-expression-function-value':
  591.         case 'database-table-initialization-update-where-expression-function-value':
  592.         case 'database-table-initialization-delete-where-expression-function-value':
  593.             $this->init_function['arguments'][= array('type' => 'value''data' => $data);
  594.             break;
  595.         case 'database-table-initialization-insert-field-expression-function-column':
  596.         case 'database-table-initialization-insert-select-field-expression-function-column':
  597.         case 'database-table-initialization-insert-select-where-expression-function-column':
  598.         case 'database-table-initialization-update-field-expression-function-column':
  599.         case 'database-table-initialization-update-where-expression-function-column':
  600.         case 'database-table-initialization-delete-where-expression-function-column':
  601.             $this->init_function['arguments'][= array('type' => 'column''data' => $data);
  602.             break;
  603.  
  604.         /* One level simulation of function-expression recursion */
  605.         case 'database-table-initialization-insert-field-function-expression-operator':
  606.         case 'database-table-initialization-insert-select-field-function-expression-operator':
  607.         case 'database-table-initialization-update-field-function-expression-operator':
  608.             $this->init_expression['operator'$data;
  609.             break;
  610.         case 'database-table-initialization-insert-field-function-expression-value':
  611.         case 'database-table-initialization-insert-select-field-function-expression-value':
  612.         case 'database-table-initialization-update-field-function-expression-value':
  613.             $this->init_expression['operants'][= array('type' => 'value''data' => $data);
  614.             break;
  615.         case 'database-table-initialization-insert-field-function-expression-column':
  616.         case 'database-table-initialization-insert-select-field-function-expression-column':
  617.         case 'database-table-initialization-update-field-function-expression-column':
  618.             $this->init_expression['operants'][= array('type' => 'column''data' => $data);
  619.             break;
  620.  
  621.         /* Database */
  622.         case 'database-name':
  623.             $this->database_definition['name'].= $data;
  624.             break;
  625.         case 'database-create':
  626.             $this->database_definition['create'].= $data;
  627.             break;
  628.         case 'database-overwrite':
  629.             $this->database_definition['overwrite'].= $data;
  630.             break;
  631.         case 'database-charset':
  632.             $this->database_definition['charset'].= $data;
  633.             break;
  634.         case 'database-description':
  635.             $this->database_definition['description'].= $data;
  636.             break;
  637.         case 'database-comments':
  638.             $this->database_definition['comments'].= $data;
  639.             break;
  640.  
  641.         /* Table declaration */
  642.         case 'database-table-name':
  643.             $this->table_name.= $data;
  644.             break;
  645.         case 'database-table-was':
  646.             $this->table['was'].= $data;
  647.             break;
  648.         case 'database-table-description':
  649.             $this->table['description'].= $data;
  650.             break;
  651.         case 'database-table-comments':
  652.             $this->table['comments'].= $data;
  653.             break;
  654.  
  655.         /* Field declaration */
  656.         case 'database-table-declaration-field-name':
  657.             $this->field_name.= $data;
  658.             break;
  659.         case 'database-table-declaration-field-was':
  660.             $this->field['was'].= $data;
  661.             break;
  662.         case 'database-table-declaration-field-type':
  663.             $this->field['type'].= $data;
  664.             break;
  665.         case 'database-table-declaration-field-fixed':
  666.             $this->field['fixed'].= $data;
  667.             break;
  668.         case 'database-table-declaration-field-default':
  669.             $this->field['default'].= $data;
  670.             break;
  671.         case 'database-table-declaration-field-notnull':
  672.             $this->field['notnull'].= $data;
  673.             break;
  674.         case 'database-table-declaration-field-autoincrement':
  675.             $this->field['autoincrement'].= $data;
  676.             break;
  677.         case 'database-table-declaration-field-unsigned':
  678.             $this->field['unsigned'].= $data;
  679.             break;
  680.         case 'database-table-declaration-field-length':
  681.             $this->field['length'].= $data;
  682.             break;
  683.         case 'database-table-declaration-field-description':
  684.             $this->field['description'].= $data;
  685.             break;
  686.         case 'database-table-declaration-field-comments':
  687.             $this->field['comments'].= $data;
  688.             break;
  689.  
  690.         /* Index declaration */
  691.         case 'database-table-declaration-index-name':
  692.             $this->index_name.= $data;
  693.             break;
  694.         case 'database-table-declaration-index-was':
  695.             $this->index['was'].= $data;
  696.             break;
  697.         case 'database-table-declaration-index-unique':
  698.             $this->index['unique'].= $data;
  699.             break;
  700.         case 'database-table-declaration-index-primary':
  701.             $this->index['primary'].= $data;
  702.             break;
  703.         case 'database-table-declaration-index-field-name':
  704.             $this->field_name.= $data;
  705.             break;
  706.         case 'database-table-declaration-index-field-sorting':
  707.             $this->field['sorting'].= $data;
  708.             break;
  709.         /* Add by Leoncx */
  710.         case 'database-table-declaration-index-field-length':
  711.             $this->field['length'].= $data;
  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 15:16:43 -0400 by phpDocumentor 1.4.4. PEAR Logo Copyright © PHP Group 2004.