TableInfo.php

Go to the documentation of this file.
00001 <?php 00002 00003 /* 00004 * $Id: TableInfo.php,v 1.3 2004/04/27 19:18:16 micha Exp $ 00005 * 00006 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 00007 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 00008 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 00009 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 00010 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 00011 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 00012 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 00013 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 00014 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 00015 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 00016 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00017 * 00018 * This software consists of voluntary contributions made by many individuals 00019 * and is licensed under the LGPL. For more information please see 00020 * <http://creole.phpdb.org>. 00021 */ 00022 00031 class TableInfo 00032 { 00033 // FIXME 00034 // - Currently all member attributes are public. This should be fixed 00035 // when PHP's magic __sleep() and __wakeup() functions & serialization support 00036 // handles protected/private members. (if ever) 00037 00038 var $name; 00039 var $columns = array(); 00040 var $foreignKeys = array(); 00041 var $indexes = array(); 00042 var $primaryKey; 00043 00044 var $pkLoaded = false; 00045 var $fksLoaded = false; 00046 var $indexesLoaded = false; 00047 var $colsLoaded = false; 00048 00053 var $conn; 00054 00059 var $database; 00060 00062 var $dblink; 00063 00065 var $dbname; 00066 00072 function TableInfo(/*DatabaseInfo*/ &$database, $name) 00073 { 00074 if (! is_a($database, 'DatabaseInfo')) { 00075 trigger_error( 00076 "TableInfo::TableInfo(): parameter 1 not of type 'DatabaseInfo' !", 00077 E_USER_ERROR 00078 ); 00079 } 00080 $this->database =& $database; 00081 $this->name = $name; 00082 $this->conn =& $database->getConnection(); // shortcut because all drivers need this for the queries 00083 $this->dblink =& $this->conn->getResource(); 00084 $this->dbname = $database->getName(); 00085 } 00086 00093 function __sleep() 00094 { 00095 return array('name', 'columns', 'foreignKeys', 'indexes', 'primaryKey'); 00096 } 00097 00102 function __wakeup() 00103 { 00104 // restore chaining 00105 for($i=0,$j=count($this->columns); $i < $j; $i++) { 00106 $col =& $this->columns[$i]; 00107 $col->table =& $this; 00108 } 00109 } 00110 00115 function initColumns() 00116 { 00117 trigger_error ( 00118 "TableInfo::(): abstract function has to be reimplemented !", 00119 E_USER_ERROR 00120 ); 00121 } 00122 00127 function initPrimaryKey() 00128 { 00129 trigger_error ( 00130 "TableInfo::(): abstract function has to be reimplemented !", 00131 E_USER_ERROR 00132 ); 00133 } 00134 00139 function initForeignKeys() 00140 { 00141 trigger_error ( 00142 "TableInfo::(): abstract function has to be reimplemented !", 00143 E_USER_ERROR 00144 ); 00145 } 00146 00151 function initIndexes() 00152 { 00153 trigger_error ( 00154 "TableInfo::(): abstract function has to be reimplemented !", 00155 E_USER_ERROR 00156 ); 00157 } 00158 00159 00164 function & getPrimaryKey() 00165 { 00166 if(!$this->pkLoaded) { 00167 if (($e = $this->initPrimaryKey()) !== true) { 00168 return $e; 00169 } 00170 } 00171 return $this->primaryKey; 00172 } 00173 00179 function & getColumn($name) 00180 { 00181 if(!$this->colsLoaded) { 00182 if (($e = $this->initColumns()) !== true) { 00183 return $e; 00184 } 00185 } 00186 00187 if (!isset($this->columns[$name])) { 00188 return new SQLException(CREOLE_ERROR_NOSUCHFIELD, "Table `".$this->name."` has no column `".$name."`"); 00189 } 00190 00191 return $this->columns[$name]; 00192 } 00193 00198 function & getColumns() 00199 { 00200 if(!$this->colsLoaded) { 00201 if (($e = $this->initColumns()) !== true) { 00202 return $e; 00203 } 00204 } 00205 return array_values($this->columns); // re-key numerically 00206 } 00207 00213 function & getForeignKey($name) 00214 { 00215 if(!$this->fksLoaded) { 00216 if (($e = $this->initForeignKeys()) !== true) { 00217 return $e; 00218 } 00219 } 00220 if (!isset($this->foreignKeys[$name])) { 00221 return new SQLException(CREOLE_ERROR_NOSUCHFIELD, "Table `".$this->name."` has no foreign key `".$name."`"); 00222 } 00223 return $this->foreignKeys[$name]; 00224 } 00225 00230 function & getForeignKeys() 00231 { 00232 if(!$this->fksLoaded) { 00233 if (($e = $this->initForeignKeys()) !== true) { 00234 return $e; 00235 } 00236 } 00237 00238 return array_values($this->foreignKeys); 00239 } 00240 00246 function & getIndex($name) 00247 { 00248 if(!$this->indexesLoaded) { 00249 if (($e = $this->initIndexes()) !== true) { 00250 return $e; 00251 } 00252 } 00253 if (!isset($this->indexes[$name])) { 00254 return new SQLException(CREOLE_ERROR_NOSUCHFIELD, "Table `".$this->name."` has no index `".$name."`"); 00255 } 00256 return @$this->indexes[$name]; 00257 } 00258 00263 function & getIndexes() 00264 { 00265 if(!$this->indexesLoaded) { 00266 if (($e = $this->initIndexes()) !== true) { 00267 return $e; 00268 } 00269 } 00270 return array_values($this->indexes); 00271 } 00272 00277 function & getIndices() 00278 { 00279 return $this->getIndexes(); 00280 } 00281 00286 function getName() 00287 { 00288 return $this->name; 00289 } 00290 00294 function toString() 00295 { 00296 return $this->name; 00297 } 00298 00300 function foreignKeysLoaded() 00301 { 00302 return $this->fksLoaded; 00303 } 00304 00306 function primaryKeyLoaded() 00307 { 00308 return $this->pkLoaded; 00309 } 00310 00312 function columnsLoaded() 00313 { 00314 return $this->colsLoaded; 00315 } 00316 00318 function indexesLoaded() 00319 { 00320 return $this->indexesLoaded; 00321 } 00322 00324 function addColumn(/*ColumnInfo*/ &$column) 00325 { 00326 if (! is_a($column, 'ColumnInfo')) { 00327 trigger_error( 00328 "TableInfo::addColumn(): parameter 1 not of type 'ColumnInfo' !", 00329 E_USER_ERROR 00330 ); 00331 } 00332 $this->columns[$column->getName()] =& $column; 00333 } 00334 00336 function & getDatabase() 00337 { 00338 return $this->database; 00339 } 00340 }

This file is part of the Creole[php4] library.


Copyright © 2004 Hans Lellelid  
Creole[php4] CVS