mirror of
https://github.com/moodle/moodle.git
synced 2025-08-04 16:36:37 +02:00
Upgraded to ADOdb 4.5.1. Contains a lot of small fixes and speed-ups.
This commit is contained in:
parent
f5f346a594
commit
fab7e07e19
90 changed files with 1555 additions and 832 deletions
|
@ -7,7 +7,7 @@ global $ADODB_INCLUDED_CSV;
|
||||||
$ADODB_INCLUDED_CSV = 1;
|
$ADODB_INCLUDED_CSV = 1;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence. See License.txt.
|
the BSD license will take precedence. See License.txt.
|
||||||
|
@ -249,4 +249,56 @@ $ADODB_INCLUDED_CSV = 1;
|
||||||
$rs->InitArrayFields($arr,$flds);
|
$rs->InitArrayFields($arr,$flds);
|
||||||
return $rs;
|
return $rs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Save a file $filename and its $contents (normally for caching) with file locking
|
||||||
|
*/
|
||||||
|
function adodb_write_file($filename, $contents,$debug=false)
|
||||||
|
{
|
||||||
|
# http://www.php.net/bugs.php?id=9203 Bug that flock fails on Windows
|
||||||
|
# So to simulate locking, we assume that rename is an atomic operation.
|
||||||
|
# First we delete $filename, then we create a $tempfile write to it and
|
||||||
|
# rename to the desired $filename. If the rename works, then we successfully
|
||||||
|
# modified the file exclusively.
|
||||||
|
# What a stupid need - having to simulate locking.
|
||||||
|
# Risks:
|
||||||
|
# 1. $tempfile name is not unique -- very very low
|
||||||
|
# 2. unlink($filename) fails -- ok, rename will fail
|
||||||
|
# 3. adodb reads stale file because unlink fails -- ok, $rs timeout occurs
|
||||||
|
# 4. another process creates $filename between unlink() and rename() -- ok, rename() fails and cache updated
|
||||||
|
if (strncmp(PHP_OS,'WIN',3) === 0) {
|
||||||
|
// skip the decimal place
|
||||||
|
$mtime = substr(str_replace(' ','_',microtime()),2);
|
||||||
|
// getmypid() actually returns 0 on Win98 - never mind!
|
||||||
|
$tmpname = $filename.uniqid($mtime).getmypid();
|
||||||
|
if (!($fd = fopen($tmpname,'a'))) return false;
|
||||||
|
$ok = ftruncate($fd,0);
|
||||||
|
if (!fwrite($fd,$contents)) $ok = false;
|
||||||
|
fclose($fd);
|
||||||
|
chmod($tmpname,0644);
|
||||||
|
// the tricky moment
|
||||||
|
@unlink($filename);
|
||||||
|
if (!@rename($tmpname,$filename)) {
|
||||||
|
unlink($tmpname);
|
||||||
|
$ok = false;
|
||||||
|
}
|
||||||
|
if (!$ok) {
|
||||||
|
if ($debug) ADOConnection::outp( " Rename $tmpname ".($ok? 'ok' : 'failed'));
|
||||||
|
}
|
||||||
|
return $ok;
|
||||||
|
}
|
||||||
|
if (!($fd = fopen($filename, 'a'))) return false;
|
||||||
|
if (flock($fd, LOCK_EX) && ftruncate($fd, 0)) {
|
||||||
|
$ok = fwrite( $fd, $contents );
|
||||||
|
fclose($fd);
|
||||||
|
chmod($filename,0644);
|
||||||
|
}else {
|
||||||
|
fclose($fd);
|
||||||
|
if ($debug)ADOConnection::outp( " Failed acquiring lock for $filename<br>\n");
|
||||||
|
$ok = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $ok;
|
||||||
|
}
|
||||||
?>
|
?>
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @version V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
* @version V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
* Released under both BSD license and Lesser GPL library license.
|
* Released under both BSD license and Lesser GPL library license.
|
||||||
* Whenever there is any discrepancy between the two licenses,
|
* Whenever there is any discrepancy between the two licenses,
|
||||||
* the BSD license will take precedence.
|
* the BSD license will take precedence.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @version V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
* @version V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
* Released under both BSD license and Lesser GPL library license.
|
* Released under both BSD license and Lesser GPL library license.
|
||||||
* Whenever there is any discrepancy between the two licenses,
|
* Whenever there is any discrepancy between the two licenses,
|
||||||
* the BSD license will take precedence.
|
* the BSD license will take precedence.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
@ -59,13 +59,6 @@
|
||||||
return call_user_func_array(array($this->rs, $func), $params);
|
return call_user_func_array(array($this->rs, $func), $params);
|
||||||
}
|
}
|
||||||
|
|
||||||
function __toString()
|
|
||||||
{
|
|
||||||
if (isset($rs->databaseType)) $s = ' for '.$rs->databaseType;
|
|
||||||
else $s = '';
|
|
||||||
|
|
||||||
return 'ADODB Iterator'.$s;
|
|
||||||
}
|
|
||||||
|
|
||||||
function hasMore()
|
function hasMore()
|
||||||
{
|
{
|
||||||
|
@ -79,6 +72,12 @@ class ADODB_BASE_RS implements IteratorAggregate {
|
||||||
function getIterator() {
|
function getIterator() {
|
||||||
return new ADODB_Iterator($this);
|
return new ADODB_Iterator($this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function __toString()
|
||||||
|
{
|
||||||
|
include_once(ADODB_DIR.'/toexport.inc.php');
|
||||||
|
return _adodb_export($this,',',',',false,true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
?>
|
?>
|
|
@ -63,7 +63,7 @@ function _adodb_replace(&$zthis, $table, $fieldArray, $keyCol, $autoQuote, $has_
|
||||||
if ($uSet && $where) {
|
if ($uSet && $where) {
|
||||||
$update = "UPDATE $table SET $uSet WHERE $where";
|
$update = "UPDATE $table SET $uSet WHERE $where";
|
||||||
|
|
||||||
$rs = $zthis->Execute($update);
|
$rs = $zthis->_Execute($update);
|
||||||
if ($rs) {
|
if ($rs) {
|
||||||
if ($zthis->poorAffectedRows) {
|
if ($zthis->poorAffectedRows) {
|
||||||
/*
|
/*
|
||||||
|
@ -77,8 +77,10 @@ function _adodb_replace(&$zthis, $table, $fieldArray, $keyCol, $autoQuote, $has_
|
||||||
|
|
||||||
$cnt = $zthis->GetOne("select count(*) from $table where $where");
|
$cnt = $zthis->GetOne("select count(*) from $table where $where");
|
||||||
if ($cnt > 0) return 1; // record already exists
|
if ($cnt > 0) return 1; // record already exists
|
||||||
} else
|
} else {
|
||||||
if (($zthis->Affected_Rows()>0)) return 1;
|
|
||||||
|
if (($zthis->Affected_Rows()>0)) return 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// print "<p>Error=".$this->ErrorNo().'<p>';
|
// print "<p>Error=".$this->ErrorNo().'<p>';
|
||||||
|
@ -96,7 +98,7 @@ function _adodb_replace(&$zthis, $table, $fieldArray, $keyCol, $autoQuote, $has_
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$insert = "INSERT INTO $table ($iCols) VALUES ($iVals)";
|
$insert = "INSERT INTO $table ($iCols) VALUES ($iVals)";
|
||||||
$rs = $zthis->Execute($insert);
|
$rs = $zthis->_Execute($insert);
|
||||||
return ($rs) ? 2 : 0;
|
return ($rs) ? 2 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -216,7 +218,7 @@ function _adodb_getcount(&$zthis, $sql,$inputarr=false,$secs2cache=0)
|
||||||
if (preg_match('/\s*UNION\s*/is', $sql)) $rewritesql = $sql;
|
if (preg_match('/\s*UNION\s*/is', $sql)) $rewritesql = $sql;
|
||||||
else $rewritesql = preg_replace('/(\sORDER\s+BY\s.*)/is','',$sql);
|
else $rewritesql = preg_replace('/(\sORDER\s+BY\s.*)/is','',$sql);
|
||||||
|
|
||||||
$rstest = &$zthis->Execute($rewritesql,$inputarr);
|
$rstest = &$zthis->_Execute($rewritesql,$inputarr);
|
||||||
if ($rstest) {
|
if ($rstest) {
|
||||||
$qryRecs = $rstest->RecordCount();
|
$qryRecs = $rstest->RecordCount();
|
||||||
if ($qryRecs == -1) {
|
if ($qryRecs == -1) {
|
||||||
|
@ -266,11 +268,7 @@ function &_adodb_pageexecute_all_rows(&$zthis, $sql, $nrows, $page,
|
||||||
$lastpageno = (int) ceil($qryRecs / $nrows);
|
$lastpageno = (int) ceil($qryRecs / $nrows);
|
||||||
$zthis->_maxRecordCount = $qryRecs;
|
$zthis->_maxRecordCount = $qryRecs;
|
||||||
|
|
||||||
// If page number <= 1, then we are at the first page
|
|
||||||
if (!isset($page) || $page <= 1) {
|
|
||||||
$page = 1;
|
|
||||||
$atfirstpage = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ***** Here we check whether $page is the last page or
|
// ***** Here we check whether $page is the last page or
|
||||||
// whether we are trying to retrieve
|
// whether we are trying to retrieve
|
||||||
|
@ -280,6 +278,12 @@ function &_adodb_pageexecute_all_rows(&$zthis, $sql, $nrows, $page,
|
||||||
$atlastpage = true;
|
$atlastpage = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If page number <= 1, then we are at the first page
|
||||||
|
if (empty($page) || $page <= 1) {
|
||||||
|
$page = 1;
|
||||||
|
$atfirstpage = true;
|
||||||
|
}
|
||||||
|
|
||||||
// We get the data we want
|
// We get the data we want
|
||||||
$offset = $nrows * ($page-1);
|
$offset = $nrows * ($page-1);
|
||||||
if ($secs2cache > 0)
|
if ($secs2cache > 0)
|
||||||
|
@ -372,7 +376,7 @@ function _adodb_getupdatesql(&$zthis,&$rs, $arrFields,$forceUpdate=false,$magicq
|
||||||
// If the recordset field is one
|
// If the recordset field is one
|
||||||
// of the fields passed in then process.
|
// of the fields passed in then process.
|
||||||
$upperfname = strtoupper($field->name);
|
$upperfname = strtoupper($field->name);
|
||||||
if (adodb_key_exists($upperfname,$arrFields)) {
|
if (adodb_key_exists($upperfname,$arrFields,$forcenulls)) {
|
||||||
|
|
||||||
// If the existing field value in the recordset
|
// If the existing field value in the recordset
|
||||||
// is different from the value passed in then
|
// is different from the value passed in then
|
||||||
|
@ -392,31 +396,32 @@ function _adodb_getupdatesql(&$zthis,&$rs, $arrFields,$forceUpdate=false,$magicq
|
||||||
|
|
||||||
// Based on the datatype of the field
|
// Based on the datatype of the field
|
||||||
// Format the value properly for the database
|
// Format the value properly for the database
|
||||||
$type = $rs->MetaType($field->type);
|
$type = $rs->MetaType($field->type);
|
||||||
|
|
||||||
// is_null requires php 4.0.4
|
// is_null requires php 4.0.4
|
||||||
if (($forcenulls && is_null($arrFields[$upperfname])) ||
|
if (($forcenulls && is_null($arrFields[$upperfname])) ||
|
||||||
$arrFields[$upperfname] === 'null') {
|
$arrFields[$upperfname] === 'null') {
|
||||||
$setFields .= $field->name . " = null, ";
|
$setFields .= $field->name . " = null, ";
|
||||||
} else {
|
} else {
|
||||||
if ($type == 'null') {
|
if ($type == 'null') {
|
||||||
$type = 'C';
|
$type = 'C';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strpos($upperfname,' ') !== false)
|
||||||
|
$fnameq = $zthis->nameQuote.$upperfname.$zthis->nameQuote;
|
||||||
|
else
|
||||||
|
$fnameq = $upperfname;
|
||||||
|
|
||||||
|
//we do this so each driver can customize the sql for
|
||||||
|
//DB specific column types.
|
||||||
|
//Oracle needs BLOB types to be handled with a returning clause
|
||||||
|
//postgres has special needs as well
|
||||||
|
$setFields .= _adodb_column_sql($zthis, 'U', $type, $upperfname, $fnameq,
|
||||||
|
$arrFields, $magicq);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strpos($upperfname,' ') !== false)
|
|
||||||
$fnameq = $zthis->nameQuote.$upperfname.$zthis->nameQuote;
|
|
||||||
else
|
|
||||||
$fnameq = $upperfname;
|
|
||||||
//we do this so each driver can customize the sql for
|
|
||||||
//DB specific column types.
|
|
||||||
//Oracle needs BLOB types to be handled with a returning clause
|
|
||||||
//postgres has special needs as well
|
|
||||||
$setFields .= _adodb_column_sql($zthis, 'U', $type, $upperfname, $fnameq,
|
|
||||||
$arrFields, $magicq);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// If there were any modified fields then build the rest of the update query.
|
// If there were any modified fields then build the rest of the update query.
|
||||||
if ($fieldUpdatedCount > 0 || $forceUpdate) {
|
if ($fieldUpdatedCount > 0 || $forceUpdate) {
|
||||||
|
@ -429,9 +434,10 @@ function _adodb_getupdatesql(&$zthis,&$rs, $arrFields,$forceUpdate=false,$magicq
|
||||||
|
|
||||||
$discard = false;
|
$discard = false;
|
||||||
// not a good hack, improvements?
|
// not a good hack, improvements?
|
||||||
if ($whereClause)
|
if ($whereClause) {
|
||||||
preg_match('/\s(LIMIT\s.*)/is', $whereClause[1], $discard);
|
if (preg_match('/\s(ORDER\s.*)/is', $whereClause[1], $discard));
|
||||||
else
|
else preg_match('/\s(LIMIT\s.*)/is', $whereClause[1], $discard);
|
||||||
|
} else
|
||||||
$whereClause = array(false,false);
|
$whereClause = array(false,false);
|
||||||
|
|
||||||
if ($discard)
|
if ($discard)
|
||||||
|
@ -503,7 +509,7 @@ function _adodb_getinsertsql(&$zthis,&$rs,$arrFields,$magicq=false,$forcenulls=f
|
||||||
// Loop through all of the fields in the recordset
|
// Loop through all of the fields in the recordset
|
||||||
foreach( $columns as $field ) {
|
foreach( $columns as $field ) {
|
||||||
$upperfname = strtoupper($field->name);
|
$upperfname = strtoupper($field->name);
|
||||||
if (adodb_key_exists($upperfname,$arrFields)) {
|
if (adodb_key_exists($upperfname,$arrFields,$forcenulls)) {
|
||||||
|
|
||||||
// Set the counter for the number of fields that will be inserted.
|
// Set the counter for the number of fields that will be inserted.
|
||||||
$fieldInsertedCount++;
|
$fieldInsertedCount++;
|
||||||
|
@ -539,8 +545,10 @@ function _adodb_getinsertsql(&$zthis,&$rs,$arrFields,$magicq=false,$forcenulls=f
|
||||||
|
|
||||||
// Get the table name from the existing query.
|
// Get the table name from the existing query.
|
||||||
if (!$tableName) {
|
if (!$tableName) {
|
||||||
preg_match("/FROM\s+".ADODB_TABLE_REGEX."/is", $rs->sql, $tableName);
|
if (preg_match("/FROM\s+".ADODB_TABLE_REGEX."/is", $rs->sql, $tableName))
|
||||||
$tableName = $tableName[1];
|
$tableName = $tableName[1];
|
||||||
|
else
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Strip off the comma and space on the end of both the fields
|
// Strip off the comma and space on the end of both the fields
|
||||||
|
@ -693,4 +701,105 @@ function _adodb_column_sql(&$zthis, $action, $type, $fname, $fnameq, $arrFields,
|
||||||
|
|
||||||
return $sql;
|
return $sql;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function _adodb_debug_execute(&$zthis, $sql, $inputarr)
|
||||||
|
{
|
||||||
|
global $HTTP_SERVER_VARS;
|
||||||
|
|
||||||
|
$ss = '';
|
||||||
|
if ($inputarr) {
|
||||||
|
foreach($inputarr as $kk=>$vv) {
|
||||||
|
if (is_string($vv) && strlen($vv)>64) $vv = substr($vv,0,64).'...';
|
||||||
|
$ss .= "($kk=>'$vv') ";
|
||||||
|
}
|
||||||
|
$ss = "[ $ss ]";
|
||||||
|
}
|
||||||
|
$sqlTxt = str_replace(',',', ',is_array($sql) ? $sql[0] : $sql);
|
||||||
|
|
||||||
|
// check if running from browser or command-line
|
||||||
|
$inBrowser = isset($HTTP_SERVER_VARS['HTTP_USER_AGENT']);
|
||||||
|
|
||||||
|
if ($inBrowser) {
|
||||||
|
$ss = htmlspecialchars($ss);
|
||||||
|
if ($zthis->debug === -1)
|
||||||
|
ADOConnection::outp( "<br>\n($zthis->databaseType): ".htmlspecialchars($sqlTxt)." <code>$ss</code>\n<br>\n",false);
|
||||||
|
else
|
||||||
|
ADOConnection::outp( "<hr>\n($zthis->databaseType): ".htmlspecialchars($sqlTxt)." <code>$ss</code>\n<hr>\n",false);
|
||||||
|
} else {
|
||||||
|
ADOConnection::outp("-----\n($zthis->databaseType): ".$sqlTxt."\n-----\n",false);
|
||||||
|
}
|
||||||
|
|
||||||
|
$qID = $zthis->_query($sql,$inputarr);
|
||||||
|
|
||||||
|
/*
|
||||||
|
Alexios Fakios notes that ErrorMsg() must be called before ErrorNo() for mssql
|
||||||
|
because ErrorNo() calls Execute('SELECT @ERROR'), causing recursion
|
||||||
|
*/
|
||||||
|
if ($zthis->databaseType == 'mssql') {
|
||||||
|
// ErrorNo is a slow function call in mssql, and not reliable in PHP 4.0.6
|
||||||
|
if($emsg = $zthis->ErrorMsg()) {
|
||||||
|
if ($err = $zthis->ErrorNo()) ADOConnection::outp($err.': '.$emsg);
|
||||||
|
}
|
||||||
|
} else if (!$qID) {
|
||||||
|
ADOConnection::outp($zthis->ErrorNo() .': '. $zthis->ErrorMsg());
|
||||||
|
}
|
||||||
|
|
||||||
|
return $qID;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function _adodb_backtrace($printOrArr=true,$levels=9999)
|
||||||
|
{
|
||||||
|
if (PHPVERSION() < 4.3) return '';
|
||||||
|
|
||||||
|
$html = (isset($_SERVER['HTTP_USER_AGENT']));
|
||||||
|
$fmt = ($html) ? "</font><font color=#808080 size=-1> %% line %4d, file: <a href=\"file:/%s\">%s</a></font>" : "%% line %4d, file: %s";
|
||||||
|
|
||||||
|
$MAXSTRLEN = 64;
|
||||||
|
|
||||||
|
$s = ($html) ? '<pre align=left>' : '';
|
||||||
|
|
||||||
|
if (is_array($printOrArr)) $traceArr = $printOrArr;
|
||||||
|
else $traceArr = debug_backtrace();
|
||||||
|
array_shift($traceArr);
|
||||||
|
array_shift($traceArr);
|
||||||
|
$tabs = sizeof($traceArr)-2;
|
||||||
|
|
||||||
|
foreach ($traceArr as $arr) {
|
||||||
|
$levels -= 1;
|
||||||
|
if ($levels < 0) break;
|
||||||
|
|
||||||
|
$args = array();
|
||||||
|
for ($i=0; $i < $tabs; $i++) $s .= ($html) ? ' ' : "\t";
|
||||||
|
$tabs -= 1;
|
||||||
|
if ($html) $s .= '<font face="Courier New,Courier">';
|
||||||
|
if (isset($arr['class'])) $s .= $arr['class'].'.';
|
||||||
|
if (isset($arr['args']))
|
||||||
|
foreach($arr['args'] as $v) {
|
||||||
|
if (is_null($v)) $args[] = 'null';
|
||||||
|
else if (is_array($v)) $args[] = 'Array['.sizeof($v).']';
|
||||||
|
else if (is_object($v)) $args[] = 'Object:'.get_class($v);
|
||||||
|
else if (is_bool($v)) $args[] = $v ? 'true' : 'false';
|
||||||
|
else {
|
||||||
|
$v = (string) @$v;
|
||||||
|
$str = htmlspecialchars(substr($v,0,$MAXSTRLEN));
|
||||||
|
if (strlen($v) > $MAXSTRLEN) $str .= '...';
|
||||||
|
$args[] = $str;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$s .= $arr['function'].'('.implode(', ',$args).')';
|
||||||
|
|
||||||
|
|
||||||
|
$s .= @sprintf($fmt, $arr['line'],$arr['file'],basename($arr['file']));
|
||||||
|
|
||||||
|
$s .= "\n";
|
||||||
|
}
|
||||||
|
if ($html) $s .= '</pre>';
|
||||||
|
if ($printOrArr) print $s;
|
||||||
|
|
||||||
|
return $s;
|
||||||
|
}
|
||||||
|
|
||||||
?>
|
?>
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
@ -230,6 +230,7 @@ class ADODB_Pager {
|
||||||
if (!$this->db->pageExecuteCountRows) return '';
|
if (!$this->db->pageExecuteCountRows) return '';
|
||||||
$lastPage = $this->rs->LastPageNo();
|
$lastPage = $this->rs->LastPageNo();
|
||||||
if ($lastPage == -1) $lastPage = 1; // check for empty rs.
|
if ($lastPage == -1) $lastPage = 1; // check for empty rs.
|
||||||
|
if ($this->curr_page > $lastPage) $this->curr_page = 1;
|
||||||
return "<font size=-1>$this->page ".$this->curr_page."/".$lastPage."</font>";
|
return "<font size=-1>$this->page ".$this->curr_page."/".$lastPage."</font>";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence. See License.txt.
|
the BSD license will take precedence. See License.txt.
|
||||||
|
@ -622,7 +622,7 @@ Committed_AS: 348732 kB
|
||||||
|
|
||||||
if (empty($HTTP_GET_VARS['hidem']))
|
if (empty($HTTP_GET_VARS['hidem']))
|
||||||
echo "<table border=1 width=100% bgcolor=lightyellow><tr><td colspan=2>
|
echo "<table border=1 width=100% bgcolor=lightyellow><tr><td colspan=2>
|
||||||
<b><a href=http://php.weblogs.com/adodb?perf=1>ADOdb</a> Performance Monitor</b> <font size=1>for $app</font></tr><tr><td>
|
<b><a href=http://adodb.sourceforge.net/?perf=1>ADOdb</a> Performance Monitor</b> <font size=1>for $app</font></tr><tr><td>
|
||||||
<a href=?do=stats><b>Performance Stats</b></a> <a href=?do=viewsql><b>View SQL</b></a>
|
<a href=?do=stats><b>Performance Stats</b></a> <a href=?do=viewsql><b>View SQL</b></a>
|
||||||
<a href=?do=tables><b>View Tables</b></a> <a href=?do=poll><b>Poll Stats</b></a>",
|
<a href=?do=tables><b>View Tables</b></a> <a href=?do=poll><b>Poll Stats</b></a>",
|
||||||
$allowsql ? ' <a href=?do=dosql><b>Run SQL</b></a>' : '',
|
$allowsql ? ' <a href=?do=dosql><b>Run SQL</b></a>' : '',
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
|
|
@ -141,13 +141,13 @@ current timestamp is used. Unlike the function date(), it supports dates
|
||||||
outside the 1901 to 2038 range.
|
outside the 1901 to 2038 range.
|
||||||
|
|
||||||
|
|
||||||
FUNCTION adodb_mktime($hr, $min, $sec, $month, $day, $year)
|
FUNCTION adodb_mktime($hr, $min, $sec [, $month, $day, $year])
|
||||||
|
|
||||||
Converts a local date to a unix timestamp. Unlike the function mktime(), it supports
|
Converts a local date to a unix timestamp. Unlike the function mktime(), it supports
|
||||||
dates outside the 1901 to 2038 range. Differs from mktime() in that all parameters
|
dates outside the 1901 to 2038 range. Differs from mktime() in that all parameters
|
||||||
are currently compulsory.
|
are currently compulsory.
|
||||||
|
|
||||||
FUNCTION adodb_gmmktime($hr, $min, $sec, $month, $day, $year)
|
FUNCTION adodb_gmmktime($hr, $min, $sec [, $month, $day, $year])
|
||||||
|
|
||||||
Converts a gmt date to a unix timestamp. Unlike the function gmmktime(), it supports
|
Converts a gmt date to a unix timestamp. Unlike the function gmmktime(), it supports
|
||||||
dates outside the 1901 to 2038 range. Differs from gmmktime() in that all parameters
|
dates outside the 1901 to 2038 range. Differs from gmmktime() in that all parameters
|
||||||
|
@ -174,6 +174,10 @@ c. Implement daylight savings, which looks awfully complicated, see
|
||||||
|
|
||||||
|
|
||||||
CHANGELOG
|
CHANGELOG
|
||||||
|
- 18 July 2004 0.15
|
||||||
|
All params in adodb_mktime were formerly compulsory. Now only the hour, min, secs is compulsory. This
|
||||||
|
brings it more in line with mktime (still not identical).
|
||||||
|
|
||||||
- 23 June 2004 0.14
|
- 23 June 2004 0.14
|
||||||
|
|
||||||
Allow you to define your own daylights savings function, adodb_daylight_sv.
|
Allow you to define your own daylights savings function, adodb_daylight_sv.
|
||||||
|
@ -271,7 +275,7 @@ First implementation.
|
||||||
/*
|
/*
|
||||||
Version Number
|
Version Number
|
||||||
*/
|
*/
|
||||||
define('ADODB_DATE_VERSION',0.14);
|
define('ADODB_DATE_VERSION',0.15);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
We check for Windows as only +ve ints are accepted as dates on Windows.
|
We check for Windows as only +ve ints are accepted as dates on Windows.
|
||||||
|
@ -313,6 +317,9 @@ function adodb_date_test()
|
||||||
// This flag disables calling of PHP native functions, so we can properly test the code
|
// This flag disables calling of PHP native functions, so we can properly test the code
|
||||||
if (!defined('ADODB_TEST_DATES')) define('ADODB_TEST_DATES',1);
|
if (!defined('ADODB_TEST_DATES')) define('ADODB_TEST_DATES',1);
|
||||||
|
|
||||||
|
$t = adodb_mktime(0,0,0);
|
||||||
|
if (!(adodb_date('Y-m-d') == date('Y-m-d'))) print 'Error in '.adodb_mktime(0,0,0).'<br>';
|
||||||
|
|
||||||
$t = adodb_mktime(0,0,0,6,1,2102);
|
$t = adodb_mktime(0,0,0,6,1,2102);
|
||||||
if (!(adodb_date('Y-m-d',$t) == '2102-06-01')) print 'Error in '.adodb_date('Y-m-d',$t).'<br>';
|
if (!(adodb_date('Y-m-d',$t) == '2102-06-01')) print 'Error in '.adodb_date('Y-m-d',$t).'<br>';
|
||||||
|
|
||||||
|
@ -428,7 +435,7 @@ function adodb_date_test()
|
||||||
// we generate a timestamp, convert it to a date, and convert it back to a timestamp
|
// we generate a timestamp, convert it to a date, and convert it back to a timestamp
|
||||||
// and check if the roundtrip broke the original timestamp value.
|
// and check if the roundtrip broke the original timestamp value.
|
||||||
print "Testing $start to ".($start+$yrs).", or $max seconds, offset=$offset: ";
|
print "Testing $start to ".($start+$yrs).", or $max seconds, offset=$offset: ";
|
||||||
|
$cnt = 0;
|
||||||
for ($max += $i; $i < $max; $i += $offset) {
|
for ($max += $i; $i < $max; $i += $offset) {
|
||||||
$ret = adodb_date('m,d,Y,H,i,s',$i);
|
$ret = adodb_date('m,d,Y,H,i,s',$i);
|
||||||
$arr = explode(',',$ret);
|
$arr = explode(',',$ret);
|
||||||
|
@ -443,8 +450,9 @@ function adodb_date_test()
|
||||||
$fail = true;
|
$fail = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
$cnt += 1;
|
||||||
}
|
}
|
||||||
|
echo "Tested $cnt dates<br>";
|
||||||
if (!$fail) print "<p>Passed !</p>";
|
if (!$fail) print "<p>Passed !</p>";
|
||||||
else print "<p><b>Failed</b> :-(</p>";
|
else print "<p><b>Failed</b> :-(</p>";
|
||||||
}
|
}
|
||||||
|
@ -717,6 +725,8 @@ function adodb_date2($fmt, $d=false, $is_gmt=false)
|
||||||
*/
|
*/
|
||||||
function adodb_date($fmt,$d=false,$is_gmt=false)
|
function adodb_date($fmt,$d=false,$is_gmt=false)
|
||||||
{
|
{
|
||||||
|
static $daylight;
|
||||||
|
|
||||||
if ($d === false) return ($is_gmt)? @gmdate($fmt): @date($fmt);
|
if ($d === false) return ($is_gmt)? @gmdate($fmt): @date($fmt);
|
||||||
if (!defined('ADODB_TEST_DATES')) {
|
if (!defined('ADODB_TEST_DATES')) {
|
||||||
if ((abs($d) <= 0x7FFFFFFF)) { // check if number in 32-bit signed range
|
if ((abs($d) <= 0x7FFFFFFF)) { // check if number in 32-bit signed range
|
||||||
|
@ -728,7 +738,8 @@ function adodb_date($fmt,$d=false,$is_gmt=false)
|
||||||
$_day_power = 86400;
|
$_day_power = 86400;
|
||||||
|
|
||||||
$arr = _adodb_getdate($d,true,$is_gmt);
|
$arr = _adodb_getdate($d,true,$is_gmt);
|
||||||
if (function_exists('adodb_daylight_sv')) adodb_daylight_sv($arr, $is_gmt);
|
if (!isset($daylight)) $daylight = function_exists('adodb_daylight_sv');
|
||||||
|
if ($daylight) adodb_daylight_sv($arr, $is_gmt);
|
||||||
|
|
||||||
$year = $arr['year'];
|
$year = $arr['year'];
|
||||||
$month = $arr['mon'];
|
$month = $arr['mon'];
|
||||||
|
@ -852,7 +863,7 @@ function adodb_date($fmt,$d=false,$is_gmt=false)
|
||||||
Returns a timestamp given a GMT/UTC time.
|
Returns a timestamp given a GMT/UTC time.
|
||||||
Note that $is_dst is not implemented and is ignored.
|
Note that $is_dst is not implemented and is ignored.
|
||||||
*/
|
*/
|
||||||
function adodb_gmmktime($hr,$min,$sec,$mon,$day,$year,$is_dst=false)
|
function adodb_gmmktime($hr,$min,$sec,$mon=false,$day=false,$year=false,$is_dst=false)
|
||||||
{
|
{
|
||||||
return adodb_mktime($hr,$min,$sec,$mon,$day,$year,$is_dst,true);
|
return adodb_mktime($hr,$min,$sec,$mon,$day,$year,$is_dst,true);
|
||||||
}
|
}
|
||||||
|
@ -863,13 +874,15 @@ function adodb_gmmktime($hr,$min,$sec,$mon,$day,$year,$is_dst=false)
|
||||||
|
|
||||||
Not a very fast algorithm - O(n) operation. Could be optimized to O(1).
|
Not a very fast algorithm - O(n) operation. Could be optimized to O(1).
|
||||||
*/
|
*/
|
||||||
function adodb_mktime($hr,$min,$sec,$mon,$day,$year,$is_dst=false,$is_gmt=false)
|
function adodb_mktime($hr,$min,$sec,$mon=false,$day=false,$year=false,$is_dst=false,$is_gmt=false)
|
||||||
{
|
{
|
||||||
if (!defined('ADODB_TEST_DATES')) {
|
if (!defined('ADODB_TEST_DATES')) {
|
||||||
// for windows, we don't check 1970 because with timezone differences,
|
// for windows, we don't check 1970 because with timezone differences,
|
||||||
// 1 Jan 1970 could generate negative timestamp, which is illegal
|
// 1 Jan 1970 could generate negative timestamp, which is illegal
|
||||||
if (!defined('ADODB_NO_NEGATIVE_TS') || ($year >= 1971))
|
if (1971 < $year && $year < 2038
|
||||||
if (1901 < $year && $year < 2038)
|
|| $mon === false
|
||||||
|
|| !defined('ADODB_NO_NEGATIVE_TS') && (1901 < $year && $year < 2038)
|
||||||
|
)
|
||||||
return $is_gmt?
|
return $is_gmt?
|
||||||
@gmmktime($hr,$min,$sec,$mon,$day,$year):
|
@gmmktime($hr,$min,$sec,$mon,$day,$year):
|
||||||
@mktime($hr,$min,$sec,$mon,$day,$year);
|
@mktime($hr,$min,$sec,$mon,$day,$year);
|
||||||
|
|
|
@ -4,31 +4,6 @@
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without modification,
|
|
||||||
are permitted provided that the following conditions are met:
|
|
||||||
|
|
||||||
Redistributions of source code must retain the above copyright notice, this list
|
|
||||||
of conditions and the following disclaimer.
|
|
||||||
Redistributions in binary form must reproduce the above copyright notice, this l
|
|
||||||
ist of conditions and the following disclaimer in the documentation and/or other
|
|
||||||
materials provided with the distribution.
|
|
||||||
Neither the name of the ars Cognita, Inc., nor the names of its contributors may be used
|
|
||||||
to endorse or promote products derived from this software without specific prior
|
|
||||||
written permission.
|
|
||||||
|
|
||||||
DISCLAIMER:
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WA
|
|
||||||
RRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
||||||
IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIREC
|
|
||||||
T, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR P
|
|
||||||
ROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
||||||
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWI
|
|
||||||
SE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE P
|
|
||||||
OSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
/**
|
/**
|
||||||
* xmlschema is a class that allows the user to quickly and easily
|
* xmlschema is a class that allows the user to quickly and easily
|
||||||
|
@ -104,6 +79,7 @@ if( !defined( 'XMLS_DEFAULT_UPGRADE_METHOD' ) ) {
|
||||||
*/
|
*/
|
||||||
if( !defined( '_ADODB_LAYER' ) ) {
|
if( !defined( '_ADODB_LAYER' ) ) {
|
||||||
require( 'adodb.inc.php' );
|
require( 'adodb.inc.php' );
|
||||||
|
require( 'adodb-datadict.inc.php' );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -274,7 +250,14 @@ class dbTable extends dbObject {
|
||||||
|
|
||||||
switch( $this->currentElement ) {
|
switch( $this->currentElement ) {
|
||||||
case 'INDEX':
|
case 'INDEX':
|
||||||
xml_set_object( $parser, $this->addIndex( $attributes ) );
|
if( !isset( $attributes['PLATFORM'] ) OR $this->supportedPlatform( $attributes['PLATFORM'] ) ) {
|
||||||
|
xml_set_object( $parser, $this->addIndex( $attributes ) );
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'DATA':
|
||||||
|
if( !isset( $attributes['PLATFORM'] ) OR $this->supportedPlatform( $attributes['PLATFORM'] ) ) {
|
||||||
|
xml_set_object( $parser, $this->addData( $attributes ) );
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 'DROP':
|
case 'DROP':
|
||||||
$this->drop();
|
$this->drop();
|
||||||
|
@ -304,6 +287,11 @@ class dbTable extends dbObject {
|
||||||
|
|
||||||
$this->addFieldOpt( $this->current_field, $this->currentElement, $attributes['VALUE'] );
|
$this->addFieldOpt( $this->current_field, $this->currentElement, $attributes['VALUE'] );
|
||||||
break;
|
break;
|
||||||
|
case 'DEFDATE':
|
||||||
|
case 'DEFTIMESTAMP':
|
||||||
|
// Add a field option to the table object
|
||||||
|
$this->addFieldOpt( $this->current_field, $this->currentElement );
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
// print_r( array( $tag, $attributes ) );
|
// print_r( array( $tag, $attributes ) );
|
||||||
}
|
}
|
||||||
|
@ -318,6 +306,12 @@ class dbTable extends dbObject {
|
||||||
switch( $this->currentElement ) {
|
switch( $this->currentElement ) {
|
||||||
// Table constraint
|
// Table constraint
|
||||||
case 'CONSTRAINT':
|
case 'CONSTRAINT':
|
||||||
|
if( isset( $this->current_field ) ) {
|
||||||
|
$this->addFieldOpt( $this->current_field, $this->currentElement, $cdata );
|
||||||
|
} else {
|
||||||
|
$this->addTableOpt( $cdata );
|
||||||
|
}
|
||||||
|
break;
|
||||||
// Table option
|
// Table option
|
||||||
case 'OPT':
|
case 'OPT':
|
||||||
$this->addTableOpt( $cdata );
|
$this->addTableOpt( $cdata );
|
||||||
|
@ -341,6 +335,10 @@ class dbTable extends dbObject {
|
||||||
xml_set_object( $parser, $this->parent );
|
xml_set_object( $parser, $this->parent );
|
||||||
$this->destroy();
|
$this->destroy();
|
||||||
break;
|
break;
|
||||||
|
case 'FIELD':
|
||||||
|
unset($this->current_field);
|
||||||
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -356,6 +354,19 @@ class dbTable extends dbObject {
|
||||||
return $this->indexes[$name];
|
return $this->indexes[$name];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds data to a table object
|
||||||
|
*
|
||||||
|
* @param array $attributes Data attributes
|
||||||
|
* @return object dbData object
|
||||||
|
*/
|
||||||
|
function &addData( $attributes ) {
|
||||||
|
if( !isset( $this->data ) ) {
|
||||||
|
$this->data =& new dbData( $this, $attributes );
|
||||||
|
}
|
||||||
|
return $this->data;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds a field to a table object
|
* Adds a field to a table object
|
||||||
*
|
*
|
||||||
|
@ -404,7 +415,7 @@ class dbTable extends dbObject {
|
||||||
|
|
||||||
// Set the field options
|
// Set the field options
|
||||||
if( isset( $opts ) ) {
|
if( isset( $opts ) ) {
|
||||||
$this->fields[$field_id]['OPTS'] = $opts;
|
$this->fields[$field_id]['OPTS'][] = $opts;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -511,7 +522,7 @@ class dbTable extends dbObject {
|
||||||
if( is_array( $opt ) ) {
|
if( is_array( $opt ) ) {
|
||||||
$key = key( $opt );
|
$key = key( $opt );
|
||||||
$value = $opt[key( $opt )];
|
$value = $opt[key( $opt )];
|
||||||
$fldarray[$field_id][$key] = $value;
|
@$fldarray[$field_id][$key] .= $value;
|
||||||
// Option doesn't have arguments
|
// Option doesn't have arguments
|
||||||
} else {
|
} else {
|
||||||
$fldarray[$field_id][$opt] = $opt;
|
$fldarray[$field_id][$opt] = $opt;
|
||||||
|
@ -548,6 +559,10 @@ class dbTable extends dbObject {
|
||||||
$sql[] = $index->create( $xmls );
|
$sql[] = $index->create( $xmls );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( isset( $this->data ) ) {
|
||||||
|
$sql[] = $this->data->create( $xmls );
|
||||||
|
}
|
||||||
|
|
||||||
return $sql;
|
return $sql;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -733,6 +748,192 @@ class dbIndex extends dbObject {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a data object in ADOdb's datadict format
|
||||||
|
*
|
||||||
|
* This class stores information about table data.
|
||||||
|
*
|
||||||
|
* @package axmls
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
class dbData extends dbObject {
|
||||||
|
|
||||||
|
var $data = array();
|
||||||
|
|
||||||
|
var $row;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes the new dbIndex object.
|
||||||
|
*
|
||||||
|
* @param object $parent Parent object
|
||||||
|
* @param array $attributes Attributes
|
||||||
|
*
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
function dbData( &$parent, $attributes = NULL ) {
|
||||||
|
$this->parent =& $parent;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* XML Callback to process start elements
|
||||||
|
*
|
||||||
|
* Processes XML opening tags.
|
||||||
|
* Elements currently processed are: DROP, CLUSTERED, BITMAP, UNIQUE, FULLTEXT & HASH.
|
||||||
|
*
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
function _tag_open( &$parser, $tag, $attributes ) {
|
||||||
|
$this->currentElement = strtoupper( $tag );
|
||||||
|
|
||||||
|
switch( $this->currentElement ) {
|
||||||
|
case 'ROW':
|
||||||
|
$this->row = count( $this->data );
|
||||||
|
$this->data[$this->row] = array();
|
||||||
|
break;
|
||||||
|
case 'F':
|
||||||
|
$this->addField($attributes);
|
||||||
|
default:
|
||||||
|
// print_r( array( $tag, $attributes ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* XML Callback to process CDATA elements
|
||||||
|
*
|
||||||
|
* Processes XML cdata.
|
||||||
|
*
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
function _tag_cdata( &$parser, $cdata ) {
|
||||||
|
switch( $this->currentElement ) {
|
||||||
|
// Index field name
|
||||||
|
case 'F':
|
||||||
|
$this->addData( $cdata );
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* XML Callback to process end elements
|
||||||
|
*
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
function _tag_close( &$parser, $tag ) {
|
||||||
|
$this->currentElement = '';
|
||||||
|
|
||||||
|
switch( strtoupper( $tag ) ) {
|
||||||
|
case 'DATA':
|
||||||
|
xml_set_object( $parser, $this->parent );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a field to the index
|
||||||
|
*
|
||||||
|
* @param string $name Field name
|
||||||
|
* @return string Field list
|
||||||
|
*/
|
||||||
|
function addField( $attributes ) {
|
||||||
|
if( isset( $attributes['NAME'] ) ) {
|
||||||
|
$name = $attributes['NAME'];
|
||||||
|
} else {
|
||||||
|
$name = count($this->data[$this->row]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set the field index so we know where we are
|
||||||
|
$this->current_field = $this->FieldID( $name );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds options to the index
|
||||||
|
*
|
||||||
|
* @param string $opt Comma-separated list of index options.
|
||||||
|
* @return string Option list
|
||||||
|
*/
|
||||||
|
function addData( $cdata ) {
|
||||||
|
if( !isset( $this->data[$this->row] ) ) {
|
||||||
|
$this->data[$this->row] = array();
|
||||||
|
}
|
||||||
|
|
||||||
|
if( !isset( $this->data[$this->row][$this->current_field] ) ) {
|
||||||
|
$this->data[$this->row][$this->current_field] = '';
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->data[$this->row][$this->current_field] .= $cdata;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generates the SQL that will create the index in the database
|
||||||
|
*
|
||||||
|
* @param object $xmls adoSchema object
|
||||||
|
* @return array Array containing index creation SQL
|
||||||
|
*/
|
||||||
|
function create( &$xmls ) {
|
||||||
|
$table = $xmls->dict->TableName($this->parent->name);
|
||||||
|
$table_field_count = count($this->parent->fields);
|
||||||
|
$sql = array();
|
||||||
|
|
||||||
|
// eliminate any columns that aren't in the table
|
||||||
|
foreach( $this->data as $row ) {
|
||||||
|
$table_fields = $this->parent->fields;
|
||||||
|
$fields = array();
|
||||||
|
|
||||||
|
foreach( $row as $field_id => $field_data ) {
|
||||||
|
if( !array_key_exists( $field_id, $table_fields ) ) {
|
||||||
|
if( is_numeric( $field_id ) ) {
|
||||||
|
$field_id = reset( array_keys( $table_fields ) );
|
||||||
|
} else {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$name = $table_fields[$field_id]['NAME'];
|
||||||
|
|
||||||
|
switch( $table_fields[$field_id]['TYPE'] ) {
|
||||||
|
case 'C':
|
||||||
|
case 'C2':
|
||||||
|
case 'X':
|
||||||
|
case 'X2':
|
||||||
|
$fields[$name] = $xmls->db->qstr( $field_data );
|
||||||
|
break;
|
||||||
|
case 'I':
|
||||||
|
case 'I1':
|
||||||
|
case 'I2':
|
||||||
|
case 'I4':
|
||||||
|
case 'I8':
|
||||||
|
$fields[$name] = intval($field_data);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
$fields[$name] = $field_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
unset($table_fields[$field_id]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// check that at least 1 column is specified
|
||||||
|
if( empty( $fields ) ) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// check that no required columns are missing
|
||||||
|
if( count( $fields ) < $table_field_count ) {
|
||||||
|
foreach( $table_fields as $field ) {
|
||||||
|
if( ( in_array( 'NOTNULL', $field['OPTS'] ) || in_array( 'KEY', $field['OPTS'] ) ) && !in_array( 'AUTOINCREMENT', $field['OPTS'] ) ) {
|
||||||
|
continue(2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$sql[] = 'INSERT INTO '. $table .' ('. implode( ',', array_keys( $fields ) ) .') VALUES ('. implode( ',', $fields ) .')';
|
||||||
|
}
|
||||||
|
|
||||||
|
return $sql;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates the SQL to execute a list of provided SQL queries
|
* Creates the SQL to execute a list of provided SQL queries
|
||||||
*
|
*
|
||||||
|
@ -788,8 +989,6 @@ class dbQuerySet extends dbObject {
|
||||||
case 'NONE':
|
case 'NONE':
|
||||||
$this->prefixMethod = 'NONE';
|
$this->prefixMethod = 'NONE';
|
||||||
break;
|
break;
|
||||||
default:
|
|
||||||
$this->prefixMethod = 'AUTO';
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -884,19 +1083,11 @@ class dbQuerySet extends dbObject {
|
||||||
* @return string SQL query string.
|
* @return string SQL query string.
|
||||||
*/
|
*/
|
||||||
function buildQuery( $sql = NULL ) {
|
function buildQuery( $sql = NULL ) {
|
||||||
if( !isset( $this->query ) ) {
|
if( !isset( $this->query ) OR empty( $sql ) ) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( empty( $sql ) ) {
|
$this->query .= $sql;
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( !empty( $this->query ) ) {
|
|
||||||
$this->query .= ' ';
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->query .= trim( $sql );
|
|
||||||
|
|
||||||
return $this->query;
|
return $this->query;
|
||||||
}
|
}
|
||||||
|
@ -911,8 +1102,7 @@ class dbQuerySet extends dbObject {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->queries[] = $this->query;
|
$this->queries[] = $return = trim($this->query);
|
||||||
$return = $this->query;
|
|
||||||
|
|
||||||
unset( $this->query );
|
unset( $this->query );
|
||||||
|
|
||||||
|
@ -933,9 +1123,9 @@ class dbQuerySet extends dbObject {
|
||||||
|
|
||||||
// Process object prefix.
|
// Process object prefix.
|
||||||
// Evaluate SQL statements to prepend prefix to objects
|
// Evaluate SQL statements to prepend prefix to objects
|
||||||
$query = $this->prefixQuery( '/^\s*((?is)INSERT\s+(INTO\s+)?)((\w+\s*,?\s*)+)(\s.*$)/', $query );
|
$query = $this->prefixQuery( '/^\s*((?is)INSERT\s+(INTO\s+)?)((\w+\s*,?\s*)+)(\s.*$)/', $query, $xmls->objectPrefix );
|
||||||
$query = $this->prefixQuery( '/^\s*((?is)UPDATE\s+(FROM\s+)?)((\w+\s*,?\s*)+)(\s.*$)/', $query );
|
$query = $this->prefixQuery( '/^\s*((?is)UPDATE\s+(FROM\s+)?)((\w+\s*,?\s*)+)(\s.*$)/', $query, $xmls->objectPrefix );
|
||||||
$query = $this->prefixQuery( '/^\s*((?is)DELETE\s+(FROM\s+)?)((\w+\s*,?\s*)+)(\s.*$)/', $query );
|
$query = $this->prefixQuery( '/^\s*((?is)DELETE\s+(FROM\s+)?)((\w+\s*,?\s*)+)(\s.*$)/', $query, $xmls->objectPrefix );
|
||||||
|
|
||||||
// SELECT statements aren't working yet
|
// SELECT statements aren't working yet
|
||||||
#$data = preg_replace( '/(?ias)(^\s*SELECT\s+.*\s+FROM)\s+(\W\s*,?\s*)+((?i)\s+WHERE.*$)/', "\1 $prefix\2 \3", $data );
|
#$data = preg_replace( '/(?ias)(^\s*SELECT\s+.*\s+FROM)\s+(\W\s*,?\s*)+((?i)\s+WHERE.*$)/', "\1 $prefix\2 \3", $data );
|
||||||
|
@ -1099,8 +1289,8 @@ class adoSchema {
|
||||||
$this->mgq = get_magic_quotes_runtime();
|
$this->mgq = get_magic_quotes_runtime();
|
||||||
set_magic_quotes_runtime(0);
|
set_magic_quotes_runtime(0);
|
||||||
|
|
||||||
$this->debug = $this->db->debug;
|
|
||||||
$this->db =& $db;
|
$this->db =& $db;
|
||||||
|
$this->debug = $this->db->debug;
|
||||||
$this->dict = NewDataDictionary( $this->db );
|
$this->dict = NewDataDictionary( $this->db );
|
||||||
$this->sqlArray = array();
|
$this->sqlArray = array();
|
||||||
$this->schemaVersion = XMLS_SCHEMA_VERSION;
|
$this->schemaVersion = XMLS_SCHEMA_VERSION;
|
||||||
|
@ -1204,10 +1394,11 @@ class adoSchema {
|
||||||
* @see ParseSchemaString()
|
* @see ParseSchemaString()
|
||||||
*
|
*
|
||||||
* @param string $file Name of XML schema file.
|
* @param string $file Name of XML schema file.
|
||||||
|
* @param bool $returnSchema Return schema rather than parsing.
|
||||||
* @return array Array of SQL queries, ready to execute
|
* @return array Array of SQL queries, ready to execute
|
||||||
*/
|
*/
|
||||||
function ParseSchema( $filename ) {
|
function ParseSchema( $filename, $returnSchema = FALSE ) {
|
||||||
return $this->ParseSchemaString( $this->ConvertSchemaFile ( $filename ) );
|
return $this->ParseSchemaString( $this->ConvertSchemaFile( $filename ), $returnSchema );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1217,12 +1408,13 @@ class adoSchema {
|
||||||
* and generate the SQL necessary to create the database described by the schema.
|
* and generate the SQL necessary to create the database described by the schema.
|
||||||
*
|
*
|
||||||
* @param string $file Name of XML schema file.
|
* @param string $file Name of XML schema file.
|
||||||
|
* @param bool $returnSchema Return schema rather than parsing.
|
||||||
* @return array Array of SQL queries, ready to execute.
|
* @return array Array of SQL queries, ready to execute.
|
||||||
*
|
*
|
||||||
* @deprecated Replaced by adoSchema::ParseSchema() and adoSchema::ParseSchemaString()
|
* @deprecated Replaced by adoSchema::ParseSchema() and adoSchema::ParseSchemaString()
|
||||||
* @see ParseSchema(), ParseSchemaString()
|
* @see ParseSchema(), ParseSchemaString()
|
||||||
*/
|
*/
|
||||||
function ParseSchemaFile( $filename ) {
|
function ParseSchemaFile( $filename, $returnSchema = FALSE ) {
|
||||||
// Open the file
|
// Open the file
|
||||||
if( !($fp = fopen( $filename, 'r' )) ) {
|
if( !($fp = fopen( $filename, 'r' )) ) {
|
||||||
// die( 'Unable to open file' );
|
// die( 'Unable to open file' );
|
||||||
|
@ -1234,6 +1426,13 @@ class adoSchema {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( $returnSchema )
|
||||||
|
{
|
||||||
|
return $xmlstring;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->success = 2;
|
||||||
|
|
||||||
$xmlParser = $this->create_parser();
|
$xmlParser = $this->create_parser();
|
||||||
|
|
||||||
// Process the file
|
// Process the file
|
||||||
|
@ -1260,9 +1459,10 @@ class adoSchema {
|
||||||
* @see ParseSchema()
|
* @see ParseSchema()
|
||||||
*
|
*
|
||||||
* @param string $xmlstring XML schema string.
|
* @param string $xmlstring XML schema string.
|
||||||
|
* @param bool $returnSchema Return schema rather than parsing.
|
||||||
* @return array Array of SQL queries, ready to execute.
|
* @return array Array of SQL queries, ready to execute.
|
||||||
*/
|
*/
|
||||||
function ParseSchemaString( $xmlstring ) {
|
function ParseSchemaString( $xmlstring, $returnSchema = FALSE ) {
|
||||||
if( !is_string( $xmlstring ) OR empty( $xmlstring ) ) {
|
if( !is_string( $xmlstring ) OR empty( $xmlstring ) ) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -1272,10 +1472,15 @@ class adoSchema {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
$xmlParser = $this->create_parser();
|
if ( $returnSchema )
|
||||||
|
{
|
||||||
|
return $xmlstring;
|
||||||
|
}
|
||||||
|
|
||||||
$this->success = 2;
|
$this->success = 2;
|
||||||
|
|
||||||
|
$xmlParser = $this->create_parser();
|
||||||
|
|
||||||
if( !xml_parse( $xmlParser, $xmlstring, TRUE ) ) {
|
if( !xml_parse( $xmlParser, $xmlstring, TRUE ) ) {
|
||||||
die( sprintf(
|
die( sprintf(
|
||||||
"XML error: %s at line %d",
|
"XML error: %s at line %d",
|
||||||
|
@ -1285,9 +1490,46 @@ class adoSchema {
|
||||||
}
|
}
|
||||||
|
|
||||||
xml_parser_free( $xmlParser );
|
xml_parser_free( $xmlParser );
|
||||||
|
|
||||||
return $this->sqlArray;
|
return $this->sqlArray;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loads an XML schema from a file and converts it to uninstallation SQL.
|
||||||
|
*
|
||||||
|
* Call this method to load the specified schema (see the DTD for the proper format) from
|
||||||
|
* the filesystem and generate the SQL necessary to remove the database described.
|
||||||
|
* @see RemoveSchemaString()
|
||||||
|
*
|
||||||
|
* @param string $file Name of XML schema file.
|
||||||
|
* @param bool $returnSchema Return schema rather than parsing.
|
||||||
|
* @return array Array of SQL queries, ready to execute
|
||||||
|
*/
|
||||||
|
function RemoveSchema( $filename, $returnSchema = FALSE ) {
|
||||||
|
return $this->RemoveSchemaString( $this->ConvertSchemaFile( $filename ), $returnSchema );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts an XML schema string to uninstallation SQL.
|
||||||
|
*
|
||||||
|
* Call this method to parse a string containing an XML schema (see the DTD for the proper format)
|
||||||
|
* and generate the SQL necessary to uninstall the database described by the schema.
|
||||||
|
* @see RemoveSchema()
|
||||||
|
*
|
||||||
|
* @param string $schema XML schema string.
|
||||||
|
* @param bool $returnSchema Return schema rather than parsing.
|
||||||
|
* @return array Array of SQL queries, ready to execute.
|
||||||
|
*/
|
||||||
|
function RemoveSchemaString( $schema, $returnSchema = FALSE ) {
|
||||||
|
|
||||||
|
// grab current version
|
||||||
|
if( !( $version = $this->SchemaStringVersion( $schema ) ) ) {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->ParseSchemaString( $this->TransformSchema( $schema, 'remove-' . $version), $returnSchema );
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Applies the current XML schema to the database (post execution).
|
* Applies the current XML schema to the database (post execution).
|
||||||
*
|
*
|
||||||
|
@ -1448,38 +1690,12 @@ class adoSchema {
|
||||||
if( $version == $newVersion ) {
|
if( $version == $newVersion ) {
|
||||||
$result = $schema;
|
$result = $schema;
|
||||||
} else {
|
} else {
|
||||||
// Fail if XSLT extension is not available
|
$result = $this->TransformSchema( $schema, 'convert-' . $version . '-' . $newVersion);
|
||||||
if( ! function_exists( 'xslt_create' ) ) {
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
$xsl_file = dirname( __FILE__ ) . '/xsl/convert-' . $version . '-' . $newVersion . '.xsl';
|
|
||||||
|
|
||||||
// look for xsl
|
|
||||||
if( !is_readable( $xsl_file ) ) {
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
$arguments = array (
|
|
||||||
'/_xml' => $schema,
|
|
||||||
'/_xsl' => file_get_contents ($xsl_file)
|
|
||||||
);
|
|
||||||
|
|
||||||
// create an XSLT processor
|
|
||||||
$xh = xslt_create ();
|
|
||||||
|
|
||||||
// set error handler
|
|
||||||
xslt_set_error_handler ($xh, array (&$this, 'xslt_error_handler'));
|
|
||||||
|
|
||||||
// process the schema
|
|
||||||
$result = xslt_process ($xh, 'arg:/_xml', 'arg:/_xsl', NULL, $arguments);
|
|
||||||
|
|
||||||
xslt_free ($xh);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if( is_string ($newFile) AND ( $fp = fopen( $newFile, 'w' ) ) ) {
|
if( is_string( $result ) AND is_string( $newFile ) AND ( $fp = fopen( $newFile, 'w' ) ) ) {
|
||||||
fwrite ($fp, $result);
|
fwrite( $fp, $result );
|
||||||
fclose ($fp);
|
fclose( $fp );
|
||||||
}
|
}
|
||||||
|
|
||||||
return $result;
|
return $result;
|
||||||
|
@ -1520,43 +1736,66 @@ class adoSchema {
|
||||||
$result = substr( $result, 3 );
|
$result = substr( $result, 3 );
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Fail if XSLT extension is not available
|
$result = $this->TransformSchema( $filename, 'convert-' . $version . '-' . $newVersion, 'file' );
|
||||||
if( ! function_exists( 'xslt_create' ) ) {
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
$xsl_file = dirname( __FILE__ ) . '/xsl/convert-' . $version . '-' . $newVersion . '.xsl';
|
|
||||||
|
|
||||||
// look for xsl
|
|
||||||
if( !is_readable( $xsl_file ) ) {
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
$arguments = array (
|
|
||||||
'/_xml' => file_get_contents ($filename),
|
|
||||||
'/_xsl' => file_get_contents ($xsl_file)
|
|
||||||
);
|
|
||||||
|
|
||||||
// create an XSLT processor
|
|
||||||
$xh = xslt_create ();
|
|
||||||
|
|
||||||
// set error handler
|
|
||||||
xslt_set_error_handler ($xh, array (&$this, 'xslt_error_handler'));
|
|
||||||
|
|
||||||
// process the schema
|
|
||||||
$result = xslt_process ($xh, 'arg:/_xml', 'arg:/_xsl', NULL, $arguments);
|
|
||||||
|
|
||||||
xslt_free ($xh);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if( is_string ($newFile) AND ( $fp = fopen( $newFile, 'w' ) ) ) {
|
if( is_string( $result ) AND is_string( $newFile ) AND ( $fp = fopen( $newFile, 'w' ) ) ) {
|
||||||
fwrite ($fp, $result);
|
fwrite( $fp, $result );
|
||||||
fclose ($fp);
|
fclose( $fp );
|
||||||
}
|
}
|
||||||
|
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function TransformSchema( $schema, $xsl, $schematype='string' )
|
||||||
|
{
|
||||||
|
// Fail if XSLT extension is not available
|
||||||
|
if( ! function_exists( 'xslt_create' ) ) {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
$xsl_file = dirname( __FILE__ ) . '/xsl/' . $xsl . '.xsl';
|
||||||
|
|
||||||
|
// look for xsl
|
||||||
|
if( !is_readable( $xsl_file ) ) {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch( $schematype )
|
||||||
|
{
|
||||||
|
case 'file':
|
||||||
|
if( !is_readable( $schema ) ) {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
$schema = file_get_contents( $schema );
|
||||||
|
break;
|
||||||
|
case 'string':
|
||||||
|
default:
|
||||||
|
if( !is_string( $schema ) ) {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$arguments = array (
|
||||||
|
'/_xml' => $schema,
|
||||||
|
'/_xsl' => file_get_contents( $xsl_file )
|
||||||
|
);
|
||||||
|
|
||||||
|
// create an XSLT processor
|
||||||
|
$xh = xslt_create ();
|
||||||
|
|
||||||
|
// set error handler
|
||||||
|
xslt_set_error_handler ($xh, array (&$this, 'xslt_error_handler'));
|
||||||
|
|
||||||
|
// process the schema
|
||||||
|
$result = xslt_process ($xh, 'arg:/_xml', 'arg:/_xsl', NULL, $arguments);
|
||||||
|
|
||||||
|
xslt_free ($xh);
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Processes XSLT transformation errors
|
* Processes XSLT transformation errors
|
||||||
*
|
*
|
||||||
|
@ -1692,7 +1931,7 @@ class adoSchema {
|
||||||
}
|
}
|
||||||
|
|
||||||
if( $details->primary_key ) {
|
if( $details->primary_key ) {
|
||||||
$content[] = '<PRIMARY/>';
|
$content[] = '<KEY/>';
|
||||||
} elseif( $details->not_null ) {
|
} elseif( $details->not_null ) {
|
||||||
$content[] = '<NOTNULL/>';
|
$content[] = '<NOTNULL/>';
|
||||||
}
|
}
|
||||||
|
@ -1743,6 +1982,10 @@ class adoSchema {
|
||||||
$schema .= ' <data>' . "\n";
|
$schema .= ' <data>' . "\n";
|
||||||
|
|
||||||
while( $row = $rs->FetchRow() ) {
|
while( $row = $rs->FetchRow() ) {
|
||||||
|
foreach( $row as $key => $val ) {
|
||||||
|
$row[$key] = htmlentities($row);
|
||||||
|
}
|
||||||
|
|
||||||
$schema .= ' <row><f>' . implode( '</f><f>', $row ) . '</f></row>' . "\n";
|
$schema .= ' <row><f>' . implode( '</f><f>', $row ) . '</f></row>' . "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1780,7 +2023,7 @@ class adoSchema {
|
||||||
// prefix too long
|
// prefix too long
|
||||||
case strlen( $prefix ) > XMLS_PREFIX_MAXLEN:
|
case strlen( $prefix ) > XMLS_PREFIX_MAXLEN:
|
||||||
// prefix contains invalid characters
|
// prefix contains invalid characters
|
||||||
case !preg_match( '/^[a-z][a-z0-9]+$/i', $prefix ):
|
case !preg_match( '/^[a-z][a-z0-9_]+$/i', $prefix ):
|
||||||
logMsg( 'Invalid prefix: ' . $prefix );
|
logMsg( 'Invalid prefix: ' . $prefix );
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -1931,8 +2174,8 @@ class adoSchema {
|
||||||
*
|
*
|
||||||
* @access private
|
* @access private
|
||||||
*/
|
*/
|
||||||
function logMsg( $msg, $title = NULL ) {
|
function logMsg( $msg, $title = NULL, $force = FALSE ) {
|
||||||
if( XMLS_DEBUG ) {
|
if( XMLS_DEBUG or $force ) {
|
||||||
echo '<pre>';
|
echo '<pre>';
|
||||||
|
|
||||||
if( isset( $title ) ) {
|
if( isset( $title ) ) {
|
||||||
|
|
|
@ -224,7 +224,7 @@
|
||||||
var $substr = 'substr'; /// substring operator
|
var $substr = 'substr'; /// substring operator
|
||||||
var $length = 'length'; /// string length operator
|
var $length = 'length'; /// string length operator
|
||||||
var $random = 'rand()'; /// random function
|
var $random = 'rand()'; /// random function
|
||||||
var $upperCase = false; /// uppercase function
|
var $upperCase = 'upper'; /// uppercase function
|
||||||
var $fmtDate = "'Y-m-d'"; /// used by DBDate() as the default date format used by the database
|
var $fmtDate = "'Y-m-d'"; /// used by DBDate() as the default date format used by the database
|
||||||
var $fmtTimeStamp = "'Y-m-d, h:i:s A'"; /// used by DBTimeStamp as the default timestamp fmt.
|
var $fmtTimeStamp = "'Y-m-d, h:i:s A'"; /// used by DBTimeStamp as the default timestamp fmt.
|
||||||
var $true = '1'; /// string that represents TRUE for a database
|
var $true = '1'; /// string that represents TRUE for a database
|
||||||
|
@ -348,15 +348,17 @@
|
||||||
|
|
||||||
if ($newline) $msg .= "<br>\n";
|
if ($newline) $msg .= "<br>\n";
|
||||||
|
|
||||||
if (isset($HTTP_SERVER_VARS['HTTP_USER_AGENT'])) echo $msg;
|
if (isset($HTTP_SERVER_VARS['HTTP_USER_AGENT']) || !$newline) echo $msg;
|
||||||
else echo strip_tags($msg);
|
else echo strip_tags($msg);
|
||||||
|
|
||||||
|
|
||||||
if (!empty($ADODB_FLUSH) && ob_get_length() !== false) flush(); // do not flush if output buffering enabled - useless - thx to Jesse Mullan
|
if (!empty($ADODB_FLUSH) && ob_get_length() !== false) flush(); // do not flush if output buffering enabled - useless - thx to Jesse Mullan
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function Time()
|
function Time()
|
||||||
{
|
{
|
||||||
$rs =& $this->Execute("select $this->sysTimeStamp");
|
$rs =& $this->_Execute("select $this->sysTimeStamp");
|
||||||
if ($rs && !$rs->EOF) return $this->UnixTimeStamp(reset($rs->fields));
|
if ($rs && !$rs->EOF) return $this->UnixTimeStamp(reset($rs->fields));
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
@ -617,7 +619,7 @@
|
||||||
For databases that require positioned params, eg $1, $2, $3 for postgresql,
|
For databases that require positioned params, eg $1, $2, $3 for postgresql,
|
||||||
pass in Param(false) before setting the first parameter.
|
pass in Param(false) before setting the first parameter.
|
||||||
*/
|
*/
|
||||||
function Param($name)
|
function Param($name,$type='C')
|
||||||
{
|
{
|
||||||
return '?';
|
return '?';
|
||||||
}
|
}
|
||||||
|
@ -754,7 +756,9 @@
|
||||||
$ret =& $fn($this,$sql,$inputarr);
|
$ret =& $fn($this,$sql,$inputarr);
|
||||||
if (isset($ret)) return $ret;
|
if (isset($ret)) return $ret;
|
||||||
}
|
}
|
||||||
if ($inputarr && is_array($inputarr)) {
|
if ($inputarr) {
|
||||||
|
if (!is_array($inputarr)) $inputarr = array($inputarr);
|
||||||
|
|
||||||
$element0 = reset($inputarr);
|
$element0 = reset($inputarr);
|
||||||
# is_object check because oci8 descriptors can be passed in
|
# is_object check because oci8 descriptors can be passed in
|
||||||
$array_2d = is_array($element0) && !is_object(reset($element0));
|
$array_2d = is_array($element0) && !is_object(reset($element0));
|
||||||
|
@ -782,7 +786,7 @@
|
||||||
if ($i+1 != sizeof($sqlarr))
|
if ($i+1 != sizeof($sqlarr))
|
||||||
ADOConnection::outp( "Input Array does not match ?: ".htmlspecialchars($sql));
|
ADOConnection::outp( "Input Array does not match ?: ".htmlspecialchars($sql));
|
||||||
|
|
||||||
$ret =& $this->_Execute($sql,false);
|
$ret =& $this->_Execute($sql);
|
||||||
if (!$ret) return $ret;
|
if (!$ret) return $ret;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -803,60 +807,23 @@
|
||||||
return $ret;
|
return $ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function& _Execute($sql,$inputarr=false)
|
function& _Execute($sql,$inputarr=false)
|
||||||
{
|
{
|
||||||
|
|
||||||
if ($this->debug) {
|
if ($this->debug) {
|
||||||
global $HTTP_SERVER_VARS;
|
global $ADODB_INCLUDED_LIB;
|
||||||
|
if (empty($ADODB_INCLUDED_LIB)) include_once(ADODB_DIR.'/adodb-lib.inc.php');
|
||||||
$ss = '';
|
$this->_queryID = _adodb_debug_execute($this, $sql,$inputarr);
|
||||||
if ($inputarr) {
|
|
||||||
foreach($inputarr as $kk=>$vv) {
|
|
||||||
if (is_string($vv) && strlen($vv)>64) $vv = substr($vv,0,64).'...';
|
|
||||||
$ss .= "($kk=>'$vv') ";
|
|
||||||
}
|
|
||||||
$ss = "[ $ss ]";
|
|
||||||
}
|
|
||||||
$sqlTxt = str_replace(',',', ',is_array($sql) ?$sql[0] : $sql);
|
|
||||||
|
|
||||||
// check if running from browser or command-line
|
|
||||||
$inBrowser = isset($HTTP_SERVER_VARS['HTTP_USER_AGENT']);
|
|
||||||
|
|
||||||
if ($inBrowser) {
|
|
||||||
if ($this->debug === -1)
|
|
||||||
ADOConnection::outp( "<br>\n($this->databaseType): ".htmlspecialchars($sqlTxt)." <code>$ss</code>\n<br>\n",false);
|
|
||||||
else
|
|
||||||
ADOConnection::outp( "<hr>\n($this->databaseType): ".htmlspecialchars($sqlTxt)." <code>$ss</code>\n<hr>\n",false);
|
|
||||||
} else {
|
|
||||||
ADOConnection::outp("-----\n($this->databaseType): ".($sqlTxt)." \n-----\n",false);
|
|
||||||
}
|
|
||||||
$this->_queryID = $this->_query($sql,$inputarr);
|
|
||||||
/*
|
|
||||||
Alexios Fakios notes that ErrorMsg() must be called before ErrorNo() for mssql
|
|
||||||
because ErrorNo() calls Execute('SELECT @ERROR'), causing recursion
|
|
||||||
*/
|
|
||||||
if ($this->databaseType == 'mssql') {
|
|
||||||
// ErrorNo is a slow function call in mssql, and not reliable in PHP 4.0.6
|
|
||||||
if($emsg = $this->ErrorMsg()) {
|
|
||||||
if ($err = $this->ErrorNo()) ADOConnection::outp($err.': '.$emsg);
|
|
||||||
}
|
|
||||||
} else if (!$this->_queryID) {
|
|
||||||
ADOConnection::outp($this->ErrorNo() .': '. $this->ErrorMsg());
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
//****************************
|
$this->_queryID = @$this->_query($sql,$inputarr);
|
||||||
// non-debug version of query
|
|
||||||
//****************************
|
|
||||||
|
|
||||||
$this->_queryID =@$this->_query($sql,$inputarr);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/************************
|
/************************
|
||||||
// OK, query executed
|
// OK, query executed
|
||||||
*************************/
|
*************************/
|
||||||
|
|
||||||
if ($this->_queryID === false) {
|
if ($this->_queryID === false) { // error handling if query fails
|
||||||
// error handling if query fails
|
|
||||||
if ($this->debug == 99) adodb_backtrace(true,5);
|
if ($this->debug == 99) adodb_backtrace(true,5);
|
||||||
$fn = $this->raiseErrorFn;
|
$fn = $this->raiseErrorFn;
|
||||||
if ($fn) {
|
if ($fn) {
|
||||||
|
@ -866,12 +833,8 @@
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($this->_queryID === true) { // return simplified recordset for inserts/updates/deletes with lower overhead
|
||||||
if ($this->_queryID === true) {
|
|
||||||
// return simplified empty recordset for inserts/updates/deletes with lower overhead
|
|
||||||
$rs =& new ADORecordSet_empty();
|
$rs =& new ADORecordSet_empty();
|
||||||
#if (is_array($sql)) $rs->sql = $sql[0];
|
|
||||||
#else $rs->sql = $sql;
|
|
||||||
return $rs;
|
return $rs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -885,7 +848,7 @@
|
||||||
if ($rs->_numOfRows <= 0) {
|
if ($rs->_numOfRows <= 0) {
|
||||||
global $ADODB_COUNTRECS;
|
global $ADODB_COUNTRECS;
|
||||||
if ($ADODB_COUNTRECS) {
|
if ($ADODB_COUNTRECS) {
|
||||||
if (!$rs->EOF){
|
if (!$rs->EOF) {
|
||||||
$rs = &$this->_rs2rs($rs,-1,-1,!is_array($sql));
|
$rs = &$this->_rs2rs($rs,-1,-1,!is_array($sql));
|
||||||
$rs->_queryID = $this->_queryID;
|
$rs->_queryID = $this->_queryID;
|
||||||
} else
|
} else
|
||||||
|
@ -1481,6 +1444,10 @@
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
global $ADODB_INCLUDED_CSV;
|
||||||
|
if (empty($ADODB_INCLUDED_CSV)) include_once(ADODB_DIR.'/adodb-csvlib.inc.php');
|
||||||
|
|
||||||
$f = $this->_gencachename($sql.serialize($inputarr),false);
|
$f = $this->_gencachename($sql.serialize($inputarr),false);
|
||||||
adodb_write_file($f,''); // is adodb_write_file needed?
|
adodb_write_file($f,''); // is adodb_write_file needed?
|
||||||
if (!@unlink($f)) {
|
if (!@unlink($f)) {
|
||||||
|
@ -1631,7 +1598,7 @@
|
||||||
$forcenulls = defined('ADODB_FORCE_NULLS') ? true : false;
|
$forcenulls = defined('ADODB_FORCE_NULLS') ? true : false;
|
||||||
}
|
}
|
||||||
if (empty($ADODB_INCLUDED_LIB)) include_once(ADODB_DIR.'/adodb-lib.inc.php');
|
if (empty($ADODB_INCLUDED_LIB)) include_once(ADODB_DIR.'/adodb-lib.inc.php');
|
||||||
return _adodb_getupdatesql($this,$rs,$arrFields,$forceUpdate,$magicq);
|
return _adodb_getupdatesql($this,$rs,$arrFields,$forceUpdate,$magicq,$forcenulls);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1650,7 +1617,7 @@
|
||||||
$forcenulls = defined('ADODB_FORCE_NULLS') ? true : false;
|
$forcenulls = defined('ADODB_FORCE_NULLS') ? true : false;
|
||||||
}
|
}
|
||||||
if (empty($ADODB_INCLUDED_LIB)) include_once(ADODB_DIR.'/adodb-lib.inc.php');
|
if (empty($ADODB_INCLUDED_LIB)) include_once(ADODB_DIR.'/adodb-lib.inc.php');
|
||||||
return _adodb_getinsertsql($this,$rs,$arrFields,$magicq);
|
return _adodb_getinsertsql($this,$rs,$arrFields,$magicq,$forcenulls);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2505,7 +2472,10 @@
|
||||||
* @return an associative array indexed by the first column of the array,
|
* @return an associative array indexed by the first column of the array,
|
||||||
* or false if the data has less than 2 cols.
|
* or false if the data has less than 2 cols.
|
||||||
*/
|
*/
|
||||||
function &GetAssoc($force_array = false, $first2cols = false) {
|
function &GetAssoc($force_array = false, $first2cols = false)
|
||||||
|
{
|
||||||
|
global $ADODB_EXTENSION;
|
||||||
|
|
||||||
$cols = $this->_numOfFields;
|
$cols = $this->_numOfFields;
|
||||||
if ($cols < 2) {
|
if ($cols < 2) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -2514,32 +2484,64 @@
|
||||||
$results = array();
|
$results = array();
|
||||||
|
|
||||||
if (!$first2cols && ($cols > 2 || $force_array)) {
|
if (!$first2cols && ($cols > 2 || $force_array)) {
|
||||||
if ($numIndex) {
|
if ($ADODB_EXTENSION) {
|
||||||
while (!$this->EOF) {
|
if ($numIndex) {
|
||||||
$results[trim($this->fields[0])] = array_slice($this->fields, 1);
|
while (!$this->EOF) {
|
||||||
$this->MoveNext();
|
$results[trim($this->fields[0])] = array_slice($this->fields, 1);
|
||||||
|
adodb_movenext($this);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
while (!$this->EOF) {
|
||||||
|
$results[trim(reset($this->fields))] = array_slice($this->fields, 1);
|
||||||
|
adodb_movenext($this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
while (!$this->EOF) {
|
if ($numIndex) {
|
||||||
$results[trim(reset($this->fields))] = array_slice($this->fields, 1);
|
while (!$this->EOF) {
|
||||||
$this->MoveNext();
|
$results[trim($this->fields[0])] = array_slice($this->fields, 1);
|
||||||
|
$this->MoveNext();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
while (!$this->EOF) {
|
||||||
|
$results[trim(reset($this->fields))] = array_slice($this->fields, 1);
|
||||||
|
$this->MoveNext();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// return scalar values
|
if ($ADODB_EXTENSION) {
|
||||||
if ($numIndex) {
|
// return scalar values
|
||||||
while (!$this->EOF) {
|
if ($numIndex) {
|
||||||
// some bug in mssql PHP 4.02 -- doesn't handle references properly so we FORCE creating a new string
|
while (!$this->EOF) {
|
||||||
$results[trim(($this->fields[0]))] = $this->fields[1];
|
// some bug in mssql PHP 4.02 -- doesn't handle references properly so we FORCE creating a new string
|
||||||
$this->MoveNext();
|
$results[trim(($this->fields[0]))] = $this->fields[1];
|
||||||
|
adodb_movenext($this);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
while (!$this->EOF) {
|
||||||
|
// some bug in mssql PHP 4.02 -- doesn't handle references properly so we FORCE creating a new string
|
||||||
|
$v1 = trim(reset($this->fields));
|
||||||
|
$v2 = ''.next($this->fields);
|
||||||
|
$results[$v1] = $v2;
|
||||||
|
adodb_movenext($this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
while (!$this->EOF) {
|
if ($numIndex) {
|
||||||
// some bug in mssql PHP 4.02 -- doesn't handle references properly so we FORCE creating a new string
|
while (!$this->EOF) {
|
||||||
$v1 = trim(reset($this->fields));
|
// some bug in mssql PHP 4.02 -- doesn't handle references properly so we FORCE creating a new string
|
||||||
$v2 = ''.next($this->fields);
|
$results[trim(($this->fields[0]))] = $this->fields[1];
|
||||||
$results[$v1] = $v2;
|
$this->MoveNext();
|
||||||
$this->MoveNext();
|
}
|
||||||
|
} else {
|
||||||
|
while (!$this->EOF) {
|
||||||
|
// some bug in mssql PHP 4.02 -- doesn't handle references properly so we FORCE creating a new string
|
||||||
|
$v1 = trim(reset($this->fields));
|
||||||
|
$v2 = ''.next($this->fields);
|
||||||
|
$results[$v1] = $v2;
|
||||||
|
$this->MoveNext();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2730,6 +2732,7 @@
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Random access to a specific row in the recordset. Some databases do not support
|
* Random access to a specific row in the recordset. Some databases do not support
|
||||||
* access to previous rows in the databases (no scrolling backwards).
|
* access to previous rows in the databases (no scrolling backwards).
|
||||||
|
@ -2989,7 +2992,8 @@
|
||||||
*/
|
*/
|
||||||
function &FetchNextObj()
|
function &FetchNextObj()
|
||||||
{
|
{
|
||||||
return $this->FetchNextObject(false);
|
$o = $this->FetchNextObject(false);
|
||||||
|
return $o;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -3415,6 +3419,7 @@
|
||||||
if (!$dbType) return false;
|
if (!$dbType) return false;
|
||||||
$db = strtolower($dbType);
|
$db = strtolower($dbType);
|
||||||
switch ($db) {
|
switch ($db) {
|
||||||
|
case 'ifx':
|
||||||
case 'maxsql': $db = 'mysqlt'; break;
|
case 'maxsql': $db = 'mysqlt'; break;
|
||||||
case 'postgres':
|
case 'postgres':
|
||||||
case 'pgsql': $db = 'postgres7'; break;
|
case 'pgsql': $db = 'postgres7'; break;
|
||||||
|
@ -3456,44 +3461,111 @@
|
||||||
if (!defined('ADODB_ASSOC_CASE')) define('ADODB_ASSOC_CASE',2);
|
if (!defined('ADODB_ASSOC_CASE')) define('ADODB_ASSOC_CASE',2);
|
||||||
$errorfn = (defined('ADODB_ERROR_HANDLER')) ? ADODB_ERROR_HANDLER : false;
|
$errorfn = (defined('ADODB_ERROR_HANDLER')) ? ADODB_ERROR_HANDLER : false;
|
||||||
|
|
||||||
|
if (strpos($db,'://')) {
|
||||||
|
$origdsn = $db;
|
||||||
|
$dsna = @parse_url($db);
|
||||||
|
if (!$dsna) {
|
||||||
|
// special handling of oracle, which might not have host
|
||||||
|
$db = str_replace('@/','@adodb-fakehost/',$db);
|
||||||
|
$dsna = parse_url($db);
|
||||||
|
if (!$dsna) return false;
|
||||||
|
$dsna['host'] = '';
|
||||||
|
}
|
||||||
|
$db = @$dsna['scheme'];
|
||||||
|
if (!$db) return false;
|
||||||
|
$dsna['host'] = isset($dsna['host']) ? rawurldecode($dsna['host']) : '';
|
||||||
|
$dsna['user'] = isset($dsna['user']) ? rawurldecode($dsna['user']) : '';
|
||||||
|
$dsna['pass'] = isset($dsna['pass']) ? rawurldecode($dsna['pass']) : '';
|
||||||
|
$dsna['path'] = isset($dsna['path']) ? rawurldecode(substr($dsna['path'],1)) : '';
|
||||||
|
|
||||||
|
if (isset($dsna['query'])) {
|
||||||
|
$opt1 = explode('&',$dsna['query']);
|
||||||
|
foreach($opt1 as $k => $v) {
|
||||||
|
$arr = explode('=',$v);
|
||||||
|
$opt[$arr[0]] = isset($arr[1]) ? rawurldecode($arr[1]) : 1;
|
||||||
|
}
|
||||||
|
} else $opt = array();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* phptype: Database backend used in PHP (mysql, odbc etc.)
|
||||||
|
* dbsyntax: Database used with regards to SQL syntax etc.
|
||||||
|
* protocol: Communication protocol to use (tcp, unix etc.)
|
||||||
|
* hostspec: Host specification (hostname[:port])
|
||||||
|
* database: Database to use on the DBMS server
|
||||||
|
* username: User name for login
|
||||||
|
* password: Password for login
|
||||||
|
*/
|
||||||
if (!empty($ADODB_NEWCONNECTION)) {
|
if (!empty($ADODB_NEWCONNECTION)) {
|
||||||
$obj = $ADODB_NEWCONNECTION($db);
|
$obj = $ADODB_NEWCONNECTION($db);
|
||||||
if ($obj) {
|
|
||||||
if ($errorfn) $obj->raiseErrorFn = $errorfn;
|
} else {
|
||||||
return $obj;
|
|
||||||
|
if (!isset($ADODB_LASTDB)) $ADODB_LASTDB = '';
|
||||||
|
if (empty($db)) $db = $ADODB_LASTDB;
|
||||||
|
|
||||||
|
if ($db != $ADODB_LASTDB) $db = ADOLoadCode($db);
|
||||||
|
|
||||||
|
if (!$db) {
|
||||||
|
if (isset($origdsn)) $db = $origdsn;
|
||||||
|
if ($errorfn) {
|
||||||
|
// raise an error
|
||||||
|
$ignore = false;
|
||||||
|
$errorfn('ADONewConnection', 'ADONewConnection', -998,
|
||||||
|
"could not load the database driver for '$db'",
|
||||||
|
$db,false,$ignore);
|
||||||
|
} else
|
||||||
|
ADOConnection::outp( "<p>ADONewConnection: Unable to load database driver '$db'</p>",false);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$cls = 'ADODB_'.$db;
|
||||||
|
if (!class_exists($cls)) {
|
||||||
|
adodb_backtrace();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$obj =& new $cls();
|
||||||
|
}
|
||||||
|
|
||||||
|
# constructor should not fail
|
||||||
|
if ($obj) {
|
||||||
|
if ($errorfn) $obj->raiseErrorFn = $errorfn;
|
||||||
|
if (isset($dsna)) {
|
||||||
|
|
||||||
|
foreach($opt as $k => $v) {
|
||||||
|
switch(strtolower($k)) {
|
||||||
|
case 'persist':
|
||||||
|
case 'persistent': $persist = $v; break;
|
||||||
|
case 'debug': $obj->debug = (integer) $v; break;
|
||||||
|
#ibase
|
||||||
|
case 'dialect': $obj->dialect = (integer) $v; break;
|
||||||
|
case 'charset': $obj->charset = $v; break;
|
||||||
|
case 'buffers': $obj->buffers = $v; break;
|
||||||
|
case 'fetchmode': $obj->SetFetchMode($v); break;
|
||||||
|
#ado
|
||||||
|
case 'charpage': $obj->charPage = $v; break;
|
||||||
|
#mysql, mysqli
|
||||||
|
case 'clientflags': $obj->clientFlags = $v; break;
|
||||||
|
#mysqli
|
||||||
|
case 'port': $obj->port = $v; break;
|
||||||
|
case 'socket': $obj->socket = $v; break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (empty($persist))
|
||||||
|
$ok = $obj->Connect($dsna['host'], $dsna['user'], $dsna['pass'], $dsna['path']);
|
||||||
|
else
|
||||||
|
$ok = $obj->PConnect($dsna['host'], $dsna['user'], $dsna['pass'], $dsna['path']);
|
||||||
|
|
||||||
|
if (!$ok) return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isset($ADODB_LASTDB)) $ADODB_LASTDB = '';
|
|
||||||
if (empty($db)) $db = $ADODB_LASTDB;
|
|
||||||
|
|
||||||
if ($db != $ADODB_LASTDB) $db = ADOLoadCode($db);
|
|
||||||
|
|
||||||
if (!$db) {
|
|
||||||
if ($errorfn) {
|
|
||||||
// raise an error
|
|
||||||
$ignore = false;
|
|
||||||
$errorfn('ADONewConnection', 'ADONewConnection', -998,
|
|
||||||
"could not load the database driver for '$db",
|
|
||||||
$db,false,$ignore);
|
|
||||||
} else
|
|
||||||
ADOConnection::outp( "<p>ADONewConnection: Unable to load database driver '$db'</p>",false);
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$cls = 'ADODB_'.$db;
|
|
||||||
if (!class_exists($cls)) {
|
|
||||||
adodb_backtrace();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$obj =& new $cls();
|
|
||||||
if ($errorfn) $obj->raiseErrorFn = $errorfn;
|
|
||||||
|
|
||||||
return $obj;
|
return $obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// $perf == true means called by NewPerfMonitor()
|
// $perf == true means called by NewPerfMonitor()
|
||||||
function _adodb_getdriver($provider,$drivername,$perf=false)
|
function _adodb_getdriver($provider,$drivername,$perf=false)
|
||||||
{
|
{
|
||||||
|
@ -3559,56 +3631,6 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Save a file $filename and its $contents (normally for caching) with file locking
|
|
||||||
*/
|
|
||||||
function adodb_write_file($filename, $contents,$debug=false)
|
|
||||||
{
|
|
||||||
# http://www.php.net/bugs.php?id=9203 Bug that flock fails on Windows
|
|
||||||
# So to simulate locking, we assume that rename is an atomic operation.
|
|
||||||
# First we delete $filename, then we create a $tempfile write to it and
|
|
||||||
# rename to the desired $filename. If the rename works, then we successfully
|
|
||||||
# modified the file exclusively.
|
|
||||||
# What a stupid need - having to simulate locking.
|
|
||||||
# Risks:
|
|
||||||
# 1. $tempfile name is not unique -- very very low
|
|
||||||
# 2. unlink($filename) fails -- ok, rename will fail
|
|
||||||
# 3. adodb reads stale file because unlink fails -- ok, $rs timeout occurs
|
|
||||||
# 4. another process creates $filename between unlink() and rename() -- ok, rename() fails and cache updated
|
|
||||||
if (strncmp(PHP_OS,'WIN',3) === 0) {
|
|
||||||
// skip the decimal place
|
|
||||||
$mtime = substr(str_replace(' ','_',microtime()),2);
|
|
||||||
// getmypid() actually returns 0 on Win98 - never mind!
|
|
||||||
$tmpname = $filename.uniqid($mtime).getmypid();
|
|
||||||
if (!($fd = fopen($tmpname,'a'))) return false;
|
|
||||||
$ok = ftruncate($fd,0);
|
|
||||||
if (!fwrite($fd,$contents)) $ok = false;
|
|
||||||
fclose($fd);
|
|
||||||
chmod($tmpname,0644);
|
|
||||||
// the tricky moment
|
|
||||||
@unlink($filename);
|
|
||||||
if (!@rename($tmpname,$filename)) {
|
|
||||||
unlink($tmpname);
|
|
||||||
$ok = false;
|
|
||||||
}
|
|
||||||
if (!$ok) {
|
|
||||||
if ($debug) ADOConnection::outp( " Rename $tmpname ".($ok? 'ok' : 'failed'));
|
|
||||||
}
|
|
||||||
return $ok;
|
|
||||||
}
|
|
||||||
if (!($fd = fopen($filename, 'a'))) return false;
|
|
||||||
if (flock($fd, LOCK_EX) && ftruncate($fd, 0)) {
|
|
||||||
$ok = fwrite( $fd, $contents );
|
|
||||||
fclose($fd);
|
|
||||||
chmod($filename,0644);
|
|
||||||
}else {
|
|
||||||
fclose($fd);
|
|
||||||
if ($debug)ADOConnection::outp( " Failed acquiring lock for $filename<br>\n");
|
|
||||||
$ok = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $ok;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Perform a print_r, with pre tags for better formatting.
|
Perform a print_r, with pre tags for better formatting.
|
||||||
|
@ -3629,54 +3651,9 @@
|
||||||
*/
|
*/
|
||||||
function adodb_backtrace($printOrArr=true,$levels=9999)
|
function adodb_backtrace($printOrArr=true,$levels=9999)
|
||||||
{
|
{
|
||||||
$s = '';
|
global $ADODB_INCLUDED_LIB;
|
||||||
if (PHPVERSION() < 4.3) return;
|
if (empty($ADODB_INCLUDED_LIB)) include_once(ADODB_DIR.'/adodb-lib.inc.php');
|
||||||
|
return _adodb_backtrace($printOrArr,$levels);
|
||||||
$html = (isset($_SERVER['HTTP_USER_AGENT']));
|
|
||||||
$fmt = ($html) ? "</font><font color=#808080 size=-1> %% line %4d, file: <a href=\"file:/%s\">%s</a></font>" : "%% line %4d, file: %s";
|
|
||||||
|
|
||||||
$MAXSTRLEN = 64;
|
|
||||||
|
|
||||||
$s = ($html) ? '<pre align=left>' : '';
|
|
||||||
|
|
||||||
if (is_array($printOrArr)) $traceArr = $printOrArr;
|
|
||||||
else $traceArr = debug_backtrace();
|
|
||||||
array_shift($traceArr);
|
|
||||||
$tabs = sizeof($traceArr)-1;
|
|
||||||
|
|
||||||
foreach ($traceArr as $arr) {
|
|
||||||
$levels -= 1;
|
|
||||||
if ($levels < 0) break;
|
|
||||||
|
|
||||||
$args = array();
|
|
||||||
for ($i=0; $i < $tabs; $i++) $s .= ($html) ? ' ' : "\t";
|
|
||||||
$tabs -= 1;
|
|
||||||
if ($html) $s .= '<font face="Courier New,Courier">';
|
|
||||||
if (isset($arr['class'])) $s .= $arr['class'].'.';
|
|
||||||
if (isset($arr['args']))
|
|
||||||
foreach($arr['args'] as $v) {
|
|
||||||
if (is_null($v)) $args[] = 'null';
|
|
||||||
else if (is_array($v)) $args[] = 'Array['.sizeof($v).']';
|
|
||||||
else if (is_object($v)) $args[] = 'Object:'.get_class($v);
|
|
||||||
else if (is_bool($v)) $args[] = $v ? 'true' : 'false';
|
|
||||||
else {
|
|
||||||
$v = (string) @$v;
|
|
||||||
$str = htmlspecialchars(substr($v,0,$MAXSTRLEN));
|
|
||||||
if (strlen($v) > $MAXSTRLEN) $str .= '...';
|
|
||||||
$args[] = $str;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$s .= $arr['function'].'('.implode(', ',$args).')';
|
|
||||||
|
|
||||||
|
|
||||||
$s .= @sprintf($fmt, $arr['line'],$arr['file'],basename($arr['file']));
|
|
||||||
|
|
||||||
$s .= "\n";
|
|
||||||
}
|
|
||||||
if ($html) $s .= '</pre>';
|
|
||||||
if ($printOrArr) print $s;
|
|
||||||
|
|
||||||
return $s;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // defined
|
} // defined
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence. See License.txt.
|
the BSD license will take precedence. See License.txt.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
@ -550,11 +550,15 @@ class ADORecordSet_ado extends ADORecordSet {
|
||||||
|
|
||||||
if ($this->hideErrors) $olde = error_reporting(E_ERROR|E_CORE_ERROR);// sometimes $f->value be null
|
if ($this->hideErrors) $olde = error_reporting(E_ERROR|E_CORE_ERROR);// sometimes $f->value be null
|
||||||
for ($i=0,$max = $this->_numOfFields; $i < $max; $i++) {
|
for ($i=0,$max = $this->_numOfFields; $i < $max; $i++) {
|
||||||
|
//echo "<p>",$t,' ';var_dump($f->value); echo '</p>';
|
||||||
switch($t) {
|
switch($t) {
|
||||||
case 135: // timestamp
|
case 135: // timestamp
|
||||||
if (!strlen((string)$f->value)) $this->fields[] = false;
|
if (!strlen((string)$f->value)) $this->fields[] = false;
|
||||||
else $this->fields[] = adodb_date('Y-m-d H:i:s',(float)$f->value);
|
else {
|
||||||
|
if (!is_numeric($f->value)) $val = variant_date_to_timestamp($f->value);
|
||||||
|
else $val = $f->value;
|
||||||
|
$this->fields[] = adodb_date('Y-m-d H:i:s',$val);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 133:// A date value (yyyymmdd)
|
case 133:// A date value (yyyymmdd)
|
||||||
if ($val = $f->value) {
|
if ($val = $f->value) {
|
||||||
|
@ -564,7 +568,13 @@ class ADORecordSet_ado extends ADORecordSet {
|
||||||
break;
|
break;
|
||||||
case 7: // adDate
|
case 7: // adDate
|
||||||
if (!strlen((string)$f->value)) $this->fields[] = false;
|
if (!strlen((string)$f->value)) $this->fields[] = false;
|
||||||
else $this->fields[] = adodb_date('Y-m-d',(float)$f->value);
|
else {
|
||||||
|
if (!is_numeric($f->value)) $val = variant_date_to_timestamp($f->value);
|
||||||
|
else $val = $f->value;
|
||||||
|
|
||||||
|
if (($val % 86400) == 0) $this->fields[] = adodb_date('Y-m-d',$val);
|
||||||
|
else $this->fields[] = adodb_date('Y-m-d H:i:s',$val);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 1: // null
|
case 1: // null
|
||||||
$this->fields[] = false;
|
$this->fields[] = false;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence. See License.txt.
|
the BSD license will take precedence. See License.txt.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
@ -34,7 +34,6 @@ class ADODB_ado_mssql extends ADODB_ado {
|
||||||
var $ansiOuter = true; // for mssql7 or later
|
var $ansiOuter = true; // for mssql7 or later
|
||||||
var $substr = "substring";
|
var $substr = "substring";
|
||||||
var $length = 'len';
|
var $length = 'len';
|
||||||
var $upperCase = 'upper';
|
|
||||||
|
|
||||||
//var $_inTransaction = 1; // always open recordsets, so no transaction problems.
|
//var $_inTransaction = 1; // always open recordsets, so no transaction problems.
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
@ -101,9 +101,8 @@ class ADODB_DB2 extends ADODB_odbc {
|
||||||
var $fmtTimeStamp = "'Y-m-d-H.i.s'";
|
var $fmtTimeStamp = "'Y-m-d-H.i.s'";
|
||||||
var $ansiOuter = true;
|
var $ansiOuter = true;
|
||||||
var $identitySQL = 'values IDENTITY_VAL_LOCAL()';
|
var $identitySQL = 'values IDENTITY_VAL_LOCAL()';
|
||||||
var $_bindInputArray = false;
|
var $_bindInputArray = true;
|
||||||
var $upperCase = 'upper';
|
var $hasInsertID = true;
|
||||||
|
|
||||||
|
|
||||||
function ADODB_DB2()
|
function ADODB_DB2()
|
||||||
{
|
{
|
||||||
|
@ -135,13 +134,13 @@ class ADODB_DB2 extends ADODB_odbc {
|
||||||
return $this->GetOne("select 1 as ignore from $tables where $where for update");
|
return $this->GetOne("select 1 as ignore from $tables where $where for update");
|
||||||
}
|
}
|
||||||
|
|
||||||
function &MetaTables($ttype=false,$showSchema=false)
|
function &MetaTables($ttype=false,$showSchema=false, $qtable="%", $qschema="%")
|
||||||
{
|
{
|
||||||
global $ADODB_FETCH_MODE;
|
global $ADODB_FETCH_MODE;
|
||||||
|
|
||||||
$savem = $ADODB_FETCH_MODE;
|
$savem = $ADODB_FETCH_MODE;
|
||||||
$ADODB_FETCH_MODE = ADODB_FETCH_NUM;
|
$ADODB_FETCH_MODE = ADODB_FETCH_NUM;
|
||||||
$qid = odbc_tables($this->_connectionID);
|
$qid = odbc_tables($this->_connectionID, "", $qschema, $qtable, "");
|
||||||
|
|
||||||
$rs = new ADORecordSet_odbc($qid);
|
$rs = new ADORecordSet_odbc($qid);
|
||||||
|
|
||||||
|
@ -177,6 +176,7 @@ class ADODB_DB2 extends ADODB_odbc {
|
||||||
return $arr2;
|
return $arr2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Format date column in sql string given an input format that understands Y M D
|
// Format date column in sql string given an input format that understands Y M D
|
||||||
function SQLDate($fmt, $col=false)
|
function SQLDate($fmt, $col=false)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
@ -58,6 +58,45 @@ class ADODB_ibase extends ADOConnection {
|
||||||
if (defined('IBASE_DEFAULT')) $this->ibasetrans = IBASE_DEFAULT;
|
if (defined('IBASE_DEFAULT')) $this->ibasetrans = IBASE_DEFAULT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// returns true or false
|
||||||
|
function _connect($argHostname, $argUsername, $argPassword, $argDatabasename,$persist=false)
|
||||||
|
{
|
||||||
|
if (!function_exists('ibase_pconnect')) return null;
|
||||||
|
if ($argDatabasename) $argHostname .= ':'.$argDatabasename;
|
||||||
|
$fn = ($persist) ? 'ibase_pconnect':'ibase_connect';
|
||||||
|
$this->_connectionID = $fn($argHostname,$argUsername,$argPassword,
|
||||||
|
$this->charSet,$this->buffers,$this->dialect);
|
||||||
|
|
||||||
|
if ($this->dialect != 1) { // http://www.ibphoenix.com/ibp_60_del_id_ds.html
|
||||||
|
$this->replaceQuote = "''";
|
||||||
|
}
|
||||||
|
if ($this->_connectionID === false) {
|
||||||
|
$this->_handleerror();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// PHP5 change.
|
||||||
|
if (function_exists('ibase_timefmt')) {
|
||||||
|
ibase_timefmt($this->ibase_datefmt,IBASE_DATE );
|
||||||
|
if ($this->dialect == 1) ibase_timefmt($this->ibase_datefmt,IBASE_TIMESTAMP );
|
||||||
|
else ibase_timefmt($this->ibase_timestampfmt,IBASE_TIMESTAMP );
|
||||||
|
ibase_timefmt($this->ibase_timefmt,IBASE_TIME );
|
||||||
|
|
||||||
|
} else {
|
||||||
|
ini_set("ibase.timestampformat", $this->ibase_timestampfmt);
|
||||||
|
ini_set("ibase.dateformat", $this->ibase_datefmt);
|
||||||
|
ini_set("ibase.timeformat", $this->ibase_timefmt);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
// returns true or false
|
||||||
|
function _pconnect($argHostname, $argUsername, $argPassword, $argDatabasename)
|
||||||
|
{
|
||||||
|
return $this->_connect($argHostname, $argUsername, $argPassword, $argDatabasename,true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
function MetaPrimaryKeys($table,$owner_notused=false,$internalKey=false)
|
function MetaPrimaryKeys($table,$owner_notused=false,$internalKey=false)
|
||||||
{
|
{
|
||||||
if ($internalKey) return array('RDB$DB_KEY');
|
if ($internalKey) return array('RDB$DB_KEY');
|
||||||
|
@ -257,48 +296,6 @@ class ADODB_ibase extends ADOConnection {
|
||||||
return $this->_errorMsg;
|
return $this->_errorMsg;
|
||||||
}
|
}
|
||||||
|
|
||||||
// returns true or false
|
|
||||||
function _connect($argHostname, $argUsername, $argPassword, $argDatabasename,$persist=false)
|
|
||||||
{
|
|
||||||
if (!function_exists('ibase_pconnect')) return null;
|
|
||||||
if ($argDatabasename) $argHostname .= ':'.$argDatabasename;
|
|
||||||
$fn = ($persist) ? 'ibase_pconnect':'ibase_connect';
|
|
||||||
$this->_connectionID = $fn($argHostname,$argUsername,$argPassword,
|
|
||||||
$this->charSet,$this->buffers,$this->dialect);
|
|
||||||
|
|
||||||
if ($this->dialect != 1) { // http://www.ibphoenix.com/ibp_60_del_id_ds.html
|
|
||||||
$this->replaceQuote = "''";
|
|
||||||
}
|
|
||||||
if ($this->_connectionID === false) {
|
|
||||||
$this->_handleerror();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// PHP5 change.
|
|
||||||
if (function_exists('ibase_timefmt')) {
|
|
||||||
ibase_timefmt($this->ibase_datefmt,IBASE_DATE );
|
|
||||||
if ($this->dialect == 1) ibase_timefmt($this->ibase_datefmt,IBASE_TIMESTAMP );
|
|
||||||
else ibase_timefmt($this->ibase_timestampfmt,IBASE_TIMESTAMP );
|
|
||||||
ibase_timefmt($this->ibase_timefmt,IBASE_TIME );
|
|
||||||
} else {
|
|
||||||
ini_set("ibase.timestampformat", $this->base_timestampfmt);
|
|
||||||
ini_set("ibase.dateformat", $this->ibase_datefmt);
|
|
||||||
ini_set("ibase.timeformat", $this->ibase_timefmt);
|
|
||||||
}
|
|
||||||
//you can use
|
|
||||||
/*
|
|
||||||
ini_set("ibase.timestampformat", $this->ibase_timestampfmt);
|
|
||||||
ini_set("ibase.dateformat", $this->ibase_datefmt);
|
|
||||||
ini_set("ibase.timeformat", $this->ibase_timefmt);
|
|
||||||
*/
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
// returns true or false
|
|
||||||
function _pconnect($argHostname, $argUsername, $argPassword, $argDatabasename)
|
|
||||||
{
|
|
||||||
return $this->_connect($argHostname, $argUsername, $argPassword, $argDatabasename,true);
|
|
||||||
}
|
|
||||||
|
|
||||||
function Prepare($sql)
|
function Prepare($sql)
|
||||||
{
|
{
|
||||||
$stmt = ibase_prepare($this->_connectionID,$sql);
|
$stmt = ibase_prepare($this->_connectionID,$sql);
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim. All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim. All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
@ -27,7 +27,6 @@ class ADODB_informix72 extends ADOConnection {
|
||||||
var $fmtTimeStamp = "'Y-m-d H:i:s'";
|
var $fmtTimeStamp = "'Y-m-d H:i:s'";
|
||||||
var $hasInsertID = true;
|
var $hasInsertID = true;
|
||||||
var $hasAffectedRows = true;
|
var $hasAffectedRows = true;
|
||||||
var $upperCase = 'upper';
|
|
||||||
var $substr = 'substr';
|
var $substr = 'substr';
|
||||||
var $metaTablesSQL="select tabname from systables where tabtype!=' ' and owner!='informix'"; //Don't get informix tables and pseudo-tables
|
var $metaTablesSQL="select tabname from systables where tabtype!=' ' and owner!='informix'"; //Don't get informix tables and pseudo-tables
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim#natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim#natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
@ -79,7 +79,6 @@ class ADODB_mssql extends ADOConnection {
|
||||||
var $hasInsertID = true;
|
var $hasInsertID = true;
|
||||||
var $substr = "substring";
|
var $substr = "substring";
|
||||||
var $length = 'len';
|
var $length = 'len';
|
||||||
var $upperCase = 'upper';
|
|
||||||
var $hasAffectedRows = true;
|
var $hasAffectedRows = true;
|
||||||
var $metaDatabasesSQL = "select name from sysdatabases where name <> 'master'";
|
var $metaDatabasesSQL = "select name from sysdatabases where name <> 'master'";
|
||||||
var $metaTablesSQL="select name,case when type='U' then 'T' else 'V' end from sysobjects where (type='U' or type='V') and (name not in ('sysallocations','syscolumns','syscomments','sysdepends','sysfilegroups','sysfiles','sysfiles1','sysforeignkeys','sysfulltextcatalogs','sysindexes','sysindexkeys','sysmembers','sysobjects','syspermissions','sysprotects','sysreferences','systypes','sysusers','sysalternates','sysconstraints','syssegments','REFERENTIAL_CONSTRAINTS','CHECK_CONSTRAINTS','CONSTRAINT_TABLE_USAGE','CONSTRAINT_COLUMN_USAGE','VIEWS','VIEW_TABLE_USAGE','VIEW_COLUMN_USAGE','SCHEMATA','TABLES','TABLE_CONSTRAINTS','TABLE_PRIVILEGES','COLUMNS','COLUMN_DOMAIN_USAGE','COLUMN_PRIVILEGES','DOMAINS','DOMAIN_CONSTRAINTS','KEY_COLUMN_USAGE','dtproperties'))";
|
var $metaTablesSQL="select name,case when type='U' then 'T' else 'V' end from sysobjects where (type='U' or type='V') and (name not in ('sysallocations','syscolumns','syscomments','sysdepends','sysfilegroups','sysfiles','sysfiles1','sysforeignkeys','sysfulltextcatalogs','sysindexes','sysindexkeys','sysmembers','sysobjects','syspermissions','sysprotects','sysreferences','systypes','sysusers','sysalternates','sysconstraints','syssegments','REFERENTIAL_CONSTRAINTS','CHECK_CONSTRAINTS','CONSTRAINT_TABLE_USAGE','CONSTRAINT_COLUMN_USAGE','VIEWS','VIEW_TABLE_USAGE','VIEW_COLUMN_USAGE','SCHEMATA','TABLES','TABLE_CONSTRAINTS','TABLE_PRIVILEGES','COLUMNS','COLUMN_DOMAIN_USAGE','COLUMN_PRIVILEGES','DOMAINS','DOMAIN_CONSTRAINTS','KEY_COLUMN_USAGE','dtproperties'))";
|
||||||
|
@ -376,14 +375,25 @@ order by constraint_name, referenced_table_name, keyno";
|
||||||
|
|
||||||
// "Stein-Aksel Basma" <basma@accelero.no>
|
// "Stein-Aksel Basma" <basma@accelero.no>
|
||||||
// tested with MSSQL 2000
|
// tested with MSSQL 2000
|
||||||
function MetaPrimaryKeys($table)
|
function &MetaPrimaryKeys($table)
|
||||||
{
|
{
|
||||||
$sql = "select k.column_name from information_schema.key_column_usage k,
|
global $ADODB_FETCH_MODE;
|
||||||
|
|
||||||
|
$schema = '';
|
||||||
|
$this->_findschema($table,$schema);
|
||||||
|
if (!$schema) $schema = $this->database;
|
||||||
|
if ($schema) $schema = "and k.table_catalog like '$schema%'";
|
||||||
|
|
||||||
|
$sql = "select distinct k.column_name,ordinal_position from information_schema.key_column_usage k,
|
||||||
information_schema.table_constraints tc
|
information_schema.table_constraints tc
|
||||||
where tc.constraint_name = k.constraint_name and tc.constraint_type =
|
where tc.constraint_name = k.constraint_name and tc.constraint_type =
|
||||||
'PRIMARY KEY' and k.table_name = '$table'";
|
'PRIMARY KEY' and k.table_name = '$table' $schema order by ordinal_position ";
|
||||||
|
|
||||||
|
$savem = $ADODB_FETCH_MODE;
|
||||||
|
$ADODB_FETCH_MODE = ADODB_FETCH_NUM;
|
||||||
$a = $this->GetCol($sql);
|
$a = $this->GetCol($sql);
|
||||||
|
$ADODB_FETCH_MODE = $savem;
|
||||||
|
|
||||||
if ($a && sizeof($a)>0) return $a;
|
if ($a && sizeof($a)>0) return $a;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -552,6 +562,11 @@ order by constraint_name, referenced_table_name, keyno";
|
||||||
*/
|
*/
|
||||||
function UpdateBlob($table,$column,$val,$where,$blobtype='BLOB')
|
function UpdateBlob($table,$column,$val,$where,$blobtype='BLOB')
|
||||||
{
|
{
|
||||||
|
|
||||||
|
if (strtoupper($blobtype) == 'CLOB') {
|
||||||
|
$sql = "UPDATE $table SET $column='" . $val . "' WHERE $where";
|
||||||
|
return $this->Execute($sql) != false;
|
||||||
|
}
|
||||||
$sql = "UPDATE $table SET $column=0x".bin2hex($val)." WHERE $where";
|
$sql = "UPDATE $table SET $column=0x".bin2hex($val)." WHERE $where";
|
||||||
return $this->Execute($sql) != false;
|
return $this->Execute($sql) != false;
|
||||||
}
|
}
|
||||||
|
@ -589,10 +604,16 @@ order by constraint_name, referenced_table_name, keyno";
|
||||||
} else if (is_integer($v)) {
|
} else if (is_integer($v)) {
|
||||||
$decl .= "@P$i INT";
|
$decl .= "@P$i INT";
|
||||||
$params .= "@P$i=".$v;
|
$params .= "@P$i=".$v;
|
||||||
} else {
|
} else if (is_float($v)) {
|
||||||
$decl .= "@P$i FLOAT";
|
$decl .= "@P$i FLOAT";
|
||||||
$params .= "@P$i=".$v;
|
$params .= "@P$i=".$v;
|
||||||
}
|
} else if (is_bool($v)) {
|
||||||
|
$decl .= "@P$i INT"; # Used INT just in case BIT in not supported on the user's MSSQL version. It will cast appropriately.
|
||||||
|
$params .= "@P$i=".(($v)?'1':'0'); # True == 1 in MSSQL BIT fields and acceptable for storing logical true in an int field
|
||||||
|
} else {
|
||||||
|
$decl .= "@P$i CHAR"; # Used char because a type is required even when the value is to be NULL.
|
||||||
|
$params .= "@P$i=NULL";
|
||||||
|
}
|
||||||
$i += 1;
|
$i += 1;
|
||||||
}
|
}
|
||||||
$decl = $this->qstr($decl);
|
$decl = $this->qstr($decl);
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
@ -29,7 +29,6 @@ class ADODB_mysql extends ADOConnection {
|
||||||
var $hasLimit = true;
|
var $hasLimit = true;
|
||||||
var $hasMoveFirst = true;
|
var $hasMoveFirst = true;
|
||||||
var $hasGenID = true;
|
var $hasGenID = true;
|
||||||
var $upperCase = 'upper';
|
|
||||||
var $isoDates = true; // accepts dates in ISO format
|
var $isoDates = true; // accepts dates in ISO format
|
||||||
var $sysDate = 'CURDATE()';
|
var $sysDate = 'CURDATE()';
|
||||||
var $sysTimeStamp = 'NOW()';
|
var $sysTimeStamp = 'NOW()';
|
||||||
|
@ -42,6 +41,7 @@ class ADODB_mysql extends ADOConnection {
|
||||||
|
|
||||||
function ADODB_mysql()
|
function ADODB_mysql()
|
||||||
{
|
{
|
||||||
|
if (defined('ADODB_EXTENSION')) $this->rsPrefix .= 'ext_';
|
||||||
}
|
}
|
||||||
|
|
||||||
function ServerInfo()
|
function ServerInfo()
|
||||||
|
@ -166,6 +166,11 @@ class ADODB_mysql extends ADOConnection {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function BeginTrans()
|
||||||
|
{
|
||||||
|
if ($this->debug) ADOConnection::outp("Transactions not supported in 'mysql' driver. Use 'mysqlt' or 'mysqli' driver");
|
||||||
|
}
|
||||||
|
|
||||||
function _affectedrows()
|
function _affectedrows()
|
||||||
{
|
{
|
||||||
return mysql_affected_rows($this->_connectionID);
|
return mysql_affected_rows($this->_connectionID);
|
||||||
|
@ -239,18 +244,22 @@ class ADODB_mysql extends ADOConnection {
|
||||||
for ($i=0; $i < $len; $i++) {
|
for ($i=0; $i < $len; $i++) {
|
||||||
$ch = $fmt[$i];
|
$ch = $fmt[$i];
|
||||||
switch($ch) {
|
switch($ch) {
|
||||||
|
|
||||||
|
default:
|
||||||
|
if ($ch == '\\') {
|
||||||
|
$i++;
|
||||||
|
$ch = substr($fmt,$i,1);
|
||||||
|
}
|
||||||
|
/** FALL THROUGH */
|
||||||
|
case '-':
|
||||||
|
case '/':
|
||||||
|
$s .= $ch;
|
||||||
|
break;
|
||||||
|
|
||||||
case 'Y':
|
case 'Y':
|
||||||
case 'y':
|
case 'y':
|
||||||
$s .= '%Y';
|
$s .= '%Y';
|
||||||
break;
|
break;
|
||||||
case 'Q':
|
|
||||||
case 'q':
|
|
||||||
$s .= "'),Quarter($col)";
|
|
||||||
|
|
||||||
if ($len > $i+1) $s .= ",DATE_FORMAT($col,'";
|
|
||||||
else $s .= ",('";
|
|
||||||
$concat = true;
|
|
||||||
break;
|
|
||||||
case 'M':
|
case 'M':
|
||||||
$s .= '%b';
|
$s .= '%b';
|
||||||
break;
|
break;
|
||||||
|
@ -263,6 +272,15 @@ class ADODB_mysql extends ADOConnection {
|
||||||
$s .= '%d';
|
$s .= '%d';
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'Q':
|
||||||
|
case 'q':
|
||||||
|
$s .= "'),Quarter($col)";
|
||||||
|
|
||||||
|
if ($len > $i+1) $s .= ",DATE_FORMAT($col,'";
|
||||||
|
else $s .= ",('";
|
||||||
|
$concat = true;
|
||||||
|
break;
|
||||||
|
|
||||||
case 'H':
|
case 'H':
|
||||||
$s .= '%H';
|
$s .= '%H';
|
||||||
break;
|
break;
|
||||||
|
@ -284,14 +302,7 @@ class ADODB_mysql extends ADOConnection {
|
||||||
$s .= '%p';
|
$s .= '%p';
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
|
||||||
|
|
||||||
if ($ch == '\\') {
|
|
||||||
$i++;
|
|
||||||
$ch = substr($fmt,$i,1);
|
|
||||||
}
|
|
||||||
$s .= $ch;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$s.="')";
|
$s.="')";
|
||||||
|
@ -449,7 +460,6 @@ class ADODB_mysql extends ADOConnection {
|
||||||
return $rs;
|
return $rs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// returns queryID or false
|
// returns queryID or false
|
||||||
function _query($sql,$inputarr)
|
function _query($sql,$inputarr)
|
||||||
{
|
{
|
||||||
|
@ -477,8 +487,6 @@ class ADODB_mysql extends ADOConnection {
|
||||||
else return @mysql_errno($this->_connectionID);
|
else return @mysql_errno($this->_connectionID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// returns true or false
|
// returns true or false
|
||||||
function _close()
|
function _close()
|
||||||
{
|
{
|
||||||
|
@ -509,6 +517,7 @@ class ADODB_mysql extends ADOConnection {
|
||||||
Class Name: Recordset
|
Class Name: Recordset
|
||||||
--------------------------------------------------------------------------------------*/
|
--------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
||||||
class ADORecordSet_mysql extends ADORecordSet{
|
class ADORecordSet_mysql extends ADORecordSet{
|
||||||
|
|
||||||
var $databaseType = "mysql";
|
var $databaseType = "mysql";
|
||||||
|
@ -587,27 +596,18 @@ class ADORecordSet_mysql extends ADORecordSet{
|
||||||
return @mysql_data_seek($this->_queryID,$row);
|
return @mysql_data_seek($this->_queryID,$row);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// 10% speedup to move MoveNext to child class
|
|
||||||
function MoveNext()
|
function MoveNext()
|
||||||
{
|
{
|
||||||
//global $ADODB_EXTENSION;if ($ADODB_EXTENSION) return adodb_movenext($this);
|
//return adodb_movenext($this);
|
||||||
|
//if (defined('ADODB_EXTENSION')) return adodb_movenext($this);
|
||||||
if ($this->EOF) return false;
|
if (@$this->fields =& mysql_fetch_array($this->_queryID,$this->fetchMode)) {
|
||||||
|
$this->_currentRow += 1;
|
||||||
$this->_currentRow++;
|
return true;
|
||||||
$this->fields = @mysql_fetch_array($this->_queryID,$this->fetchMode);
|
}
|
||||||
if (is_array($this->fields)) return true;
|
if (!$this->EOF) {
|
||||||
|
$this->_currentRow += 1;
|
||||||
$this->EOF = true;
|
$this->EOF = true;
|
||||||
|
|
||||||
/* -- tested raising an error -- appears pointless
|
|
||||||
$conn = $this->connection;
|
|
||||||
if ($conn && $conn->raiseErrorFn && ($errno = $conn->ErrorNo())) {
|
|
||||||
$fn = $conn->raiseErrorFn;
|
|
||||||
$fn($conn->databaseType,'MOVENEXT',$errno,$conn->ErrorMsg().' ('.$this->sql.')',$conn->host,$conn->database);
|
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -676,5 +676,32 @@ class ADORecordSet_mysql extends ADORecordSet{
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class ADORecordSet_ext_mysql extends ADORecordSet_mysql {
|
||||||
|
function ADORecordSet_ext_mysql($queryID,$mode=false)
|
||||||
|
{
|
||||||
|
if ($mode === false) {
|
||||||
|
global $ADODB_FETCH_MODE;
|
||||||
|
$mode = $ADODB_FETCH_MODE;
|
||||||
|
}
|
||||||
|
switch ($mode)
|
||||||
|
{
|
||||||
|
case ADODB_FETCH_NUM: $this->fetchMode = MYSQL_NUM; break;
|
||||||
|
case ADODB_FETCH_ASSOC:$this->fetchMode = MYSQL_ASSOC; break;
|
||||||
|
default:
|
||||||
|
case ADODB_FETCH_DEFAULT:
|
||||||
|
case ADODB_FETCH_BOTH:$this->fetchMode = MYSQL_BOTH; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->ADORecordSet($queryID);
|
||||||
|
}
|
||||||
|
|
||||||
|
function MoveNext()
|
||||||
|
{
|
||||||
|
return adodb_movenext($this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
?>
|
?>
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
@ -30,7 +30,6 @@ class ADODB_mysqli extends ADOConnection {
|
||||||
var $hasLimit = true;
|
var $hasLimit = true;
|
||||||
var $hasMoveFirst = true;
|
var $hasMoveFirst = true;
|
||||||
var $hasGenID = true;
|
var $hasGenID = true;
|
||||||
var $upperCase = 'upper';
|
|
||||||
var $isoDates = true; // accepts dates in ISO format
|
var $isoDates = true; // accepts dates in ISO format
|
||||||
var $sysDate = 'CURDATE()';
|
var $sysDate = 'CURDATE()';
|
||||||
var $sysTimeStamp = 'NOW()';
|
var $sysTimeStamp = 'NOW()';
|
||||||
|
@ -39,18 +38,75 @@ class ADODB_mysqli extends ADOConnection {
|
||||||
var $poorAffectedRows = true;
|
var $poorAffectedRows = true;
|
||||||
var $clientFlags = 0;
|
var $clientFlags = 0;
|
||||||
var $substr = "substring";
|
var $substr = "substring";
|
||||||
//var $poorAffectedRows = true;
|
var $port = false;
|
||||||
|
var $socket = false;
|
||||||
|
var $_bindInputArray = false;
|
||||||
var $nameQuote = '`'; /// string to use to quote identifiers and names
|
var $nameQuote = '`'; /// string to use to quote identifiers and names
|
||||||
//var $_bindInputArray = true;
|
|
||||||
|
|
||||||
function ADODB_mysqli()
|
function ADODB_mysqli()
|
||||||
{
|
{
|
||||||
if(!extension_loaded("mysqli"))
|
if(!extension_loaded("mysqli"))
|
||||||
{
|
|
||||||
trigger_error("You must have the MySQLi extension.", E_USER_ERROR);
|
trigger_error("You must have the MySQLi extension.", E_USER_ERROR);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// returns true or false
|
||||||
|
// To add: parameter int $port,
|
||||||
|
// parameter string $socket
|
||||||
|
function _connect($argHostname = NULL,
|
||||||
|
$argUsername = NULL,
|
||||||
|
$argPassword = NULL,
|
||||||
|
$argDatabasename = NULL, $persist=false)
|
||||||
|
{
|
||||||
|
$this->_connectionID = @mysqli_init();
|
||||||
|
|
||||||
|
if (is_null($this->_connectionID)) {
|
||||||
|
// mysqli_init only fails if insufficient memory
|
||||||
|
if ($this->debug)
|
||||||
|
ADOConnection::outp("mysqli_init() failed : " . $this->ErrorMsg());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// Set connection options
|
||||||
|
// Not implemented now
|
||||||
|
// mysqli_options($this->_connection,,);
|
||||||
|
if (mysqli_real_connect($this->_connectionID,
|
||||||
|
$argHostname,
|
||||||
|
$argUsername,
|
||||||
|
$argPassword,
|
||||||
|
$argDatabasename,
|
||||||
|
$this->port,
|
||||||
|
$this->socket,
|
||||||
|
$this->clientFlags))
|
||||||
|
{
|
||||||
|
if ($argDatabasename) return $this->SelectDB($argDatabasename);
|
||||||
|
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if ($this->debug)
|
||||||
|
ADOConnection::outp("Could't connect : " . $this->ErrorMsg());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// returns true or false
|
||||||
|
// How to force a persistent connection
|
||||||
|
function _pconnect($argHostname, $argUsername, $argPassword, $argDatabasename)
|
||||||
|
{
|
||||||
|
return $this->_connect($argHostname, $argUsername, $argPassword, $argDatabasename, true);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// When is this used? Close old connection first?
|
||||||
|
// In _connect(), check $this->forceNewConnect?
|
||||||
|
function _nconnect($argHostname, $argUsername, $argPassword, $argDatabasename)
|
||||||
|
{
|
||||||
|
$this->forceNewConnect = true;
|
||||||
|
$this->_connect($argHostname, $argUsername, $argPassword, $argDatabasename);
|
||||||
|
}
|
||||||
|
|
||||||
function IfNull( $field, $ifNull )
|
function IfNull( $field, $ifNull )
|
||||||
{
|
{
|
||||||
return " IFNULL($field, $ifNull) "; // if MySQL
|
return " IFNULL($field, $ifNull) "; // if MySQL
|
||||||
|
@ -329,70 +385,6 @@ class ADODB_mysqli extends ADOConnection {
|
||||||
return "from_unixtime(unix_timestamp($date)+($dayFraction)*24*3600)";
|
return "from_unixtime(unix_timestamp($date)+($dayFraction)*24*3600)";
|
||||||
}
|
}
|
||||||
|
|
||||||
// returns true or false
|
|
||||||
// To add: parameter int $port,
|
|
||||||
// parameter string $socket
|
|
||||||
function _connect($argHostname = NULL,
|
|
||||||
$argUsername = NULL,
|
|
||||||
$argPassword = NULL,
|
|
||||||
$argDatabasename = NULL)
|
|
||||||
{
|
|
||||||
// @ means: error surpression on
|
|
||||||
$this->_connectionID = @mysqli_init();
|
|
||||||
|
|
||||||
if (is_null($this->_connectionID))
|
|
||||||
{
|
|
||||||
// mysqli_init only fails if insufficient memory
|
|
||||||
if ($this->debug)
|
|
||||||
ADOConnection::outp("mysqli_init() failed : " . $this->ErrorMsg());
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
// Set connection options
|
|
||||||
// Not implemented now
|
|
||||||
// mysqli_options($this->_connection,,);
|
|
||||||
if (mysqli_real_connect($this->_connectionID,
|
|
||||||
$argHostname,
|
|
||||||
$argUsername,
|
|
||||||
$argPassword,
|
|
||||||
$argDatabasename))
|
|
||||||
{
|
|
||||||
if ($argDatabasename)
|
|
||||||
{
|
|
||||||
return $this->SelectDB($argDatabasename);
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if ($this->debug)
|
|
||||||
ADOConnection::outp("Could't connect : " . $this->ErrorMsg());
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// returns true or false
|
|
||||||
// How to force a persistent connection
|
|
||||||
function _pconnect($argHostname, $argUsername, $argPassword, $argDatabasename)
|
|
||||||
{
|
|
||||||
// not implemented in mysqli (yet)?
|
|
||||||
$this->_connectionID = mysqli_connect($argHostname,
|
|
||||||
$argUsername,
|
|
||||||
$argPassword,
|
|
||||||
$argDatabasename);
|
|
||||||
if ($this->_connectionID === false) return false;
|
|
||||||
// if ($this->autoRollback) $this->RollbackTrans();
|
|
||||||
if ($argDatabasename) return $this->SelectDB($argDatabasename);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// When is this used? Close old connection first?
|
|
||||||
// In _connect(), check $this->forceNewConnect?
|
|
||||||
function _nconnect($argHostname, $argUsername, $argPassword, $argDatabasename)
|
|
||||||
{
|
|
||||||
$this->forceNewConnect = true;
|
|
||||||
$this->_connect($argHostname, $argUsername, $argPassword, $argDatabasename);
|
|
||||||
}
|
|
||||||
|
|
||||||
function &MetaColumns($table)
|
function &MetaColumns($table)
|
||||||
{
|
{
|
||||||
|
@ -539,8 +531,11 @@ class ADODB_mysqli extends ADOConnection {
|
||||||
{
|
{
|
||||||
return $sql;
|
return $sql;
|
||||||
|
|
||||||
$stmt = mysqli_prepare($this->_connectionID,$sql);
|
$stmt = $this->_connectionID->prepare($sql);
|
||||||
if (!$stmt) return false;
|
if (!$stmt) {
|
||||||
|
echo $this->ErrorMsg();
|
||||||
|
return $sql;
|
||||||
|
}
|
||||||
return array($sql,$stmt);
|
return array($sql,$stmt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -552,15 +547,17 @@ class ADODB_mysqli extends ADOConnection {
|
||||||
|
|
||||||
if (is_array($sql)) {
|
if (is_array($sql)) {
|
||||||
$stmt = $sql[1];
|
$stmt = $sql[1];
|
||||||
|
$a = '';
|
||||||
foreach($inputarr as $k => $v) {
|
foreach($inputarr as $k => $v) {
|
||||||
if (is_string($v)) $a[] = MYSQLI_BIND_STRING;
|
if (is_string($v)) $a .= 's';
|
||||||
else if (is_integer($v)) $a[] = MYSQLI_BIND_INT;
|
else if (is_integer($v)) $a .= 'i';
|
||||||
else $a[] = MYSQLI_BIND_DOUBLE;
|
else $a .= 'd';
|
||||||
|
|
||||||
$fnarr =& array_merge( array($stmt,$a) , $inputarr);
|
|
||||||
$ret = call_user_func_array('mysqli_bind_param',$fnarr);
|
|
||||||
}
|
}
|
||||||
$ret = mysqli_execute($stmt);
|
|
||||||
|
$fnarr =& array_merge( array($stmt,$a) , $inputarr);
|
||||||
|
$ret = call_user_func_array('mysqli_stmt_bind_param',$fnarr);
|
||||||
|
|
||||||
|
$ret = mysqli_stmt_execute($stmt);
|
||||||
return $ret;
|
return $ret;
|
||||||
}
|
}
|
||||||
if (!$mysql_res = mysqli_query($this->_connectionID, $sql, ($ADODB_COUNTRECS) ? MYSQLI_STORE_RESULT : MYSQLI_USE_RESULT)) {
|
if (!$mysql_res = mysqli_query($this->_connectionID, $sql, ($ADODB_COUNTRECS) ? MYSQLI_STORE_RESULT : MYSQLI_USE_RESULT)) {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
@ -25,6 +25,11 @@ class ADODB_mysqlt extends ADODB_mysql {
|
||||||
var $hasTransactions = true;
|
var $hasTransactions = true;
|
||||||
var $autoRollback = true; // apparently mysql does not autorollback properly
|
var $autoRollback = true; // apparently mysql does not autorollback properly
|
||||||
|
|
||||||
|
function ADODB_mysqlt()
|
||||||
|
{
|
||||||
|
global $ADODB_EXTENSION; if ($ADODB_EXTENSION) $this->rsPrefix .= 'ext_';
|
||||||
|
}
|
||||||
|
|
||||||
function BeginTrans()
|
function BeginTrans()
|
||||||
{
|
{
|
||||||
if ($this->transOff) return true;
|
if ($this->transOff) return true;
|
||||||
|
@ -59,21 +64,62 @@ class ADODB_mysqlt extends ADODB_mysql {
|
||||||
class ADORecordSet_mysqlt extends ADORecordSet_mysql{
|
class ADORecordSet_mysqlt extends ADORecordSet_mysql{
|
||||||
var $databaseType = "mysqlt";
|
var $databaseType = "mysqlt";
|
||||||
|
|
||||||
function ADORecordSet_mysqlt($queryID,$mode=false) {
|
function ADORecordSet_mysqlt($queryID,$mode=false)
|
||||||
return $this->ADORecordSet_mysql($queryID,$mode);
|
{
|
||||||
|
if ($mode === false) {
|
||||||
|
global $ADODB_FETCH_MODE;
|
||||||
|
$mode = $ADODB_FETCH_MODE;
|
||||||
|
}
|
||||||
|
switch ($mode)
|
||||||
|
{
|
||||||
|
case ADODB_FETCH_NUM: $this->fetchMode = MYSQL_NUM; break;
|
||||||
|
case ADODB_FETCH_ASSOC:$this->fetchMode = MYSQL_ASSOC; break;
|
||||||
|
default:
|
||||||
|
case ADODB_FETCH_DEFAULT:
|
||||||
|
case ADODB_FETCH_BOTH:$this->fetchMode = MYSQL_BOTH; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->ADORecordSet($queryID);
|
||||||
}
|
}
|
||||||
|
|
||||||
function MoveNext()
|
function MoveNext()
|
||||||
{
|
{
|
||||||
if ($this->EOF) return false;
|
if (@$this->fields =& mysql_fetch_array($this->_queryID,$this->fetchMode)) {
|
||||||
|
$this->_currentRow += 1;
|
||||||
$this->_currentRow++;
|
return true;
|
||||||
// using & below slows things down by 20%!
|
}
|
||||||
$this->fields = @mysql_fetch_array($this->_queryID,$this->fetchMode);
|
if (!$this->EOF) {
|
||||||
if ($this->fields) return true;
|
$this->_currentRow += 1;
|
||||||
$this->EOF = true;
|
$this->EOF = true;
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class ADORecordSet_ext_mysqlt extends ADORecordSet_mysqlt {
|
||||||
|
|
||||||
|
function ADORecordSet_ext_mysqli($queryID,$mode=false)
|
||||||
|
{
|
||||||
|
if ($mode === false) {
|
||||||
|
global $ADODB_FETCH_MODE;
|
||||||
|
$mode = $ADODB_FETCH_MODE;
|
||||||
|
}
|
||||||
|
switch ($mode)
|
||||||
|
{
|
||||||
|
case ADODB_FETCH_NUM: $this->fetchMode = MYSQL_NUM; break;
|
||||||
|
case ADODB_FETCH_ASSOC:$this->fetchMode = MYSQL_ASSOC; break;
|
||||||
|
default:
|
||||||
|
case ADODB_FETCH_DEFAULT:
|
||||||
|
case ADODB_FETCH_BOTH:$this->fetchMode = MYSQL_BOTH; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->ADORecordSet($queryID);
|
||||||
|
}
|
||||||
|
|
||||||
|
function MoveNext()
|
||||||
|
{
|
||||||
|
return adodb_movenext($this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
?>
|
?>
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim#natsoft.com.my). All rights reserved.
|
V4.51 29 July 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
|
First cut at the Netezza Driver by Josh Eldridge joshuae74#hotmail.com
|
||||||
Based on the previous postgres drivers.
|
Based on the previous postgres drivers.
|
||||||
|
@ -26,7 +26,6 @@ class ADODB_netezza extends ADODB_postgres64 {
|
||||||
var $_resultid = false;
|
var $_resultid = false;
|
||||||
var $concat_operator='||';
|
var $concat_operator='||';
|
||||||
var $random = 'random';
|
var $random = 'random';
|
||||||
var $upperCase = 'upper';
|
|
||||||
var $metaDatabasesSQL = "select objname from _v_object_data where objtype='database' order by 1";
|
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 $metaTablesSQL = "select objname from _v_object_data where objtype='table' order by 1";
|
||||||
var $isoDates = true; // accepts dates in ISO format
|
var $isoDates = true; // accepts dates in ISO format
|
||||||
|
|
|
@ -91,6 +91,7 @@ class ADODB_oci8 extends ADOConnection {
|
||||||
function ADODB_oci8()
|
function ADODB_oci8()
|
||||||
{
|
{
|
||||||
$this->_hasOCIFetchStatement = ADODB_PHPVER >= 0x4200;
|
$this->_hasOCIFetchStatement = ADODB_PHPVER >= 0x4200;
|
||||||
|
if (defined('ADODB_EXTENSION')) $this->rsPrefix .= 'ext_';
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Function &MetaColumns($table) added by smondino@users.sourceforge.net*/
|
/* Function &MetaColumns($table) added by smondino@users.sourceforge.net*/
|
||||||
|
@ -234,8 +235,6 @@ NATSOFT.DOMAIN =
|
||||||
return $this->_connect($argHostname, $argUsername, $argPassword, $argDatabasename,1);
|
return $this->_connect($argHostname, $argUsername, $argPassword, $argDatabasename,1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// returns true or false
|
// returns true or false
|
||||||
function _nconnect($argHostname, $argUsername, $argPassword, $argDatabasename)
|
function _nconnect($argHostname, $argUsername, $argPassword, $argDatabasename)
|
||||||
{
|
{
|
||||||
|
@ -576,7 +575,7 @@ NATSOFT.DOMAIN =
|
||||||
if ($this->session_sharing_force_blob) $this->Execute('ALTER SESSION SET CURSOR_SHARING=EXACT');
|
if ($this->session_sharing_force_blob) $this->Execute('ALTER SESSION SET CURSOR_SHARING=EXACT');
|
||||||
$commit = $this->autoCommit;
|
$commit = $this->autoCommit;
|
||||||
if ($commit) $this->BeginTrans();
|
if ($commit) $this->BeginTrans();
|
||||||
$rs = ADODB_oci8::Execute($sql,$arr);
|
$rs = $this->_Execute($sql,$arr);
|
||||||
if ($rez = !empty($rs)) $desc->save($val);
|
if ($rez = !empty($rs)) $desc->save($val);
|
||||||
$desc->free();
|
$desc->free();
|
||||||
if ($commit) $this->CommitTrans();
|
if ($commit) $this->CommitTrans();
|
||||||
|
@ -748,7 +747,7 @@ NATSOFT.DOMAIN =
|
||||||
return $rez;
|
return $rez;
|
||||||
}
|
}
|
||||||
|
|
||||||
function Param($name)
|
function Param($name,$type=false)
|
||||||
{
|
{
|
||||||
return ':'.$name;
|
return ':'.$name;
|
||||||
}
|
}
|
||||||
|
@ -898,6 +897,8 @@ NATSOFT.DOMAIN =
|
||||||
// returns true or false
|
// returns true or false
|
||||||
function _close()
|
function _close()
|
||||||
{
|
{
|
||||||
|
if (!$this->_connectionID) return;
|
||||||
|
|
||||||
if (!$this->autoCommit) OCIRollback($this->_connectionID);
|
if (!$this->autoCommit) OCIRollback($this->_connectionID);
|
||||||
if (count($this -> _refLOBs) > 0) {
|
if (count($this -> _refLOBs) > 0) {
|
||||||
foreach ($this -> _refLOBs as $key => $value) {
|
foreach ($this -> _refLOBs as $key => $value) {
|
||||||
|
@ -906,6 +907,7 @@ NATSOFT.DOMAIN =
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
OCILogoff($this->_connectionID);
|
OCILogoff($this->_connectionID);
|
||||||
|
|
||||||
$this->_stmt = false;
|
$this->_stmt = false;
|
||||||
$this->_connectionID = false;
|
$this->_connectionID = false;
|
||||||
}
|
}
|
||||||
|
@ -1126,8 +1128,9 @@ class ADORecordset_oci8 extends ADORecordSet {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
// 10% speedup to move MoveNext to child class
|
// 10% speedup to move MoveNext to child class
|
||||||
function MoveNext()
|
function _MoveNext()
|
||||||
{
|
{
|
||||||
//global $ADODB_EXTENSION;if ($ADODB_EXTENSION) return @adodb_movenext($this);
|
//global $ADODB_EXTENSION;if ($ADODB_EXTENSION) return @adodb_movenext($this);
|
||||||
|
|
||||||
|
@ -1138,9 +1141,24 @@ class ADORecordset_oci8 extends ADORecordSet {
|
||||||
return true;
|
return true;
|
||||||
$this->EOF = true;
|
$this->EOF = true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
} */
|
||||||
|
|
||||||
|
|
||||||
|
function MoveNext()
|
||||||
|
{
|
||||||
|
if (@OCIfetchinto($this->_queryID,$this->fields,$this->fetchMode)) {
|
||||||
|
$this->_currentRow += 1;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (!$this->EOF) {
|
||||||
|
$this->_currentRow += 1;
|
||||||
|
$this->EOF = true;
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Optimize SelectLimit() by using OCIFetch() instead of OCIFetchInto() */
|
/* Optimize SelectLimit() by using OCIFetch() instead of OCIFetchInto() */
|
||||||
function &GetArrayLimit($nrows,$offset=-1)
|
function &GetArrayLimit($nrows,$offset=-1)
|
||||||
{
|
{
|
||||||
|
@ -1244,4 +1262,29 @@ class ADORecordset_oci8 extends ADORecordSet {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class ADORecordSet_ext_oci8 extends ADORecordSet_oci8 {
|
||||||
|
function ADORecordSet_ext_oci8($queryID,$mode=false)
|
||||||
|
{
|
||||||
|
if ($mode === false) {
|
||||||
|
global $ADODB_FETCH_MODE;
|
||||||
|
$mode = $ADODB_FETCH_MODE;
|
||||||
|
}
|
||||||
|
switch ($mode)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
case ADODB_FETCH_NUM: $this->fetchMode = OCI_NUM+OCI_RETURN_NULLS+OCI_RETURN_LOBS; break;
|
||||||
|
case ADODB_FETCH_ASSOC:$this->fetchMode = OCI_ASSOC+OCI_RETURN_NULLS+OCI_RETURN_LOBS; break;
|
||||||
|
case ADODB_FETCH_DEFAULT:
|
||||||
|
case ADODB_FETCH_BOTH:$this->fetchMode = OCI_NUM+OCI_ASSOC+OCI_RETURN_NULLS+OCI_RETURN_LOBS; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->_queryID = $queryID;
|
||||||
|
}
|
||||||
|
|
||||||
|
function MoveNext()
|
||||||
|
{
|
||||||
|
return adodb_movenext($this);
|
||||||
|
}
|
||||||
|
}
|
||||||
?>
|
?>
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim. All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim. All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
@ -30,7 +30,8 @@ class ADODB_oci8po extends ADODB_oci8 {
|
||||||
|
|
||||||
function ADODB_oci8po()
|
function ADODB_oci8po()
|
||||||
{
|
{
|
||||||
$this->ADODB_oci8();
|
$this->_hasOCIFetchStatement = ADODB_PHPVER >= 0x4200;
|
||||||
|
# oci8po does not support adodb extension: adodb_movenext()
|
||||||
}
|
}
|
||||||
|
|
||||||
function Param($name)
|
function Param($name)
|
||||||
|
@ -77,59 +78,72 @@ class ADORecordset_oci8po extends ADORecordset_oci8 {
|
||||||
|
|
||||||
var $databaseType = 'oci8po';
|
var $databaseType = 'oci8po';
|
||||||
|
|
||||||
function ADORecordset_oci8po($queryID,$mode=false)
|
function ADORecordset_oci8po($queryID,$mode=false)
|
||||||
{
|
{
|
||||||
$this->ADORecordset_oci8($queryID,$mode);
|
$this->ADORecordset_oci8($queryID,$mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
function Fields($colname)
|
function Fields($colname)
|
||||||
{
|
{
|
||||||
if ($this->fetchMode & OCI_ASSOC) return $this->fields[$colname];
|
if ($this->fetchMode & OCI_ASSOC) return $this->fields[$colname];
|
||||||
|
|
||||||
if (!$this->bind) {
|
if (!$this->bind) {
|
||||||
$this->bind = array();
|
$this->bind = array();
|
||||||
for ($i=0; $i < $this->_numOfFields; $i++) {
|
for ($i=0; $i < $this->_numOfFields; $i++) {
|
||||||
$o = $this->FetchField($i);
|
$o = $this->FetchField($i);
|
||||||
$this->bind[strtoupper($o->name)] = $i;
|
$this->bind[strtoupper($o->name)] = $i;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return $this->fields[$this->bind[strtoupper($colname)]];
|
|
||||||
}
|
}
|
||||||
|
return $this->fields[$this->bind[strtoupper($colname)]];
|
||||||
|
}
|
||||||
|
|
||||||
// lowercase field names...
|
// lowercase field names...
|
||||||
function &_FetchField($fieldOffset = -1)
|
function &_FetchField($fieldOffset = -1)
|
||||||
{
|
{
|
||||||
$fld = new ADOFieldObject;
|
$fld = new ADOFieldObject;
|
||||||
$fieldOffset += 1;
|
$fieldOffset += 1;
|
||||||
$fld->name = strtolower(OCIcolumnname($this->_queryID, $fieldOffset));
|
$fld->name = strtolower(OCIcolumnname($this->_queryID, $fieldOffset));
|
||||||
$fld->type = OCIcolumntype($this->_queryID, $fieldOffset);
|
$fld->type = OCIcolumntype($this->_queryID, $fieldOffset);
|
||||||
$fld->max_length = OCIcolumnsize($this->_queryID, $fieldOffset);
|
$fld->max_length = OCIcolumnsize($this->_queryID, $fieldOffset);
|
||||||
if ($fld->type == 'NUMBER') {
|
if ($fld->type == 'NUMBER') {
|
||||||
//$p = OCIColumnPrecision($this->_queryID, $fieldOffset);
|
//$p = OCIColumnPrecision($this->_queryID, $fieldOffset);
|
||||||
$sc = OCIColumnScale($this->_queryID, $fieldOffset);
|
$sc = OCIColumnScale($this->_queryID, $fieldOffset);
|
||||||
if ($sc == 0) $fld->type = 'INT';
|
if ($sc == 0) $fld->type = 'INT';
|
||||||
}
|
}
|
||||||
return $fld;
|
return $fld;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
function MoveNext()
|
||||||
|
{
|
||||||
|
if (@OCIfetchinto($this->_queryID,$this->fields,$this->fetchMode)) {
|
||||||
|
$this->_currentRow += 1;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
if (!$this->EOF) {
|
||||||
|
$this->_currentRow += 1;
|
||||||
|
$this->EOF = true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}*/
|
||||||
|
|
||||||
// 10% speedup to move MoveNext to child class
|
// 10% speedup to move MoveNext to child class
|
||||||
function MoveNext()
|
function MoveNext()
|
||||||
{
|
{
|
||||||
|
if(@OCIfetchinto($this->_queryID,$this->fields,$this->fetchMode)) {
|
||||||
if (!$this->EOF) {
|
global $ADODB_ANSI_PADDING_OFF;
|
||||||
$this->_currentRow++;
|
$this->_currentRow++;
|
||||||
if(@OCIfetchinto($this->_queryID,$this->fields,$this->fetchMode)) {
|
|
||||||
global $ADODB_ANSI_PADDING_OFF;
|
|
||||||
|
|
||||||
if ($this->fetchMode & OCI_ASSOC) $this->_updatefields();
|
if ($this->fetchMode & OCI_ASSOC) $this->_updatefields();
|
||||||
if (!empty($ADODB_ANSI_PADDING_OFF)) {
|
if (!empty($ADODB_ANSI_PADDING_OFF)) {
|
||||||
foreach($this->fields as $k => $v) {
|
foreach($this->fields as $k => $v) {
|
||||||
if (is_string($v)) $this->fields[$k] = rtrim($v);
|
if (is_string($v)) $this->fields[$k] = rtrim($v);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (!$this->EOF) {
|
||||||
$this->EOF = true;
|
$this->EOF = true;
|
||||||
|
$this->_currentRow++;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -190,4 +204,6 @@ class ADORecordset_oci8po extends ADORecordset_oci8 {
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
?>
|
?>
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim#natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim#natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
@ -37,6 +37,7 @@ class ADODB_odbc extends ADOConnection {
|
||||||
var $_haserrorfunctions = true;
|
var $_haserrorfunctions = true;
|
||||||
var $_has_stupid_odbc_fetch_api_change = true;
|
var $_has_stupid_odbc_fetch_api_change = true;
|
||||||
var $_lastAffectedRows = 0;
|
var $_lastAffectedRows = 0;
|
||||||
|
var $uCaseTables = true; // for meta* functions, uppercase table names
|
||||||
|
|
||||||
function ADODB_odbc()
|
function ADODB_odbc()
|
||||||
{
|
{
|
||||||
|
@ -56,7 +57,7 @@ class ADODB_odbc extends ADOConnection {
|
||||||
|
|
||||||
while(true) {
|
while(true) {
|
||||||
|
|
||||||
$rez = odbc_data_source($this->_connectionID,
|
$rez = @odbc_data_source($this->_connectionID,
|
||||||
$first ? SQL_FETCH_FIRST : SQL_FETCH_NEXT);
|
$first ? SQL_FETCH_FIRST : SQL_FETCH_NEXT);
|
||||||
$first = false;
|
$first = false;
|
||||||
if (!is_array($rez)) break;
|
if (!is_array($rez)) break;
|
||||||
|
@ -232,9 +233,13 @@ class ADODB_odbc extends ADOConnection {
|
||||||
{
|
{
|
||||||
global $ADODB_FETCH_MODE;
|
global $ADODB_FETCH_MODE;
|
||||||
|
|
||||||
|
if ($this->uCaseTables) $table = strtoupper($table);
|
||||||
|
$schema = '';
|
||||||
|
$this->_findschema($table,$schema);
|
||||||
|
|
||||||
$savem = $ADODB_FETCH_MODE;
|
$savem = $ADODB_FETCH_MODE;
|
||||||
$ADODB_FETCH_MODE = ADODB_FETCH_NUM;
|
$ADODB_FETCH_MODE = ADODB_FETCH_NUM;
|
||||||
$qid = @odbc_primarykeys($this->_connectionID,'','',$table);
|
$qid = @odbc_primarykeys($this->_connectionID,'',$schema,$table);
|
||||||
|
|
||||||
if (!$qid) {
|
if (!$qid) {
|
||||||
$ADODB_FETCH_MODE = $savem;
|
$ADODB_FETCH_MODE = $savem;
|
||||||
|
@ -361,14 +366,14 @@ class ADODB_odbc extends ADOConnection {
|
||||||
{
|
{
|
||||||
global $ADODB_FETCH_MODE;
|
global $ADODB_FETCH_MODE;
|
||||||
|
|
||||||
$table = strtoupper($table);
|
if ($this->uCaseTables) $table = strtoupper($table);
|
||||||
$schema = false;
|
$schema = '';
|
||||||
$this->_findschema($table,$schema);
|
$this->_findschema($table,$schema);
|
||||||
|
|
||||||
$savem = $ADODB_FETCH_MODE;
|
$savem = $ADODB_FETCH_MODE;
|
||||||
$ADODB_FETCH_MODE = ADODB_FETCH_NUM;
|
$ADODB_FETCH_MODE = ADODB_FETCH_NUM;
|
||||||
|
|
||||||
if (false) { // after testing, confirmed that the following does not work becoz of a bug
|
/*if (false) { // after testing, confirmed that the following does not work becoz of a bug
|
||||||
$qid2 = odbc_tables($this->_connectionID);
|
$qid2 = odbc_tables($this->_connectionID);
|
||||||
$rs = new ADORecordSet_odbc($qid2);
|
$rs = new ADORecordSet_odbc($qid2);
|
||||||
$ADODB_FETCH_MODE = $savem;
|
$ADODB_FETCH_MODE = $savem;
|
||||||
|
@ -387,13 +392,20 @@ class ADODB_odbc extends ADOConnection {
|
||||||
$rs->Close();
|
$rs->Close();
|
||||||
|
|
||||||
$qid = odbc_columns($this->_connectionID,$q,$o,strtoupper($table),'%');
|
$qid = odbc_columns($this->_connectionID,$q,$o,strtoupper($table),'%');
|
||||||
} else switch ($this->databaseType) {
|
} */
|
||||||
|
|
||||||
|
switch ($this->databaseType) {
|
||||||
case 'access':
|
case 'access':
|
||||||
case 'vfp':
|
case 'vfp':
|
||||||
case 'db2':
|
$qid = odbc_columns($this->_connectionID);#,'%','',strtoupper($table),'%');
|
||||||
$qid = odbc_columns($this->_connectionID);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
||||||
|
case 'db2':
|
||||||
|
$colname = "%";
|
||||||
|
$qid = odbc_columns($this->_connectionID, "", $schema, $table, $colname);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
$qid = @odbc_columns($this->_connectionID,'%','%',strtoupper($table),'%');
|
$qid = @odbc_columns($this->_connectionID,'%','%',strtoupper($table),'%');
|
||||||
if (empty($qid)) $qid = odbc_columns($this->_connectionID);
|
if (empty($qid)) $qid = odbc_columns($this->_connectionID);
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
@ -32,7 +32,6 @@ class ADODB_odbc_mssql extends ADODB_odbc {
|
||||||
var $sysTimeStamp = 'GetDate()';
|
var $sysTimeStamp = 'GetDate()';
|
||||||
var $leftOuter = '*=';
|
var $leftOuter = '*=';
|
||||||
var $rightOuter = '=*';
|
var $rightOuter = '=*';
|
||||||
var $upperCase = 'upper';
|
|
||||||
var $substr = 'substring';
|
var $substr = 'substring';
|
||||||
var $length = 'len';
|
var $length = 'len';
|
||||||
var $ansiOuter = true; // for mssql7 or later
|
var $ansiOuter = true; // for mssql7 or later
|
||||||
|
@ -146,12 +145,23 @@ order by constraint_name, referenced_table_name, keyno";
|
||||||
// tested with MSSQL 2000
|
// tested with MSSQL 2000
|
||||||
function &MetaPrimaryKeys($table)
|
function &MetaPrimaryKeys($table)
|
||||||
{
|
{
|
||||||
$sql = "select k.column_name from information_schema.key_column_usage k,
|
global $ADODB_FETCH_MODE;
|
||||||
|
|
||||||
|
$schema = '';
|
||||||
|
$this->_findschema($table,$schema);
|
||||||
|
//if (!$schema) $schema = $this->database;
|
||||||
|
if ($schema) $schema = "and k.table_catalog like '$schema%'";
|
||||||
|
|
||||||
|
$sql = "select distinct k.column_name,ordinal_position from information_schema.key_column_usage k,
|
||||||
information_schema.table_constraints tc
|
information_schema.table_constraints tc
|
||||||
where tc.constraint_name = k.constraint_name and tc.constraint_type =
|
where tc.constraint_name = k.constraint_name and tc.constraint_type =
|
||||||
'PRIMARY KEY' and k.table_name = '$table'";
|
'PRIMARY KEY' and k.table_name = '$table' $schema order by ordinal_position ";
|
||||||
|
|
||||||
|
$savem = $ADODB_FETCH_MODE;
|
||||||
|
$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
|
||||||
$a = $this->GetCol($sql);
|
$a = $this->GetCol($sql);
|
||||||
|
$ADODB_FETCH_MODE = $savem;
|
||||||
|
|
||||||
if ($a && sizeof($a)>0) return $a;
|
if ($a && sizeof($a)>0) return $a;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence. See License.txt.
|
the BSD license will take precedence. See License.txt.
|
||||||
|
@ -174,7 +174,6 @@ class ADODB_odbtp extends ADOConnection{
|
||||||
$this->_canSelectDb = true;
|
$this->_canSelectDb = true;
|
||||||
$this->substr = "substring";
|
$this->substr = "substring";
|
||||||
$this->length = 'len';
|
$this->length = 'len';
|
||||||
$this->upperCase = 'upper';
|
|
||||||
$this->identitySQL = 'select @@IDENTITY';
|
$this->identitySQL = 'select @@IDENTITY';
|
||||||
$this->metaDatabasesSQL = "select name from master..sysdatabases where name <> 'master'";
|
$this->metaDatabasesSQL = "select name from master..sysdatabases where name <> 'master'";
|
||||||
break;
|
break;
|
||||||
|
@ -202,7 +201,6 @@ class ADODB_odbtp extends ADOConnection{
|
||||||
$this->replaceQuote = "'+chr(39)+'";
|
$this->replaceQuote = "'+chr(39)+'";
|
||||||
$this->true = '.T.';
|
$this->true = '.T.';
|
||||||
$this->false = '.F.';
|
$this->false = '.F.';
|
||||||
$this->upperCase = 'upper';
|
|
||||||
break;
|
break;
|
||||||
case ODB_DRIVER_ORACLE:
|
case ODB_DRIVER_ORACLE:
|
||||||
$this->fmtDate = "'Y-m-d 00:00:00'";
|
$this->fmtDate = "'Y-m-d 00:00:00'";
|
||||||
|
@ -222,7 +220,6 @@ class ADODB_odbtp extends ADOConnection{
|
||||||
$this->rightOuter = '=*';
|
$this->rightOuter = '=*';
|
||||||
$this->hasInsertID = true;
|
$this->hasInsertID = true;
|
||||||
$this->hasTransactions = true;
|
$this->hasTransactions = true;
|
||||||
$this->upperCase = 'upper';
|
|
||||||
$this->identitySQL = 'select @@IDENTITY';
|
$this->identitySQL = 'select @@IDENTITY';
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -629,5 +626,3 @@ class ADORecordSet_odbtp extends ADORecordSet {
|
||||||
}
|
}
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence. See License.txt.
|
the BSD license will take precedence. See License.txt.
|
||||||
|
@ -60,4 +60,3 @@ class ADORecordSet_odbtp_unicode extends ADORecordSet_odbtp {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|
||||||
|
|
|
@ -1,15 +1,15 @@
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
|
||||||
Latest version is available at http://adodb.sourceforge.net
|
Latest version is available at http://adodb.sourceforge.net
|
||||||
|
|
||||||
Oracle data driver. Requires Oracle client. Works on Windows and Unix and Oracle 7 and 8.
|
Oracle data driver. Requires Oracle client. Works on Windows and Unix and Oracle 7.
|
||||||
|
|
||||||
If you are using Oracle 8, use the oci8 driver which is much better and more reliable.
|
If you are using Oracle 8 or later, use the oci8 driver which is much better and more reliable.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// security - hide paths
|
// security - hide paths
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim#natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim#natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
@ -390,14 +390,14 @@ select viewname,'V' from pg_views where viewname like $mask";
|
||||||
|
|
||||||
// for schema support, pass in the $table param "$schema.$tabname".
|
// for schema support, pass in the $table param "$schema.$tabname".
|
||||||
// converts field names to lowercase, $upper is ignored
|
// converts field names to lowercase, $upper is ignored
|
||||||
function &MetaColumns($table,$upper=true)
|
function &MetaColumns($table,$normalize=true)
|
||||||
{
|
{
|
||||||
global $ADODB_FETCH_MODE;
|
global $ADODB_FETCH_MODE;
|
||||||
|
|
||||||
$schema = false;
|
$schema = false;
|
||||||
$this->_findschema($table,$schema);
|
$this->_findschema($table,$schema);
|
||||||
|
|
||||||
$table = strtolower($table);
|
if ($normalize) $table = strtolower($table);
|
||||||
|
|
||||||
$save = $ADODB_FETCH_MODE;
|
$save = $ADODB_FETCH_MODE;
|
||||||
$ADODB_FETCH_MODE = ADODB_FETCH_NUM;
|
$ADODB_FETCH_MODE = ADODB_FETCH_NUM;
|
||||||
|
@ -486,7 +486,7 @@ select viewname,'V' from pg_views where viewname like $mask";
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($ADODB_FETCH_MODE == ADODB_FETCH_NUM) $retarr[] = $fld;
|
if ($ADODB_FETCH_MODE == ADODB_FETCH_NUM) $retarr[] = $fld;
|
||||||
else $retarr[($upper) ? strtoupper($fld->name) : $fld->name] = $fld;
|
else $retarr[($normalize) ? strtoupper($fld->name) : $fld->name] = $fld;
|
||||||
|
|
||||||
$rs->MoveNext();
|
$rs->MoveNext();
|
||||||
}
|
}
|
||||||
|
@ -803,7 +803,7 @@ class ADORecordSet_postgres64 extends ADORecordSet{
|
||||||
// cache types for blob decode check
|
// cache types for blob decode check
|
||||||
for ($i=0, $max = $this->_numOfFields; $i < $max; $i++) {
|
for ($i=0, $max = $this->_numOfFields; $i < $max; $i++) {
|
||||||
if (pg_fieldtype($qid,$i) == 'bytea') {
|
if (pg_fieldtype($qid,$i) == 'bytea') {
|
||||||
$this->_blobArr[$i] = pg_fieldname($qid,$off);
|
$this->_blobArr[$i] = pg_fieldname($qid,$i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -867,7 +867,7 @@ class ADORecordSet_postgres64 extends ADORecordSet{
|
||||||
if ($this->_numOfRows < 0 || $this->_numOfRows > $this->_currentRow) {
|
if ($this->_numOfRows < 0 || $this->_numOfRows > $this->_currentRow) {
|
||||||
$this->fields = @pg_fetch_array($this->_queryID,$this->_currentRow,$this->fetchMode);
|
$this->fields = @pg_fetch_array($this->_queryID,$this->_currentRow,$this->fetchMode);
|
||||||
if (is_array($this->fields) && $this->fields) {
|
if (is_array($this->fields) && $this->fields) {
|
||||||
if ($this->fields && isset($this->_blobArr)) $this->_fixblobs();
|
if (isset($this->_blobArr)) $this->_fixblobs();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim. All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim. All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
@ -155,7 +155,7 @@ class ADODB_sybase extends ADOConnection {
|
||||||
if ($offset > 0 && $cnt) $cnt += $offset;
|
if ($offset > 0 && $cnt) $cnt += $offset;
|
||||||
|
|
||||||
$this->Execute("set rowcount $cnt");
|
$this->Execute("set rowcount $cnt");
|
||||||
$rs =& ADOConnection::SelectLimit($sql,$nrows,$offset,$inputarr,$secs2cache);
|
$rs =& ADOConnection::SelectLimit($sql,$nrows,$offset,$inputarr,0);
|
||||||
$this->Execute("set rowcount 0");
|
$this->Execute("set rowcount 0");
|
||||||
|
|
||||||
return $rs;
|
return $rs;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
@ -27,7 +27,6 @@ class ADODB_vfp extends ADODB_odbc {
|
||||||
var $true = '.T.';
|
var $true = '.T.';
|
||||||
var $false = '.F.';
|
var $false = '.F.';
|
||||||
var $hasTop = 'top'; // support mssql SELECT TOP 10 * FROM TABLE
|
var $hasTop = 'top'; // support mssql SELECT TOP 10 * FROM TABLE
|
||||||
var $upperCase = 'upper';
|
|
||||||
var $_bindInputArray = false; // strangely enough, setting to true does not work reliably
|
var $_bindInputArray = false; // strangely enough, setting to true does not work reliably
|
||||||
var $sysTimeStamp = 'datetime()';
|
var $sysTimeStamp = 'datetime()';
|
||||||
var $sysDate = 'date()';
|
var $sysDate = 'date()';
|
||||||
|
@ -45,7 +44,6 @@ class ADODB_vfp extends ADODB_odbc {
|
||||||
return time();
|
return time();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function BeginTrans() { return false;}
|
function BeginTrans() { return false;}
|
||||||
|
|
||||||
// quote string to be sent back to database
|
// quote string to be sent back to database
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence. See License.txt.
|
the BSD license will take precedence. See License.txt.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence. See License.txt.
|
the BSD license will take precedence. See License.txt.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence. See License.txt.
|
the BSD license will take precedence. See License.txt.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence. See License.txt.
|
the BSD license will take precedence. See License.txt.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence. See License.txt.
|
the BSD license will take precedence. See License.txt.
|
||||||
|
@ -152,12 +152,10 @@ AND b.name = 'sorts (memory)'",
|
||||||
having count(*) > 100)",'These are sql statements that should be using bind variables'),*/
|
having count(*) > 100)",'These are sql statements that should be using bind variables'),*/
|
||||||
'index cache cost' => array('COST',
|
'index cache cost' => array('COST',
|
||||||
"select value from v\$parameter where name = 'optimizer_index_caching'",
|
"select value from v\$parameter where name = 'optimizer_index_caching'",
|
||||||
'% of indexed data blocks expected in the cache.
|
'=WarnIndexCost'),
|
||||||
Recommended is 20-80. Default is 0. See <a href=http://www.dba-oracle.com/oracle_tips_cbo_part1.htm>optimizer_index_caching</a>.'),
|
|
||||||
|
|
||||||
'random page cost' => array('COST',
|
'random page cost' => array('COST',
|
||||||
"select value from v\$parameter where name = 'optimizer_index_cost_adj'",
|
"select value from v\$parameter where name = 'optimizer_index_cost_adj'",
|
||||||
'Recommended is 10-50 for TP, and 50 for data warehouses. Default is 100. See <a href=http://www.dba-oracle.com/oracle_tips_cost_adj.htm>optimizer_index_cost_adj</a>. '),
|
'=WarnPageCost'),
|
||||||
|
|
||||||
false
|
false
|
||||||
|
|
||||||
|
@ -172,6 +170,23 @@ having count(*) > 100)",'These are sql statements that should be using bind vari
|
||||||
$this->conn =& $conn;
|
$this->conn =& $conn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function WarnPageCost($val)
|
||||||
|
{
|
||||||
|
if ($val == 100) $s = '<font color=red><b>Too High</b>. </font>';
|
||||||
|
else $s = '';
|
||||||
|
|
||||||
|
return $s.'Recommended is 20-50 for TP, and 50 for data warehouses. Default is 100. See <a href=http://www.dba-oracle.com/oracle_tips_cost_adj.htm>optimizer_index_cost_adj</a>. ';
|
||||||
|
}
|
||||||
|
|
||||||
|
function WarnIndexCost($val)
|
||||||
|
{
|
||||||
|
if ($val == 0) $s = '<font color=red><b>Too Low</b>. </font>';
|
||||||
|
else $s = '';
|
||||||
|
|
||||||
|
return $s.'Percentage of indexed data blocks expected in the cache.
|
||||||
|
Recommended is 20 (fast disk array) to 50 (slower hard disks). Default is 0.
|
||||||
|
See <a href=http://www.dba-oracle.com/oracle_tips_cbo_part1.htm>optimizer_index_caching</a>.';
|
||||||
|
}
|
||||||
|
|
||||||
function PGA()
|
function PGA()
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence. See License.txt.
|
the BSD license will take precedence. See License.txt.
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
// $CVSHeader$
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
V4.01 23 Oct 2003 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.01 23 Oct 2003 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Contributed by Ross Smith (adodb@netebb.com).
|
Contributed by Ross Smith (adodb@netebb.com).
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
// $CVSHeader$
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
V4.01 23 Oct 2003 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.01 23 Oct 2003 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
// $CVSHeader$
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
V4.01 23 Oct 2003 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.01 23 Oct 2003 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
// $CVSHeader$
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
V4.01 23 Oct 2003 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.01 23 Oct 2003 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
// $CVSHeader$
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
V4.01 23 Oct 2003 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.01 23 Oct 2003 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Contributed by Ross Smith (adodb@netebb.com).
|
Contributed by Ross Smith (adodb@netebb.com).
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
// $CVSHeader$
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
V4.01 23 Oct 2003 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.01 23 Oct 2003 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Contributed by Ross Smith (adodb@netebb.com).
|
Contributed by Ross Smith (adodb@netebb.com).
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
// $CVSHeader$
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
V4.01 23 Oct 2003 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.01 23 Oct 2003 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
// $CVSHeader$
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
V4.01 23 Oct 2003 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.01 23 Oct 2003 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
<body>
|
<body>
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
|
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
@ -18,11 +18,11 @@ include("$path/../adodb.inc.php");
|
||||||
echo "<h3>PHP ".PHP_VERSION."</h3>\n";
|
echo "<h3>PHP ".PHP_VERSION."</h3>\n";
|
||||||
try {
|
try {
|
||||||
|
|
||||||
$dbt = 'mysqli';
|
$dbt = 'oci8po';
|
||||||
|
|
||||||
switch($dbt) {
|
switch($dbt) {
|
||||||
case 'oci8':
|
case 'oci8po':
|
||||||
$db = NewADOConnection("oci8");
|
$db = NewADOConnection("oci8po");
|
||||||
$db->Connect('','scott','natsoft');
|
$db->Connect('','scott','natsoft');
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -32,23 +32,26 @@ case 'mysql':
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'mysqli':
|
case 'mysqli':
|
||||||
$db = NewADOConnection("mysqli");
|
$db = NewADOConnection("mysqli://root:@localhost/test");
|
||||||
$db->Connect('localhost','root','','test');
|
//$db->Connect('localhost','root','','test');
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
$db->debug=1;
|
$db->debug=1;
|
||||||
|
|
||||||
$cnt = $db->GetOne("select count(*) from adoxyz");
|
$cnt = $db->GetOne("select count(*) from adoxyz where ?<id and id<?",array(10,20));
|
||||||
$rs = $db->Execute("select * from adoxyz order by id");
|
$stmt = $db->Prepare("select * from adoxyz where ?<id and id<?");
|
||||||
|
if (!$stmt) echo $db->ErrorMsg(),"\n";
|
||||||
|
$rs = $db->Execute($stmt,array(10,20));
|
||||||
|
|
||||||
$i = 0;
|
$i = 0;
|
||||||
foreach($rs as $v) {
|
foreach($rs as $v) {
|
||||||
$i += 1;
|
$i += 1;
|
||||||
echo "$i: "; adodb_pr($v); adodb_pr($rs->fields);
|
echo "rec $i: "; adodb_pr($v); adodb_pr($rs->fields);
|
||||||
flush();
|
flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if ($i != $cnt) die("actual cnt is $i, cnt should be $cnt\n");
|
if ($i != $cnt) die("actual cnt is $i, cnt should be $cnt\n");
|
||||||
|
|
||||||
|
|
||||||
|
@ -60,4 +63,6 @@ $rs = $db->Execute("select bad from badder");
|
||||||
$e = adodb_backtrace($e->gettrace());
|
$e = adodb_backtrace($e->gettrace());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$rs = $db->Execute("select distinct id, firstname,lastname from adoxyz order by id");
|
||||||
|
echo "Result=\n",$rs;
|
||||||
?>
|
?>
|
|
@ -18,10 +18,10 @@ $schema = new adoSchema( $db );
|
||||||
// uncomment the following line:
|
// uncomment the following line:
|
||||||
#$schema->upgradeSchema();
|
#$schema->upgradeSchema();
|
||||||
|
|
||||||
|
print "<b>SQL to build xmlschema.xml</b>:\n<pre>";
|
||||||
// Build the SQL array
|
// Build the SQL array
|
||||||
$sql = $schema->ParseSchema( "xmlschema.xml" );
|
$sql = $schema->ParseSchema( "xmlschema.xml" );
|
||||||
|
|
||||||
print "Here's the SQL to do the build:\n<pre>";
|
|
||||||
print_r( $sql );
|
print_r( $sql );
|
||||||
print "</pre>\n";
|
print "</pre>\n";
|
||||||
|
|
||||||
|
@ -38,10 +38,12 @@ $db2->Connect('localhost','sa','natsoft','northwind') || die("Fail 2");
|
||||||
|
|
||||||
$db2->Execute("drop table simple_table");
|
$db2->Execute("drop table simple_table");
|
||||||
|
|
||||||
|
|
||||||
|
print "<b>SQL to build xmlschema-mssql.xml</b>:\n<pre>";
|
||||||
|
|
||||||
$schema = new adoSchema( $db2 );
|
$schema = new adoSchema( $db2 );
|
||||||
$sql = $schema->ParseSchema( "xmlschema-mssql.xml" );
|
$sql = $schema->ParseSchema( "xmlschema-mssql.xml" );
|
||||||
|
|
||||||
print "Here's the SQL to do the build:\n<pre>";
|
|
||||||
print_r( $sql );
|
print_r( $sql );
|
||||||
print "</pre>\n";
|
print "</pre>\n";
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
@ -138,7 +138,7 @@ FROM `nuke_stories` `t1`, `nuke_authors` `t2`, `nuke_stories_cat` `t3`, `nuke_to
|
||||||
print "<br><i>ts4</i> =".($db->UnixTimeStamp("19700101000101")+8*3600);
|
print "<br><i>ts4</i> =".($db->UnixTimeStamp("19700101000101")+8*3600);
|
||||||
print "<br><i>ts5</i> =".$db->DBTimeStamp($db->UnixTimeStamp("20040110092123"));
|
print "<br><i>ts5</i> =".$db->DBTimeStamp($db->UnixTimeStamp("20040110092123"));
|
||||||
print "<br><i>ts6</i> =".$db->UserTimeStamp("20040110092123");
|
print "<br><i>ts6</i> =".$db->UserTimeStamp("20040110092123");
|
||||||
print "<br><i>ts6</i> =".$db->DBTimeStamp("20040110092123");
|
print "<br><i>ts7</i> =".$db->DBTimeStamp("20040110092123");
|
||||||
flush();
|
flush();
|
||||||
// mssql too slow in failing bad connection
|
// mssql too slow in failing bad connection
|
||||||
if (false && $db->databaseType != 'mssql') {
|
if (false && $db->databaseType != 'mssql') {
|
||||||
|
@ -410,6 +410,43 @@ GO
|
||||||
$saved = $db->debug;
|
$saved = $db->debug;
|
||||||
$db->debug=true;
|
$db->debug=true;
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
CREATE TABLE PHOTOS
|
||||||
|
(
|
||||||
|
ID NUMBER(16),
|
||||||
|
PHOTO BLOB,
|
||||||
|
DESCRIPTION VARCHAR2(4000 BYTE),
|
||||||
|
DESCCLOB CLOB
|
||||||
|
);
|
||||||
|
|
||||||
|
INSERT INTO PHOTOS (ID) VALUES(1);
|
||||||
|
*/
|
||||||
|
$s = '';
|
||||||
|
for ($i = 0; $i <= 500; $i++) {
|
||||||
|
$s .= '1234567890';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
print "<h4>Testing Blob: size=".strlen($s)."</h4>";
|
||||||
|
$ok = $db->Updateblob('photos','photo',$s,'id=1');
|
||||||
|
if (!$ok) Err("Blob failed 1");
|
||||||
|
else {
|
||||||
|
$s2= $db->GetOne("select photo from photos where id=1");
|
||||||
|
if ($s !== $s2) Err("updateblob does not match");
|
||||||
|
}
|
||||||
|
|
||||||
|
print "<h4>Testing Clob: size=".strlen($s)."</h4>";
|
||||||
|
$ok = $db->UpdateClob('photos','descclob',$s,'id=1');
|
||||||
|
if (!$ok) Err("Clob failed 1");
|
||||||
|
else {
|
||||||
|
$s2= $db->GetOne("select descclob from photos where id=1");
|
||||||
|
if ($s !== $s2) Err("updateclob does not match");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$s = '';
|
||||||
|
$s2 = '';
|
||||||
print "<h4>Testing Foreign Keys</h4>";
|
print "<h4>Testing Foreign Keys</h4>";
|
||||||
$arr = $db->MetaForeignKeys('emp');
|
$arr = $db->MetaForeignKeys('emp');
|
||||||
print_r($arr);
|
print_r($arr);
|
||||||
|
@ -417,30 +454,50 @@ GO
|
||||||
print "<h4>Testing Cursor Variables</h4>";
|
print "<h4>Testing Cursor Variables</h4>";
|
||||||
/*
|
/*
|
||||||
-- TEST PACKAGE
|
-- TEST PACKAGE
|
||||||
CREATE OR REPLACE PACKAGE adodb AS
|
|
||||||
TYPE TabType IS REF CURSOR RETURN tab%ROWTYPE;
|
CREATE OR REPLACE PACKAGE Adodb AS
|
||||||
PROCEDURE open_tab (tabcursor IN OUT TabType,tablenames in varchar);
|
TYPE TabType IS REF CURSOR RETURN TAB%ROWTYPE;
|
||||||
PROCEDURE data_out(input IN varchar, output OUT varchar);
|
PROCEDURE open_tab (tabcursor IN OUT TabType,tablenames IN VARCHAR);
|
||||||
END adodb;
|
PROCEDURE open_tab2 (tabcursor IN OUT TabType,tablenames IN OUT VARCHAR) ;
|
||||||
|
PROCEDURE data_out(input IN VARCHAR, output OUT VARCHAR);
|
||||||
|
|
||||||
|
PROCEDURE myproc (p1 IN NUMBER, p2 OUT NUMBER);
|
||||||
|
END Adodb;
|
||||||
/
|
/
|
||||||
|
|
||||||
CREATE OR REPLACE PACKAGE BODY adodb AS
|
|
||||||
PROCEDURE open_tab (tabcursor IN OUT TabType,tablenames in varchar) IS
|
CREATE OR REPLACE PACKAGE BODY Adodb AS
|
||||||
|
PROCEDURE open_tab (tabcursor IN OUT TabType,tablenames IN VARCHAR) IS
|
||||||
BEGIN
|
BEGIN
|
||||||
OPEN tabcursor FOR SELECT * FROM tab where tname like tablenames;
|
OPEN tabcursor FOR SELECT * FROM TAB WHERE tname LIKE tablenames;
|
||||||
END open_tab;
|
END open_tab;
|
||||||
|
|
||||||
PROCEDURE data_out(input IN varchar, output OUT varchar) IS
|
PROCEDURE open_tab2 (tabcursor IN OUT TabType,tablenames IN OUT VARCHAR) IS
|
||||||
|
BEGIN
|
||||||
|
OPEN tabcursor FOR SELECT * FROM TAB WHERE tname LIKE tablenames;
|
||||||
|
tablenames := 'TEST';
|
||||||
|
END open_tab2;
|
||||||
|
|
||||||
|
PROCEDURE data_out(input IN VARCHAR, output OUT VARCHAR) IS
|
||||||
BEGIN
|
BEGIN
|
||||||
output := 'Cinta Hati '||input;
|
output := 'Cinta Hati '||input;
|
||||||
END;
|
END;
|
||||||
END adodb;
|
|
||||||
|
PROCEDURE myproc (p1 IN NUMBER, p2 OUT NUMBER) AS
|
||||||
|
BEGIN
|
||||||
|
p2 := p1;
|
||||||
|
END;
|
||||||
|
END Adodb;
|
||||||
/
|
/
|
||||||
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
$rs = $db->ExecuteCursor("BEGIN adodb.open_tab(:RS,'A%'); END;");
|
$rs = $db->ExecuteCursor("BEGIN adodb.open_tab(:zz,'A%'); END;",'zz');
|
||||||
|
|
||||||
if ($rs && !$rs->EOF) {
|
if ($rs && !$rs->EOF) {
|
||||||
print "Test 1 RowCount: ".$rs->RecordCount()."<p>";
|
$v = $db->GetOne("SELECT count(*) FROM tab where tname like 'A%'");
|
||||||
|
if ($v == $rs->RecordCount()) print "Test 1 RowCount: OK<p>";
|
||||||
|
else Err("Test 1 RowCount ".$rs->RecordCount().", actual = $v");
|
||||||
} else {
|
} else {
|
||||||
print "<b>Error in using Cursor Variables 1</b><p>";
|
print "<b>Error in using Cursor Variables 1</b><p>";
|
||||||
}
|
}
|
||||||
|
@ -488,6 +545,7 @@ END adodb;
|
||||||
$db->CompleteTrans();
|
$db->CompleteTrans();
|
||||||
$rs = $db->Execute('select * from ADOXYZ order by id');
|
$rs = $db->Execute('select * from ADOXYZ order by id');
|
||||||
if ($rs->RecordCount() != 3) Err("Bad bulk insert");
|
if ($rs->RecordCount() != 3) Err("Bad bulk insert");
|
||||||
|
|
||||||
rs2html($rs);
|
rs2html($rs);
|
||||||
|
|
||||||
$db->Execute('delete from ADOXYZ');
|
$db->Execute('delete from ADOXYZ');
|
||||||
|
@ -749,6 +807,18 @@ END adodb;
|
||||||
$db->debug = true;
|
$db->debug = true;
|
||||||
print "<p>SelectLimit Distinct Test 1: Should see Caroline, John and Mary</p>";
|
print "<p>SelectLimit Distinct Test 1: Should see Caroline, John and Mary</p>";
|
||||||
$rs = &$db->SelectLimit('select distinct * from ADOXYZ order by id',3);
|
$rs = &$db->SelectLimit('select distinct * from ADOXYZ order by id',3);
|
||||||
|
|
||||||
|
echo "<p>Date Update Test</p>";
|
||||||
|
$zdate = date('Y-m-d',time()+3600*24);
|
||||||
|
$zdate = $db->DBDate($zdate);
|
||||||
|
$db->Execute("update ADOXYZ set created=$zdate where id=1");
|
||||||
|
$row = $db->GetRow("select created,firstname from ADOXYZ where id=1");
|
||||||
|
print_r($row); echo "<br>";
|
||||||
|
|
||||||
|
//$zdate = date('Y-m-d',time()+3600*24);
|
||||||
|
//$db->Execute("update ADOXYZ set created=? where id=2",$zdate);
|
||||||
|
//$zdate = $db->GetOne("select created from ADOXYZ where id=2");
|
||||||
|
//echo "tomorrow=",$zdate,"<br>";
|
||||||
$db->debug=false;
|
$db->debug=false;
|
||||||
|
|
||||||
if ($rs && !$rs->EOF) {
|
if ($rs && !$rs->EOF) {
|
||||||
|
@ -854,10 +924,10 @@ END adodb;
|
||||||
$save = $ADODB_FETCH_MODE;
|
$save = $ADODB_FETCH_MODE;
|
||||||
$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
|
$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
|
||||||
if ($db->dataProvider == 'postgres') {
|
if ($db->dataProvider == 'postgres') {
|
||||||
$sql = "select ".$db->Concat('cast(firstname as varchar)',$db->qstr(' '),'lastname')." as fullname,id from ADOXYZ";
|
$sql = "select ".$db->Concat('cast(firstname as varchar)',$db->qstr(' '),'lastname')." as fullname,id,".$db->sysTimeStamp." as d from ADOXYZ";
|
||||||
$rs = &$db->Execute($sql);
|
$rs = &$db->Execute($sql);
|
||||||
} else {
|
} else {
|
||||||
$sql = "select distinct ".$db->Concat('firstname',$db->qstr(' '),'lastname')." as fullname,id from ADOXYZ";
|
$sql = "select distinct ".$db->Concat('firstname',$db->qstr(' '),'lastname')." as fullname,id,".$db->sysTimeStamp." as d from ADOXYZ";
|
||||||
$rs = &$db->Execute($sql);
|
$rs = &$db->Execute($sql);
|
||||||
}
|
}
|
||||||
if ($rs) {
|
if ($rs) {
|
||||||
|
@ -904,12 +974,12 @@ END adodb;
|
||||||
//$arr = $db->GetArray("select lastname,firstname from ADOXYZ");
|
//$arr = $db->GetArray("select lastname,firstname from ADOXYZ");
|
||||||
//print_r($arr);
|
//print_r($arr);
|
||||||
print "<hr>";
|
print "<hr>";
|
||||||
$rs =& $db->Execute("select distinct lastname,firstname from ADOXYZ");
|
$rs =& $db->Execute("select distinct lastname,firstname,created from ADOXYZ");
|
||||||
|
|
||||||
if ($rs) {
|
if ($rs) {
|
||||||
$arr = $rs->GetAssoc();
|
$arr = $rs->GetAssoc();
|
||||||
//print_r($arr);
|
//print_r($arr);
|
||||||
if (empty($arr['See']) || trim($arr['See']) != 'Wai Hun') print $arr['See']." <b>ERROR</b><br>";
|
if (empty($arr['See']) || trim(reset($arr['See'])) != 'Wai Hun') print $arr['See']." <b>ERROR</b><br>";
|
||||||
else print " OK 1";
|
else print " OK 1";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1433,7 +1503,7 @@ if (isset($_SERVER['argv'][1])) {
|
||||||
$HTTP_GET_VARS[$_SERVER['argv'][1]] = 1;
|
$HTTP_GET_VARS[$_SERVER['argv'][1]] = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( @$HTTP_SERVER_VARS['COMPUTERNAME'] == 'TIGRESS') {
|
if (@$HTTP_SERVER_VARS['COMPUTERNAME'] == 'TIGRESS') {
|
||||||
CheckWS('mysqlt');
|
CheckWS('mysqlt');
|
||||||
CheckWS('postgres');
|
CheckWS('postgres');
|
||||||
CheckWS('oci8po');
|
CheckWS('oci8po');
|
||||||
|
@ -1478,7 +1548,7 @@ if (strpos(PHP_VERSION,'5') === 0) {
|
||||||
|
|
||||||
This script tests the following databases: Interbase, Oracle, Visual FoxPro, Microsoft Access (ODBC and ADO), MySQL, MSSQL (ODBC, native, ADO).
|
This script tests the following databases: Interbase, Oracle, Visual FoxPro, Microsoft Access (ODBC and ADO), MySQL, MSSQL (ODBC, native, ADO).
|
||||||
There is also support for Sybase, PostgreSQL.</p>
|
There is also support for Sybase, PostgreSQL.</p>
|
||||||
For the latest version of ADODB, visit <a href=http://php.weblogs.com/ADODB>php.weblogs.com</a>.</p>
|
For the latest version of ADODB, visit <a href=http://adodb.sourceforge.net/>adodb.sourceforge.net</a>.</p>
|
||||||
|
|
||||||
Test <a href=test4.php>GetInsertSQL/GetUpdateSQL</a>
|
Test <a href=test4.php>GetInsertSQL/GetUpdateSQL</a>
|
||||||
<a href=testsessions.php>Sessions</a>
|
<a href=testsessions.php>Sessions</a>
|
||||||
|
@ -1489,8 +1559,9 @@ include('./testdatabases.inc.php');
|
||||||
|
|
||||||
echo "<br>vers=",ADOConnection::Version();
|
echo "<br>vers=",ADOConnection::Version();
|
||||||
|
|
||||||
|
|
||||||
include_once('../adodb-time.inc.php');
|
include_once('../adodb-time.inc.php');
|
||||||
adodb_date_test();
|
if (!isset($_GET['nd'])) adodb_date_test();
|
||||||
?>
|
?>
|
||||||
<p><i>ADODB Database Library (c) 2000-2004 John Lim. All rights reserved. Released under BSD and LGPL.</i></p>
|
<p><i>ADODB Database Library (c) 2000-2004 John Lim. All rights reserved. Released under BSD and LGPL.</i></p>
|
||||||
</body>
|
</body>
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
<body>
|
<body>
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
|
|
@ -63,7 +63,7 @@ if ($insertSQL != $insertSQL2) echo "<p><b>Walt's new stuff failed</b>: $insertS
|
||||||
|
|
||||||
$sql = "
|
$sql = "
|
||||||
SELECT *
|
SELECT *
|
||||||
FROM ADOXYZ WHERE lastname=".$conn->qstr($record['lastname']);
|
FROM ADOXYZ WHERE lastname=".$conn->qstr($record['lastname']). " ORDER BY 1";
|
||||||
// Select a record to update
|
// Select a record to update
|
||||||
|
|
||||||
$rs = $conn->Execute($sql); // Execute the query and get the existing record to update
|
$rs = $conn->Execute($sql); // Execute the query and get the existing record to update
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<body>
|
<body>
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
@ -57,7 +57,7 @@ if (!empty($testpostgres)) {
|
||||||
|
|
||||||
$db = &ADONewConnection('postgres');
|
$db = &ADONewConnection('postgres');
|
||||||
print "<h1>Connecting $db->databaseType...</h1>";
|
print "<h1>Connecting $db->databaseType...</h1>";
|
||||||
if (@$db->Connect("localhost","tester","test","test")) {
|
if ($db->Connect("localhost","tester","test","test")) {
|
||||||
testdb($db,"create table ADOXYZ (id integer, firstname char(24), lastname varchar,created date)");
|
testdb($db,"create table ADOXYZ (id integer, firstname char(24), lastname varchar,created date)");
|
||||||
}else
|
}else
|
||||||
print "ERROR: PostgreSQL requires a database called test on server, user tester, password test.<BR>".$db->ErrorMsg();
|
print "ERROR: PostgreSQL requires a database called test on server, user tester, password test.<BR>".$db->ErrorMsg();
|
||||||
|
@ -80,7 +80,7 @@ if (!empty($testibase)) {
|
||||||
//$_GET['nolog'] = true;
|
//$_GET['nolog'] = true;
|
||||||
$db = &ADONewConnection('firebird');
|
$db = &ADONewConnection('firebird');
|
||||||
print "<h1>Connecting $db->databaseType...</h1>";
|
print "<h1>Connecting $db->databaseType...</h1>";
|
||||||
if (@$db->PConnect("localhost:d:\\firebird\\10\\examples\\employee.gdb", "sysdba", "masterkey", ""))
|
if ($db->PConnect("localhost:d:\\firebird\\10\\examples\\employee.gdb", "sysdba", "masterkey", ""))
|
||||||
testdb($db,"create table ADOXYZ (id integer, firstname char(24), lastname char(24),price numeric(12,2),created date)");
|
testdb($db,"create table ADOXYZ (id integer, firstname char(24), lastname char(24),price numeric(12,2),created date)");
|
||||||
else print "ERROR: Interbase test requires a database called employee.gdb".'<BR>'.$db->ErrorMsg();
|
else print "ERROR: Interbase test requires a database called employee.gdb".'<BR>'.$db->ErrorMsg();
|
||||||
|
|
||||||
|
@ -91,7 +91,7 @@ if (!empty($testsqlite)) {
|
||||||
$db = &ADONewConnection('sqlite');
|
$db = &ADONewConnection('sqlite');
|
||||||
print "<h1>Connecting $db->databaseType...</h1>";
|
print "<h1>Connecting $db->databaseType...</h1>";
|
||||||
|
|
||||||
if (@$db->PConnect("d:\\inetpub\\adodb\\sqlite.db", "", "", ""))
|
if ($db->PConnect("d:\\inetpub\\adodb\\sqlite.db", "", "", ""))
|
||||||
testdb($db,"create table ADOXYZ (id int, firstname char(24), lastname char(24),created datetime)");
|
testdb($db,"create table ADOXYZ (id int, firstname char(24), lastname char(24),created datetime)");
|
||||||
else print "ERROR: SQLite";
|
else print "ERROR: SQLite";
|
||||||
|
|
||||||
|
@ -101,10 +101,12 @@ if (!empty($testsqlite)) {
|
||||||
if (!empty($testaccess)) {
|
if (!empty($testaccess)) {
|
||||||
$db = &ADONewConnection('access');
|
$db = &ADONewConnection('access');
|
||||||
print "<h1>Connecting $db->databaseType...</h1>";
|
print "<h1>Connecting $db->databaseType...</h1>";
|
||||||
|
$access = 'd:\inetpub\wwwroot\php\NWIND.MDB';
|
||||||
$dsn = "nwind";
|
$dsn = "nwind";
|
||||||
$driver = "Driver={Microsoft Access Driver (*.mdb)};Dbq=d:\inetpub\adodb\northwind.mdb;Uid=Admin;Pwd=;";
|
$dsn = "Driver={Microsoft Access Driver (*.mdb)};Dbq=$access;Uid=Admin;Pwd=;";
|
||||||
if (@$db->PConnect($dsn, "", "", ""))
|
|
||||||
|
//$dsn = 'Provider=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=' . $access . ';';
|
||||||
|
if ($db->PConnect($dsn, "", "", ""))
|
||||||
testdb($db,"create table ADOXYZ (id int, firstname char(24), lastname char(24),created datetime)");
|
testdb($db,"create table ADOXYZ (id int, firstname char(24), lastname char(24),created datetime)");
|
||||||
else print "ERROR: Access test requires a Windows ODBC DSN=nwind, Access driver";
|
else print "ERROR: Access test requires a Windows ODBC DSN=nwind, Access driver";
|
||||||
|
|
||||||
|
@ -120,7 +122,7 @@ if (!empty($testaccess) && !empty($testado)) { // ADO ACCESS
|
||||||
. 'DATA SOURCE=' . $access . ';';
|
. 'DATA SOURCE=' . $access . ';';
|
||||||
//. 'USER ID=;PASSWORD=;';
|
//. 'USER ID=;PASSWORD=;';
|
||||||
|
|
||||||
if (@$db->PConnect($myDSN, "", "", "")) {
|
if ($db->PConnect($myDSN, "", "", "")) {
|
||||||
print "ADO version=".$db->_connectionID->version."<br>";
|
print "ADO version=".$db->_connectionID->version."<br>";
|
||||||
testdb($db,"create table ADOXYZ (id int, firstname char(24), lastname char(24),created datetime)");
|
testdb($db,"create table ADOXYZ (id int, firstname char(24), lastname char(24),created datetime)");
|
||||||
} else print "ERROR: Access test requires a Access database $access".'<BR>'.$db->ErrorMsg();
|
} else print "ERROR: Access test requires a Access database $access".'<BR>'.$db->ErrorMsg();
|
||||||
|
@ -141,11 +143,14 @@ if (!empty($testvfp)) { // ODBC
|
||||||
// REQUIRES MySQL server at localhost with database 'test'
|
// REQUIRES MySQL server at localhost with database 'test'
|
||||||
if (!empty($testmysql)) { // MYSQL
|
if (!empty($testmysql)) { // MYSQL
|
||||||
|
|
||||||
$db = &ADONewConnection('mysql');
|
|
||||||
print "<h1>Connecting $db->databaseType...</h1>";
|
|
||||||
if (PHP_VERSION >= 5 || $HTTP_SERVER_VARS['HTTP_HOST'] == 'localhost') $server = 'localhost';
|
if (PHP_VERSION >= 5 || $HTTP_SERVER_VARS['HTTP_HOST'] == 'localhost') $server = 'localhost';
|
||||||
else $server = "mangrove";
|
else $server = "mangrove";
|
||||||
if ($db->PConnect($server, "root", "", "northwind")) {
|
$user = 'root'; $password = ''; $database = 'northwind';
|
||||||
|
$db = &ADONewConnection("mysql://$user:$password@$server/$database?persist");
|
||||||
|
print "<h1>Connecting $db->databaseType...</h1>";
|
||||||
|
|
||||||
|
if (true || $db->PConnect($server, "root", "", "northwind")) {
|
||||||
//$db->debug=1;$db->Execute('drop table ADOXYZ');
|
//$db->debug=1;$db->Execute('drop table ADOXYZ');
|
||||||
testdb($db,
|
testdb($db,
|
||||||
"create table ADOXYZ (id int, firstname char(24), lastname char(24), created date)");
|
"create table ADOXYZ (id int, firstname char(24), lastname char(24), created date)");
|
||||||
|
@ -196,11 +201,10 @@ if (!empty($testproxy)){
|
||||||
ADOLoadCode('oci805');
|
ADOLoadCode('oci805');
|
||||||
ADOLoadCode("oci8po");
|
ADOLoadCode("oci8po");
|
||||||
if (!empty($testoracle)) {
|
if (!empty($testoracle)) {
|
||||||
|
$dsn = "oci8po://scott:natsoft@panther?persist";
|
||||||
$db = ADONewConnection('oci8po');
|
$db = ADONewConnection($dsn);
|
||||||
print "<h1>Connecting $db->databaseType...</h1>";
|
print "<h1>Connecting $db->databaseType...</h1>";
|
||||||
if ($db->Connect('', "scott", "natsoft",''))
|
if (true || $db->Connect('', "scott", "natsoft",''))
|
||||||
//if ($db->PConnect("", "scott", "tiger", "juris.ecosystem.natsoft.com.my"))
|
|
||||||
testdb($db,"create table ADOXYZ (id int, firstname varchar(24), lastname varchar(24),created date)");
|
testdb($db,"create table ADOXYZ (id int, firstname varchar(24), lastname varchar(24),created date)");
|
||||||
else print "ERROR: Oracle test requires an Oracle server setup with scott/natsoft".'<BR>'.$db->ErrorMsg();
|
else print "ERROR: Oracle test requires an Oracle server setup with scott/natsoft".'<BR>'.$db->ErrorMsg();
|
||||||
|
|
||||||
|
@ -234,10 +238,9 @@ if (!empty($testmssql)) { // MS SQL Server via ODBC
|
||||||
|
|
||||||
print "<h1>Connecting $db->databaseType...</h1>";
|
print "<h1>Connecting $db->databaseType...</h1>";
|
||||||
|
|
||||||
$dsn = "mssql-northwind";
|
$dsn = "PROVIDER=MSDASQL;Driver={SQL Server};Server=localhost;Database=northwind;";
|
||||||
$dsn = "Driver={SQL Server};Server=localhost;Database=northwind;";
|
|
||||||
|
|
||||||
if (@$db->PConnect($dsn, "adodb", "natsoft", "")) {
|
if ($db->PConnect($dsn, "adodb", "natsoft", "")) {
|
||||||
testdb($db,"create table ADOXYZ (id int, firstname char(24) null, lastname char(24) null,created datetime null)");
|
testdb($db,"create table ADOXYZ (id int, firstname char(24) null, lastname char(24) null,created datetime null)");
|
||||||
}
|
}
|
||||||
else print "ERROR: MSSQL test 1 requires a MS SQL 7 server setup with DSN setup";
|
else print "ERROR: MSSQL test 1 requires a MS SQL 7 server setup with DSN setup";
|
||||||
|
@ -256,7 +259,7 @@ if (!empty($testmssql) && !empty($testado) ) { // ADO ACCESS MSSQL -- thru ODBC
|
||||||
. "SERVER=tigress;DATABASE=NorthWind;UID=adodb;PWD=natsoft;Trusted_Connection=No" ;
|
. "SERVER=tigress;DATABASE=NorthWind;UID=adodb;PWD=natsoft;Trusted_Connection=No" ;
|
||||||
|
|
||||||
|
|
||||||
if (@$db->PConnect($myDSN, "", "", ""))
|
if ($db->PConnect($myDSN, "", "", ""))
|
||||||
testdb($db,"create table ADOXYZ (id int, firstname char(24) null, lastname char(24) null,created datetime null)");
|
testdb($db,"create table ADOXYZ (id int, firstname char(24) null, lastname char(24) null,created datetime null)");
|
||||||
else print "ERROR: MSSQL test 2 requires MS SQL 7";
|
else print "ERROR: MSSQL test 2 requires MS SQL 7";
|
||||||
|
|
||||||
|
@ -270,11 +273,8 @@ if (!empty($testmssql)) { // MS SQL Server -- the extension is buggy -- probably
|
||||||
print "<h1>Connecting $db->databaseType...</h1>";
|
print "<h1>Connecting $db->databaseType...</h1>";
|
||||||
|
|
||||||
$ok = $db->PConnect('tigress','adodb','natsoft','northwind');
|
$ok = $db->PConnect('tigress','adodb','natsoft','northwind');
|
||||||
//$rs = $db->Execute("exec sp_ddate");
|
|
||||||
//print_r($rs->fields);
|
|
||||||
//die();
|
|
||||||
|
|
||||||
if ($ok or @$db->PConnect("mangrove", "sa", "natsoft", "ai")) {
|
if ($ok or $db->PConnect("mangrove", "sa", "natsoft", "ai")) {
|
||||||
AutoDetect_MSSQL_Date_Order($db);
|
AutoDetect_MSSQL_Date_Order($db);
|
||||||
// $db->Execute('drop table adoxyz');
|
// $db->Execute('drop table adoxyz');
|
||||||
testdb($db,"create table ADOXYZ (id int, firstname char(24) null, lastname char(24) null,created datetime null)");
|
testdb($db,"create table ADOXYZ (id int, firstname char(24) null, lastname char(24) null,created datetime null)");
|
||||||
|
@ -288,7 +288,6 @@ if (!empty($testmssql) && !empty($testado)) { // ADO ACCESS MSSQL with OLEDB pro
|
||||||
print "<h1>Connecting DSN-less OLEDB Provider $db->databaseType...</h1>";
|
print "<h1>Connecting DSN-less OLEDB Provider $db->databaseType...</h1>";
|
||||||
//$db->debug=1;
|
//$db->debug=1;
|
||||||
$myDSN="SERVER=tigress;DATABASE=northwind;Trusted_Connection=yes";
|
$myDSN="SERVER=tigress;DATABASE=northwind;Trusted_Connection=yes";
|
||||||
//$myDSN='SERVER=(local)\NetSDK;DATABASE=northwind;';
|
|
||||||
if ($db->PConnect($myDSN, "adodb", "natsoft", 'SQLOLEDB'))
|
if ($db->PConnect($myDSN, "adodb", "natsoft", 'SQLOLEDB'))
|
||||||
testdb($db,"create table ADOXYZ (id int, firstname char(24), lastname char(24),created datetime)");
|
testdb($db,"create table ADOXYZ (id int, firstname char(24), lastname char(24),created datetime)");
|
||||||
else print "ERROR: MSSQL test 2 requires a MS SQL 7 on a server='mangrove', userid='sa', password='', database='ai'";
|
else print "ERROR: MSSQL test 2 requires a MS SQL 7 on a server='mangrove', userid='sa', password='', database='ai'";
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<body>
|
<body>
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
@ -14,7 +14,7 @@ error_reporting(63);
|
||||||
include("../adodb.inc.php");
|
include("../adodb.inc.php");
|
||||||
include("../tohtml.inc.php");
|
include("../tohtml.inc.php");
|
||||||
|
|
||||||
if (1) {
|
if (0) {
|
||||||
$db = ADONewConnection('oci8po');
|
$db = ADONewConnection('oci8po');
|
||||||
|
|
||||||
$db->PConnect('','scott','natsoft');
|
$db->PConnect('','scott','natsoft');
|
||||||
|
@ -44,7 +44,7 @@ if (1) {
|
||||||
}
|
}
|
||||||
if (1) {
|
if (1) {
|
||||||
$db = ADONewConnection('oci8');
|
$db = ADONewConnection('oci8');
|
||||||
$db->PConnect('','scott','tiger');
|
$db->PConnect('','scott','natsoft');
|
||||||
$db->debug = true;
|
$db->debug = true;
|
||||||
$db->Execute("delete from emp where ename='John'");
|
$db->Execute("delete from emp where ename='John'");
|
||||||
print $db->Affected_Rows().'<BR>';
|
print $db->Affected_Rows().'<BR>';
|
||||||
|
@ -53,6 +53,20 @@ if (1) {
|
||||||
// prepare not quite ready for prime time
|
// prepare not quite ready for prime time
|
||||||
//$rs = $db->Execute($stmt,array('empno'=>3775,'ename'=>'John'));
|
//$rs = $db->Execute($stmt,array('empno'=>3775,'ename'=>'John'));
|
||||||
if (!$rs) die("Empty RS");
|
if (!$rs) die("Empty RS");
|
||||||
|
|
||||||
|
$db->setfetchmode(ADODB_FETCH_NUM);
|
||||||
|
|
||||||
|
$vv = 'A%';
|
||||||
|
$stmt = $db->PrepareSP("BEGIN adodb.open_tab2(:rs,:tt); END;",true);
|
||||||
|
$db->OutParameter($stmt, $cur, 'rs', -1, OCI_B_CURSOR);
|
||||||
|
$db->OutParameter($stmt, $vv, 'tt');
|
||||||
|
$rs = $db->Execute($stmt);
|
||||||
|
while (!$rs->EOF) {
|
||||||
|
adodb_pr($rs->fields);
|
||||||
|
$rs->MoveNext();
|
||||||
|
}
|
||||||
|
echo " val = $vv";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (0) {
|
if (0) {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
@ -19,12 +19,19 @@ function NotifyExpire($ref,$key)
|
||||||
|
|
||||||
|
|
||||||
#### CONNECTION
|
#### CONNECTION
|
||||||
|
if (1) {
|
||||||
$ADODB_SESSION_DRIVER='oci8';
|
$ADODB_SESSION_DRIVER='oci8';
|
||||||
$ADODB_SESSION_CONNECT='';
|
$ADODB_SESSION_CONNECT='';
|
||||||
$ADODB_SESSION_USER ='scott';
|
$ADODB_SESSION_USER ='scott';
|
||||||
$ADODB_SESSION_PWD ='natsoft';
|
$ADODB_SESSION_PWD ='natsoft';
|
||||||
$ADODB_SESSION_DB ='';
|
$ADODB_SESSION_DB ='';
|
||||||
|
} else {
|
||||||
|
$ADODB_SESSION_DRIVER='mysql';
|
||||||
|
$ADODB_SESSION_CONNECT='localhost';
|
||||||
|
$ADODB_SESSION_USER ='root';
|
||||||
|
$ADODB_SESSION_PWD ='';
|
||||||
|
$ADODB_SESSION_DB ='xphplens_2';
|
||||||
|
}
|
||||||
|
|
||||||
### TURN DEBUGGING ON
|
### TURN DEBUGGING ON
|
||||||
$ADODB_SESS_DEBUG = true;
|
$ADODB_SESS_DEBUG = true;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
V4.50 6 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
V4.51 29 July 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
|
|
@ -2,8 +2,11 @@
|
||||||
<!DOCTYPE adodb_schema [
|
<!DOCTYPE adodb_schema [
|
||||||
<!ELEMENT schema (table*, sql*)>
|
<!ELEMENT schema (table*, sql*)>
|
||||||
<!ATTLIST schema version CDATA #REQUIRED>
|
<!ATTLIST schema version CDATA #REQUIRED>
|
||||||
<!ELEMENT table ((field+|DROP), constraint*, descr?, index*)>
|
<!ELEMENT table ((field+|DROP), constraint*, descr?, index*, data*)>
|
||||||
<!ELEMENT field ((NOTNULL|KEY|PRIMARY)?, (AUTO|AUTOINCREMENT)?, (DEFAULT|DEFDATE|DEFTIMESTAMP)?, NOQUOTE, constraint, descr?)>
|
<!ELEMENT field ((NOTNULL|KEY|PRIMARY)?, (AUTO|AUTOINCREMENT)?, (DEFAULT|DEFDATE|DEFTIMESTAMP)?, NOQUOTE, constraint, descr?)>
|
||||||
|
<!ELEMENT data (row+)>
|
||||||
|
<!ELEMENT row (f+)>
|
||||||
|
<!ELEMENT f (#CDATA)>
|
||||||
<!ELEMENT descr (#CDATA)>
|
<!ELEMENT descr (#CDATA)>
|
||||||
<!ELEMENT NOTNULL EMPTY>
|
<!ELEMENT NOTNULL EMPTY>
|
||||||
<!ELEMENT KEY EMPTY>
|
<!ELEMENT KEY EMPTY>
|
||||||
|
@ -18,6 +21,8 @@
|
||||||
<!ELEMENT constraint (#CDATA)>
|
<!ELEMENT constraint (#CDATA)>
|
||||||
<!ATTLIST table name CDATA #REQUIRED platform CDATA #IMPLIED version CDATA #IMPLIED>
|
<!ATTLIST table name CDATA #REQUIRED platform CDATA #IMPLIED version CDATA #IMPLIED>
|
||||||
<!ATTLIST field name CDATA #REQUIRED type (C|C2|X|X2|B|D|T|L|I|F|N) #REQUIRED size CDATA #IMPLIED>
|
<!ATTLIST field name CDATA #REQUIRED type (C|C2|X|X2|B|D|T|L|I|F|N) #REQUIRED size CDATA #IMPLIED>
|
||||||
|
<!ATTLIST data platform CDATA #IMPLIED>
|
||||||
|
<!ATTLIST f name CDATA #IMPLIED>
|
||||||
<!ATTLIST DEFAULT value CDATA #REQUIRED>
|
<!ATTLIST DEFAULT value CDATA #REQUIRED>
|
||||||
<!ELEMENT index ((col+|DROP), CLUSTERED?, BITMAP?, UNIQUE?, FULLTEXT?, HASH?, descr?)>
|
<!ELEMENT index ((col+|DROP), CLUSTERED?, BITMAP?, UNIQUE?, FULLTEXT?, HASH?, descr?)>
|
||||||
<!ELEMENT col (#CDATA)>
|
<!ELEMENT col (#CDATA)>
|
||||||
|
@ -26,7 +31,7 @@
|
||||||
<!ELEMENT UNIQUE EMPTY>
|
<!ELEMENT UNIQUE EMPTY>
|
||||||
<!ELEMENT FULLTEXT EMPTY>
|
<!ELEMENT FULLTEXT EMPTY>
|
||||||
<!ELEMENT HASH EMPTY>
|
<!ELEMENT HASH EMPTY>
|
||||||
<!ATTLIST index name CDATA #REQUIRED>
|
<!ATTLIST index name CDATA #REQUIRED platform CDATA #IMPLIED>
|
||||||
<!ELEMENT sql (query+, descr?)>
|
<!ELEMENT sql (query+, descr?)>
|
||||||
<!ELEMENT query (#CDATA)>
|
<!ELEMENT query (#CDATA)>
|
||||||
<!ATTLIST sql name CDATA #IMPLIED platform CDATA #IMPLIED, key CDATA, prefixmethod (AUTO|MANUAL|NONE) >
|
<!ATTLIST sql name CDATA #IMPLIED platform CDATA #IMPLIED, key CDATA, prefixmethod (AUTO|MANUAL|NONE) >
|
||||||
|
|
54
lib/adodb/xsl/remove-0.2.xsl
Normal file
54
lib/adodb/xsl/remove-0.2.xsl
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<xsl:stylesheet version="1.0"
|
||||||
|
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||||
|
>
|
||||||
|
<xsl:output method="xml" indent="yes" omit-xml-declaration="no" encoding="UTF-8"/>
|
||||||
|
|
||||||
|
<!-- Schema -->
|
||||||
|
<xsl:template match="/">
|
||||||
|
<xsl:comment>
|
||||||
|
ADODB XMLSchema
|
||||||
|
http://adodb-xmlschema.sourceforge.net
|
||||||
|
</xsl:comment>
|
||||||
|
|
||||||
|
<xsl:comment>
|
||||||
|
Uninstallation Schema
|
||||||
|
</xsl:comment>
|
||||||
|
|
||||||
|
<xsl:element name="schema">
|
||||||
|
<xsl:attribute name="version">0.2</xsl:attribute>
|
||||||
|
|
||||||
|
<xsl:apply-templates select="schema/table">
|
||||||
|
<xsl:sort select="position()" data-type="number" order="descending"/>
|
||||||
|
</xsl:apply-templates>
|
||||||
|
</xsl:element>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<!-- Table -->
|
||||||
|
<xsl:template match="table">
|
||||||
|
<xsl:if test="count(DROP) = 0">
|
||||||
|
<xsl:element name="table">
|
||||||
|
<xsl:attribute name="name"><xsl:value-of select="@name"/></xsl:attribute>
|
||||||
|
|
||||||
|
<xsl:if test="string-length(@platform) > 0">
|
||||||
|
<xsl:attribute name="platform"><xsl:value-of select="@platform"/></xsl:attribute>
|
||||||
|
</xsl:if>
|
||||||
|
|
||||||
|
<xsl:if test="string-length(@version) > 0">
|
||||||
|
<xsl:attribute name="version"><xsl:value-of select="@version"/></xsl:attribute>
|
||||||
|
</xsl:if>
|
||||||
|
|
||||||
|
<xsl:apply-templates select="descr[1]"/>
|
||||||
|
|
||||||
|
<xsl:element name="DROP"/>
|
||||||
|
</xsl:element>
|
||||||
|
</xsl:if>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<!-- Description -->
|
||||||
|
<xsl:template match="descr">
|
||||||
|
<xsl:element name="descr">
|
||||||
|
<xsl:value-of select="normalize-space(text())"/>
|
||||||
|
</xsl:element>
|
||||||
|
</xsl:template>
|
||||||
|
</xsl:stylesheet>
|
Loading…
Add table
Add a link
Reference in a new issue