MediaWiki  master
SqliteResultWrapper.php
Go to the documentation of this file.
1 <?php
2 
3 namespace Wikimedia\Rdbms;
4 
5 use ArrayIterator;
6 use PDO;
7 use PDOStatement;
8 
11  private $result;
13  private $rows;
14 
19  public function __construct( PDOStatement $result ) {
20  $this->result = $result;
21  // SQLite doesn't allow buffered results or data seeking etc, so we'll
22  // use fetchAll. PDO has PDO::CURSOR_SCROLL but the SQLite C API doesn't
23  // support it, so the driver raises an error if it is used.
24  $this->rows = $result->fetchAll( PDO::FETCH_OBJ );
25  }
26 
27  protected function doNumRows() {
28  return count( $this->rows );
29  }
30 
31  protected function doFetchObject() {
32  return $this->rows[$this->currentPos] ?? false;
33  }
34 
35  protected function doFetchRow() {
36  $obj = $this->doFetchObject();
37  if ( is_object( $obj ) ) {
38  $i = 0;
39  $row = get_object_vars( $obj );
40  foreach ( $row as $value ) {
41  $row[$i++] = $value;
42  }
43  return $row;
44  } else {
45  return $obj;
46  }
47  }
48 
49  protected function doSeek( $pos ) {
50  // Nothing to do -- parent updates $this->currentPos
51  }
52 
53  protected function doFree() {
54  $this->rows = null;
55  $this->result = null;
56  }
57 
58  protected function doGetFieldNames() {
59  if ( $this->rows ) {
60  return array_keys( get_object_vars( $this->rows[0] ) );
61  } else {
62  return [];
63  }
64  }
65 }
Result wrapper for grabbing data queried from an IDatabase object.
count()
Get the number of rows in a result object.
int $currentPos
The offset of the current row that would be returned by current() and may have been previously return...
doFetchRow()
Get the next row as an array containing the data duplicated, once with string keys and once with nume...
doNumRows()
Get the number of rows in the result set.
doFetchObject()
Get the next row as a stdClass object, or false if iteration has proceeded past the end.
doSeek( $pos)
Modify the current cursor position to the row with the specified offset.
doGetFieldNames()
Get the field names in the result set.