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.53 2006/10/21 14:43:49 ifeghali Exp $
  46. //
  47.  
  48. require_once 'XML/Parser.php';
  49. require_once 'MDB2/Schema/Validate.php';
  50.  
  51. if (empty($GLOBALS['_MDB2_Schema_Reserved'])) {
  52.     $GLOBALS['_MDB2_Schema_Reserved'= array();
  53. }
  54.  
  55. /**
  56.  * Parses an XML schema file
  57.  *
  58.  * @package MDB2_Schema
  59.  * @category Database
  60.  * @access protected
  61.  * @author  Christian Dickmann <dickmann@php.net>
  62.  */
  63. class MDB2_Schema_Parser extends XML_Parser
  64. {
  65.     var $database_definition = array('tables' => array()'sequences' => array());
  66.     var $elements = array();
  67.     var $element = '';
  68.     var $count = 0;
  69.     var $table = array();
  70.     var $table_name = '';
  71.     var $field = array();
  72.     var $field_name = '';
  73.     var $init = array();
  74.     var $init_function = array();
  75.     var $init_expression = array();
  76.     var $index = array();
  77.     var $index_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.  
  123.         /* Update */
  124.         /* update: field+, where? */
  125.         case 'database-table-initialization-update':
  126.             $this->init = array('type' => 'update''data' => array('field' => array()));
  127.             break;
  128.  
  129.         /* Delete */
  130.         /* delete: where */
  131.         case 'database-table-initialization-delete':
  132.             $this->init = array('type' => 'delete''data' => array('where' => array()));
  133.             break;
  134.  
  135.         /* Insert and Update */
  136.         case 'database-table-initialization-insert-field':
  137.         case 'database-table-initialization-update-field':
  138.             $this->init['data']['field'][= array('name' => '''group' => array());
  139.             break;
  140.         case 'database-table-initialization-insert-field-value':
  141.         case 'database-table-initialization-update-field-value':
  142.             /* if value tag is empty cdataHandler is not called so we must force value element creation here */
  143.             $this->setData($this->init['data']['field']'group'array('type' => 'value''data' => ''));
  144.             break;
  145.         case 'database-table-initialization-insert-field-null':
  146.         case 'database-table-initialization-update-field-null':
  147.             $this->setData($this->init['data']['field']'group'array('type' => 'null'));
  148.             break;
  149.         case 'database-table-initialization-insert-field-function':
  150.         case 'database-table-initialization-update-field-function':
  151.             $this->init_function = array();
  152.             break;
  153.         case 'database-table-initialization-insert-field-expression':
  154.         case 'database-table-initialization-update-field-expression':
  155.             $this->init_expression = array();
  156.             break;
  157.  
  158.         /* Update and Delete */
  159.         case 'database-table-initialization-update-where':
  160.         case 'database-table-initialization-delete-where':
  161.             $this->init['data']['where'= array('type' => '''data' => array());
  162.             break;
  163.  
  164.         case 'database-table-initialization-update-where-expression':
  165.         case 'database-table-initialization-delete-where-expression':
  166.             $this->init_expression = array();
  167.             break;
  168.  
  169.         /* One level simulation of expression-function recursion */
  170.         case 'database-table-initialization-insert-field-expression-function':
  171.         case 'database-table-initialization-update-field-expression-function':
  172.         case 'database-table-initialization-update-where-expression-function':
  173.         case 'database-table-initialization-delete-where-expression-function':
  174.             $this->init_function = array();
  175.             break;
  176.  
  177.         /* One level simulation of function-expression recursion */
  178.         case 'database-table-initialization-insert-field-function-expression':
  179.         case 'database-table-initialization-update-field-function-expression':
  180.         case 'database-table-initialization-update-where-function-expression':
  181.         case 'database-table-initialization-delete-where-function-expression':
  182.             $this->init_expression = array();
  183.             break;
  184.  
  185.         /* Definition */
  186.         case 'database-table':
  187.             $this->table_name = '';
  188.             $this->table = array('fields' => array()'indexes' => array());
  189.             break;
  190.         case 'database-table-declaration-field':
  191.             $this->field_name = '';
  192.             $this->field = array();
  193.             break;
  194.         case 'database-table-declaration-field-default':
  195.             $this->field['default''';
  196.             break;
  197.         case 'database-table-declaration-index':
  198.             $this->index_name = '';
  199.             $this->index = array('fields' => array());
  200.             break;
  201.         case 'database-sequence':
  202.             $this->sequence_name = '';
  203.             $this->sequence = array();
  204.             break;
  205.         case 'database-table-declaration-index-field':
  206.             $this->field_name = '';
  207.             $this->field = array();
  208.             break;
  209.         }
  210.     }
  211.  
  212.     function endHandler($xp$element)
  213.     {
  214.         if (strtolower($element== 'variable'{
  215.             $this->var_mode = false;
  216.             return;
  217.         }
  218.  
  219.         switch ($this->element{
  220.         /* Initialization */
  221.  
  222.         /* Insert and Delete */
  223.         case 'database-table-initialization-insert-field':
  224.         case 'database-table-initialization-update-field':
  225.             /* field are now accepting functions and expressions
  226.             we can't determine the return type of them
  227.             $result = $this->val->validateInsertField($this);
  228.             if (PEAR::isError($result)) {
  229.                 $this->raiseError($result->getUserinfo(), 0, $xp, $result->getCode());
  230.             }
  231.             */
  232.             break;
  233.         case 'database-table-initialization-insert-field-function':
  234.         case 'database-table-initialization-update-field-function':
  235.             $this->setData($this->init['data']['field']'group'array('type' => 'function''data' => $this->init_function));
  236.             break;
  237.         case 'database-table-initialization-insert-field-expression':
  238.         case 'database-table-initialization-update-field-expression':
  239.             $this->setData($this->init['data']['field']'group'array('type' => 'expression''data' => $this->init_expression));
  240.             break;
  241.         
  242.         /* Delete and Update */
  243.         case 'database-table-initialization-update-where-expression':
  244.         case 'database-table-initialization-delete-where-expression':
  245.             $this->init['data']['where']['type''expression';
  246.             $this->init['data']['where']['data'$this->init_expression;
  247.             break;
  248.  
  249.         /* All */
  250.         case 'database-table-initialization-insert':
  251.         case 'database-table-initialization-delete':
  252.         case 'database-table-initialization-update':
  253.             $this->table['initialization'][$this->init;
  254.             break;
  255.  
  256.         /* One level simulation of expression-function recursion */
  257.         case 'database-table-initialization-insert-field-expression-function':
  258.         case 'database-table-initialization-update-field-expression-function':
  259.         case 'database-table-initialization-update-where-expression-function':
  260.         case 'database-table-initialization-delete-where-expression-function':
  261.             $this->init_expression['operants'][= array('type' => 'function''data' => $this->init_function);
  262.             break;
  263.  
  264.         /* One level simulation of function-expression recursion */
  265.         case 'database-table-initialization-insert-field-function-expression':
  266.         case 'database-table-initialization-update-field-function-expression':
  267.         case 'database-table-initialization-update-where-function-expression':
  268.         case 'database-table-initialization-delete-where-function-expression':
  269.             $this->init_function['arguments'][= array('type' => 'expression''data' => $this->init_expression);
  270.             break;
  271.  
  272.         /* Table definition */
  273.         case 'database-table':
  274.             $result $this->val->validateTable($this->database_definition['tables']$this->table$this->table_name);
  275.             if (PEAR::isError($result)) {
  276.                 $this->raiseError($result->getUserinfo()0$xp$result->getCode());
  277.             else {
  278.                 $this->database_definition['tables'][$this->table_name$this->table;
  279.             }
  280.             break;
  281.         case 'database-table-name':
  282.             if (isset($this->structure_tables[$this->table_name])) {
  283.                 $this->table = $this->structure_tables[$this->table_name];
  284.             }
  285.             break;
  286.  
  287.         /* Field declaration */
  288.         case 'database-table-declaration-field':
  289.             $result $this->val->validateField($this->table['fields']$this->field$this->field_name);
  290.             if (PEAR::isError($result)) {
  291.                 $this->raiseError($result->getUserinfo()0$xp$result->getCode());
  292.             else {
  293.                 $this->table['fields'][$this->field_name$this->field;
  294.             }
  295.             break;
  296.  
  297.         /* Index declaration */
  298.         case 'database-table-declaration-index':
  299.             $result $this->val->validateIndex($this->table['indexes']$this->index$this->index_name);
  300.             if (PEAR::isError($result)) {
  301.                 $this->raiseError($result->getUserinfo()0$xp$result->getCode());
  302.             else {
  303.                 $this->table['indexes'][$this->index_name$this->index;
  304.             }
  305.             break;
  306.         case 'database-table-declaration-index-field':
  307.             $result $this->val->validateIndexField($this->index['fields']$this->field$this->field_name);
  308.             if (PEAR::isError($result)) {
  309.                 $this->raiseError($result->getUserinfo()0$xp$result->getCode());
  310.             else {
  311.                 $this->index['fields'][$this->field_name$this->field;
  312.             }
  313.             break;
  314.  
  315.         /* Sequence declaration */
  316.         case 'database-sequence':
  317.             $result $this->val->validateSequence($this->database_definition['sequences']$this->sequence$this->sequence_name);
  318.             if (PEAR::isError($result)) {
  319.                 $this->raiseError($result->getUserinfo()0$xp$result->getCode());
  320.             else {
  321.                 $this->database_definition['sequences'][$this->sequence_name$this->sequence;
  322.             }
  323.             break;
  324.  
  325.         /* End of File */
  326.         case 'database':
  327.             $result $this->val->validateDatabase($this->database_definition);
  328.             if (PEAR::isError($result)) {
  329.                 $this->raiseError($result->getUserinfo()0$xp$result->getCode());
  330.             }
  331.             break;
  332.         }
  333.  
  334.         unset($this->elements[--$this->count]);
  335.         $this->element = implode('-'$this->elements);
  336.     }
  337.  
  338.     function &raiseError($msg = null$xmlecode = 0$xp = null$ecode = MDB2_SCHEMA_ERROR_PARSE)
  339.     {
  340.         if (is_null($this->error)) {
  341.             $error '';
  342.             if (is_resource($msg)) {
  343.                 $error.= 'Parser error: '.xml_error_string(xml_get_error_code($msg));
  344.                 $xp $msg;
  345.             else {
  346.                 $error.= 'Parser error: '.$msg;
  347.                 if (!is_resource($xp)) {
  348.                     $xp $this->parser;
  349.                 }
  350.             }
  351.             if ($error_string xml_error_string($xmlecode)) {
  352.                 $error.= ' - '.$error_string;
  353.             }
  354.             if (is_resource($xp)) {
  355.                 $byte @xml_get_current_byte_index($xp);
  356.                 $line @xml_get_current_line_number($xp);
  357.                 $column @xml_get_current_column_number($xp);
  358.                 $error.= " - Byte: $byte; Line: $line; Col: $column";
  359.             }
  360.             $error.= "\n";
  361.             $this->error =MDB2_Schema::raiseError($ecodenullnull$error);
  362.         }
  363.         return $this->error;
  364.     }
  365.  
  366.     function cdataHandler($xp$data)
  367.     {
  368.         if ($this->var_mode == true{
  369.             if (!isset($this->variables[$data])) {
  370.                 $this->raiseError('variable "'.$data.'" not found'null$xp);
  371.                 return;
  372.             }
  373.             $data $this->variables[$data];
  374.         }
  375.  
  376.         switch ($this->element{
  377.         /* Initialization */
  378.  
  379.         /* Insert and Update */
  380.         case 'database-table-initialization-insert-field-name':
  381.         case 'database-table-initialization-update-field-name':
  382.             $this->setData($this->init['data']['field']'name'$data);
  383.             break;
  384.         case 'database-table-initialization-insert-field-value':
  385.         case 'database-table-initialization-update-field-value':
  386.             $this->setData($this->init['data']['field']'group'array('type' => 'value''data' => $data));
  387.             break;
  388.         case 'database-table-initialization-insert-field-function-name':
  389.         case 'database-table-initialization-update-field-function-name':
  390.             $this->init_function['name'$data;
  391.             break;
  392.         case 'database-table-initialization-insert-field-function-value':
  393.         case 'database-table-initialization-update-field-function-value':
  394.             $this->init_function['arguments'][= array('type' => 'value''data' => $data);
  395.             break;
  396.         case 'database-table-initialization-insert-field-function-column':
  397.         case 'database-table-initialization-update-field-function-column':
  398.             $this->init_function['arguments'][= array('type' => 'column''data' => $data);
  399.             break;
  400.  
  401.         /* Update */
  402.         case 'database-table-initialization-update-field-column':
  403.             $this->setData($this->init['data']['field']'group'array('type' => 'column''data' => $data));
  404.             break;
  405.  
  406.         /* All */
  407.         case 'database-table-initialization-insert-field-expression-operator':
  408.         case 'database-table-initialization-update-field-expression-operator':
  409.         case 'database-table-initialization-update-where-expression-operator':
  410.         case 'database-table-initialization-delete-where-expression-operator':
  411.             $this->init_expression['operator'$data;
  412.             break;
  413.         case 'database-table-initialization-insert-field-expression-value':
  414.         case 'database-table-initialization-update-field-expression-value':
  415.         case 'database-table-initialization-update-where-expression-value':
  416.         case 'database-table-initialization-delete-where-expression-value':
  417.             $this->init_expression['operants'][= array('type' => 'value''data' => $data);
  418.             break;
  419.         case 'database-table-initialization-insert-field-expression-column':
  420.         case 'database-table-initialization-update-field-expression-column':
  421.         case 'database-table-initialization-update-where-expression-column':
  422.         case 'database-table-initialization-delete-where-expression-column':
  423.             $this->init_expression['operants'][= array('type' => 'column''data' => $data);
  424.             break;
  425.  
  426.         case 'database-table-initialization-insert-field-function-function':
  427.         case 'database-table-initialization-insert-field-function-expression':
  428.         case 'database-table-initialization-insert-field-expression-expression':
  429.         case 'database-table-initialization-update-field-function-function':
  430.         case 'database-table-initialization-update-field-function-expression':
  431.         case 'database-table-initialization-update-field-expression-expression':
  432.         case 'database-table-initialization-update-where-expression-expression':
  433.         case 'database-table-initialization-delete-where-expression-expression':
  434.             /* Recursion to be implemented yet */
  435.             break;
  436.  
  437.         /* One level simulation of expression-function recursion */
  438.         case 'database-table-initialization-insert-field-expression-function-name':
  439.         case 'database-table-initialization-update-field-expression-function-name':
  440.         case 'database-table-initialization-update-where-expression-function-name':
  441.         case 'database-table-initialization-delete-where-expression-function-name':
  442.             $this->init_function['name'$data;
  443.             break;
  444.         case 'database-table-initialization-insert-field-expression-function-value':
  445.         case 'database-table-initialization-update-field-expression-function-value':
  446.         case 'database-table-initialization-update-where-expression-function-value':
  447.         case 'database-table-initialization-delete-where-expression-function-value':
  448.             $this->init_function['arguments'][= array('type' => 'value''data' => $data);
  449.             break;
  450.         case 'database-table-initialization-insert-field-expression-function-column':
  451.         case 'database-table-initialization-update-field-expression-function-column':
  452.         case 'database-table-initialization-update-where-expression-function-column':
  453.         case 'database-table-initialization-delete-where-expression-function-column':
  454.             $this->init_function['arguments'][= array('type' => 'column''data' => $data);
  455.             break;
  456.  
  457.         /* One level simulation of function-expression recursion */
  458.         case 'database-table-initialization-insert-field-function-expression-operator':
  459.         case 'database-table-initialization-update-field-function-expression-operator':
  460.             $this->init_expression['operator'$data;
  461.             break;
  462.         case 'database-table-initialization-insert-field-function-expression-value':
  463.         case 'database-table-initialization-update-field-function-expression-value':
  464.             $this->init_expression['operants'][= array('type' => 'value''data' => $data);
  465.             break;
  466.         case 'database-table-initialization-insert-field-function-expression-column':
  467.         case 'database-table-initialization-update-field-function-expression-column':
  468.             $this->init_expression['operants'][= array('type' => 'column''data' => $data);
  469.             break;
  470.  
  471.         /* Database */
  472.         case 'database-name':
  473.             if (isset($this->database_definition['name'])) {
  474.                 $this->database_definition['name'].= $data;
  475.             else {
  476.                 $this->database_definition['name'$data;
  477.             }
  478.             break;
  479.         case 'database-create':
  480.             if (isset($this->database_definition['create'])) {
  481.                 $this->database_definition['create'].= $data;
  482.             else {
  483.                 $this->database_definition['create'$data;
  484.             }
  485.             break;
  486.         case 'database-overwrite':
  487.             if (isset($this->database_definition['overwrite'])) {
  488.                 $this->database_definition['overwrite'].= $data;
  489.             else {
  490.                 $this->database_definition['overwrite'$data;
  491.             }
  492.             break;
  493.         case 'database-table-name':
  494.             if (isset($this->table_name)) {
  495.                 $this->table_name.= $data;
  496.             else {
  497.                 $this->table_name = $data;
  498.             }
  499.             break;
  500.         case 'database-table-was':
  501.             if (isset($this->table['was'])) {
  502.                 $this->table['was'].= $data;
  503.             else {
  504.                 $this->table['was'$data;
  505.             }
  506.             break;
  507.  
  508.         /* Field declaration */
  509.         case 'database-table-declaration-field-name':
  510.             if (isset($this->field_name)) {
  511.                 $this->field_name.= $data;
  512.             else {
  513.                 $this->field_name = $data;
  514.             }
  515.             break;
  516.         case 'database-table-declaration-field-type':
  517.             if (isset($this->field['type'])) {
  518.                 $this->field['type'].= $data;
  519.             else {
  520.                 $this->field['type'$data;
  521.             }
  522.             break;
  523.         case 'database-table-declaration-field-was':
  524.             if (isset($this->field['was'])) {
  525.                 $this->field['was'].= $data;
  526.             else {
  527.                 $this->field['was'$data;
  528.             }
  529.             break;
  530.         case 'database-table-declaration-field-notnull':
  531.             if (isset($this->field['notnull'])) {
  532.                 $this->field['notnull'].= $data;
  533.             else {
  534.                 $this->field['notnull'$data;
  535.             }
  536.             break;
  537.         case 'database-table-declaration-field-fixed':
  538.             if (isset($this->field['fixed'])) {
  539.                 $this->field['fixed'].= $data;
  540.             else {
  541.                 $this->field['fixed'$data;
  542.             }
  543.             break;
  544.         case 'database-table-declaration-field-unsigned':
  545.             if (isset($this->field['unsigned'])) {
  546.                 $this->field['unsigned'].= $data;
  547.             else {
  548.                 $this->field['unsigned'$data;
  549.             }
  550.             break;
  551.         case 'database-table-declaration-field-autoincrement':
  552.             if (isset($this->field['autoincrement'])) {
  553.                 $this->field['autoincrement'].= $data;
  554.             else {
  555.                 $this->field['autoincrement'$data;
  556.             }
  557.             break;
  558.         case 'database-table-declaration-field-default':
  559.             if (isset($this->field['default'])) {
  560.                 $this->field['default'].= $data;
  561.             else {
  562.                 $this->field['default'$data;
  563.             }
  564.             break;
  565.         case 'database-table-declaration-field-length':
  566.             if (isset($this->field['length'])) {
  567.                 $this->field['length'].= $data;
  568.             else {
  569.                 $this->field['length'$data;
  570.             }
  571.             break;
  572.  
  573.         /* Index declaration */
  574.         case 'database-table-declaration-index-name':
  575.             if (isset($this->index_name)) {
  576.                 $this->index_name.= $data;
  577.             else {
  578.                 $this->index_name = $data;
  579.             }
  580.             break;
  581.         case 'database-table-declaration-index-primary':
  582.             if (isset($this->index['primary'])) {
  583.                 $this->index['primary'].= $data;
  584.             else {
  585.                 $this->index['primary'$data;
  586.             }
  587.             break;
  588.         case 'database-table-declaration-index-unique':
  589.             if (isset($this->index['unique'])) {
  590.                 $this->index['unique'].= $data;
  591.             else {
  592.                 $this->index['unique'$data;
  593.             }
  594.             break;
  595.         case 'database-table-declaration-index-was':
  596.             if (isset($this->index['was'])) {
  597.                 $this->index['was'].= $data;
  598.             else {
  599.                 $this->index['was'$data;
  600.             }
  601.             break;
  602.         case 'database-table-declaration-index-field-name':
  603.             if (isset($this->field_name)) {
  604.                 $this->field_name.= $data;
  605.             else {
  606.                 $this->field_name = $data;
  607.             }
  608.             break;
  609.         case 'database-table-declaration-index-field-sorting':
  610.             if (isset($this->field['sorting'])) {
  611.                 $this->field['sorting'].= $data;
  612.             else {
  613.                 $this->field['sorting'$data;
  614.             }
  615.             break;
  616.         /* Add by Leoncx */
  617.         case 'database-table-declaration-index-field-length':
  618.             if (isset($this->field['length'])) {
  619.                 $this->field['length'].= $data;
  620.             else {
  621.                 $this->field['length'$data;
  622.             }
  623.             break;
  624.  
  625.         /* Sequence declaration */
  626.         case 'database-sequence-name':
  627.             if (isset($this->sequence_name)) {
  628.                 $this->sequence_name.= $data;
  629.             else {
  630.                 $this->sequence_name = $data;
  631.             }
  632.             break;
  633.         case 'database-sequence-was':
  634.             if (isset($this->sequence['was'])) {
  635.                 $this->sequence['was'].= $data;
  636.             else {
  637.                 $this->sequence['was'$data;
  638.             }
  639.             break;
  640.         case 'database-sequence-start':
  641.             if (isset($this->sequence['start'])) {
  642.                 $this->sequence['start'].= $data;
  643.             else {
  644.                 $this->sequence['start'$data;
  645.             }
  646.             break;
  647.         case 'database-sequence-on-table':
  648.             if (isset($this->sequence['on']['table'])) {
  649.                 $this->sequence['on']['table'].= $data;
  650.             else {
  651.                 $this->sequence['on']['table'$data;
  652.             }
  653.             break;
  654.         case 'database-sequence-on-field':
  655.             if (isset($this->sequence['on']['field'])) {
  656.                 $this->sequence['on']['field'].= $data;
  657.             else {
  658.                 $this->sequence['on']['field'$data;
  659.             }
  660.             break;
  661.         }
  662.     }
  663.  
  664.     function setData(&$array$key$value)
  665.     {
  666.         $array[(count($array)-1)][$key$value;
  667.     }
  668. }
  669.  
  670. ?>

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