|
|
|
@ -0,0 +1,39 @@ |
|
|
|
<pre> |
|
|
|
This is an extension that aims to implement some efficient data access |
|
|
|
interfaces and classes. |
|
|
|
|
|
|
|
SPL allows to hook into foreach. Doing so you can do something like |
|
|
|
this: |
|
|
|
|
|
|
|
$obj = new whatever(); |
|
|
|
foreach($obj as $key => $value) { ... } |
|
|
|
|
|
|
|
This is meant to be used for database access. For example you could |
|
|
|
grab my patch to sqlite (<a href="http://marcus-boerger.de/php/ext/sqlite/">http://marcus-boerger.de/php/ext/sqlite/</a>) and |
|
|
|
look at the oo tests: |
|
|
|
|
|
|
|
$db = new sqlite($filename); |
|
|
|
foreach($db->query("SELECT....") as $row) { ... } |
|
|
|
|
|
|
|
SQLite offers four access strategies: |
|
|
|
1) sqlite_query + sqlite_fetch_array |
|
|
|
2) sqlite_unbuffered_query + sqlite_fetch_array |
|
|
|
3) sqlite_query + iterators (sqlite_current) |
|
|
|
4) sqlite_unbuffered_query + iterators (sqlite_current) |
|
|
|
|
|
|
|
1) and 3) do "over eager evaluating" since they fetch all rows directly. |
|
|
|
|
|
|
|
2) does "eager evaluating". It always fetches the next row but doesn't |
|
|
|
keep the current row, so that it must be stored elsewhere if it must be |
|
|
|
accessed more then once. For instance this happens when you need to access |
|
|
|
columns separately. |
|
|
|
|
|
|
|
4) does "eager evaluating". But in contrast to 2) it keeps the current row |
|
|
|
hence its name. |
|
|
|
|
|
|
|
There is no efficient way for "lazy or just in time evaluating" so 4) should |
|
|
|
be the best case. And 4) also enables the foreach trick. |
|
|
|
|
|
|
|
To implement 3) and 4) with other db extensions ask me and wait for LT to pass. |
|
|
|
|
|
|
|
</pre> |