]> granicus.if.org Git - php/commitdiff
- Added row limit support for fetchInto and fetchRow
authorTomas V.V.Cox <cox@php.net>
Thu, 1 Nov 2001 15:14:17 +0000 (15:14 +0000)
committerTomas V.V.Cox <cox@php.net>
Thu, 1 Nov 2001 15:14:17 +0000 (15:14 +0000)
- Added getRowCounter method for DB_result to get the row number
  you are fetching in limited queries

pear/DB.php

index 48ed0e7a91e80d34382edeb92ae5ad106324491f..feea467ff34e3fcff6d7ed8909f16a7b88fb6470 100644 (file)
@@ -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