Source for file Parser.php
Documentation is available at Parser.php
// +----------------------------------------------------------------------+
// | PHP versions 4 and 5 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1998-2008 Manuel Lemos, Tomas V.V.Cox, |
// | Stig. S. Bakken, Lukas Smith, Igor Feghali |
// | All rights reserved. |
// +----------------------------------------------------------------------+
// | MDB2_Schema enables users to maintain RDBMS independant schema files |
// | in XML that can be used to manipulate both data and database schemas |
// | This LICENSE is in the BSD license style. |
// | Redistribution and use in source and binary forms, with or without |
// | modification, are permitted provided that the following conditions |
// | Redistributions of source code must retain the above copyright |
// | notice, this list of conditions and the following disclaimer. |
// | Redistributions in binary form must reproduce the above copyright |
// | notice, this list of conditions and the following disclaimer in the |
// | documentation and/or other materials provided with the distribution. |
// | Neither the name of Manuel Lemos, Tomas V.V.Cox, Stig. S. Bakken, |
// | Lukas Smith, Igor Feghali nor the names of his contributors may be |
// | used to endorse or promote products derived from this software |
// | without specific prior written permission. |
// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |
// | FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE |
// | REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, |
// | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, |
// | BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS|
// | OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED |
// | AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
// | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY|
// | WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
// | POSSIBILITY OF SUCH DAMAGE. |
// +----------------------------------------------------------------------+
// | Author: Christian Dickmann <dickmann@php.net> |
// | Author: Igor Feghali <ifeghali@php.net> |
// +----------------------------------------------------------------------+
// $Id: Parser.php,v 1.67 2008/02/06 23:13:51 ifeghali Exp $
require_once 'XML/Parser.php';
require_once 'MDB2/Schema/Validate.php';
* Parses an XML schema file
* @author Christian Dickmann <dickmann@php.net>
function __construct($variables, $fail_on_invalid_names = true , $structure = false , $valid_types = array (), $force_defaults = true )
// force ISO-8859-1 due to different defaults for PHP4 and PHP5
// todo: this probably needs to be investigated some more andcleaned up
parent ::XML_Parser ('ISO-8859-1');
function MDB2_Schema_Parser($variables, $fail_on_invalid_names = true , $structure = false , $valid_types = array (), $force_defaults = true )
$this->__construct($variables, $fail_on_invalid_names, $structure, $valid_types, $force_defaults);
case 'database-table-initialization':
$this->table['initialization'] = array ();
case 'database-table-initialization-insert':
$this->init = array ('type' => 'insert', 'data' => array ('field' => array ()));
/* insert-select: field+, table, where? */
case 'database-table-initialization-insert-select':
$this->init['data']['table'] = '';
/* update: field+, where? */
case 'database-table-initialization-update':
$this->init = array ('type' => 'update', 'data' => array ('field' => array ()));
case 'database-table-initialization-delete':
$this->init = array ('type' => 'delete', 'data' => array ('where' => array ()));
case 'database-table-initialization-insert-field':
case 'database-table-initialization-insert-select-field':
case 'database-table-initialization-update-field':
$this->init_field = array ('name' => '', 'group' => array ());
case 'database-table-initialization-insert-field-value':
case 'database-table-initialization-insert-select-field-value':
case 'database-table-initialization-update-field-value':
/* if value tag is empty cdataHandler is not called so we must force value element creation here */
$this->init_field['group'] = array ('type' => 'value', 'data' => '');
case 'database-table-initialization-insert-field-null':
case 'database-table-initialization-insert-select-field-null':
case 'database-table-initialization-update-field-null':
$this->init_field['group'] = array ('type' => 'null');
case 'database-table-initialization-insert-field-function':
case 'database-table-initialization-insert-select-field-function':
case 'database-table-initialization-update-field-function':
case 'database-table-initialization-insert-field-expression':
case 'database-table-initialization-insert-select-field-expression':
case 'database-table-initialization-update-field-expression':
case 'database-table-initialization-insert-select-where':
case 'database-table-initialization-update-where':
case 'database-table-initialization-delete-where':
$this->init['data']['where'] = array ('type' => '', 'data' => array ());
case 'database-table-initialization-insert-select-where-expression':
case 'database-table-initialization-update-where-expression':
case 'database-table-initialization-delete-where-expression':
/* One level simulation of expression-function recursion */
case 'database-table-initialization-insert-field-expression-function':
case 'database-table-initialization-insert-select-field-expression-function':
case 'database-table-initialization-insert-select-where-expression-function':
case 'database-table-initialization-update-field-expression-function':
case 'database-table-initialization-update-where-expression-function':
case 'database-table-initialization-delete-where-expression-function':
/* One level simulation of function-expression recursion */
case 'database-table-initialization-insert-field-function-expression':
case 'database-table-initialization-insert-select-field-function-expression':
case 'database-table-initialization-insert-select-where-function-expression':
case 'database-table-initialization-update-field-function-expression':
case 'database-table-initialization-update-where-function-expression':
case 'database-table-initialization-delete-where-function-expression':
'constraints' => array (),
'initialization' => array ()
case 'database-table-declaration-field':
case 'database-table-declaration-foreign-field':
case 'database-table-declaration-foreign-references-field':
case 'database-table-declaration-index-field':
$this->field = array ('sorting' => '', 'length' => '');
/* force field attributes to be initialized when the tag is empty in the XML */
case 'database-table-declaration-field-was':
$this->field['was'] = '';
case 'database-table-declaration-field-type':
$this->field['type'] = '';
case 'database-table-declaration-field-fixed':
$this->field['fixed'] = '';
case 'database-table-declaration-field-default':
$this->field['default'] = '';
case 'database-table-declaration-field-notnull':
$this->field['notnull'] = '';
case 'database-table-declaration-field-autoincrement':
$this->field['autoincrement'] = '';
case 'database-table-declaration-field-unsigned':
$this->field['unsigned'] = '';
case 'database-table-declaration-field-length':
$this->field['length'] = '';
case 'database-table-declaration-field-description':
$this->field['description'] = '';
case 'database-table-declaration-field-comments':
$this->field['comments'] = '';
case 'database-table-declaration-index':
case 'database-table-declaration-foreign':
'initiallydeferred' => '',
'references' => array ('table' => '', 'fields' => array ())
case 'database-sequence':
'on' => array ('table' => '', 'field' => '')
case 'database-table-initialization-insert-select':
$this->init['data'] = array ('select' => $this->init['data']);
case 'database-table-initialization-insert-field':
case 'database-table-initialization-insert-select-field':
case 'database-table-initialization-update-field':
$result = $this->val->validateDataField ($this->table['fields'], $this->init['data']['field'], $this->init_field);
if (PEAR ::isError ($result)) {
$this->raiseError($result->getUserinfo (), 0 , $xp, $result->getCode ());
case 'database-table-initialization-insert-field-function':
case 'database-table-initialization-insert-select-field-function':
case 'database-table-initialization-update-field-function':
case 'database-table-initialization-insert-field-expression':
case 'database-table-initialization-insert-select-field-expression':
case 'database-table-initialization-update-field-expression':
case 'database-table-initialization-insert-select-where-expression':
case 'database-table-initialization-update-where-expression':
case 'database-table-initialization-delete-where-expression':
$this->init['data']['where']['type'] = 'expression';
case 'database-table-initialization-insert':
case 'database-table-initialization-delete':
case 'database-table-initialization-update':
$this->table['initialization'][] = $this->init;
/* One level simulation of expression-function recursion */
case 'database-table-initialization-insert-field-expression-function':
case 'database-table-initialization-insert-select-field-expression-function':
case 'database-table-initialization-insert-select-where-expression-function':
case 'database-table-initialization-update-field-expression-function':
case 'database-table-initialization-update-where-expression-function':
case 'database-table-initialization-delete-where-expression-function':
/* One level simulation of function-expression recursion */
case 'database-table-initialization-insert-field-function-expression':
case 'database-table-initialization-insert-select-field-function-expression':
case 'database-table-initialization-insert-select-where-function-expression':
case 'database-table-initialization-update-field-function-expression':
case 'database-table-initialization-update-where-function-expression':
case 'database-table-initialization-delete-where-function-expression':
if (PEAR ::isError ($result)) {
$this->raiseError($result->getUserinfo (), 0 , $xp, $result->getCode ());
case 'database-table-name':
case 'database-table-declaration-field':
if (PEAR ::isError ($result)) {
$this->raiseError($result->getUserinfo (), 0 , $xp, $result->getCode ());
case 'database-table-declaration-index':
if (PEAR ::isError ($result)) {
$this->raiseError($result->getUserinfo (), 0 , $xp, $result->getCode ());
case 'database-table-declaration-index-field':
if (PEAR ::isError ($result)) {
$this->raiseError($result->getUserinfo (), 0 , $xp, $result->getCode ());
/* Foreign Key declaration */
case 'database-table-declaration-foreign':
if (PEAR ::isError ($result)) {
$this->raiseError($result->getUserinfo (), 0 , $xp, $result->getCode ());
case 'database-table-declaration-foreign-field':
if (PEAR ::isError ($result)) {
$this->raiseError($result->getUserinfo (), 0 , $xp, $result->getCode ());
case 'database-table-declaration-foreign-references-field':
$result = $this->val->validateConstraintReferencedField ($this->constraint['references']['fields'], $this->field_name);
if (PEAR ::isError ($result)) {
$this->raiseError($result->getUserinfo (), 0 , $xp, $result->getCode ());
/* Sequence declaration */
case 'database-sequence':
if (PEAR ::isError ($result)) {
$this->raiseError($result->getUserinfo (), 0 , $xp, $result->getCode ());
if (PEAR ::isError ($result)) {
$this->raiseError($result->getUserinfo (), 0 , $xp, $result->getCode ());
function &raiseError($msg = null , $xmlecode = 0 , $xp = null , $ecode = MDB2_SCHEMA_ERROR_PARSE )
$error.= 'Parser error: '. $msg;
$error.= ' - '. $error_string;
$error.= " - Byte: $byte; Line: $line; Col: $column";
$this->raiseError('variable "'. $data. '" not found', null , $xp);
case 'database-table-initialization-insert-select-table':
$this->init['data']['table'] = $data;
case 'database-table-initialization-insert-field-name':
case 'database-table-initialization-insert-select-field-name':
case 'database-table-initialization-update-field-name':
case 'database-table-initialization-insert-field-value':
case 'database-table-initialization-insert-select-field-value':
case 'database-table-initialization-update-field-value':
case 'database-table-initialization-insert-field-function-name':
case 'database-table-initialization-insert-select-field-function-name':
case 'database-table-initialization-update-field-function-name':
case 'database-table-initialization-insert-field-function-value':
case 'database-table-initialization-insert-select-field-function-value':
case 'database-table-initialization-update-field-function-value':
$this->init_function['arguments'][] = array ('type' => 'value', 'data' => $data);
case 'database-table-initialization-insert-field-function-column':
case 'database-table-initialization-insert-select-field-function-column':
case 'database-table-initialization-update-field-function-column':
$this->init_function['arguments'][] = array ('type' => 'column', 'data' => $data);
case 'database-table-initialization-insert-field-column':
case 'database-table-initialization-insert-select-field-column':
case 'database-table-initialization-update-field-column':
$this->init_field['group'] = array ('type' => 'column', 'data' => $data);
case 'database-table-initialization-insert-field-expression-operator':
case 'database-table-initialization-insert-select-field-expression-operator':
case 'database-table-initialization-insert-select-where-expression-operator':
case 'database-table-initialization-update-field-expression-operator':
case 'database-table-initialization-update-where-expression-operator':
case 'database-table-initialization-delete-where-expression-operator':
case 'database-table-initialization-insert-field-expression-value':
case 'database-table-initialization-insert-select-field-expression-value':
case 'database-table-initialization-insert-select-where-expression-value':
case 'database-table-initialization-update-field-expression-value':
case 'database-table-initialization-update-where-expression-value':
case 'database-table-initialization-delete-where-expression-value':
$this->init_expression['operants'][] = array ('type' => 'value', 'data' => $data);
case 'database-table-initialization-insert-field-expression-column':
case 'database-table-initialization-insert-select-field-expression-column':
case 'database-table-initialization-insert-select-where-expression-column':
case 'database-table-initialization-update-field-expression-column':
case 'database-table-initialization-update-where-expression-column':
case 'database-table-initialization-delete-where-expression-column':
$this->init_expression['operants'][] = array ('type' => 'column', 'data' => $data);
case 'database-table-initialization-insert-field-function-function':
case 'database-table-initialization-insert-field-function-expression':
case 'database-table-initialization-insert-field-expression-expression':
case 'database-table-initialization-update-field-function-function':
case 'database-table-initialization-update-field-function-expression':
case 'database-table-initialization-update-field-expression-expression':
case 'database-table-initialization-update-where-expression-expression':
case 'database-table-initialization-delete-where-expression-expression':
/* Recursion to be implemented yet */
/* One level simulation of expression-function recursion */
case 'database-table-initialization-insert-field-expression-function-name':
case 'database-table-initialization-insert-select-field-expression-function-name':
case 'database-table-initialization-insert-select-where-expression-function-name':
case 'database-table-initialization-update-field-expression-function-name':
case 'database-table-initialization-update-where-expression-function-name':
case 'database-table-initialization-delete-where-expression-function-name':
case 'database-table-initialization-insert-field-expression-function-value':
case 'database-table-initialization-insert-select-field-expression-function-value':
case 'database-table-initialization-insert-select-where-expression-function-value':
case 'database-table-initialization-update-field-expression-function-value':
case 'database-table-initialization-update-where-expression-function-value':
case 'database-table-initialization-delete-where-expression-function-value':
$this->init_function['arguments'][] = array ('type' => 'value', 'data' => $data);
case 'database-table-initialization-insert-field-expression-function-column':
case 'database-table-initialization-insert-select-field-expression-function-column':
case 'database-table-initialization-insert-select-where-expression-function-column':
case 'database-table-initialization-update-field-expression-function-column':
case 'database-table-initialization-update-where-expression-function-column':
case 'database-table-initialization-delete-where-expression-function-column':
$this->init_function['arguments'][] = array ('type' => 'column', 'data' => $data);
/* One level simulation of function-expression recursion */
case 'database-table-initialization-insert-field-function-expression-operator':
case 'database-table-initialization-insert-select-field-function-expression-operator':
case 'database-table-initialization-update-field-function-expression-operator':
case 'database-table-initialization-insert-field-function-expression-value':
case 'database-table-initialization-insert-select-field-function-expression-value':
case 'database-table-initialization-update-field-function-expression-value':
$this->init_expression['operants'][] = array ('type' => 'value', 'data' => $data);
case 'database-table-initialization-insert-field-function-expression-column':
case 'database-table-initialization-insert-select-field-function-expression-column':
case 'database-table-initialization-update-field-function-expression-column':
$this->init_expression['operants'][] = array ('type' => 'column', 'data' => $data);
case 'database-overwrite':
case 'database-description':
case 'database-comments':
case 'database-table-name':
case 'database-table-was':
$this->table['was'].= $data;
case 'database-table-description':
$this->table['description'].= $data;
case 'database-table-comments':
$this->table['comments'].= $data;
case 'database-table-declaration-field-name':
case 'database-table-declaration-field-was':
$this->field['was'].= $data;
case 'database-table-declaration-field-type':
$this->field['type'].= $data;
case 'database-table-declaration-field-fixed':
$this->field['fixed'].= $data;
case 'database-table-declaration-field-default':
$this->field['default'].= $data;
case 'database-table-declaration-field-notnull':
$this->field['notnull'].= $data;
case 'database-table-declaration-field-autoincrement':
$this->field['autoincrement'].= $data;
case 'database-table-declaration-field-unsigned':
$this->field['unsigned'].= $data;
case 'database-table-declaration-field-length':
$this->field['length'].= $data;
case 'database-table-declaration-field-description':
$this->field['description'].= $data;
case 'database-table-declaration-field-comments':
$this->field['comments'].= $data;
case 'database-table-declaration-index-name':
case 'database-table-declaration-index-was':
$this->index['was'].= $data;
case 'database-table-declaration-index-unique':
$this->index['unique'].= $data;
case 'database-table-declaration-index-primary':
$this->index['primary'].= $data;
case 'database-table-declaration-index-field-name':
case 'database-table-declaration-index-field-sorting':
$this->field['sorting'].= $data;
case 'database-table-declaration-index-field-length':
$this->field['length'].= $data;
/* Foreign Key declaration */
case 'database-table-declaration-foreign-name':
case 'database-table-declaration-foreign-was':
case 'database-table-declaration-foreign-match':
case 'database-table-declaration-foreign-ondelete':
case 'database-table-declaration-foreign-onupdate':
case 'database-table-declaration-foreign-deferrable':
case 'database-table-declaration-foreign-initiallydeferred':
case 'database-table-declaration-foreign-field':
case 'database-table-declaration-foreign-references-table':
case 'database-table-declaration-foreign-references-field':
/* Sequence declaration */
case 'database-sequence-name':
case 'database-sequence-was':
case 'database-sequence-start':
case 'database-sequence-description':
case 'database-sequence-comments':
case 'database-sequence-on-table':
case 'database-sequence-on-field':
Documentation generated on Mon, 11 Mar 2019 15:16:43 -0400 by phpDocumentor 1.4.4. PEAR Logo Copyright © PHP Group 2004.
|