PX : code

XML DB Schema Interpreter by Richard Heyes
Download this code


s<?php
/***************************************
** Title........: XML Database Interpreter
** Filename.....: xml.db.interpreter.php
** Author.......: Richard Heyes
** Version......: 1.0
** Notes........:
** Last changed.: 7/8/2000
** Last change..:
***************************************/

        
class xml_dbas{

                var 
$xml;
                var 
$data;
                var 
$temp_sql;
                var 
$table_options;
                var 
$sql    = array();
                var 
$fields = array();
                var 
$sql_errors = array();

        
/***************************************
        ** Constructor function. Creates the xml
        ** parser.
        ***************************************/
                
function xml_dbas(){
                        
$this->xml xml_parser_create();
                        
xml_set_object($this->xml, &$this);
                }

        
/***************************************
        ** Accessor function for $sql
        ***************************************/
                
function get_sql(){
                        return 
$this->sql;
                }

        
/***************************************
        ** Accessor function for $sql_errors
        ***************************************/
                
function get_sql_errors(){
                        return 
$this->sql_errors;
                }

        
/***************************************
        ** Accessor function for $data
        ***************************************/
                
function get_data(){
                        return 
$this->data;
                }

        
/***************************************
        ** Start element function.
        ***************************************/
                
function start_element($xml$element$attributes){
                        switch(
$element){
                                case 
'DATABASE': if(isset($attributes['IF_NOT_EXISTS']) AND $attributes['IF_NOT_EXISTS'] == 'yes'$if_not_exists 'IF NOT EXISTS '; else $if_not_exists '';
                                                 
$this->sql[] = 'CREATE DATABASE '.$if_not_exists.$attributes['NAME'];
                                                 
$this->sql[] = 'USE '.$attributes['NAME'];
                                                 break;

                                case 
'TABLE':    if(isset($attributes['TEMPORARY'])     AND $attributes['TEMPORARY'] == 'yes')     $temporary 'TEMPORARY '; else $temporary '';
                                                 if(isset(
$attributes['IF_NOT_EXISTS']) AND $attributes['IF_NOT_EXISTS'] == 'yes'$if_not_exists 'IF NOT EXISTS '; else $if_not_exists '';
                                                 if(isset(
$attributes['OPTIONS'])       AND $attributes['OPTIONS'] != '')          $this->table_options ' '.$attributes['OPTIONS']; else $this->table_options '';
                                                 
$this->temp_sql 'CREATE '.$temporary.'TABLE '.$if_not_exists.$attributes['NAME'].' (';
                                                 break;

                                case 
'FIELD':    $temp_var $attributes['NAME'].' '.$attributes['TYPE'].'('.$attributes['SIZE'].')';
                                                 if(isset(
$attributes['NULL']) AND $attributes['NULL'] == 'no'$temp_var.= ' NOT NULL'; else $temp_var .= ' NULL';
                                                 if(isset(
$attributes['DEFAULT'])) $temp_var .= " DEFAULT '".$attributes['DEFAULT']."'";
                                                 if(isset(
$attributes['EXTRA']))   $temp_var .= ' '.$attributes['EXTRA'];
                                                 
$this->fields[] = $temp_var;
                                                 break;

                                case 
'KEY':      if(isset($attributes['TYPE']) AND $attributes['TYPE'] == 'primary'$this->fields[] = 'PRIMARY KEY ('.$attributes['FIELD'].')';
                                                 if(isset(
$attributes['TYPE']) AND $attributes['TYPE'] == 'unique')  $this->fields[] = 'UNIQUE '.$attributes['NAME'].' ('.$attributes['FIELD'].')';
                                                 if(isset(
$attributes['TYPE']) AND $attributes['TYPE'] == 'index')   $this->fields[] = 'INDEX '.$attributes['NAME'].' ('.$attributes['FIELD'].')';
                                                 break;

                                default:         break;
                        }
                }

        
/***************************************
        ** End element function.
        ***************************************/
                
function end_element($xml$element){
                        switch(
$element){
                                case 
'TABLE':    $this->sql[] = $this->temp_sql.implode(', '$this->fields).')'.$this->table_options;
                                                 
$this->temp_sql '';
                                                 
$this->fields   = array();
                                                 break;

                                default:         break;
                        }
                }

        
/***************************************
        ** Retrieve the schema of the database.
        ** Second argument:
        ** TRUE  = is file
        ** FALSE = is data
        ***************************************/
                
function set_schema($data$is_file){
                        if(
$is_file == TRUE){
                                if(
$fp fopen($data'r')){
                                        
$this->data fread($fpfilesize($data));
                                        
fclose($fp);
                                }else{
                                        return(
'Error: Unable to open file.');
                                }
                        }else{
                                
$this->data $data;
                        }
                }

        
/***************************************
        ** Parse the bugger.
        ***************************************/
                
function parse_schema(){
                        
xml_parser_set_option($this->xmlXML_OPTION_CASE_FOLDINGTRUE);
                        
xml_set_element_handler($this->xml'start_element''end_element');
                        
xml_parse($this->xml$this->data);
                }

        
/***************************************
        ** Function to execute the sql.
        ***************************************/
                
function create_dbas($host$user$pass$database ''){
                        
$connection mysql_connect($host$user$pass);
                        if(
$database != ''mysql_select_db($database$connection);
                        for(
$i=0$i<count($this->sql); $i++) mysql_query($this->sql[$i], $connection) OR $this->sql_errors[] = mysql_error($connection);
                }

        } 
// End of class.
?>

Comments or questions?
PX is running PHP 5.2.17
Thanks to Miranda Productions for hosting and bandwidth.
Use of any code from PX is at your own risk.