/** * Autoload or manually load the table definitions * * * usage : * DB_DataObject::databaseStructure( 'databasename', * parse_ini_file('mydb.ini',true), * parse_ini_file('mydb.link.ini',true)); * * obviously you dont have to use ini files.. (just return array similar to ini files..) * * It should append to the table structure array * * * @param optional string name of database to assign / read * @param optional array structure of database, and keys * @param optional array table links * * @access public * @return true or PEAR:error on wrong paramenters.. or false if no file exists.. * or the array(tablename => array(column_name=>type)) if called with 1 argument.. (databasename) */ function databaseStructure() { global $_DB_DATAOBJECT; // Assignment code if ($args = func_get_args()) { if (count($args) == 1) { // this returns all the tables and their structure.. if (!empty($_DB_DATAOBJECT['CONFIG']['debug'])) { $this->debug("Loading Generator as databaseStructure called with args", 1); } $x = new DB_DataObject(); $x->_database = $args[0]; $this->_connect(); $DB =& $_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]; $tables = $DB->getListOf('tables'); class_exists('DB_DataObject_Generator') ? '' : (require_once 'DB/DataObject/Generator.php'); foreach ($tables as $table) { $y = new DB_DataObject_Generator(); $y->fillTableSchema($x->_database, $table); } return $_DB_DATAOBJECT['INI'][$x->_database]; } else { $_DB_DATAOBJECT['INI'][$args[0]] = isset($_DB_DATAOBJECT['INI'][$args[0]]) ? $_DB_DATAOBJECT['INI'][$args[0]] + $args[1] : $args[1]; if (isset($args[1])) { $_DB_DATAOBJECT['LINKS'][$args[0]] = isset($_DB_DATAOBJECT['LINKS'][$args[0]]) ? $_DB_DATAOBJECT['LINKS'][$args[0]] + $args[2] : $args[2]; } return true; } } if (!$this->_database) { $this->_connect(); } // loaded already? if (!empty($_DB_DATAOBJECT['INI'][$this->_database])) { // database loaded - but this is table is not available.. if (empty($_DB_DATAOBJECT['INI'][$this->_database][$this->__table]) && !empty($_DB_DATAOBJECT['CONFIG']['proxy'])) { if (!empty($_DB_DATAOBJECT['CONFIG']['debug'])) { $this->debug("Loading Generator to fetch Schema", 1); } class_exists('DB_DataObject_Generator') ? '' : (require_once 'DB/DataObject/Generator.php'); $x = new DB_DataObject_Generator(); $x->fillTableSchema($this->_database, $this->__table); } return true; } if (empty($_DB_DATAOBJECT['CONFIG'])) { DB_DataObject::_loadConfig(); } // if you supply this with arguments, then it will take those // as the database and links array... $schemas = isset($_DB_DATAOBJECT['CONFIG']['schema_location']) ? array("{$_DB_DATAOBJECT['CONFIG']['schema_location']}/{$this->_database}.ini") : array(); if (isset($_DB_DATAOBJECT['CONFIG']["ini_{$this->_database}"])) { $schemas = is_array($_DB_DATAOBJECT['CONFIG']["ini_{$this->_database}"]) ? $_DB_DATAOBJECT['CONFIG']["ini_{$this->_database}"] : explode(PATH_SEPARATOR, $_DB_DATAOBJECT['CONFIG']["ini_{$this->_database}"]); } $_DB_DATAOBJECT['INI'][$this->_database] = array(); foreach ($schemas as $ini) { if (file_exists($ini) && is_file($ini)) { $_DB_DATAOBJECT['INI'][$this->_database] = array_merge($_DB_DATAOBJECT['INI'][$this->_database], parse_ini_file($ini, true)); if (!empty($_DB_DATAOBJECT['CONFIG']['debug'])) { if (!is_readable($ini)) { $this->debug("ini file is not readable: {$ini}", "databaseStructure", 1); } else { $this->debug("Loaded ini file: {$ini}", "databaseStructure", 1); } } } else { if (!empty($_DB_DATAOBJECT['CONFIG']['debug'])) { $this->debug("Missing ini file: {$ini}", "databaseStructure", 1); } } } // now have we loaded the structure.. if (!empty($_DB_DATAOBJECT['INI'][$this->_database][$this->__table])) { return true; } // - if not try building it.. if (!empty($_DB_DATAOBJECT['CONFIG']['proxy'])) { class_exists('DB_DataObject_Generator') ? '' : (require_once 'DB/DataObject/Generator.php'); $x = new DB_DataObject_Generator(); $x->fillTableSchema($this->_database, $this->__table); // should this fail!!!??? return true; } $this->debug("Cant find database schema: {$this->_database}/{$this->__table} \n" . "in links file data: " . print_r($_DB_DATAOBJECT['INI'], true), "databaseStructure", 5); // we have to die here!! - it causes chaos if we dont (including looping forever!) $this->raiseError("Unable to load schema for database and table (turn debugging up to 5 for full error message)", DB_DATAOBJECT_ERROR_INVALIDARGS, PEAR_ERROR_DIE); return false; }
/** * Autoload or manually load the table definitions * * * usage : * DB_DataObject::databaseStructure( 'databasename', * parse_ini_file('mydb.ini',true), * parse_ini_file('mydb.link.ini',true)); * * obviously you dont have to use ini files.. (just return array similar to ini files..) * * It should append to the table structure array * * * @param optional string name of database to assign / read * @param optional array structure of database, and keys * @param optional array table links * * @access public * @return true or PEAR:error on wrong paramenters.. or false if no file exists.. * or the array(tablename => array(column_name=>type)) if called with 1 argument.. (databasename) */ function databaseStructure() { global $_DB_DATAOBJECT; // Assignment code if ($args = func_get_args()) { if (count($args) == 1) { // this returns all the tables and their structure.. $x = new DB_DataObject(); $x->_database = $args[0]; $this->_connect(); $DB =& $_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]; $tables = $DB->getListOf('tables'); require_once 'DB/DataObject/Generator.php'; foreach ($tables as $table) { $y = new DB_DataObject_Generator(); $y->fillTableSchema($x->_database, $table); } return $_DB_DATAOBJECT['INI'][$x->_database]; } else { $_DB_DATAOBJECT['INI'][$args[0]] = isset($_DB_DATAOBJECT['INI'][$args[0]]) ? $_DB_DATAOBJECT['INI'][$args[0]] + $args[1] : $args[1]; if (isset($args[1])) { $_DB_DATAOBJECT['LINKS'][$args[0]] = isset($_DB_DATAOBJECT['LINKS'][$args[0]]) ? $_DB_DATAOBJECT['LINKS'][$args[0]] + $args[2] : $args[2]; } return true; } } if (!$this->_database) { $this->_connect(); } // loaded already? if (!empty($_DB_DATAOBJECT['INI'][$this->_database])) { // database loaded - but this is table is not available.. if (empty($_DB_DATAOBJECT['INI'][$this->_database][$this->__table])) { require_once 'DB/DataObject/Generator.php'; $x = new DB_DataObject_Generator(); $x->fillTableSchema($this->_database, $this->__table); } return true; } if (empty($_DB_DATAOBJECT['CONFIG'])) { DB_DataObject::_loadConfig(); } // if you supply this with arguments, then it will take those // as the database and links array... $schemas = isset($_DB_DATAOBJECT['CONFIG']['schema_location']) ? array("{$_DB_DATAOBJECT['CONFIG']['schema_location']}/{$this->_database}.ini") : array(); if (isset($_DB_DATAOBJECT['CONFIG']["ini_{$this->_database}"])) { $schemas = is_array($_DB_DATAOBJECT['CONFIG']["ini_{$this->_database}"]) ? $_DB_DATAOBJECT['CONFIG']["ini_{$this->_database}"] : explode(PATH_SEPARATOR, $_DB_DATAOBJECT['CONFIG']["ini_{$this->_database}"]); } foreach ($schemas as $ini) { $links = isset($_DB_DATAOBJECT['CONFIG']["links_{$this->_database}"]) ? $_DB_DATAOBJECT['CONFIG']["links_{$this->_database}"] : str_replace('.ini', '.links.ini', $ini); if (file_exists($ini) && is_file($ini)) { $_DB_DATAOBJECT['INI'][$this->_database] = parse_ini_file($ini, true); if (!empty($_DB_DATAOBJECT['CONFIG']['debug'])) { $this->debug("Loaded ini file: {$ini}", "databaseStructure", 1); } } else { if (!empty($_DB_DATAOBJECT['CONFIG']['debug'])) { $this->debug("Missing ini file: {$ini}", "databaseStructure", 1); } } if (empty($_DB_DATAOBJECT['LINKS'][$this->_database]) && file_exists($links) && is_file($links)) { /* not sure why $links = ... here - TODO check if that works */ $_DB_DATAOBJECT['LINKS'][$this->_database] = parse_ini_file($links, true); if (!empty($_DB_DATAOBJECT['CONFIG']['debug'])) { $this->debug("Loaded links.ini file: {$links}", "databaseStructure", 1); } } else { if (!empty($_DB_DATAOBJECT['CONFIG']['debug'])) { $this->debug("Missing links.ini file: {$links}", "databaseStructure", 1); } } } // now have we loaded the structure.. - if not try building it.. if (empty($_DB_DATAOBJECT['INI'][$this->_database][$this->__table])) { require_once 'DB/DataObject/Generator.php'; $x = new DB_DataObject_Generator(); $x->fillTableSchema($this->_database, $this->__table); } return true; }