Source for file ADOdb.php

Documentation is available at ADOdb.php

  1. <?php
  2. /**
  3.  * This file contains the class XML_Query2XML_Driver_ADOdb.
  4.  *
  5.  * PHP version 5
  6.  *
  7.  * @category  XML
  8.  * @package   XML_Query2XML
  9.  * @author    Lukas Feiler <lukas.feiler@lukasfeiler.com>
  10.  * @copyright 2006 Lukas Feiler
  11.  * @license   http://www.gnu.org/copyleft/lesser.html  LGPL Version 2.1
  12.  * @version   CVS: $Id: ADOdb.php 276639 2009-03-01 13:17:08Z lukasfeiler $
  13.  * @link      http://pear.php.net/package/XML_Query2XML
  14.  */
  15.  
  16. /**
  17.  * XML_Query2XML_Driver_ADOdb extends XML_Query2XML_Driver.
  18.  */
  19. require_once 'XML/Query2XML.php';
  20.  
  21. /**
  22.  * Driver for the database abstraction layer ADOdb.
  23.  *
  24.  * usage:
  25.  * <code>
  26.  * $driver = XML_Query2XML_Driver::factory(NewADOConnection(...));
  27.  * </code>
  28.  *
  29.  * @category  XML
  30.  * @package   XML_Query2XML
  31.  * @author    Lukas Feiler <lukas.feiler@lukasfeiler.com>
  32.  * @copyright 2006 Lukas Feiler
  33.  * @license   http://www.gnu.org/copyleft/lesser.html  LGPL Version 2.1
  34.  * @version   Release: 1.7.2
  35.  * @link      http://pear.php.net/package/XML_Query2XML
  36.  * @since     Release 1.5.0RC1
  37.  */
  38. {
  39.     /**
  40.      * In instance of a class that extends ADOConnection.
  41.      * @var ADOConnection 
  42.      */
  43.     private $_db null;
  44.     
  45.     /**
  46.      * Constructor
  47.      *
  48.      * @param ADOConnection $db An instance of ADOConnection.
  49.      *
  50.      * @throws XML_Query2XML_DBException If the ADOConnection instance passed as
  51.      *                           argument was not connected to the database server.
  52.      */
  53.     public function __construct(ADOConnection $db)
  54.     {
  55.         if (!$db->IsConnected()) {
  56.             throw new XML_Query2XML_DBException(
  57.                 'ADOConnection instance was not connected'
  58.             );
  59.         }
  60.         $db->SetFetchMode(ADODB_FETCH_ASSOC);
  61.         $this->_db $db;
  62.     }
  63.     
  64.     /**
  65.      * Execute a SQL SELECT statement and fetch all records from the result set.
  66.      *
  67.      * @param mixed  $sql        The SQL query as a string or an array.
  68.      * @param string $configPath The config path; used for exception messages.
  69.      *
  70.      * @return array An array of records.
  71.      * @throws XML_Query2XML_DBException If a database related error occures.
  72.      * @see XML_Query2XML_Driver::getAllRecords()
  73.      */
  74.     public function getAllRecords($sql$configPath)
  75.     {
  76.         $result  =$this->_prepareAndExecute($sql$configPath);
  77.         $records array();
  78.         while ($record $result->fetchRow()) {
  79.             if (class_exists('PEAR_Error'&& $record instanceof PEAR_Error{
  80.                 // no unit test for this exception as it cannot be produced easily
  81.                 throw new XML_Query2XML_DBException(
  82.                     $configPath ': Could not fetch rows for the following '
  83.                     . 'SQL query: ' $sql['query''; '
  84.                     . $record->toString()
  85.                 );
  86.             }
  87.             $records[$record;
  88.         }
  89.         if ($result instanceof ADORecordSet{
  90.             $result->free();
  91.         }
  92.         return $records;
  93.     }
  94.     
  95.     /**
  96.      * Private method that will ADOConnection::prepare() & ADOConnection::execute()
  97.      * to retrieve records.
  98.      *
  99.      * @param mixed  $sql        An array with an element at the index 'query'.
  100.      * @param string $configPath The config path used for exception messages.
  101.      *
  102.      * @return DB_result 
  103.      * @throws XML_Query2XML_DBException If a database related error occures.
  104.      */
  105.     private function _prepareAndExecute($sql$configPath)
  106.     {
  107.         $query =$sql['query'];
  108.         if (isset($this->_preparedQueries[$query])) {
  109.             $queryHandle $this->_preparedQueries[$query];
  110.         else {
  111.             // ADOdb centralizes all error-handling in execute()
  112.             $queryHandle                    $this->_db->prepare($query);
  113.             $this->_preparedQueries[$query=$queryHandle;
  114.         }
  115.         
  116.         /*
  117.          * EXECUTE
  118.          */
  119.         
  120.         try {
  121.             if (isset($sql['data'])) {
  122.                 $result $this->_db->execute($queryHandle$sql['data']);
  123.             else {
  124.                 $result $this->_db->execute($queryHandle);
  125.             }
  126.         catch (Exception $e{
  127.             /*
  128.              * unit test: ADOdbException/
  129.              *  _prepareAndExecute/throwDBException_complexQuery.phpt
  130.              */
  131.             throw new XML_Query2XML_DBException(
  132.                 $configPath ': Could not execute the following SQL '
  133.                 . 'query: ' $query .  '; ' $e->getMessage()
  134.             );
  135.         }
  136.             
  137.         if ($result === false && function_exists('ADODB_Pear_Error')) {
  138.             $result ADODB_Pear_Error();
  139.         }
  140.         
  141.         if (class_exists('PEAR_Error'&& $result instanceof PEAR_Error{
  142.             /*
  143.              * unit test: ADOdbPEAR/
  144.              *  _prepareAndExecute/throwDBException_complexQuery.phpt
  145.              */
  146.             throw new XML_Query2XML_DBException(
  147.                 $configPath ': Could not execute the following SQL query: '
  148.                 . $query '; ' $result->toString()
  149.             );
  150.         elseif ($result === false{
  151.             /*
  152.              * unit test: ADOdbDefault/
  153.              *  _prepareAndExecute/throwDBException_complexQuery.phpt
  154.              */
  155.             throw new XML_Query2XML_DBException(
  156.                 $configPath ': Could not execute the following SQL query: '
  157.                 . $query ' (false was returned)'
  158.             );
  159.         }
  160.         return $result;
  161.     }
  162. }
  163. ?>

Documentation generated on Sun, 03 Apr 2011 13:13:07 +0200 by phpDocumentor 1.4.1