diff options
-rw-r--r-- | pear/DB.php | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/pear/DB.php b/pear/DB.php index 48ed0e7a91..feea467ff3 100644 --- a/pear/DB.php +++ b/pear/DB.php @@ -600,6 +600,7 @@ class DB_result { var $dbh; var $result; + var $row_counter = null; /** * DB_result constructor. @@ -629,6 +630,27 @@ class DB_result $fetchmode = DB_FETCHMODE_ASSOC; $return_object = true; } + if ($this->dbh->limit_from !== null) { + if ($this->row_counter === null) { + $this->row_counter = $this->dbh->limit_from; + // For Interbase + if ($this->dbh->options['limit'] == false) { + $i = 0; + while ($i++ <= $this->dbh->limit_from) { + $this->dbh->fetchInto($this->result, $arr, $fetchmode); + } + } + } + if ($this->row_counter >= ( + $this->dbh->limit_from + $this->dbh->limit_count)) + { + return null; + } + if ($this->dbh->options['limit'] == 'emulate') { + $rownum = $this->row_counter; + } + $this->row_counter++; + } $res = $this->dbh->fetchInto($this->result, $arr, $fetchmode, $rownum); if ($res !== DB_OK) { return $res; @@ -660,6 +682,27 @@ class DB_result $fetchmode = DB_FETCHMODE_ASSOC; $return_object = true; } + if ($this->dbh->limit_from !== null) { + if ($this->row_counter === null) { + $this->row_counter = $this->dbh->limit_from; + // For Interbase + if ($this->dbh->options['limit'] == false) { + $i = 0; + while ($i++ <= $this->dbh->limit_from) { + $this->dbh->fetchInto($this->result, $arr, $fetchmode); + } + } + } + if ($this->row_counter >= ( + $this->dbh->limit_from + $this->dbh->limit_count)) + { + return null; + } + if ($this->dbh->options['limit'] == 'emulate') { + $rownum = $this->row_counter; + } + $this->row_counter++; + } $res = $this->dbh->fetchInto($this->result, $arr, $fetchmode, $rownum); if (($res === DB_OK) && isset($return_object)) { $class = $this->dbh->fetchmode_object_class; @@ -716,6 +759,11 @@ class DB_result { return $this->dbh->tableInfo($this->result, $mode); } + + function getRowCounter() + { + return $this->row_counter; + } } class DB_row |