mirror of
https://github.com/EGroupware/egroupware.git
synced 2025-08-16 10:08:01 +02:00
imported ADOdb version 4.20 released 27 Feb 2004
This commit is contained in:
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
/*
|
||||
V3.94 13 Oct 2003 (c) 2000-2003 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||
V4.20 22 Feb 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). 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.
|
||||
@ -69,8 +69,17 @@ class ADODB_postgres64 extends ADOConnection{
|
||||
FROM pg_class c, pg_attribute a,pg_type t
|
||||
WHERE relkind = 'r' AND (c.relname='%s' or c.relname = lower('%s')) and a.attname not like '....%%'
|
||||
AND a.attnum > 0 AND a.atttypid = t.oid AND a.attrelid = c.oid ORDER BY a.attnum";
|
||||
|
||||
var $metaColumnsSQL1 = "SELECT a.attname, t.typname, a.attlen, a.atttypmod, a.attnotnull, a.atthasdef, a.attnum
|
||||
FROM pg_class c, pg_attribute a, pg_type t, pg_namespace n
|
||||
WHERE relkind = 'r' AND (c.relname='%s' or c.relname = lower('%s'))
|
||||
and c.relnamespace=n.oid and n.nspname='%s'
|
||||
and a.attname not like '....%%' AND a.attnum > 0
|
||||
AND a.atttypid = t.oid AND a.attrelid = c.oid ORDER BY a.attnum";
|
||||
|
||||
// get primary key etc -- from Freek Dijkstra
|
||||
var $metaKeySQL = "SELECT ic.relname AS index_name, a.attname AS column_name,i.indisunique AS unique_key, i.indisprimary AS primary_key FROM pg_class bc, pg_class ic, pg_index i, pg_attribute a WHERE bc.oid = i.indrelid AND ic.oid = i.indexrelid AND (i.indkey[0] = a.attnum OR i.indkey[1] = a.attnum OR i.indkey[2] = a.attnum OR i.indkey[3] = a.attnum OR i.indkey[4] = a.attnum OR i.indkey[5] = a.attnum OR i.indkey[6] = a.attnum OR i.indkey[7] = a.attnum) AND a.attrelid = bc.oid AND bc.relname = '%s'";
|
||||
var $metaKeySQL = "SELECT ic.relname AS index_name, a.attname AS column_name,i.indisunique AS unique_key, i.indisprimary AS primary_key
|
||||
FROM pg_class bc, pg_class ic, pg_index i, pg_attribute a WHERE bc.oid = i.indrelid AND ic.oid = i.indexrelid AND (i.indkey[0] = a.attnum OR i.indkey[1] = a.attnum OR i.indkey[2] = a.attnum OR i.indkey[3] = a.attnum OR i.indkey[4] = a.attnum OR i.indkey[5] = a.attnum OR i.indkey[6] = a.attnum OR i.indkey[7] = a.attnum) AND a.attrelid = bc.oid AND bc.relname = '%s'";
|
||||
|
||||
var $hasAffectedRows = true;
|
||||
var $hasLimit = false; // set to true for pgsql 7 only. support pgsql/mysql SELECT * FROM TABLE LIMIT 10
|
||||
@ -85,8 +94,11 @@ AND a.attnum > 0 AND a.atttypid = t.oid AND a.attrelid = c.oid ORDER BY a.attnum
|
||||
var $_genSeqSQL = "CREATE SEQUENCE %s START %s";
|
||||
var $_dropSeqSQL = "DROP SEQUENCE %s";
|
||||
var $metaDefaultsSQL = "SELECT d.adnum as num, d.adsrc as def from pg_attrdef d, pg_class c where d.adrelid=c.oid and c.relname='%s' order by d.adnum";
|
||||
var $upperCase = 'upper';
|
||||
var $substr = "substr";
|
||||
var $random = 'random()'; /// random function
|
||||
var $autoRollback = true; // apparently pgsql does not autorollback properly before 4.3.4
|
||||
// http://bugs.php.net/bug.php?id=25404
|
||||
|
||||
var $_bindInputArray = false; // requires postgresql 7.3+ and ability to modify database
|
||||
|
||||
// The last (fmtTimeStamp is not entirely correct:
|
||||
// PostgreSQL also has support for time zones,
|
||||
@ -145,7 +157,7 @@ a different OID if a database must be reloaded. */
|
||||
if (!is_resource($this->_resultid) || get_resource_type($this->_resultid) !== 'pgsql result') return false;
|
||||
return pg_cmdtuples($this->_resultid);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// returns true/false
|
||||
function BeginTrans()
|
||||
@ -348,6 +360,8 @@ select viewname,'V' from pg_views where viewname like $mask";
|
||||
function BlobEncode($blob)
|
||||
{
|
||||
if (ADODB_PHPVER >= 0x4200) return pg_escape_bytea($blob);
|
||||
|
||||
/*92=backslash, 0=null, 39=single-quote*/
|
||||
$badch = array(chr(92),chr(0),chr(39)); # \ null '
|
||||
$fixch = array('\\\\134','\\\\000','\\\\047');
|
||||
return adodb_str_replace($badch,$fixch,$blob);
|
||||
@ -357,8 +371,8 @@ select viewname,'V' from pg_views where viewname like $mask";
|
||||
|
||||
function UpdateBlob($table,$column,$val,$where,$blobtype='BLOB')
|
||||
{
|
||||
return $this->Execute("UPDATE $table SET $column=? WHERE $where",
|
||||
array($this->BlobEncode($val))) != false;
|
||||
// do not use bind params which uses qstr(), as blobencode() already quotes data
|
||||
return $this->Execute("UPDATE $table SET $column='".$this->BlobEncode($val)."'::bytea WHERE $where");
|
||||
}
|
||||
|
||||
function OffsetDate($dayFraction,$date=false)
|
||||
@ -368,111 +382,177 @@ select viewname,'V' from pg_views where viewname like $mask";
|
||||
}
|
||||
|
||||
|
||||
// converts field names to lowercase
|
||||
function &MetaColumns($table)
|
||||
// for schema support, pass in the $table param "$schema.$tabname".
|
||||
// converts field names to lowercase, $upper is ignored
|
||||
function &MetaColumns($table,$upper=true)
|
||||
{
|
||||
global $ADODB_FETCH_MODE;
|
||||
|
||||
//if (strncmp(PHP_OS,'WIN',3) === 0);
|
||||
$schema = false;
|
||||
$this->_findschema($table,$schema);
|
||||
|
||||
$table = strtolower($table);
|
||||
|
||||
if (!empty($this->metaColumnsSQL)) {
|
||||
$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));
|
||||
|
||||
$save = $ADODB_FETCH_MODE;
|
||||
$ADODB_FETCH_MODE = ADODB_FETCH_NUM;
|
||||
if ($this->fetchMode !== false) $savem = $this->SetFetchMode(false);
|
||||
|
||||
if ($schema) $rs =& $this->Execute(sprintf($this->metaColumnsSQL1,$table,$table,$schema));
|
||||
else $rs =& $this->Execute(sprintf($this->metaColumnsSQL,$table,$table));
|
||||
if (isset($savem)) $this->SetFetchMode($savem);
|
||||
$ADODB_FETCH_MODE = $save;
|
||||
|
||||
if ($rs === false) return false;
|
||||
|
||||
if (!empty($this->metaKeySQL)) {
|
||||
// If we want the primary keys, we have to issue a separate query
|
||||
// Of course, a modified version of the metaColumnsSQL query using a
|
||||
// LEFT JOIN would have been much more elegant, but postgres does
|
||||
// not support OUTER JOINS. So here is the clumsy way.
|
||||
|
||||
$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
|
||||
|
||||
$rskey = $this->Execute(sprintf($this->metaKeySQL,($table)));
|
||||
// fetch all result in once for performance.
|
||||
$keys =& $rskey->GetArray();
|
||||
if (isset($savem)) $this->SetFetchMode($savem);
|
||||
$ADODB_FETCH_MODE = $save;
|
||||
|
||||
if ($rs === false) return false;
|
||||
|
||||
if (!empty($this->metaKeySQL)) {
|
||||
// If we want the primary keys, we have to issue a separate query
|
||||
// Of course, a modified version of the metaColumnsSQL query using a
|
||||
// LEFT JOIN would have been much more elegant, but postgres does
|
||||
// not support OUTER JOINS. So here is the clumsy way.
|
||||
|
||||
$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
|
||||
|
||||
$rskey = $this->Execute(sprintf($this->metaKeySQL,($table)));
|
||||
// fetch all result in once for performance.
|
||||
$keys =& $rskey->GetArray();
|
||||
if (isset($savem)) $this->SetFetchMode($savem);
|
||||
$ADODB_FETCH_MODE = $save;
|
||||
|
||||
$rskey->Close();
|
||||
unset($rskey);
|
||||
}
|
||||
|
||||
$rsdefa = array();
|
||||
if (!empty($this->metaDefaultsSQL)) {
|
||||
$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
|
||||
$sql = sprintf($this->metaDefaultsSQL, ($table));
|
||||
$rsdef = $this->Execute($sql);
|
||||
if (isset($savem)) $this->SetFetchMode($savem);
|
||||
$ADODB_FETCH_MODE = $save;
|
||||
|
||||
if ($rsdef) {
|
||||
while (!$rsdef->EOF) {
|
||||
$num = $rsdef->fields['num'];
|
||||
$s = $rsdef->fields['def'];
|
||||
if (substr($s, 0, 1) == "'") { /* quoted strings hack... for now... fixme */
|
||||
$s = substr($s, 1);
|
||||
$s = substr($s, 0, strlen($s) - 1);
|
||||
}
|
||||
|
||||
$rsdefa[$num] = $s;
|
||||
$rsdef->MoveNext();
|
||||
}
|
||||
} else {
|
||||
ADOConnection::outp( "==> SQL => " . $sql);
|
||||
}
|
||||
unset($rsdef);
|
||||
}
|
||||
|
||||
$retarr = array();
|
||||
while (!$rs->EOF) {
|
||||
$fld = new ADOFieldObject();
|
||||
$fld->name = $rs->fields[0];
|
||||
$fld->type = $rs->fields[1];
|
||||
$fld->max_length = $rs->fields[2];
|
||||
if ($fld->max_length <= 0) $fld->max_length = $rs->fields[3]-4;
|
||||
if ($fld->max_length <= 0) $fld->max_length = -1;
|
||||
|
||||
// dannym
|
||||
// 5 hasdefault; 6 num-of-column
|
||||
$fld->has_default = ($rs->fields[5] == 't');
|
||||
if ($fld->has_default) {
|
||||
$fld->default_value = $rsdefa[$rs->fields[6]];
|
||||
}
|
||||
|
||||
//Freek
|
||||
if ($rs->fields[4] == $this->true) {
|
||||
$fld->not_null = true;
|
||||
}
|
||||
|
||||
// Freek
|
||||
if (is_array($keys)) {
|
||||
reset ($keys);
|
||||
while (list($x,$key) = each($keys)) {
|
||||
if ($fld->name == $key['column_name'] AND $key['primary_key'] == $this->true)
|
||||
$fld->primary_key = true;
|
||||
if ($fld->name == $key['column_name'] AND $key['unique_key'] == $this->true)
|
||||
$fld->unique = true; // What name is more compatible?
|
||||
}
|
||||
}
|
||||
|
||||
if ($ADODB_FETCH_MODE == ADODB_FETCH_NUM) $retarr[] = $fld;
|
||||
else $retarr[strtoupper($fld->name)] = $fld;
|
||||
|
||||
$rs->MoveNext();
|
||||
}
|
||||
$rs->Close();
|
||||
return $retarr;
|
||||
$rskey->Close();
|
||||
unset($rskey);
|
||||
}
|
||||
return false;
|
||||
|
||||
$rsdefa = array();
|
||||
if (!empty($this->metaDefaultsSQL)) {
|
||||
$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
|
||||
$sql = sprintf($this->metaDefaultsSQL, ($table));
|
||||
$rsdef = $this->Execute($sql);
|
||||
if (isset($savem)) $this->SetFetchMode($savem);
|
||||
$ADODB_FETCH_MODE = $save;
|
||||
|
||||
if ($rsdef) {
|
||||
while (!$rsdef->EOF) {
|
||||
$num = $rsdef->fields['num'];
|
||||
$s = $rsdef->fields['def'];
|
||||
if (substr($s, 0, 1) == "'") { /* quoted strings hack... for now... fixme */
|
||||
$s = substr($s, 1);
|
||||
$s = substr($s, 0, strlen($s) - 1);
|
||||
}
|
||||
|
||||
$rsdefa[$num] = $s;
|
||||
$rsdef->MoveNext();
|
||||
}
|
||||
} else {
|
||||
ADOConnection::outp( "==> SQL => " . $sql);
|
||||
}
|
||||
unset($rsdef);
|
||||
}
|
||||
|
||||
$retarr = array();
|
||||
while (!$rs->EOF) {
|
||||
$fld = new ADOFieldObject();
|
||||
$fld->name = $rs->fields[0];
|
||||
$fld->type = $rs->fields[1];
|
||||
$fld->max_length = $rs->fields[2];
|
||||
if ($fld->max_length <= 0) $fld->max_length = $rs->fields[3]-4;
|
||||
if ($fld->max_length <= 0) $fld->max_length = -1;
|
||||
|
||||
// dannym
|
||||
// 5 hasdefault; 6 num-of-column
|
||||
$fld->has_default = ($rs->fields[5] == 't');
|
||||
if ($fld->has_default) {
|
||||
$fld->default_value = $rsdefa[$rs->fields[6]];
|
||||
}
|
||||
|
||||
//Freek
|
||||
if ($rs->fields[4] == $this->true) {
|
||||
$fld->not_null = true;
|
||||
}
|
||||
|
||||
// Freek
|
||||
if (is_array($keys)) {
|
||||
foreach($keys as $key) {
|
||||
if ($fld->name == $key['column_name'] AND $key['primary_key'] == $this->true)
|
||||
$fld->primary_key = true;
|
||||
if ($fld->name == $key['column_name'] AND $key['unique_key'] == $this->true)
|
||||
$fld->unique = true; // What name is more compatible?
|
||||
}
|
||||
}
|
||||
|
||||
if ($ADODB_FETCH_MODE == ADODB_FETCH_NUM) $retarr[] = $fld;
|
||||
else $retarr[($upper) ? strtoupper($fld->name) : $fld->name] = $fld;
|
||||
|
||||
$rs->MoveNext();
|
||||
}
|
||||
$rs->Close();
|
||||
return $retarr;
|
||||
|
||||
}
|
||||
|
||||
function &MetaIndexes ($table, $primary = FALSE)
|
||||
{
|
||||
global $ADODB_FETCH_MODE;
|
||||
|
||||
$schema = false;
|
||||
$this->_findschema($table,$schema);
|
||||
|
||||
if ($schema) { // requires pgsql 7.3+ - pg_namespace used.
|
||||
$sql = '
|
||||
SELECT c.relname as "Name", i.indisunique as "Unique", i.indkey as "Columns"
|
||||
FROM pg_catalog.pg_class c
|
||||
JOIN pg_catalog.pg_index i ON i.indexrelid=c.oid
|
||||
JOIN pg_catalog.pg_class c2 ON c2.oid=i.indrelid
|
||||
,pg_namespace n
|
||||
WHERE c2.relname=\'%s\' and c.relnamespace=c2.relnamespace and c.relnamespace=n.oid and n.nspname=\'%s\' AND i.indisprimary=false';
|
||||
} else {
|
||||
$sql = '
|
||||
SELECT c.relname as "Name", i.indisunique as "Unique", i.indkey as "Columns"
|
||||
FROM pg_catalog.pg_class c
|
||||
JOIN pg_catalog.pg_index i ON i.indexrelid=c.oid
|
||||
JOIN pg_catalog.pg_class c2 ON c2.oid=i.indrelid
|
||||
WHERE c2.relname=\'%s\'';
|
||||
}
|
||||
|
||||
if ($primary == FALSE) {
|
||||
$sql .= ' AND i.indisprimary=false;';
|
||||
}
|
||||
|
||||
$save = $ADODB_FETCH_MODE;
|
||||
$ADODB_FETCH_MODE = ADODB_FETCH_NUM;
|
||||
if ($this->fetchMode !== FALSE) {
|
||||
$savem = $this->SetFetchMode(FALSE);
|
||||
}
|
||||
|
||||
$rs = $this->Execute(sprintf($sql,$table,$schema));
|
||||
|
||||
if (isset($savem)) {
|
||||
$this->SetFetchMode($savem);
|
||||
}
|
||||
$ADODB_FETCH_MODE = $save;
|
||||
|
||||
if (!is_object($rs)) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
$col_names = $this->MetaColumnNames($table);
|
||||
$indexes = array();
|
||||
|
||||
while ($row = $rs->FetchRow()) {
|
||||
$columns = array();
|
||||
|
||||
foreach (explode(' ', $row[2]) as $col) {
|
||||
$columns[] = $col_names[$col - 1];
|
||||
}
|
||||
|
||||
$indexes[$row[0]] = array(
|
||||
'unique' => ($row[1] == 't'),
|
||||
'columns' => $columns
|
||||
);
|
||||
}
|
||||
|
||||
return $indexes;
|
||||
}
|
||||
|
||||
// returns true or false
|
||||
//
|
||||
// examples:
|
||||
@ -480,6 +560,9 @@ select viewname,'V' from pg_views where viewname like $mask";
|
||||
// $db->Connect('host1','user1','secret');
|
||||
function _connect($str,$user='',$pwd='',$db='',$ctype=0)
|
||||
{
|
||||
|
||||
if (!function_exists('pg_pconnect')) return false;
|
||||
|
||||
$this->_errorMsg = false;
|
||||
|
||||
if ($user || $pwd || $db) {
|
||||
@ -492,8 +575,6 @@ select viewname,'V' from pg_views where viewname like $mask";
|
||||
if ($host[0]) $str = "host=".adodb_addslashes($host[0]);
|
||||
else $str = 'host=localhost';
|
||||
if (isset($host[1])) $str .= " port=$host[1]";
|
||||
} else {
|
||||
$str = 'host=localhost';
|
||||
}
|
||||
if ($user) $str .= " user=".$user;
|
||||
if ($pwd) $str .= " password=".$pwd;
|
||||
@ -534,16 +615,44 @@ select viewname,'V' from pg_views where viewname like $mask";
|
||||
{
|
||||
return $this->_connect($str,$user,$pwd,$db,1);
|
||||
}
|
||||
|
||||
|
||||
// returns queryID or false
|
||||
function _query($sql,$inputarr)
|
||||
{
|
||||
|
||||
if ($inputarr) {
|
||||
/*
|
||||
if (is_array($sql)) {
|
||||
if (!$sql[1]) {
|
||||
It appears that PREPARE/EXECUTE is slower for many queries.
|
||||
|
||||
$sqltxt = $sql[0];
|
||||
$plan = $sql[1] = 'P'.md5($sqltxt);
|
||||
For query executed 1000 times:
|
||||
"select id,firstname,lastname from adoxyz
|
||||
where firstname not like ? and lastname not like ? and id = ?"
|
||||
|
||||
with plan = 1.51861286163 secs
|
||||
no plan = 1.26903700829 secs
|
||||
|
||||
|
||||
|
||||
*/
|
||||
$plan = 'P'.md5($sql);
|
||||
|
||||
$execp = '';
|
||||
foreach($inputarr as $v) {
|
||||
if ($execp) $execp .= ',';
|
||||
if (is_string($v)) {
|
||||
if (strncmp($v,"'",1) !== 0) $execp .= $this->qstr($v);
|
||||
} else {
|
||||
$execp .= $v;
|
||||
}
|
||||
}
|
||||
|
||||
if ($execp) $exsql = "EXECUTE $plan ($execp)";
|
||||
else $exsql = "EXECUTE $plan";
|
||||
|
||||
$rez = @pg_exec($this->_connectionID,$exsql);
|
||||
if (!$rez) {
|
||||
# Perhaps plan does not exist? Prepare/compile plan.
|
||||
$params = '';
|
||||
foreach($inputarr as $v) {
|
||||
if ($params) $params .= ',';
|
||||
@ -555,40 +664,26 @@ select viewname,'V' from pg_views where viewname like $mask";
|
||||
$params .= "REAL";
|
||||
}
|
||||
}
|
||||
$sqlarr = explode('?',$sqltxt);
|
||||
$sqltxt = '';
|
||||
$sqlarr = explode('?',$sql);
|
||||
//print_r($sqlarr);
|
||||
$sql = '';
|
||||
$i = 1;
|
||||
foreach($sqlarr as $v) {
|
||||
$sqltxt .= $v.'$'.$i;
|
||||
$sql .= $v.' $'.$i;
|
||||
$i++;
|
||||
}
|
||||
$s = "PREPARE $plan ($params) AS ".substr($sqltxt,0,strlen($sqltxt)-2);
|
||||
adodb_pr($s);
|
||||
$s = "PREPARE $plan ($params) AS ".substr($sql,0,strlen($sql)-2);
|
||||
//adodb_pr($s);
|
||||
pg_exec($this->_connectionID,$s);
|
||||
echo $this->ErrorMsg();
|
||||
} else {
|
||||
$plan = $sql[1];
|
||||
}
|
||||
$params = '';
|
||||
foreach($inputarr as $v) {
|
||||
if ($params) $params .= ',';
|
||||
if (is_string($v)) {
|
||||
if (strncmp($v,"'",1) !== 0) $params .= $this->qstr($v.'TEST');
|
||||
} else {
|
||||
$params .= $v;
|
||||
}
|
||||
}
|
||||
|
||||
if ($params) $sql = "EXECUTE $plan ($params)";
|
||||
else $sql = "EXECUTE $plan";
|
||||
|
||||
adodb_pr(">>>>>".$sql);
|
||||
pg_exec($this->_connectionID,$s);
|
||||
}*/
|
||||
|
||||
$this->_errorMsg = false;
|
||||
|
||||
$rez = pg_exec($this->_connectionID,$sql);
|
||||
$rez = pg_exec($this->_connectionID,$exsql);
|
||||
} else {
|
||||
$this->_errorMsg = false;
|
||||
//adodb_backtrace();
|
||||
$rez = pg_exec($this->_connectionID,$sql);
|
||||
}
|
||||
// check if no data returned, then no need to create real recordset
|
||||
if ($rez && pg_numfields($rez) <= 0) {
|
||||
if (is_resource($this->_resultid) && get_resource_type($this->_resultid) === 'pgsql result') {
|
||||
@ -689,7 +784,8 @@ class ADORecordSet_postgres64 extends ADORecordSet{
|
||||
function &GetRowAssoc($upper=true)
|
||||
{
|
||||
if ($this->fetchMode == PGSQL_ASSOC && !$upper) return $this->fields;
|
||||
return ADORecordSet::GetRowAssoc($upper);
|
||||
$row =& ADORecordSet::GetRowAssoc($upper);
|
||||
return $row;
|
||||
}
|
||||
|
||||
function _initrs()
|
||||
@ -754,10 +850,6 @@ class ADORecordSet_postgres64 extends ADORecordSet{
|
||||
}
|
||||
if ($this->fetchMode == PGSQL_ASSOC || $this->fetchMode == PGSQL_BOTH) {
|
||||
foreach($this->_blobArr as $k => $v) {
|
||||
if (!isset($this->fields[$v])) {
|
||||
$this->fields = false;
|
||||
return;
|
||||
}
|
||||
$this->fields[$v] = ADORecordSet_postgres64::_decode($this->fields[$v]);
|
||||
}
|
||||
}
|
||||
@ -770,9 +862,8 @@ class ADORecordSet_postgres64 extends ADORecordSet{
|
||||
$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 (isset($this->_blobArr)) $this->_fixblobs();
|
||||
if (is_array($this->fields) && $this->fields) {
|
||||
if ($this->fields && isset($this->_blobArr)) $this->_fixblobs();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -784,11 +875,13 @@ class ADORecordSet_postgres64 extends ADORecordSet{
|
||||
|
||||
function _fetch()
|
||||
{
|
||||
|
||||
if ($this->_currentRow >= $this->_numOfRows && $this->_numOfRows >= 0)
|
||||
return false;
|
||||
|
||||
$this->fields = @pg_fetch_array($this->_queryID,$this->_currentRow,$this->fetchMode);
|
||||
if (isset($this->_blobArr)) $this->_fixblobs();
|
||||
|
||||
if ($this->fields && isset($this->_blobArr)) $this->_fixblobs();
|
||||
|
||||
return (is_array($this->fields));
|
||||
}
|
||||
|
Reference in New Issue
Block a user