phpgroupware-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Phpgroupware-cvs] phpgwapi/inc/adodb/drivers/adodb-postgres7.inc.php,


From: nomail
Subject: [Phpgroupware-cvs] phpgwapi/inc/adodb/drivers/adodb-postgres7.inc.php, 1.1.2.1
Date: Thu, 30 Dec 2004 05:51:48 +0100

Update of /phpgwapi/inc/adodb/drivers
Added Files:
        Branch: proposed-0_9_18-branch
          adodb-postgres7.inc.php

date: 2004/12/30 04:51:48;  author: skwashd;  state: Exp;  lines: +265 -0

Log Message:
switch to ADOdb
=====================================================================
<?php
/*
 V4.54 5 Nov 2004  (c) 2000-2004 John Lim (address@hidden). All rights reserved.
  Released under both BSD license and Lesser GPL library license. 
  Whenever there is any discrepancy between the two licenses, 
  the BSD license will take precedence.
  Set tabs to 4.
  
  Postgres7 support.
  28 Feb 2001: Currently indicate that we support LIMIT
  01 Dec 2001: dannym added support for default values
*/

// security - hide paths
if (!defined('ADODB_DIR')) die();

include_once(ADODB_DIR."/drivers/adodb-postgres64.inc.php");

class ADODB_postgres7 extends ADODB_postgres64 {
        var $databaseType = 'postgres7';        
        var $hasLimit = true;   // set to true for pgsql 6.5+ only. support 
pgsql/mysql SELECT * FROM TABLE LIMIT 10
        var $ansiOuter = true;
        var $charSet = true; //set to true for Postgres 7 and above - PG client 
supports encodings
        
        function ADODB_postgres7() 
        {
                $this->ADODB_postgres64();
                if (ADODB_ASSOC_CASE !== 2) {
                        $this->rsPrefix .= 'assoc_';
                }
        }

        
        // the following should be compat with postgresql 7.2, 
        // which makes obsolete the LIMIT limit,offset syntax
         function 
&SelectLimit($sql,$nrows=-1,$offset=-1,$inputarr=false,$secs2cache=0) 
         {
                 $offsetStr = ($offset >= 0) ? " OFFSET $offset" : '';
                 $limitStr  = ($nrows >= 0)  ? " LIMIT $nrows" : '';
                 if ($secs2cache)
                        $rs =& 
$this->CacheExecute($secs2cache,$sql."$limitStr$offsetStr",$inputarr);
                 else
                        $rs =& 
$this->Execute($sql."$limitStr$offsetStr",$inputarr);
                
                return $rs;
         }
        /*
        function Prepare($sql)
        {
                $info = $this->ServerInfo();
                if ($info['version']>=7.3) {
                        return array($sql,false);
                }
                return $sql;
        }
        */

        // from  Edward Jaramilla, improved version - works on pg 7.4
function MetaForeignKeys($table, $owner=false, $upper=false)
{
        $sql = 'SELECT t.tgargs as args
        FROM
        pg_trigger t,pg_class c,pg_proc p
        WHERE
        t.tgenabled AND
        t.tgrelid = c.oid AND
        t.tgfoid = p.oid AND
        p.proname = \'RI_FKey_check_ins\' AND
        c.relname = \''.strtolower($table).'\'
        ORDER BY
                t.tgrelid';
        
        $rs = $this->Execute($sql);
        
        if ($rs && !$rs->EOF) {
                $arr =& $rs->GetArray();
                $a = array();
                foreach($arr as $v)
                {
                        $data = explode(chr(0), $v['args']);
                        if ($upper) {
                                $a[strtoupper($data[2])][] = 
strtoupper($data[4].'='.$data[5]);
                        } else {
                        $a[$data[2]][] = $data[4].'='.$data[5];
                        }
                }
                return $a;
        }
        return false;
}



    function xMetaForeignKeys($table, $owner=false, $upper=false)
        {

        $sql = '
SELECT t.tgargs as args
   FROM pg_trigger t,
        pg_class c,
        pg_class c2,
        pg_proc f
   WHERE t.tgenabled
   AND t.tgrelid=c.oid
   AND t.tgconstrrelid=c2.oid
   AND t.tgfoid=f.oid
   AND f.proname ~ \'^RI_FKey_check_ins\'
   AND t.tgargs like \'$1\\\000'.strtolower($table).'%\'
   ORDER BY t.tgrelid';

        $rs = $this->Execute($sql);
                if ($rs && !$rs->EOF) {
                        $arr =& $rs->GetArray();
                        $a = array();
                        foreach($arr as $v) {
                $data = explode(chr(0), $v['args']);
                if ($upper) {
                    $a[] = array(strtoupper($data[2]) => 
strtoupper($data[4].'='.$data[5]));
                } else {
                    $a[] = array($data[2] => $data[4].'='.$data[5]);
                }
                
                        }
                        return $a;
                }
                else return false;
    }
        
