Source for file Parser.php
Documentation is available at Parser.php
// +----------------------------------------------------------------------+
// | PHP versions 4 and 5 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1998-2006 Manuel Lemos, Tomas V.V.Cox, |
// | Stig. S. Bakken, Lukas Smith |
// | All rights reserved. |
// +----------------------------------------------------------------------+
// | MDB2 is a merge of PEAR DB and Metabases that provides a unified DB |
// | API as well as database abstraction for PHP applications. |
// | 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 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> |
// +----------------------------------------------------------------------+
// $Id: Parser.php,v 1.55 2006/12/16 04:00:39 ifeghali Exp $
require_once 'XML/Parser.php';
require_once 'MDB2/Schema/Validate.php';
if (empty ($GLOBALS['_MDB2_Schema_Reserved'])) {
$GLOBALS['_MDB2_Schema_Reserved'] = array ();
* Parses an XML schema file
* @author Christian Dickmann <dickmann@php.net>
var $database_definition = array ('name' => '', 'create' => '', 'overwrite' => '', 'tables' => array (), 'sequences' => array ());
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 ()));
/* 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-update-field':
$this->init_field = array ('name' => '', 'group' => array ());
case 'database-table-initialization-insert-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-update-field-null':
$this->init_field['group'] = array ('type' => 'null');
case 'database-table-initialization-insert-field-function':
case 'database-table-initialization-update-field-function':
case 'database-table-initialization-insert-field-expression':
case 'database-table-initialization-update-field-expression':
case 'database-table-initialization-update-where':
case 'database-table-initialization-delete-where':
$this->init['data']['where'] = array ('type' => '', 'data' => array ());
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-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-update-field-function-expression':
case 'database-table-initialization-update-where-function-expression':
case 'database-table-initialization-delete-where-function-expression':
$this->table = array ('fields' => array (), 'indexes' => array ());
case 'database-table-declaration-field':
case 'database-table-declaration-field-default':
$this->field['default'] = '';
case 'database-table-declaration-index':
$this->index = array ('fields' => array ());
case 'database-sequence':
case 'database-table-declaration-index-field':
case 'database-table-initialization-insert-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-update-field-function':
case 'database-table-initialization-insert-field-expression':
case 'database-table-initialization-update-field-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-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-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 ());
/* 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-field-name':
case 'database-table-initialization-update-field-name':
case 'database-table-initialization-insert-field-value':
case 'database-table-initialization-update-field-value':
$this->init_field['group'] = array ('type' => 'value', 'data' => $data);
case 'database-table-initialization-insert-field-function-name':
case 'database-table-initialization-update-field-function-name':
case 'database-table-initialization-insert-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-update-field-function-column':
$this->init_function['arguments'][] = array ('type' => 'column', 'data' => $data);
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-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-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-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-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-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-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-update-field-function-expression-operator':
case 'database-table-initialization-insert-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-update-field-function-expression-column':
$this->init_expression['operants'][] = array ('type' => 'column', 'data' => $data);
case 'database-overwrite':
case 'database-table-name':
case 'database-table-was':
if (isset ($this->table['was'])) {
$this->table['was'].= $data;
$this->table['was'] = $data;
case 'database-table-declaration-field-name':
case 'database-table-declaration-field-type':
if (isset ($this->field['type'])) {
$this->field['type'].= $data;
$this->field['type'] = $data;
case 'database-table-declaration-field-was':
if (isset ($this->field['was'])) {
$this->field['was'].= $data;
$this->field['was'] = $data;
case 'database-table-declaration-field-notnull':
if (isset ($this->field['notnull'])) {
$this->field['notnull'].= $data;
$this->field['notnull'] = $data;
case 'database-table-declaration-field-fixed':
if (isset ($this->field['fixed'])) {
$this->field['fixed'].= $data;
$this->field['fixed'] = $data;
case 'database-table-declaration-field-unsigned':
if (isset ($this->field['unsigned'])) {
$this->field['unsigned'].= $data;
$this->field['unsigned'] = $data;
case 'database-table-declaration-field-autoincrement':
if (isset ($this->field['autoincrement'])) {
$this->field['autoincrement'].= $data;
$this->field['autoincrement'] = $data;
case 'database-table-declaration-field-default':
if (isset ($this->field['default'])) {
$this->field['default'].= $data;
$this->field['default'] = $data;
case 'database-table-declaration-field-length':
if (isset ($this->field['length'])) {
$this->field['length'].= $data;
$this->field['length'] = $data;
case 'database-table-declaration-index-name':
case 'database-table-declaration-index-primary':
if (isset ($this->index['primary'])) {
$this->index['primary'].= $data;
$this->index['primary'] = $data;
case 'database-table-declaration-index-unique':
if (isset ($this->index['unique'])) {
$this->index['unique'].= $data;
$this->index['unique'] = $data;
case 'database-table-declaration-index-was':
if (isset ($this->index['was'])) {
$this->index['was'].= $data;
$this->index['was'] = $data;
case 'database-table-declaration-index-field-name':
case 'database-table-declaration-index-field-sorting':
if (isset ($this->field['sorting'])) {
$this->field['sorting'].= $data;
$this->field['sorting'] = $data;
case 'database-table-declaration-index-field-length':
if (isset ($this->field['length'])) {
$this->field['length'].= $data;
$this->field['length'] = $data;
/* Sequence declaration */
case 'database-sequence-name':
case 'database-sequence-was':
case 'database-sequence-start':
case 'database-sequence-on-table':
if (isset ($this->sequence['on']['table'])) {
case 'database-sequence-on-field':
if (isset ($this->sequence['on']['field'])) {
Documentation generated on Mon, 11 Mar 2019 14:58:00 -0400 by phpDocumentor 1.4.4. PEAR Logo Copyright © PHP Group 2004.
|