<?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 <maurodigirolamo@.web.de>. |
============================================================================================================================================|
Xyndravandria Dyverath
----------------------
Alpha 0.0.0
Xyndravandria is the name of a collection of projects designed and developed by Mauro Di Girolamo (maurodigirolamo@web.de); 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__;
}
}
?>
|