         // this is a set of functions for managing client encoding - very 
important if the encodings
        // of your database and your output target (i.e. HTML) don't match
        //for instance, you may have UNICODE database and server it on-site as 
WIN1251 etc.
        // GetCharSet - get the name of the character set the client is using 
now
        // the functions should work with Postgres 7.0 and above, the set of 
charsets supported
        // depends on compile flags of postgres distribution - if no charsets 
were compiled into the server
        // it will return 'SQL_ANSI' always
        function GetCharSet()
        {
                //we will use ADO's builtin property charSet
                $this->charSet = @pg_client_encoding($this->_connectionID);
                if (!$this->charSet) {
                        return false;
                } else {
                        return $this->charSet;
                }
        }
        
        // SetCharSet - switch the client encoding
        function SetCharSet($charset_name)
        {
                $this->GetCharSet();
                if ($this->charSet !== $charset_name) {
                        $if = pg_set_client_encoding($this->_connectionID, 
$charset_name);
                        if ($if == "0" & $this->GetCharSet() == $charset_name) {
                                return true;
                        } else return false;
                } else return true;
        }

}
        
/*--------------------------------------------------------------------------------------
         Class Name: Recordset
--------------------------------------------------------------------------------------*/

class ADORecordSet_postgres7 extends ADORecordSet_postgres64{

        var $databaseType = "postgres7";
        
        
        function ADORecordSet_postgres7($queryID,$mode=false) 
        {
                $this->ADORecordSet_postgres64($queryID,$mode);
        }
        
                // 10% speedup to move MoveNext to child class
        function MoveNext() 
        {
                if (!$this->EOF) {
                        $this->_currentRow++;
                        if ($this->_numOfRows < 0 || $this->_numOfRows > 
$this->_currentRow) {
                                $this->fields = 
@pg_fetch_array($this->_queryID,$this->_currentRow,$this->fetchMode);
                        
                                if (is_array($this->fields)) {
                                        if ($this->fields && 
isset($this->_blobArr)) $this->_fixblobs();
                                        return true;
                                }
                        }
                        $this->fields = false;
                        $this->EOF = true;
                }
                return false;
        }               

}

class ADORecordSet_assoc_postgres7 extends ADORecordSet_postgres64{

        var $databaseType = "postgres7";
        
        
        function ADORecordSet_assoc_postgres7($queryID,$mode=false) 
        {
                $this->ADORecordSet_postgres64($queryID,$mode);
        }
        
        function _fetch()
        {
                if ($this->_currentRow >= $this->_numOfRows && 
$this->_numOfRows >= 0)
                return false;

                $this->fields = 
@pg_fetch_array($this->_queryID,$this->_currentRow,$this->fetchMode);
                
                if ($this->fields) {
                        if (isset($this->_blobArr)) $this->_fixblobs();
                        $this->_updatefields();
                }
                        
                return (is_array($this->fields));
        }
        
                // Create associative array
        function _updatefields()
        {
                if (ADODB_ASSOC_CASE == 2) return; // native
        
                $arr = array();
                $lowercase = (ADODB_ASSOC_CASE == 0);
                
                foreach($this->fields as $k => $v) {
                        if (is_integer($k)) $arr[$k] = $v;
                        else {
                                if ($lowercase)
                                        $arr[strtolower($k)] = $v;
                                else
                                        $arr[strtoupper($k)] = $v;
                        }
                }
                $this->fields = $arr;
        }
        
        function MoveNext() 
        {
                if (!$this->EOF) {
                        $this->_currentRow++;
                        if ($this->_numOfRows < 0 || $this->_numOfRows > 
$this->_currentRow) {
                                $this->fields = 
@pg_fetch_array($this->_queryID,$this->_currentRow,$this->fetchMode);
                        
                                if (is_array($this->fields)) {
                                        if ($this->fields) {
                                                if (isset($this->_blobArr)) 
$this->_fixblobs();
                                        
                                                $this->_updatefields();
                                        }
                                        return true;
                                }
                        }
                        
                        
                        $this->fields = false;
                        $this->EOF = true;
                }
                return false;
        }
}
?>




reply via email to

[Prev in Thread] Current Thread [Next in Thread]