[ Index ]
 

Code source de vtiger CRM 5.0.2

Accédez au Source d'autres logiciels libresSoutenez Angelica Josefina !

title

Body

[fermer]

/adodb/drivers/ -> adodb-postgres7.inc.php (source)

   1  <?php
   2  /*
   3   V4.90 8 June 2006  (c) 2000-2006 John Lim (jlim#natsoft.com.my). All rights reserved.
   4    Released under both BSD license and Lesser GPL library license. 
   5    Whenever there is any discrepancy between the two licenses, 
   6    the BSD license will take precedence.
   7    Set tabs to 4.
   8    
   9    Postgres7 support.
  10    28 Feb 2001: Currently indicate that we support LIMIT
  11    01 Dec 2001: dannym added support for default values
  12  */
  13  
  14  // security - hide paths
  15  if (!defined('ADODB_DIR')) die();
  16  
  17  include_once(ADODB_DIR."/drivers/adodb-postgres64.inc.php");
  18  
  19  class ADODB_postgres7 extends ADODB_postgres64 {
  20      var $databaseType = 'postgres7';    
  21      var $hasLimit = true;    // set to true for pgsql 6.5+ only. support pgsql/mysql SELECT * FROM TABLE LIMIT 10
  22      var $ansiOuter = true;
  23      var $charSet = true; //set to true for Postgres 7 and above - PG client supports encodings
  24      
  25  	function ADODB_postgres7() 
  26      {
  27          $this->ADODB_postgres64();
  28          if (ADODB_ASSOC_CASE !== 2) {
  29              $this->rsPrefix .= 'assoc_';
  30          }
  31          $this->_bindInputArray = PHP_VERSION >= 5.1;
  32      }
  33  
  34      
  35      // the following should be compat with postgresql 7.2, 
  36      // which makes obsolete the LIMIT limit,offset syntax
  37       function &SelectLimit($sql,$nrows=-1,$offset=-1,$inputarr=false,$secs2cache=0) 
  38       {
  39           $offsetStr = ($offset >= 0) ? " OFFSET ".((integer)$offset) : '';
  40           $limitStr  = ($nrows >= 0)  ? " LIMIT ".((integer)$nrows) : '';
  41           if ($secs2cache)
  42                $rs =& $this->CacheExecute($secs2cache,$sql."$limitStr$offsetStr",$inputarr);
  43           else
  44                $rs =& $this->Execute($sql."$limitStr$offsetStr",$inputarr);
  45          
  46          return $rs;
  47       }
  48       /*
  49       function Prepare($sql)
  50      {
  51          $info = $this->ServerInfo();
  52          if ($info['version']>=7.3) {
  53              return array($sql,false);
  54          }
  55          return $sql;
  56      }
  57       */
  58  
  59  
  60      // from  Edward Jaramilla, improved version - works on pg 7.4
  61  	function MetaForeignKeys($table, $owner=false, $upper=false)
  62      {
  63          $sql = 'SELECT t.tgargs as args
  64          FROM
  65          pg_trigger t,pg_class c,pg_proc p
  66          WHERE
  67          t.tgenabled AND
  68          t.tgrelid = c.oid AND
  69          t.tgfoid = p.oid AND
  70          p.proname = \'RI_FKey_check_ins\' AND
  71          c.relname = \''.strtolower($table).'\'
  72          ORDER BY
  73              t.tgrelid';
  74          
  75          $rs =& $this->Execute($sql);
  76          
  77          if ($rs && !$rs->EOF) {
  78              $arr =& $rs->GetArray();
  79              $a = array();
  80              foreach($arr as $v)
  81              {
  82                  $data = explode(chr(0), $v['args']);
  83                  if ($upper) {
  84                      $a[strtoupper($data[2])][] = strtoupper($data[4].'='.$data[5]);
  85                  } else {
  86                  $a[$data[2]][] = $data[4].'='.$data[5];
  87                  }
  88              }
  89              return $a;
  90          }
  91          return false;
  92      }
  93  
  94  	function _query($sql,$inputarr)
  95      {
  96          if (! $this->_bindInputArray) {
  97              // We don't have native support for parameterized queries, so let's emulate it at the parent
  98              return ADODB_postgres64::_query($sql, $inputarr);
  99          }
 100          $this->_errorMsg = false;
 101          // -- added Cristiano da Cunha Duarte
 102          if ($inputarr) {
 103              $sqlarr = explode('?',trim($sql));
 104              $sql = '';
 105              $i = 1;
 106              $last = sizeof($sqlarr)-1;
 107              foreach($sqlarr as $v) {
 108                  if ($last < $i) $sql .= $v;
 109                  else $sql .= $v.' $'.$i;
 110                  $i++;
 111              }
 112              
 113              $rez = pg_query_params($this->_connectionID,$sql, $inputarr);
 114          } else {
 115              $rez = pg_query($this->_connectionID,$sql);
 116          }
 117          // check if no data returned, then no need to create real recordset
 118          if ($rez && pg_numfields($rez) <= 0) {
 119              if (is_resource($this->_resultid) && get_resource_type($this->_resultid) === 'pgsql result') {
 120                  pg_freeresult($this->_resultid);
 121              }
 122              $this->_resultid = $rez;
 123              return true;
 124          }        
 125          return $rez;
 126      }
 127      
 128        // this is a set of functions for managing client encoding - very important if the encodings
 129      // of your database and your output target (i.e. HTML) don't match
 130      //for instance, you may have UNICODE database and server it on-site as WIN1251 etc.
 131      // GetCharSet - get the name of the character set the client is using now
 132      // the functions should work with Postgres 7.0 and above, the set of charsets supported
 133      // depends on compile flags of postgres distribution - if no charsets were compiled into the server
 134      // it will return 'SQL_ANSI' always
 135  	function GetCharSet()
 136      {
 137          //we will use ADO's builtin property charSet
 138          $this->charSet = @pg_client_encoding($this->_connectionID);
 139          if (!$this->charSet) {
 140              return false;
 141          } else {
 142              return $this->charSet;
 143          }
 144      }
 145      
 146      // SetCharSet - switch the client encoding
 147  	function SetCharSet($charset_name)
 148      {
 149          $this->GetCharSet();
 150          if ($this->charSet !== $charset_name) {
 151              $if = pg_set_client_encoding($this->_connectionID, $charset_name);
 152              if ($if == "0" & $this->GetCharSet() == $charset_name) {
 153                  return true;
 154              } else return false;
 155          } else return true;
 156      }
 157  
 158  }
 159      
 160  /*--------------------------------------------------------------------------------------
 161       Class Name: Recordset
 162  --------------------------------------------------------------------------------------*/
 163  
 164  class ADORecordSet_postgres7 extends ADORecordSet_postgres64{
 165  
 166      var $databaseType = "postgres7";
 167      
 168      
 169  	function ADORecordSet_postgres7($queryID,$mode=false) 
 170      {
 171          $this->ADORecordSet_postgres64($queryID,$mode);
 172      }
 173      
 174           // 10% speedup to move MoveNext to child class
 175  	function MoveNext() 
 176      {
 177          if (!$this->EOF) {
 178              $this->_currentRow++;
 179              if ($this->_numOfRows < 0 || $this->_numOfRows > $this->_currentRow) {
 180                  $this->fields = @pg_fetch_array($this->_queryID,$this->_currentRow,$this->fetchMode);
 181              
 182                  if (is_array($this->fields)) {
 183                      if ($this->fields && isset($this->_blobArr)) $this->_fixblobs();
 184                      return true;
 185                  }
 186              }
 187              $this->fields = false;
 188              $this->EOF = true;
 189          }
 190          return false;
 191      }        
 192  
 193  }
 194  
 195  class ADORecordSet_assoc_postgres7 extends ADORecordSet_postgres64{
 196  
 197      var $databaseType = "postgres7";
 198      
 199      
 200  	function ADORecordSet_assoc_postgres7($queryID,$mode=false) 
 201      {
 202          $this->ADORecordSet_postgres64($queryID,$mode);
 203      }
 204      
 205  	function _fetch()
 206      {
 207          if ($this->_currentRow >= $this->_numOfRows && $this->_numOfRows >= 0)
 208              return false;
 209  
 210          $this->fields = @pg_fetch_array($this->_queryID,$this->_currentRow,$this->fetchMode);
 211          
 212          if ($this->fields) {
 213              if (isset($this->_blobArr)) $this->_fixblobs();
 214              $this->_updatefields();
 215          }
 216              
 217          return (is_array($this->fields));
 218      }
 219      
 220          // Create associative array
 221  	function _updatefields()
 222      {
 223          if (ADODB_ASSOC_CASE == 2) return; // native
 224      
 225          $arr = array();
 226          $lowercase = (ADODB_ASSOC_CASE == 0);
 227          
 228          foreach($this->fields as $k => $v) {
 229              if (is_integer($k)) $arr[$k] = $v;
 230              else {
 231                  if ($lowercase)
 232                      $arr[strtolower($k)] = $v;
 233                  else
 234                      $arr[strtoupper($k)] = $v;
 235              }
 236          }
 237          $this->fields = $arr;
 238      }
 239      
 240  	function MoveNext() 
 241      {
 242          if (!$this->EOF) {
 243              $this->_currentRow++;
 244              if ($this->_numOfRows < 0 || $this->_numOfRows > $this->_currentRow) {
 245                  $this->fields = @pg_fetch_array($this->_queryID,$this->_currentRow,$this->fetchMode);
 246              
 247                  if (is_array($this->fields)) {
 248                      if ($this->fields) {
 249                          if (isset($this->_blobArr)) $this->_fixblobs();
 250                      
 251                          $this->_updatefields();
 252                      }
 253                      return true;
 254                  }
 255              }
 256              
 257              
 258              $this->fields = false;
 259              $this->EOF = true;
 260          }
 261          return false;
 262      }
 263  }
 264  ?>


Généré le : Sun Feb 25 10:22:19 2007 par Balluche grâce à PHPXref 0.7