. */ require_once('CFDBAbstractQueryResultsIterator.php'); require_once('CFDBDataIteratorDecorator.php'); class CFDBTransformEndpoint extends CFDBDataIteratorDecorator { /** * @var CFDBTransformEndpointQueryResultsIterator */ var $postProcessor; function __construct() { $this->postProcessor = new CFDBTransformEndpointQueryResultsIterator($this); } /** * Fetch next row into variable * @return bool if next row exists */ public function nextRow() { if ($this->postProcessor->nextRow()) { $this->row =& $this->source->row; if (empty($this->displayColumns)) { $this->displayColumns =& $this->source->displayColumns; } return true; } else { $this->row = null; return false; } } /** * @return CFDBTransformEndpointQueryResultsIterator */ public function getPostProcessor() { return $this->postProcessor; } } class CFDBTransformEndpointQueryResultsIterator extends CFDBAbstractQueryResultsIterator { /** * @var CFDBTransformEndpoint */ var $endPoint; function __construct($endPoint) { $this->endPoint = $endPoint; } /** * Execute the query * @param $sql string query * @param $queryOptions array associative * @return void */ public function queryDataSource(&$sql, $queryOptions) { // Do nothing. Data is in $this->$endPoint->source } /** * Get the next row from query results * @return array associative */ public function fetchRow() { if($this->endPoint->source->nextRow()) { return $this->endPoint->source->row; } return null; } /** * @return boolean */ public function hasResults() { // this is called by nextRow() in superclass // return true and let next row sort it out return true; } /** * If you do not iterate over all the rows returned, be sure to call this function * on all remaining rows to free resources. * @return void */ public function freeResult() { // Do nothing } }