Source for file pgsql.dbconnection.php

Documentation is available at pgsql.dbconnection.php

  1. <?php
  2. /**
  3. @package    jelix
  4. @subpackage db_driver
  5. @author     Croes Gérald, Laurent Jouanneau
  6. @contributor Laurent Jouanneau
  7. @contributor Yannick Le Guédart
  8. @contributor Laurent Raufaste
  9. @copyright  2001-2005 CopixTeam, 2005-2007 Laurent Jouanneau, 2007-2008 Laurent Raufaste
  10. *  This class was get originally from the Copix project (CopixDBConnectionPostgreSQL, Copix 2.3dev20050901, http://www.copix.org)
  11. *  Few lines of code are still copyrighted 2001-2005 CopixTeam (LGPL licence).
  12. *  Initial authors of this Copix class are Gerald Croes and Laurent Jouanneau,
  13. *  and this class was adapted/improved for Jelix by Laurent Jouanneau
  14. *
  15. @link        http://www.jelix.org
  16. @licence  http://www.gnu.org/licenses/lgpl.html GNU Lesser General Public Licence, see LICENCE file
  17. */
  18.  
  19. /**
  20.  *
  21.  * @package    jelix
  22.  * @subpackage db_driver
  23.  */
  24. class pgsqlDbConnection extends jDbConnection {
  25.     protected $_charsets =array'UTF-8'=>'UNICODE''ISO-8859-1'=>'LATIN1');
  26.  
  27.     function __construct($profil){
  28.         if(!function_exists('pg_connect')){
  29.             throw new jException('jelix~db.error.nofunction','posgresql');
  30.         }
  31.         parent::__construct($profil);
  32.         if(isset($this->profil['single_transaction']&& ($this->profil['single_transaction'])){
  33.             $this->beginTransaction();
  34.             $this->setAutoCommit(false);
  35.         }
  36.         else
  37.         {
  38.             $this->setAutoCommit(true);
  39.         }
  40.     }
  41.  
  42.     function __destruct(){
  43.         if(isset($this->profil['single_transaction']&& ($this->profil['single_transaction'])){
  44.             $this->commit();
  45.         }
  46.         parent::__destruct();
  47.     }
  48.  
  49.     public function beginTransaction (){
  50.         return $this->_doExec('BEGIN');
  51.     }
  52.  
  53.     public function commit (){
  54.         return $this->_doExec('COMMIT');
  55.     }
  56.  
  57.     public function rollback (){
  58.         return $this->_doExec('ROLLBACK');
  59.     }
  60.  
  61.     public function prepare ($query){
  62.         $id=(string)mktime();
  63.         $res pg_prepare($this->_connection$id$query);
  64.         if($res){
  65.             $rsnew pgsqlDbResultSet ($res$id$this->_connection );
  66.         }else{
  67.             throw new jException('jelix~db.error.query.bad',  pg_last_error($this->_connection).'('.$query.')');
  68.         }
  69.         return $rs;
  70.     }
  71.  
  72.     public function errorInfo(){
  73.         return array'HY000' ,pg_last_error($this->_connection)pg_last_error($this->_connection));
  74.     }
  75.  
  76.     public function errorCode(){
  77.         return pg_last_error($this->_connection);
  78.     }
  79.  
  80.     protected function _connect (){
  81.         $funcconnect(isset($this->profil['persistent']&& $this->profil['persistent''pg_pconnect':'pg_connect');
  82.  
  83.         $str '';
  84.  
  85.         // we do a distinction because if the host is given == TCP/IP connection else unix socket
  86.         if($this->profil['host'!= '')
  87.             $str 'host=\''.$this->profil['host'].'\''.$str;
  88.  
  89.         if (isset($this->profil['port'])) {
  90.             $str .= ' port=\''.$this->profil['port'].'\'';
  91.         }
  92.  
  93.         if ($this->profil['database'!= ''{
  94.             $str .= ' dbname=\''.$this->profil['database'].'\'';
  95.         }
  96.  
  97.         // we do isset instead of equality test against an empty string, to allow to specify
  98.         // that we want to use configuration set in environment variables
  99.         if (isset($this->profil['user'])) {
  100.             $str .= ' user=\''.$this->profil['user'].'\'';
  101.         }
  102.  
  103.         if (isset($this->profil['password'])) {
  104.             $str .= ' password=\''.$this->profil['password'].'\'';
  105.         }
  106.  
  107.         if (isset($this->profil['timeout']&& $this->profil['timeout'!= ''{
  108.             $str .= ' connect_timeout=\''.$this->profil['timeout'].'\'';
  109.         }
  110.  
  111.         if($cnx=@$funcconnect ($str)){
  112.             if(isset($this->profil['force_encoding']&& $this->profil['force_encoding'== true
  113.                && isset($this->_charsets[$GLOBALS['gJConfig']->charset])){
  114.                 pg_set_client_encoding($cnx$this->_charsets[$GLOBALS['gJConfig']->charset]);
  115.             }
  116.             return $cnx;
  117.         }else{
  118.             throw new jException('jelix~db.error.connection',$this->profil['host']);
  119.         }
  120.     }
  121.  
  122.     protected function _disconnect (){
  123.         return pg_close ($this->_connection);
  124.     }
  125.  
  126.     protected function _doQuery ($queryString){
  127.         if ($qI @pg_query ($this->_connection$queryString)){
  128.             $rsnew pgsqlDbResultSet ($qI);
  129.             $rs->_connector $this;
  130.         }else{
  131.             $rs false;
  132.             throw new jException('jelix~db.error.query.bad',  pg_last_error($this->_connection).'('.$queryString.')');
  133.         }
  134.         return $rs;
  135.     }
  136.  
  137.     protected function _doExec($query){
  138.         if($rs $this->_doQuery($query)){
  139.             return pg_affected_rows($rs->id());
  140.         }else
  141.             return 0;
  142.     }
  143.  
  144.     protected function _doLimitQuery ($queryString$offset$number){
  145.         if($number 0)
  146.             $number='ALL';
  147.         $queryString.= ' LIMIT '.$number.' OFFSET '.$offset;
  148.         $result $this->_doQuery($queryString);
  149.         return $result;
  150.     }
  151.  
  152.  
  153.  
  154.  
  155.     public function lastInsertId($seqname=''){
  156.  
  157.         if($seqname == ''){
  158.             trigger_error(get_class($this).'::lastInstertId invalide sequence name',E_USER_WARNING);
  159.             return false;
  160.         }
  161.         $cur=$this->query("select currval('$seqname') as id");
  162.         if($cur){
  163.             $res=$cur->fetch();
  164.             if($res)
  165.                 return $res->id;
  166.             else
  167.                 return false;
  168.         }else{
  169.             trigger_error(get_class($this).'::lastInstertId invalide sequence name',E_USER_WARNING);
  170.             return false;
  171.         }
  172.     }
  173.  
  174.     protected function _autoCommitNotify ($state){
  175.  
  176.         $this->_doExec('SET AUTOCOMMIT TO '.($state 'ON' 'OFF'));
  177.     }
  178.  
  179.     protected function _quote($text){
  180.         return pg_escape_string($text);
  181.     }
  182. }
  183. ?>

Documentation generated on Wed, 07 Sep 2011 13:48:26 +0200 by phpDocumentor 1.4.3