/** * 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); }
/** * 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); }