[ Index ]

PHP Cross Reference of Limb3

title

Body

[close]

/dbal/src/drivers/oci/ -> lmbOciQueryStatement.class.php (source)

   1  <?php
   2  /*
   3   * Limb PHP Framework
   4   *
   5   * @link http://limb-project.com 
   6   * @copyright  Copyright &copy; 2004-2007 BIT(http://bit-creative.com)
   7   * @license    LGPL http://www.gnu.org/copyleft/lesser.html 
   8   */
   9  lmb_require('limb/dbal/src/drivers/lmbDbQueryStatement.interface.php');
  10  lmb_require(dirname(__FILE__) . '/lmbOciStatement.class.php');
  11  lmb_require(dirname(__FILE__) . '/lmbOciRecord.class.php');
  12  lmb_require(dirname(__FILE__) . '/lmbOciRecordSet.class.php');
  13  lmb_require(dirname(__FILE__) . '/lmbOciArraySet.class.php');
  14  
  15  /**

  16   * class lmbOciQueryStatement.

  17   *

  18   * @package dbal

  19   * @version $Id: lmbOciQueryStatement.class.php 5945 2007-06-06 08:31:43Z pachanga $

  20   */
  21  class lmbOciQueryStatement extends lmbOciStatement implements lmbDbQueryStatement
  22  {
  23    function paginate($start, $limit)
  24    {
  25      // Extract the fields being selected (swiped from PEAR::DB)
  26      $sql = "SELECT * FROM ({$this->sql}) WHERE 1=1";
  27      $stmt = new lmbOciStatement($this->connection, $sql);
  28      $queryId = $this->connection->executeStatement($stmt->getStatement());
  29  
  30      $ncols = oci_num_fields($queryId);
  31  
  32      $cols = array();
  33      for($i = 1; $i <= $ncols; $i++)
  34        $cols[] = '"' . oci_field_name($queryId, $i) . '"';
  35      $fields = implode(',', $cols);
  36  
  37      // Build the paginated query...
  38      $sql = "SELECT $fields FROM".
  39         "  (SELECT rownum as linenum, $fields FROM".
  40         "      ({$this->sql})".
  41         '  WHERE rownum <= '. ($start + $limit) .
  42         ') WHERE linenum >= ' . ++$start;
  43  
  44      $this->sql = $sql;
  45    }
  46  
  47    function addOrder($sort_params)
  48    {
  49      if(preg_match('~\s+ORDER\s+BY\s+~i', $this->sql))
  50        $this->sql .= ',';
  51      else
  52        $this->sql .= ' ORDER BY ';
  53  
  54      foreach($sort_params as $field => $order)
  55        $this->sql .= $this->connection->quoteIdentifier($field) . " $order,";
  56  
  57      $this->sql = rtrim($this->sql, ',');
  58    }
  59  
  60    function count()
  61    {
  62      $stmt = clone $this;
  63      $stmt->sql = "SELECT COUNT(*) AS THEROWC FROM ($this->sql)";
  64      $stmt->hasChanged = true;
  65      $queryId = $stmt->execute();
  66  
  67      $row = oci_fetch_assoc($queryId);
  68      $stmt->free();
  69      return $row['THEROWC'];
  70    }
  71  
  72    function getOneRecord()
  73    {
  74      $queryId = $this->connection->executeStatement($this->getStatement());
  75      $values = oci_fetch_array($queryId, OCI_ASSOC+OCI_RETURN_NULLS);
  76      oci_free_statement($queryId);
  77      if(is_array($values))
  78        return new lmbOciRecord($values);
  79    }
  80  
  81    function getOneValue()
  82    {
  83      $queryId = $this->connection->executeStatement($this->getStatement());
  84      $row = oci_fetch_array($queryId, OCI_NUM+OCI_RETURN_NULLS);
  85      oci_free_statement($queryId);
  86      if(is_array($row) && isset($row[0]))
  87        return $row[0];
  88    }
  89  
  90    function getOneColumnAsArray()
  91    {
  92      $column = array();
  93      $queryId = $this->connection->executeStatement($this->getStatement());
  94      while(is_array($row = oci_fetch_array($queryId, OCI_NUM+OCI_RETURN_NULLS)))
  95        $column[] = $row[0];
  96      oci_free_statement($queryId);
  97      return $column;
  98    }
  99  
 100    function getRecordSet()
 101    {
 102      return new lmbOciRecordSet($this->connection, $this);
 103    }
 104  }
 105  
 106  ?>


Generated: Sat Aug 30 04:38:32 2008 Cross-referenced by PHPXref 0.7