<?php 
/* 
============================================================================================================================================= 
|   This file is part of a project released under the terms of the Xyndravandria PHP License (XyndravandriaPHPLicense.txt).                 | 
|                                                                                                                                           | 
|   You should be given a copy of the Xyndravandria PHP License (XyndravandriaPHPLicense.txt) within the same directory as the README.md;   | 
|   if not, you can get a copy at http://Xyndravandria.ohost.de/XyndravandriaPHPLicense.txt .                                               | 
|                                                                                                                                           | 
|   The copyright (c) of this project is owned by Mauro Di Girolamo <[email protected]>.                                              | 
============================================================================================================================================| 
 
 
 
Xyndravandria Dyverath 
---------------------- 
Alpha 0.0.0 
 
Xyndravandria is the name of a collection of projects designed and developed by Mauro Di Girolamo ([email protected]); he is therefore the copyright (c) owner of Xyndravandria itself and all of its projects. 
 
Xyndravandria Dyverath is released under the terms of the Xyndravandria PHP License (XyndravandriaPHPLicense.txt). You should be given a copy of the Xyndravandria PHP License (XyndravandriaPHPLicense.txt) within the same directory as the README.md; if not, you can get a copy at http://Xyndravandria.ohost.de/XyndravandriaPHPLicense.txt . There might be a release under a freer license for a later, more stable version. 
 
The documentation is either included in ./admin_media/Documentation/ or can be read at http://Xyndravandria.ohost.de/Dyverath/Documentation/. 
 
All projects: 
 
   Xyndravandria Averazain 
   http://github.com/MauroDiGirolamo/Xyndravandria_Averazain 
   PHP 
   Averazain is an Ajax framework supporting also JavaScript disabled clients perfectly - including search engines like Google. 
    
   Xyndravandria Dyverath 
   http://github.com/MauroDiGirolamo/Xyndravandria_Dyverath 
   PHP 
   Dyverath is a database access wrapper. 
    
   Xyndravandria Erozaver 
   http://github.com/MauroDiGirolamo/Xyndravandria_Erozaver 
   PHP 
   Erozaver is a class extending the type hinting given by the PHP engine (additional support for basic type hinting and size constraints). 
    
   Xyndravandria Mondraviel 
   http://github.com/MauroDiGirolamo/Xyndravandria_Mondraviel 
   PHP 
   Mondraviel is a class used to separate HTML from PHP code by firstly register models - files containing place holders embedded in HTML code - and then later fill them dynamically with content by passing values for the place holders. 
*/ 
 
namespace Xyndravandria\Dyverath; 
 
use Xyndravandria\Dyverath\Query\Query; 
 
/// A class representing a @ref Server "Server's" 
/// Database. 
class Database extends ExtendedRepresentingClass { 
    
   /// A reference to a @ref Database "Database's" Server. 
   /// <dl class = "type"><dt><b>%Type:</b></dt> 
   /// <dd>Server</dd></dl> 
   /// @private  
   private $Server = null; 
    
   /// Returns Database::$Server. 
   /// @public  
   /// @returns Server 
   public function Server( ) { 
      return $this->Server; 
   } 
    
   /// Creates a new Database. 
   /// @public  
   /// @param string $Name: The name of the Database. 
   /// @param Server $Server: The @ref Database 
   /// "Database's" Server. 
   public function __construct( $Name, Server $Server ) { 
      parent::__construct( $Name ); 
      $this->Server = $Server; 
      return; 
   } 
    
