MediaWiki  REL1_21
DatabaseUtility.php
Go to the documentation of this file.
00001 <?php
00028 class DBObject {
00029         public $mData;
00030 
00031         function __construct( $data ) {
00032                 $this->mData = $data;
00033         }
00034 
00038         function isLOB() {
00039                 return false;
00040         }
00041 
00042         function data() {
00043                 return $this->mData;
00044         }
00045 }
00046 
00053 class Blob {
00054         private $mData;
00055 
00056         function __construct( $data ) {
00057                 $this->mData = $data;
00058         }
00059 
00060         function fetch() {
00061                 return $this->mData;
00062         }
00063 }
00064 
00069 interface Field {
00074         function name();
00075 
00080         function tableName();
00081 
00086         function type();
00087 
00092         function isNullable();
00093 }
00094 
00099 class ResultWrapper implements Iterator {
00100         var $db, $result, $pos = 0, $currentRow = null;
00101 
00108         function __construct( $database, $result ) {
00109                 $this->db = $database;
00110 
00111                 if ( $result instanceof ResultWrapper ) {
00112                         $this->result = $result->result;
00113                 } else {
00114                         $this->result = $result;
00115                 }
00116         }
00117 
00123         function numRows() {
00124                 return $this->db->numRows( $this );
00125         }
00126 
00135         function fetchObject() {
00136                 return $this->db->fetchObject( $this );
00137         }
00138 
00146         function fetchRow() {
00147                 return $this->db->fetchRow( $this );
00148         }
00149 
00153         function free() {
00154                 $this->db->freeResult( $this );
00155                 unset( $this->result );
00156                 unset( $this->db );
00157         }
00158 
00165         function seek( $row ) {
00166                 $this->db->dataSeek( $this, $row );
00167         }
00168 
00169         /*********************
00170          * Iterator functions
00171          * Note that using these in combination with the non-iterator functions
00172          * above may cause rows to be skipped or repeated.
00173          */
00174 
00175         function rewind() {
00176                 if ( $this->numRows() ) {
00177                         $this->db->dataSeek( $this, 0 );
00178                 }
00179                 $this->pos = 0;
00180                 $this->currentRow = null;
00181         }
00182 
00186         function current() {
00187                 if ( is_null( $this->currentRow ) ) {
00188                         $this->next();
00189                 }
00190                 return $this->currentRow;
00191         }
00192 
00196         function key() {
00197                 return $this->pos;
00198         }
00199 
00203         function next() {
00204                 $this->pos++;
00205                 $this->currentRow = $this->fetchObject();
00206                 return $this->currentRow;
00207         }
00208 
00212         function valid() {
00213                 return $this->current() !== false;
00214         }
00215 }
00216 
00221 class FakeResultWrapper extends ResultWrapper {
00222         var $result = array();
00223         var $db = null; // And it's going to stay that way :D
00224         var $pos = 0;
00225         var $currentRow = null;
00226 
00227         function __construct( $array ) {
00228                 $this->result = $array;
00229         }
00230 
00234         function numRows() {
00235                 return count( $this->result );
00236         }
00237 
00238         function fetchRow() {
00239                 if ( $this->pos < count( $this->result ) ) {
00240                         $this->currentRow = $this->result[$this->pos];
00241                 } else {
00242                         $this->currentRow = false;
00243                 }
00244                 $this->pos++;
00245                 if ( is_object( $this->currentRow ) ) {
00246                         return get_object_vars( $this->currentRow );
00247                 } else {
00248                         return $this->currentRow;
00249                 }
00250         }
00251 
00252         function seek( $row ) {
00253                 $this->pos = $row;
00254         }
00255 
00256         function free() {}
00257 
00258         // Callers want to be able to access fields with $this->fieldName
00259         function fetchObject() {
00260                 $this->fetchRow();
00261                 if ( $this->currentRow ) {
00262                         return (object)$this->currentRow;
00263                 } else {
00264                         return false;
00265                 }
00266         }
00267 
00268         function rewind() {
00269                 $this->pos = 0;
00270                 $this->currentRow = null;
00271         }
00272 
00273         function next() {
00274                 return $this->fetchObject();
00275         }
00276 }
00277 
00282 class LikeMatch {
00283         private $str;
00284 
00290         public function __construct( $s ) {
00291                 $this->str = $s;
00292         }
00293 
00299         public function toString() {
00300                 return $this->str;
00301         }
00302 }
00303 
00307 interface DBMasterPos {
00308 }