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-netezza.inc.php, 1.


From: nomail
Subject: [Phpgroupware-cvs] phpgwapi/inc/adodb/drivers/adodb-netezza.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-netezza.inc.php

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

Log Message:
switch to ADOdb
=====================================================================
<?php
/*
  V4.54 5 Nov 2004  (c) 2000-2004 John Lim (jlim#natsoft.com.my). All rights 
reserved.
 
  First cut at the Netezza Driver by Josh Eldridge joshuae74#hotmail.com
 Based on the previous postgres drivers.
 http://www.netezza.com/
 Major Additions/Changes:
    MetaDatabasesSQL, MetaTablesSQL, MetaColumnsSQL
    Note: You have to have admin privileges to access the system tables
    Removed non-working keys code (Netezza has no concept of keys)
    Fixed the way data types and lengths are returned in MetaColumns()
    as well as added the default lengths for certain types
    Updated public variables for Netezza
    Still need to remove blob functions, as Netezza doesn't suppport blob
*/
// security - hide paths
if (!defined('ADODB_DIR')) die();

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

class ADODB_netezza extends ADODB_postgres64 {
    var $databaseType = 'netezza';      
        var $dataProvider = 'netezza';
        var $hasInsertID = false;
        var $_resultid = false;
        var $concat_operator='||';
        var $random = 'random';
        var $metaDatabasesSQL = "select objname from _v_object_data where 
objtype='database' order by 1";
    var $metaTablesSQL = "select objname from _v_object_data where 
objtype='table' order by 1";
        var $isoDates = true; // accepts dates in ISO format
        var $sysDate = "CURRENT_DATE";
        var $sysTimeStamp = "CURRENT_TIMESTAMP";
        var $blobEncodeType = 'C';
        var $metaColumnsSQL = "SELECT attname, atttype FROM 
_v_relation_column_def WHERE name = '%s' AND attnum > 0 ORDER BY attnum";
        var $metaColumnsSQL1 = "SELECT attname, atttype FROM 
_v_relation_column_def WHERE name = '%s' AND attnum > 0 ORDER BY attnum";
        // netezza doesn't have keys. it does have distributions, so maybe this 
is 
        // something that can be pulled from the system tables
        var $metaKeySQL = "";
        var $hasAffectedRows = true;
        var $hasLimit = true;   
        var $true = 't';                // string that represents TRUE for a 
database
        var $false = 'f';               // string that represents FALSE for a 
database
        var $fmtDate = "'Y-m-d'";       // used by DBDate() as the default date 
format used by the database
        var $fmtTimeStamp = "'Y-m-d G:i:s'"; // used by DBTimeStamp as the 
default timestamp fmt.
        var $ansiOuter = true;
        var $autoRollback = true; // apparently pgsql does not autorollback 
properly before 4.3.4
                                                        // 
http://bugs.php.net/bug.php?id=25404

                                                        
        function ADODB_netezza() 
        {
        
        }
        
        function &MetaColumns($table,$upper=true) 
        {
        
        // Changed this function to support Netezza which has no concept of keys
        // could posisbly work on other things from the system table later.
        
        global $ADODB_FETCH_MODE;
        
                $table = strtolower($table);

                $save = $ADODB_FETCH_MODE;
                $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
                if ($this->fetchMode !== false) $savem = 
$this->SetFetchMode(false);
                
                $rs =& 
$this->Execute(sprintf($this->metaColumnsSQL,$table,$table));
                if (isset($savem)) $this->SetFetchMode($savem);
                $ADODB_FETCH_MODE = $save;
                
                if ($rs === false) return false;

                $retarr = array();
                while (!$rs->EOF) {     
                        $fld = new ADOFieldObject();
                        $fld->name = $rs->fields[0];
                        
                        // since we're returning type and length as one string, 
                        // split them out here.
                        
                        if ($first = strstr($rs->fields[1], "(")) {
                         $fld->max_length = trim($first, "()");
                        } else {
                         $fld->max_length = -1;
                        }
                
                        if ($first = strpos($rs->fields[1], "(")) {
                         $fld->type = substr($rs->fields[1], 0, $first);
                        } else {
                         $fld->type = $rs->fields[1];
                        }
                        
                        switch ($fld->type) {
                         case "byteint":
                         case "boolean":
                         $fld->max_length = 1;
                         break;
                         case "smallint":
                         $fld->max_length = 2;
                         break;
                         case "integer":
                         case "numeric":
                         case "date":
                         $fld->max_length = 4;
                         break;
                         case "bigint":
                         case "time":
                         case "timestamp":
                         $fld->max_length = 8;
                         break;
                         case "timetz":
                         case "time with time zone":
                         $fld->max_length = 12;
                         break;
                        }
                        
                        if ($ADODB_FETCH_MODE == ADODB_FETCH_NUM) $retarr[] = 
$fld;     
                        else $retarr[($upper) ? strtoupper($fld->name) : 
$fld->name] = $fld;
                        
                        $rs->MoveNext();
                }
                $rs->Close();
                return $retarr; 
                
        }

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

class ADORecordSet_netezza extends ADORecordSet_postgres64
{
        var $databaseType = "netezza";
        var $canSeek = true;
        
        function ADORecordSet_netezza($queryID,$mode=false) 
        {
                if ($mode === false) { 
                        global $ADODB_FETCH_MODE;
                        $mode = $ADODB_FETCH_MODE;
                }
                switch ($mode)
                {
                case ADODB_FETCH_NUM: $this->fetchMode = PGSQL_NUM; break;
                case ADODB_FETCH_ASSOC:$this->fetchMode = PGSQL_ASSOC; break;
                default:
                case ADODB_FETCH_DEFAULT:
                case ADODB_FETCH_BOTH:$this->fetchMode = PGSQL_BOTH; break;
                }
                $this->ADORecordSet($queryID);
        }
        
        // _initrs modified to disable blob handling
        function _initrs()
        {
        global $ADODB_COUNTRECS;
                $this->_numOfRows = ($ADODB_COUNTRECS)? 
@pg_numrows($this->_queryID):-1;
                $this->_numOfFields = @pg_numfields($this->_queryID);
        }

}
?>




reply via email to

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