   /// Accesses one of a @ref Database "Database's" @ref 
   /// Table "Tables". 
   /// @public 
   /// @param string $Name: The @ref Table "Table's" name. 
   /// @param mixed $PrimaryKeyValue: If you directly 
   /// pass a value for the @ref Table "Table's" primary 
   /// key, you will be returned a Dataset instead. 
   /// @note $PrimaryKeyValue is an optional parameter. @n 
   /// Besides, a primary key can consist of more than 
   /// one column and thus, $PrimaryKeyValue can also be 
   /// an array of mixed. 
   public function Table( $Name, $PrimaryKeyValue = '' ) { 
      //\settype( $Name, 'string' ); 
      //\settype( $PrimaryKeyValue, 'string' ); // TODO: $PrimaryKeyValue always a string (integers etc. will be converted)? 
      $Table = new Table( $Name, $this, $PrimaryKeyValue ); 
      if( ( $TableSaved = Table::Cache( )->Get( $Table->UniqueIdentifier( ) ) ) ) { 
         if( empty( $PrimaryKeyValue ) ) 
            return $TableSaved; 
         else 
            return $TableSaved->DatasetByPrimaryKey( $PrimaryKeyValue ); 
      } elseif( \mysql_num_rows( $this->Server->ExecuteQuery( new Query( 'SELECT TRUE FROM `INFORMATION_SCHEMA`.`TABLES` WHERE `TABLES`.`TABLE_SCHEMA` = \'' . \mysql_real_escape_string( $this->Name ) . '\' AND `TABLES`.`TABLE_NAME` = \'' . \mysql_real_escape_string( $Table->Name( ) ) . '\' LIMIT 1' ) ) ) == 0 ) 
         throw new XyndravandriaDyverathException( 'Requested unknown table \'' . $Table->Name( ) . '\' in database \'' . $this->Name . '\'.' ); 
      else if( Table::Configuration( ) & Table::CacheEnabled ) { 
         if( empty( $PrimaryKeyValue ) ) 
            return Table::Cache( )->Add( $Table ); 
         else 
            return Table::Cache( )->Add( $Table )->DatasetByPrimaryKey( $PrimaryKeyValue ); 
      } else { 
         if( empty( $PrimaryKeyValue ) ) 
            return $Table; 
         else 
            return $Table->DatasetByPrimaryKey( $PrimaryKeyValue ); 
      } 
      return; 
   } 
    
   /// Alias of Database::Table( ). 
   public function __get( $Table ) { 
      return $this->Table( $Table ); 
   } 
 
   /// Alias of Database::Table( ). 
   public function __call( $Table, $PrimaryKeyValue ) { 
      return empty( $PrimaryKeyValue ) ? $this->Table( $Table ) : $this->Table( $Table, $PrimaryKeyValue[ 0 ] ); 
   } 
    
   /// Returns all this @ref Database "Database's" @ref 
   /// Table "Tables". 
   /// @public 
   /// @returns array of Table 
   public function Tables( ) { 
      $Tables = array( ); 
      if( ! ( $Result = $this->Server->ExecuteQuery( 'SELECT `TABLES`.`TABLE_NAME` FROM `INFORMATION_SCHEMA`.`TABLES` WHERE `TABLES`.`TABLE_SCHEMA` = \'' . \mysql_real_escape_string( $this->Name ) . '\'' ) ) ) 
         throw new XyndravandriaDyverathException( 'Unable to read out the tables of the database \'' . $this->Name . '\' from the information schema.' ); 
      else 
         while( $Dataset = \mysql_fetch_object( $Result ) ) { 
            $Table = new Table( $Dataset->TABLE_NAME, $this ); 
            if( ( $TableSaved = Table::Cache( )->Get( $Table->UniqueIdentifier( ) ) ) ) 
               $Tables[ ] = $TableSaved; 
            elseif( Table::Configuration( ) & Table::CacheEnabled ) 
               $Tables[ ] = Table::Cache( )->Add( $Table ); 
            else 
               $Tables[ ] = $Table; 
         } 
      return $Tables; 
   } 
    
   /// Alias of Database::Cache( )->CurrentObject( ). 
   /// @public 
   /// @static 
   /// @returns Database 
   public static function Current( ) { 
      return self::Cache( )->CurrentObject( ); 
   } 
    
   /// Returns this @ref Database "Database's" unique 
   /// identifier. 
   /// @public 
   /// @returns string 
   /// @note Overrode ExtendedRepresentingClass::UniqueIdentifier( ). 
   public function UniqueIdentifier( ) { 
      return $this->Server->Name( ) . '->' . $this->Name; 
   } 
    
   /// Returns the declared name of this class. 
   /// @public       
   /// @static       
   /// @returns string 
   /// @note Required by the CacheAble interface. 
   public static function ClassName( ) { 
      return __CLASS__; 
   } 
 
} 
?>
 
 |