Пример #1
0
 /**
  * Returns XML string representation of database declaration
  *
  * @param  string $indent string of whitespace, prefix to each line
  * @return string XML string representation
  * @access public
  */
 function toXML($indent = '')
 {
     require_once 'DB/Table/XML.php';
     $s = array();
     $s[] = DB_Table_XML::openTag('database', $indent);
     foreach ($this->_table as $name => $table_obj) {
         $s[] = $table_obj->toXML($indent);
     }
     $s[] = DB_Table_XML::closeTag('database', $indent);
     return implode("\n", $s);
 }
Пример #2
0
 /**
  * Returns XML string representation of the table
  *
  * @param  string $indent string of whitespace
  * @return string XML string
  * @access public
  */
 function toXML($indent = '')
 {
     require_once 'DB/Table/XML.php';
     $s = array();
     $s[] = DB_Table_XML::openTag('table', $indent);
     $s[] = DB_Table_XML::lineElement('name', $this->table, $indent);
     $s[] = DB_Table_XML::openTag('declaration', $indent);
     // Column declarations
     foreach ($this->col as $name => $col) {
         $type = isset($col['type']) ? $col['type'] : null;
         $size = isset($col['size']) ? $col['size'] : null;
         $scope = isset($col['scope']) ? $col['scope'] : null;
         $require = isset($col['require']) ? $col['require'] : null;
         $default = isset($col['set default']) ? $col['set default'] : null;
         $line = '   ' . $name . '  ' . $type;
         $s[] = DB_Table_XML::openTag('field', $indent);
         $s[] = DB_Table_XML::lineElement('name', $name, $indent);
         $s[] = DB_Table_XML::lineElement('type', $type, $indent);
         if ($size) {
             $s[] = DB_Table_XML::lineElement('length', $size, $indent);
         }
         if ($require) {
             $require = (int) $require;
             $s[] = DB_Table_XML::lineElement('notnull', $require, $indent);
         }
         if (!($default === null)) {
             $s[] = DB_Table_XML::lineElement('set default', $default, $indent);
         }
         if ($this->auto_inc_col == $name) {
             $s[] = DB_Table_XML::lineElement('autoincrement', '1', $indent);
         }
         $s[] = DB_Table_XML::closeTag('field', $indent);
     }
     // Index declarations
     foreach ($this->idx as $name => $idx) {
         $s[] = DB_Table_XML::openTag('index', $indent);
         $cols = $idx['cols'];
         $type = $idx['type'];
         if (is_string($name)) {
             $s[] = DB_Table_XML::lineElement('name', $name, $indent);
         }
         if ($type == 'primary') {
             $s[] = DB_Table_XML::lineElement('primary', '1', $indent);
         } elseif ($type == 'unique') {
             $s[] = DB_Table_XML::lineElement('unique', '1', $indent);
         }
         if (is_string($cols)) {
             $cols = array($cols);
         }
         foreach ($cols as $col) {
             $s[] = DB_Table_XML::lineElement('field', $col, $indent);
         }
         $s[] = DB_Table_XML::closeTag('index', $indent);
     }
     // Foreign key references (if $this->_database is not null)
     if ($this->_database) {
         if (isset($this->_database->_ref[$this->table])) {
             $refs = $this->_database->_ref[$this->table];
             foreach ($refs as $rtable => $def) {
                 $fkey = $def['fkey'];
                 // foreign key of referencing table
                 $rkey = $def['rkey'];
                 // referenced/primary key
                 if (is_string($fkey)) {
                     $fkey = array($fkey);
                 }
                 if (is_string($rkey)) {
                     $rkey = array($rkey);
                 }
                 $on_delete = $def['on_delete'];
                 // on-delete action
                 $on_update = $def['on_update'];
                 // on-update action
                 $s[] = DB_Table_XML::openTag('foreign', $indent);
                 foreach ($fkey as $fcol) {
                     $s[] = DB_Table_XML::lineElement('field', $fcol, $indent);
                 }
                 $s[] = DB_Table_XML::openTag('references', $indent);
                 $s[] = DB_Table_XML::lineElement('table', $rtable, $indent);
                 if ($rkey) {
                     foreach ($rkey as $rcol) {
                         $s[] = DB_Table_XML::lineElement('field', $rcol, $indent);
                     }
                 }
                 $s[] = DB_Table_XML::closeTag('references', $indent);
                 if ($on_delete) {
                     $s[] = DB_Table_XML::lineElement('ondelete', $on_delete, $indent);
                 }
                 if ($on_update) {
                     $s[] = DB_Table_XML::lineElement('onupdate', $on_update, $indent);
                 }
                 $s[] = DB_Table_XML::closeTag('foreign', $indent);
             }
         }
     }
     $s[] = DB_Table_XML::closeTag('declaration', $indent);
     $s[] = DB_Table_XML::closeTag('table', $indent);
     return implode("\n", $s);
 }