/**
  * Fetch next row into variable
  * @return bool if next row exists
  */
 public function nextRow()
 {
     while (true) {
         if (!$this->onFirstRow) {
             $this->row = $this->fetchRow();
         }
         $this->onFirstRow = false;
         if (!$this->row) {
             $this->freeResult();
             return false;
         }
         // Format the date
         if (!isset($this->row['submit_time']) && isset($this->row['Submitted']) && is_numeric($this->row['Submitted'])) {
             $submitTime = $this->row['Submitted'];
             $this->row['submit_time'] = $submitTime;
             $this->row['Submitted'] = $this->plugin->formatDate($submitTime);
         }
         // Determine if row is filtered
         if ($this->rowFilter) {
             $match = $this->rowFilter->evaluate($this->row);
             if (!$match) {
                 continue;
             }
         }
         $this->idx += 1;
         if ($this->limitStart && $this->idx < $this->limitStart) {
             continue;
         }
         if ($this->limitEnd && $this->idx >= $this->limitEnd) {
             while ($this->row = $this->fetchRow()) {
             }
             $this->freeResult();
             $this->row = null;
             return false;
         }
         // Keep the unformatted submitTime if needed
         if (isset($submitTime) && $this->submitTimeKeyName) {
             $this->row[$this->submitTimeKeyName] = $submitTime;
         }
         break;
     }
     if (!$this->row) {
         $this->freeResult();
     }
     return $this->row ? true : false;
 }
 public function test_filterFalseEqualFalse2()
 {
     $p = new CFDBFilterParser();
     $p->parse('false=filterFalse()');
     print_r($p->tree);
     $data = array('field' => 'hello');
     $this->assertTrue($p->evaluate($data));
 }