From: <pri...@us...> - 2008-07-28 13:56:34
|
Revision: 5435 http://mantisbt.svn.sourceforge.net/mantisbt/?rev=5435&view=rev Author: prichards Date: 2008-07-28 13:55:59 +0000 (Mon, 28 Jul 2008) Log Message: ----------- Update to ADODB 5.0.5 Modified Paths: -------------- trunk/mantisbt/core/adodb/adodb-active-record.inc.php trunk/mantisbt/core/adodb/adodb-csvlib.inc.php trunk/mantisbt/core/adodb/adodb-datadict.inc.php trunk/mantisbt/core/adodb/adodb-error.inc.php trunk/mantisbt/core/adodb/adodb-errorhandler.inc.php trunk/mantisbt/core/adodb/adodb-errorpear.inc.php trunk/mantisbt/core/adodb/adodb-exceptions.inc.php trunk/mantisbt/core/adodb/adodb-iterator.inc.php trunk/mantisbt/core/adodb/adodb-lib.inc.php trunk/mantisbt/core/adodb/adodb-memcache.lib.inc.php trunk/mantisbt/core/adodb/adodb-pager.inc.php trunk/mantisbt/core/adodb/adodb-pear.inc.php trunk/mantisbt/core/adodb/adodb-perf.inc.php trunk/mantisbt/core/adodb/adodb-php4.inc.php trunk/mantisbt/core/adodb/adodb-time.inc.php trunk/mantisbt/core/adodb/adodb.inc.php trunk/mantisbt/core/adodb/datadict/datadict-access.inc.php trunk/mantisbt/core/adodb/datadict/datadict-db2.inc.php trunk/mantisbt/core/adodb/datadict/datadict-firebird.inc.php trunk/mantisbt/core/adodb/datadict/datadict-generic.inc.php trunk/mantisbt/core/adodb/datadict/datadict-ibase.inc.php trunk/mantisbt/core/adodb/datadict/datadict-informix.inc.php trunk/mantisbt/core/adodb/datadict/datadict-mssql.inc.php trunk/mantisbt/core/adodb/datadict/datadict-mysql.inc.php trunk/mantisbt/core/adodb/datadict/datadict-oci8.inc.php trunk/mantisbt/core/adodb/datadict/datadict-postgres.inc.php trunk/mantisbt/core/adodb/datadict/datadict-sapdb.inc.php trunk/mantisbt/core/adodb/datadict/datadict-sybase.inc.php trunk/mantisbt/core/adodb/docs/docs-active-record.htm trunk/mantisbt/core/adodb/docs/docs-adodb.htm trunk/mantisbt/core/adodb/docs/docs-datadict.htm trunk/mantisbt/core/adodb/docs/docs-perf.htm trunk/mantisbt/core/adodb/docs/docs-session.htm trunk/mantisbt/core/adodb/docs/docs-session.old.htm trunk/mantisbt/core/adodb/drivers/adodb-access.inc.php trunk/mantisbt/core/adodb/drivers/adodb-ado.inc.php trunk/mantisbt/core/adodb/drivers/adodb-ado5.inc.php trunk/mantisbt/core/adodb/drivers/adodb-ado_access.inc.php trunk/mantisbt/core/adodb/drivers/adodb-ado_mssql.inc.php trunk/mantisbt/core/adodb/drivers/adodb-borland_ibase.inc.php trunk/mantisbt/core/adodb/drivers/adodb-csv.inc.php trunk/mantisbt/core/adodb/drivers/adodb-db2.inc.php trunk/mantisbt/core/adodb/drivers/adodb-fbsql.inc.php trunk/mantisbt/core/adodb/drivers/adodb-firebird.inc.php trunk/mantisbt/core/adodb/drivers/adodb-ibase.inc.php trunk/mantisbt/core/adodb/drivers/adodb-informix.inc.php trunk/mantisbt/core/adodb/drivers/adodb-informix72.inc.php trunk/mantisbt/core/adodb/drivers/adodb-ldap.inc.php trunk/mantisbt/core/adodb/drivers/adodb-mssql.inc.php trunk/mantisbt/core/adodb/drivers/adodb-mssqlpo.inc.php trunk/mantisbt/core/adodb/drivers/adodb-mysql.inc.php trunk/mantisbt/core/adodb/drivers/adodb-mysqli.inc.php trunk/mantisbt/core/adodb/drivers/adodb-mysqlt.inc.php trunk/mantisbt/core/adodb/drivers/adodb-netezza.inc.php trunk/mantisbt/core/adodb/drivers/adodb-oci8.inc.php trunk/mantisbt/core/adodb/drivers/adodb-oci805.inc.php trunk/mantisbt/core/adodb/drivers/adodb-oci8po.inc.php trunk/mantisbt/core/adodb/drivers/adodb-odbc.inc.php trunk/mantisbt/core/adodb/drivers/adodb-odbc_db2.inc.php trunk/mantisbt/core/adodb/drivers/adodb-odbc_mssql.inc.php trunk/mantisbt/core/adodb/drivers/adodb-odbc_oracle.inc.php trunk/mantisbt/core/adodb/drivers/adodb-odbtp.inc.php trunk/mantisbt/core/adodb/drivers/adodb-odbtp_unicode.inc.php trunk/mantisbt/core/adodb/drivers/adodb-oracle.inc.php trunk/mantisbt/core/adodb/drivers/adodb-pdo.inc.php trunk/mantisbt/core/adodb/drivers/adodb-pdo_mssql.inc.php trunk/mantisbt/core/adodb/drivers/adodb-pdo_mysql.inc.php trunk/mantisbt/core/adodb/drivers/adodb-pdo_oci.inc.php trunk/mantisbt/core/adodb/drivers/adodb-pdo_pgsql.inc.php trunk/mantisbt/core/adodb/drivers/adodb-postgres.inc.php trunk/mantisbt/core/adodb/drivers/adodb-postgres64.inc.php trunk/mantisbt/core/adodb/drivers/adodb-postgres7.inc.php trunk/mantisbt/core/adodb/drivers/adodb-postgres8.inc.php trunk/mantisbt/core/adodb/drivers/adodb-proxy.inc.php trunk/mantisbt/core/adodb/drivers/adodb-sapdb.inc.php trunk/mantisbt/core/adodb/drivers/adodb-sqlanywhere.inc.php trunk/mantisbt/core/adodb/drivers/adodb-sqlite.inc.php trunk/mantisbt/core/adodb/drivers/adodb-sqlitepo.inc.php trunk/mantisbt/core/adodb/drivers/adodb-sybase.inc.php trunk/mantisbt/core/adodb/drivers/adodb-sybase_ase.inc.php trunk/mantisbt/core/adodb/drivers/adodb-vfp.inc.php trunk/mantisbt/core/adodb/perf/perf-db2.inc.php trunk/mantisbt/core/adodb/perf/perf-informix.inc.php trunk/mantisbt/core/adodb/perf/perf-mssql.inc.php trunk/mantisbt/core/adodb/perf/perf-mysql.inc.php trunk/mantisbt/core/adodb/perf/perf-oci8.inc.php trunk/mantisbt/core/adodb/perf/perf-postgres.inc.php trunk/mantisbt/core/adodb/pivottable.inc.php trunk/mantisbt/core/adodb/rsfilter.inc.php trunk/mantisbt/core/adodb/server.php trunk/mantisbt/core/adodb/session/adodb-compress-bzip2.php trunk/mantisbt/core/adodb/session/adodb-compress-gzip.php trunk/mantisbt/core/adodb/session/adodb-cryptsession.php trunk/mantisbt/core/adodb/session/adodb-cryptsession2.php trunk/mantisbt/core/adodb/session/adodb-encrypt-mcrypt.php trunk/mantisbt/core/adodb/session/adodb-encrypt-md5.php trunk/mantisbt/core/adodb/session/adodb-encrypt-secret.php trunk/mantisbt/core/adodb/session/adodb-session-clob.php trunk/mantisbt/core/adodb/session/adodb-session-clob2.php trunk/mantisbt/core/adodb/session/adodb-session.php trunk/mantisbt/core/adodb/session/adodb-session2.php trunk/mantisbt/core/adodb/session/old/adodb-cryptsession.php trunk/mantisbt/core/adodb/session/old/adodb-session-clob.php trunk/mantisbt/core/adodb/session/old/adodb-session.php trunk/mantisbt/core/adodb/toexport.inc.php trunk/mantisbt/core/adodb/tohtml.inc.php Modified: trunk/mantisbt/core/adodb/adodb-active-record.inc.php =================================================================== --- trunk/mantisbt/core/adodb/adodb-active-record.inc.php 2008-07-28 11:58:08 UTC (rev 5434) +++ trunk/mantisbt/core/adodb/adodb-active-record.inc.php 2008-07-28 13:55:59 UTC (rev 5435) @@ -1,7 +1,7 @@ <?php /* -@version V5.03 22 Jan 2008 (c) 2000-2008 John Lim (jlim#natsoft.com.my). All rights reserved. +@version V5.05 11 July 2008 (c) 2000-2008 John Lim (jlim#natsoft.com). All rights reserved. Latest version is available at http://adodb.sourceforge.net Released under both BSD license and Lesser GPL library license. @@ -347,6 +347,18 @@ return $table; } + + // I have an ON INSERT trigger on a table that sets other columns in the table. + // So, I find that for myTable, I want to reload an active record after saving it. -- Malcolm Cook + function Reload() + { + $db =& $this->DB(); if (!$db) return false; + $table =& $this->TableInfo(); + $where = $this->GenWhere($db, $table); + return($this->Load($where)); + } + + // set a numeric array (using natural table field ordering) as object properties function Set(&$row) { Modified: trunk/mantisbt/core/adodb/adodb-csvlib.inc.php =================================================================== --- trunk/mantisbt/core/adodb/adodb-csvlib.inc.php 2008-07-28 11:58:08 UTC (rev 5434) +++ trunk/mantisbt/core/adodb/adodb-csvlib.inc.php 2008-07-28 13:55:59 UTC (rev 5435) @@ -8,7 +8,7 @@ /* - V5.03 22 Jan 2008 (c) 2000-2008 John Lim (jlim#natsoft.com.my). All rights reserved. + V5.05 11 July 2008 (c) 2000-2008 John Lim (jlim#natsoft.com). All rights reserved. Released under both BSD license and Lesser GPL library license. Whenever there is any discrepancy between the two licenses, the BSD license will take precedence. See License.txt. @@ -287,7 +287,7 @@ fclose($fd); if ($ok) { - chmod($tmpname,0644); + @chmod($tmpname,0644); // the tricky moment @unlink($filename); if (!@rename($tmpname,$filename)) { @@ -305,7 +305,7 @@ if (fwrite( $fd, $contents )) $ok = true; else $ok = false; fclose($fd); - chmod($filename,0644); + @chmod($filename,0644); }else { fclose($fd); if ($debug)ADOConnection::outp( " Failed acquiring lock for $filename<br>\n"); Modified: trunk/mantisbt/core/adodb/adodb-datadict.inc.php =================================================================== --- trunk/mantisbt/core/adodb/adodb-datadict.inc.php 2008-07-28 11:58:08 UTC (rev 5434) +++ trunk/mantisbt/core/adodb/adodb-datadict.inc.php 2008-07-28 13:55:59 UTC (rev 5435) @@ -1,7 +1,7 @@ <?php /** - V5.03 22 Jan 2008 (c) 2000-2008 John Lim (jlim#natsoft.com.my). All rights reserved. + V5.05 11 July 2008 (c) 2000-2008 John Lim (jlim#natsoft.com). All rights reserved. Released under both BSD license and Lesser GPL library license. Whenever there is any discrepancy between the two licenses, the BSD license will take precedence. Modified: trunk/mantisbt/core/adodb/adodb-error.inc.php =================================================================== --- trunk/mantisbt/core/adodb/adodb-error.inc.php 2008-07-28 11:58:08 UTC (rev 5434) +++ trunk/mantisbt/core/adodb/adodb-error.inc.php 2008-07-28 13:55:59 UTC (rev 5435) @@ -1,6 +1,6 @@ <?php /** - * @version V5.03 22 Jan 2008 (c) 2000-2008 John Lim (jlim#natsoft.com.my). All rights reserved. + * @version V5.05 11 July 2008 (c) 2000-2008 John Lim (jlim#natsoft.com). All rights reserved. * Released under both BSD license and Lesser GPL library license. * Whenever there is any discrepancy between the two licenses, * the BSD license will take precedence. Modified: trunk/mantisbt/core/adodb/adodb-errorhandler.inc.php =================================================================== --- trunk/mantisbt/core/adodb/adodb-errorhandler.inc.php 2008-07-28 11:58:08 UTC (rev 5434) +++ trunk/mantisbt/core/adodb/adodb-errorhandler.inc.php 2008-07-28 13:55:59 UTC (rev 5435) @@ -1,6 +1,6 @@ <?php /** - * @version V5.03 22 Jan 2008 (c) 2000-2008 John Lim (jlim#natsoft.com.my). All rights reserved. + * @version V5.05 11 July 2008 (c) 2000-2008 John Lim (jlim#natsoft.com). All rights reserved. * Released under both BSD license and Lesser GPL library license. * Whenever there is any discrepancy between the two licenses, * the BSD license will take precedence. Modified: trunk/mantisbt/core/adodb/adodb-errorpear.inc.php =================================================================== --- trunk/mantisbt/core/adodb/adodb-errorpear.inc.php 2008-07-28 11:58:08 UTC (rev 5434) +++ trunk/mantisbt/core/adodb/adodb-errorpear.inc.php 2008-07-28 13:55:59 UTC (rev 5435) @@ -1,6 +1,6 @@ <?php /** - * @version V5.03 22 Jan 2008 (c) 2000-2008 John Lim (jlim#natsoft.com.my). All rights reserved. + * @version V5.05 11 July 2008 (c) 2000-2008 John Lim (jlim#natsoft.com). All rights reserved. * Released under both BSD license and Lesser GPL library license. Whenever there is any discrepancy between the two licenses, the BSD license will take precedence. Modified: trunk/mantisbt/core/adodb/adodb-exceptions.inc.php =================================================================== --- trunk/mantisbt/core/adodb/adodb-exceptions.inc.php 2008-07-28 11:58:08 UTC (rev 5434) +++ trunk/mantisbt/core/adodb/adodb-exceptions.inc.php 2008-07-28 13:55:59 UTC (rev 5435) @@ -1,7 +1,7 @@ <?php /** - * @version V5.03 22 Jan 2008 (c) 2000-2008 John Lim (jlim#natsoft.com.my). All rights reserved. + * @version V5.05 11 July 2008 (c) 2000-2008 John Lim (jlim#natsoft.com). All rights reserved. * Released under both BSD license and Lesser GPL library license. * Whenever there is any discrepancy between the two licenses, * the BSD license will take precedence. Modified: trunk/mantisbt/core/adodb/adodb-iterator.inc.php =================================================================== --- trunk/mantisbt/core/adodb/adodb-iterator.inc.php 2008-07-28 11:58:08 UTC (rev 5434) +++ trunk/mantisbt/core/adodb/adodb-iterator.inc.php 2008-07-28 13:55:59 UTC (rev 5435) @@ -1,7 +1,7 @@ <?php /* - V5.03 22 Jan 2008 (c) 2000-2008 John Lim (jlim#natsoft.com.my). All rights reserved. + V5.05 11 July 2008 (c) 2000-2008 John Lim (jlim#natsoft.com). All rights reserved. Released under both BSD license and Lesser GPL library license. Whenever there is any discrepancy between the two licenses, the BSD license will take precedence. Modified: trunk/mantisbt/core/adodb/adodb-lib.inc.php =================================================================== --- trunk/mantisbt/core/adodb/adodb-lib.inc.php 2008-07-28 11:58:08 UTC (rev 5434) +++ trunk/mantisbt/core/adodb/adodb-lib.inc.php 2008-07-28 13:55:59 UTC (rev 5435) @@ -10,7 +10,7 @@ $ADODB_INCLUDED_LIB = 1; /* - @version V5.03 22 Jan 2008 (c) 2000-2008 John Lim (jlim\@natsoft.com.my). All rights reserved. + @version V5.05 11 July 2008 (c) 2000-2008 John Lim (jlim\@natsoft.com.my). All rights reserved. Released under both BSD license and Lesser GPL library license. Whenever there is any discrepancy between the two licenses, the BSD license will take precedence. See License.txt. @@ -417,7 +417,7 @@ } else $rewritesql = "SELECT COUNT(*) FROM (".$rewritesql.")"; - } else if (strncmp($zthis->databaseType,'postgres',8) == 0) { + } else if (strncmp($zthis->databaseType,'postgres',8) == 0 || strncmp($zthis->databaseType,'mysql',5) == 0) { $rewritesql = "SELECT COUNT(*) FROM ($rewritesql) _ADODB_ALIAS_"; } else { $rewritesql = "SELECT COUNT(*) FROM ($rewritesql)"; @@ -451,7 +451,7 @@ // strip off unneeded ORDER BY if no UNION if (preg_match('/\s*UNION\s*/is', $sql)) $rewritesql = $sql; - else $rewritesql = preg_replace('/(\sORDER\s+BY\s.*)/is','',$sql); + else $rewritesql = $rewritesql = adodb_strip_order_by($sql); if (preg_match('/\sLIMIT\s+[0-9]+/i',$sql,$limitarr)) $rewritesql .= $limitarr[0]; Modified: trunk/mantisbt/core/adodb/adodb-memcache.lib.inc.php =================================================================== --- trunk/mantisbt/core/adodb/adodb-memcache.lib.inc.php 2008-07-28 11:58:08 UTC (rev 5434) +++ trunk/mantisbt/core/adodb/adodb-memcache.lib.inc.php 2008-07-28 13:55:59 UTC (rev 5435) @@ -8,111 +8,160 @@ /* - V4.90 8 June 2006 (c) 2000-2008 John Lim (jlim#natsoft.com.my). All rights reserved. + V5.05 11 July 2008 (c) 2000-2008 John Lim (jlim#natsoft.com). All rights reserved. Released under both BSD license and Lesser GPL library license. Whenever there is any discrepancy between the two licenses, the BSD license will take precedence. See License.txt. Set tabs to 4 for best viewing. Latest version is available at http://adodb.sourceforge.net + +Usage: +$db = NewADOConnection($driver); +$db->memCache = true; /// should we use memCache instead of caching in files +$db->memCacheHost = array($ip1, $ip2, $ip3); +$db->memCachePort = 11211; /// this is default memCache port +$db->memCacheCompress = false; /// Use 'true' to store the item compressed (uses zlib) + +$db->Connect(...); +$db->CacheExecute($sql); + + Note the memcache class is shared by all connections, is created during the first call to Connect/PConnect. + + Class instance is stored in $ADODB_CACHE */ - function getmemcache($key,&$err, $timeout=0, $host, $port) - { - $false = false; - $err = false; - - if (!function_exists('memcache_pconnect')) { - $err = 'Memcache module PECL extension not found!'; - return $false; + class ADODB_Cache_MemCache { + var $createdir = false; // create caching directory structure? + + //----------------------------- + // memcache specific variables + + var $hosts; // array of hosts + var $port = 11211; + var $compress = false; // memcache compression with zlib + + var $_connected = false; + var $_memcache = false; + + function ADODB_Cache_MemCache(&$obj) + { + $this->hosts = $obj->memCacheHost; + $this->port = $obj->memCachePort; + $this->compress = $obj->memCacheCompress; } + + // implement as lazy connection. The connection only occurs on CacheExecute call + function connect(&$err) + { + if (!function_exists('memcache_pconnect')) { + $err = 'Memcache module PECL extension not found!'; + return false; + } - $memcache = new Memcache; - if (!@$memcache->pconnect($host, $port)) { - $err = 'Can\'t connect to memcache server on: '.$host.':'.$port; - return $false; + $memcache = new MemCache; + + if (!is_array($this->hosts)) $this->hosts = array($hosts); + + $failcnt = 0; + foreach($this->hosts as $host) { + if (!@$memcache->addServer($host,$this->port,true)) { + $failcnt += 1; + } + } + if ($failcnt == sizeof($hosts)) { + $err = 'Can\'t connect to any memcache server'; + return false; + } + + $this->_memcache = $memcache; + return 0; } - - $rs = $memcache->get($key); - if (!$rs) { - $err = 'Item with such key doesn\'t exists on the memcached server.'; - return $false; + + function writecache($filename, $contents,$debug, $secs2cache) + { + if (!$this->_connected) { + $err = ''; + if (!$this->connect($err) && $debug) ADOConnection::outp($err); + } + if ($this->_memcache) return false; + + if (!$this->_memcache->set($filename, $contents, $this->compress, 0)) { + if ($debug) ADOConnection::outp(" Failed to save data at the memcached server!<br>\n"); + return false; + } + + return true; } - - $tdiff = intval($rs->timeCreated+$timeout - time()); - if ($tdiff <= 2) { - switch($tdiff) { - case 2: - if ((rand() & 15) == 0) { - $err = "Timeout 2"; + + function &readcache($filename, &$err, $secs2cache, $rsClass) + { + if (!$this->_connected) $this->connect($err); + if ($this->_memcache) return false; + + $rs = $this->_memcache->get($filename); + if (!$rs) { + $err = 'Item with such key doesn\'t exists on the memcached server.'; + return $false; + } + + $tdiff = intval($rs->timeCreated+$timeout - time()); + if ($tdiff <= 2) { + switch($tdiff) { + case 2: + if ((rand() & 15) == 0) { + $err = "Timeout 2"; + return $false; + } + break; + case 1: + if ((rand() & 3) == 0) { + $err = "Timeout 1"; + return $false; + } + break; + default: + $err = "Timeout 0"; return $false; - } - break; - case 1: - if ((rand() & 3) == 0) { - $err = "Timeout 1"; - return $false; - } - break; - default: - $err = "Timeout 0"; - return $false; + } } + return $rs; } - return $rs; - } - - function putmemcache($key, $rs, $host, $port, $compress, $debug=false) - { - $false = false; - $true = true; - - if (!function_exists('memcache_pconnect')) { - if ($debug) ADOConnection::outp(" Memcache module PECL extension not found!<br>\n"); - return $false; + + function flushall($debug=false) + { + if (!$this->_connected) { + $err = ''; + if (!$this->connect($err) && $debug) ADOConnection::outp($err); + } + if ($this->_memcache) return false; + + $del = $this->_memcache->flush(); + + if ($debug) + if (!$del) ADOConnection::outp("flushall: failed!<br>\n"); + else ADOConnection::outp("flushall: succeeded!<br>\n"); + + return $del; } - - $memcache = new Memcache; - if (!@$memcache->pconnect($host, $port)) { - if ($debug) ADOConnection::outp(" Can't connect to memcache server on: $host:$port<br>\n"); - return $false; + + function flushcache($filename, $debug=false) + { + $del = $this->_memcache->delete($filename); + + if ($debug) + if (!$del) ADOConnection::outp("flushcache: $key entry doesn't exist on memcached server!<br>\n"); + else ADOConnection::outp("flushcache: $key entry flushed from memcached server!<br>\n"); + + return $del; } - - $rs->timeCreated = time(); - if (!$memcache->set($key, $rs, $compress, 0)) { - if ($debug) ADOConnection::outp(" Failed to save data at the memcached server!<br>\n"); - return $false; + + // not used for memcache + function createdir($dir, $hash) + { + return true; } - return $true; } - function flushmemcache($key=false, $host, $port, $debug=false) - { - if (!function_exists('memcache_pconnect')) { - if ($debug) ADOConnection::outp(" Memcache module PECL extension not found!<br>\n"); - return; - } - - $memcache = new Memcache; - if (!@$memcache->pconnect($host, $port)) { - if ($debug) ADOConnection::outp(" Can't connect to memcache server on: $host:$port<br>\n"); - return; - } - - if ($key) { - if (!$memcache->delete($key)) { - if ($debug) ADOConnection::outp("CacheFlush: $key entery doesn't exist on memcached server!<br>\n"); - } else { - if ($debug) ADOConnection::outp("CacheFlush: $key entery flushed from memcached server!<br>\n"); - } - } else { - if (!$memcache->flush()) { - if ($debug) ADOConnection::outp("CacheFlush: Failure flushing all enteries from memcached server!<br>\n"); - } else { - if ($debug) ADOConnection::outp("CacheFlush: All enteries flushed from memcached server!<br>\n"); - } - } - return; - } -?> +?> \ No newline at end of file Modified: trunk/mantisbt/core/adodb/adodb-pager.inc.php =================================================================== --- trunk/mantisbt/core/adodb/adodb-pager.inc.php 2008-07-28 11:58:08 UTC (rev 5434) +++ trunk/mantisbt/core/adodb/adodb-pager.inc.php 2008-07-28 13:55:59 UTC (rev 5435) @@ -1,7 +1,7 @@ <?php /* - V5.03 22 Jan 2008 (c) 2000-2008 John Lim (jlim#natsoft.com.my). All rights reserved. + V5.05 11 July 2008 (c) 2000-2008 John Lim (jlim#natsoft.com). All rights reserved. Released under both BSD license and Lesser GPL library license. Whenever there is any discrepancy between the two licenses, the BSD license will take precedence. Modified: trunk/mantisbt/core/adodb/adodb-pear.inc.php =================================================================== --- trunk/mantisbt/core/adodb/adodb-pear.inc.php 2008-07-28 11:58:08 UTC (rev 5434) +++ trunk/mantisbt/core/adodb/adodb-pear.inc.php 2008-07-28 13:55:59 UTC (rev 5435) @@ -1,6 +1,6 @@ <?php /** - * @version V5.03 22 Jan 2008 (c) 2000-2008 John Lim (jlim#natsoft.com.my). All rights reserved. + * @version V5.05 11 July 2008 (c) 2000-2008 John Lim (jlim#natsoft.com). All rights reserved. * Released under both BSD license and Lesser GPL library license. * Whenever there is any discrepancy between the two licenses, * the BSD license will take precedence. @@ -211,7 +211,7 @@ function isError($value) { if (!is_object($value)) return false; - $class = get_class($value); + $class = strtolower(get_class($value)); return $class == 'pear_error' || is_subclass_of($value, 'pear_error') || $class == 'db_error' || is_subclass_of($value, 'db_error'); } Modified: trunk/mantisbt/core/adodb/adodb-perf.inc.php =================================================================== --- trunk/mantisbt/core/adodb/adodb-perf.inc.php 2008-07-28 11:58:08 UTC (rev 5434) +++ trunk/mantisbt/core/adodb/adodb-perf.inc.php 2008-07-28 13:55:59 UTC (rev 5435) @@ -1,6 +1,6 @@ <?php /* -V5.03 22 Jan 2008 (c) 2000-2008 John Lim (jlim#natsoft.com.my). All rights reserved. +V5.05 11 July 2008 (c) 2000-2008 John Lim (jlim#natsoft.com). All rights reserved. Released under both BSD license and Lesser GPL library license. Whenever there is any discrepancy between the two licenses, the BSD license will take precedence. See License.txt. @@ -117,9 +117,9 @@ } if (isset($_SERVER['HTTP_HOST'])) { $tracer .= '<br>'.$_SERVER['HTTP_HOST']; - if (isset($_SERVER['PHP_SELF'])) $tracer .= $_SERVER['PHP_SELF']; + if (isset($_SERVER['PHP_SELF'])) $tracer .= htmlspecialchars($_SERVER['PHP_SELF']); } else - if (isset($_SERVER['PHP_SELF'])) $tracer .= '<br>'.$_SERVER['PHP_SELF']; + if (isset($_SERVER['PHP_SELF'])) $tracer .= '<br>'.htmlspecialchars($_SERVER['PHP_SELF']); //$tracer .= (string) adodb_backtrace(false); $tracer = (string) substr($tracer,0,500); @@ -727,8 +727,9 @@ echo $this->CheckMemory(); break; case 'poll': + $self = htmlspecialchars($_SERVER['PHP_SELF']); echo "<iframe width=720 height=80% - src=\"{$_SERVER['PHP_SELF']}?do=poll2&hidem=1\"></iframe>"; + src=\"{$self}?do=poll2&hidem=1\"></iframe>"; break; case 'poll2': echo "<pre>"; @@ -905,7 +906,7 @@ { - $PHP_SELF = $_SERVER['PHP_SELF']; + $PHP_SELF = htmlspecialchars($_SERVER['PHP_SELF']); $sql = isset($_REQUEST['sql']) ? $_REQUEST['sql'] : ''; if (isset($_SESSION['phplens_sqlrows'])) $rows = $_SESSION['phplens_sqlrows']; Modified: trunk/mantisbt/core/adodb/adodb-php4.inc.php =================================================================== --- trunk/mantisbt/core/adodb/adodb-php4.inc.php 2008-07-28 11:58:08 UTC (rev 5434) +++ trunk/mantisbt/core/adodb/adodb-php4.inc.php 2008-07-28 13:55:59 UTC (rev 5435) @@ -1,7 +1,7 @@ <?php /* - V5.03 22 Jan 2008 (c) 2000-2008 John Lim (jlim#natsoft.com.my). All rights reserved. + V5.05 11 July 2008 (c) 2000-2008 John Lim (jlim#natsoft.com). All rights reserved. Released under both BSD license and Lesser GPL library license. Whenever there is any discrepancy between the two licenses, the BSD license will take precedence. Modified: trunk/mantisbt/core/adodb/adodb-time.inc.php =================================================================== --- trunk/mantisbt/core/adodb/adodb-time.inc.php 2008-07-28 11:58:08 UTC (rev 5434) +++ trunk/mantisbt/core/adodb/adodb-time.inc.php 2008-07-28 13:55:59 UTC (rev 5435) @@ -242,6 +242,12 @@ CHANGELOG +- 11 Feb 2008 0.33 +* Bug in 0.32 fix for hour handling. Fixed. + +- 1 Feb 2008 0.32 +* Now adodb_mktime(0,0,0,12+$m,20,2040) works properly. + - 10 Jan 2008 0.31 * Now adodb_mktime(0,0,0,24,1,2037) works correctly. @@ -380,7 +386,7 @@ /* Version Number */ -define('ADODB_DATE_VERSION',0.31); +define('ADODB_DATE_VERSION',0.33); $ADODB_DATETIME_CLASS = (PHP_VERSION >= 5.2); @@ -430,6 +436,9 @@ function adodb_date_test() { + for ($m=-24; $m<=24; $m++) + echo "$m :",adodb_date('d-m-Y',adodb_mktime(0,0,0,1+$m,20,2040)),"<br>"; + error_reporting(E_ALL); print "<h4>Testing adodb_date and adodb_mktime. version=".ADODB_DATE_VERSION.' PHP='.PHP_VERSION."</h4>"; @set_time_limit(0); @@ -1211,7 +1220,7 @@ ); - if ($usephpfns && ($year + $mon/12+$day/365.25+$hr/24/365.25 >= 2038)) $usephpfns = false; + if ($usephpfns && ($year + $mon/12+$day/365.25+$hr/(24*365.25) >= 2038)) $usephpfns = false; if ($usephpfns) { return $is_gmt ? @@ -1237,7 +1246,7 @@ $year = adodb_year_digit_check($year); if ($mon > 12) { - $y = floor($mon / 12); + $y = floor(($mon-1)/ 12); $year += $y; $mon -= $y*12; } else if ($mon < 1) { Modified: trunk/mantisbt/core/adodb/adodb.inc.php =================================================================== --- trunk/mantisbt/core/adodb/adodb.inc.php 2008-07-28 11:58:08 UTC (rev 5434) +++ trunk/mantisbt/core/adodb/adodb.inc.php 2008-07-28 13:55:59 UTC (rev 5435) @@ -14,7 +14,7 @@ /** \mainpage - @version V5.03 22 Jan 2008 (c) 2000-2008 John Lim (jlim#natsoft.com.my). All rights reserved. + @version V5.05 11 July 2008 (c) 2000-2008 John Lim (jlim#natsoft.com). All rights reserved. Released under both BSD license and Lesser GPL library license. You can choose which license you prefer. @@ -54,6 +54,8 @@ $ADODB_vers, // database version $ADODB_COUNTRECS, // count number of records returned - slows down query $ADODB_CACHE_DIR, // directory to cache recordsets + $ADODB_CACHE, + $ADODB_CACHE_CLASS, $ADODB_EXTENSION, // ADODB extension installed $ADODB_COMPAT_FETCH, // If $ADODB_COUNTRECS and this is true, $rs->fields is available on EOF $ADODB_FETCH_MODE, // DEFAULT, NUM, ASSOC or BOTH. Default follows native driver default... @@ -146,9 +148,12 @@ $ADODB_COUNTRECS, // count number of records returned - slows down query $ADODB_CACHE_DIR, // directory to cache recordsets $ADODB_FETCH_MODE, + $ADODB_CACHE, + $ADODB_CACHE_CLASS, $ADODB_FORCE_TYPE, $ADODB_QUOTE_FIELDNAMES; + $ADODB_CACHE_CLASS = 'ADODB_Cache_File'; $ADODB_FETCH_MODE = ADODB_FETCH_DEFAULT; $ADODB_FORCE_TYPE = ADODB_FORCE_VALUE; @@ -169,7 +174,7 @@ /** * ADODB version as a string. */ - $ADODB_vers = 'V5.03 22 Jan 2008 (c) 2000-2008 John Lim (jlim#natsoft.com.my). All rights reserved. Released BSD & LGPL.'; + $ADODB_vers = 'V5.05 11 July 2008 (c) 2000-2008 John Lim (jlim#natsoft.com). All rights reserved. Released BSD & LGPL.'; /** * Determines whether recordset->RecordCount() is used. @@ -208,7 +213,7 @@ */ } - + // for transaction handling function ADODB_TransMonitor($dbms, $fn, $errno, $errmsg, $p1, $p2, &$thisConnection) { @@ -220,6 +225,95 @@ } } + //------------------ + // class for caching + class ADODB_Cache_File { + + var $createdir = true; // requires creation of temp dirs + + function ADODB_Cache_File() + { + global $ADODB_INCLUDED_CSV; + if (empty($ADODB_INCLUDED_CSV)) include(ADODB_DIR.'/adodb-csvlib.inc.php'); + } + + // write serialised recordset to cache item/file + function writecache($filename, $contents, $debug, $secs2cache) + { + return adodb_write_file($filename, $contents,$debug); + } + + // load serialised recordset and unserialise it + function &readcache($filename, &$err, $secs2cache, $rsClass) + { + $rs = csv2rs($filename,$err,$secs2cache,$rsClass); + return $rs; + } + + // flush all items in cache + function flushall($debug=false) + { + global $ADODB_CACHE_DIR; + + $rez = false; + + if (strlen($ADODB_CACHE_DIR) > 1) { + $rez = $this->_dirFlush($ADODB_CACHE_DIR); + if ($debug) DOConnection::outp( "flushall: $dir<br><pre>\n". $rez."</pre>"); + } + return $rez; + } + + // flush one file in cache + function flushcache($f, $debug=false) + { + if (!@unlink($f)) { + if ($debug) ADOConnection::outp( "flushcache: failed for $f"); + } + } + + function getdirname($hash) + { + global $ADODB_CACHE_DIR; + if (!isset($this->notSafeMode)) $this->notSafeMode = !ini_get('safe_mode'); + return ($this->notSafeMode) ? $ADODB_CACHE_DIR.'/'.substr($hash,0,2) : $ADODB_CACHE_DIR; + } + + // create temp directories + function createdir($hash, $debug) + { + $dir = $this->getdirname($hash); + if ($this->notSafeMode && !file_exists($dir)) { + $oldu = umask(0); + if (!@mkdir($dir,0771)) if(!is_dir($dir) && $debug) ADOConnection::outp("Cannot create $dir"); + umask($oldu); + } + + return $dir; + } + + /** + * Private function to erase all of the files and subdirectories in a directory. + * + * Just specify the directory, and tell it if you want to delete the directory or just clear it out. + * Note: $kill_top_level is used internally in the function to flush subdirectories. + */ + function _dirFlush($dir, $kill_top_level = false) + { + if(!$dh = @opendir($dir)) return; + + while (($obj = readdir($dh))) { + if($obj=='.' || $obj=='..') continue; + $f = $dir.'/'.$obj; + + if (strpos($obj,'.cache')) @unlink($f); + if (is_dir($f)) $this->_dirFlush($f, true); + } + if ($kill_top_level === true) @rmdir($dir); + return true; + } + } + //============================================================================================== // CLASS ADOConnection //============================================================================================== @@ -417,6 +511,10 @@ if ($argDatabaseName != "") $this->database = $argDatabaseName; $this->_isPersistentConnection = false; + + global $ADODB_CACHE; + if (empty($ADODB_CACHE)) $this->_CreateCache(); + if ($forceNew) { if ($rez=$this->_nconnect($this->host, $this->user, $this->password, $this->database)) return true; } else { @@ -472,6 +570,7 @@ */ function PConnect($argHostname = "", $argUsername = "", $argPassword = "", $argDatabaseName = "") { + if (defined('ADODB_NEVER_PERSIST')) return $this->Connect($argHostname,$argUsername,$argPassword,$argDatabaseName); @@ -481,6 +580,10 @@ if ($argDatabaseName != "") $this->database = $argDatabaseName; $this->_isPersistentConnection = true; + + global $ADODB_CACHE; + if (empty($ADODB_CACHE)) $this->_CreateCache(); + if ($rez = $this->_pconnect($this->host, $this->user, $this->password, $this->database)) return true; if (isset($rez)) { $err = $this->ErrorMsg(); @@ -508,6 +611,21 @@ ADOConnection::outp($msg); } + // create cache class. Code is backward compat with old memcache implementation + function _CreateCache() + { + global $ADODB_CACHE, $ADODB_CACHE_CLASS; + + if ($this->memCache) { + global $ADODB_INCLUDED_MEMCACHE; + + if (empty($ADODB_INCLUDED_MEMCACHE)) include(ADODB_DIR.'/adodb-memcache.lib.inc.php'); + $ADODB_CACHE = new ADODB_Cache_MemCache($this); + } else + $ADODB_CACHE = new $ADODB_CACHE_CLASS($this); + + } + // Format date column in sql string given an input format that understands Y M D function SQLDate($fmt, $col=false) { @@ -1181,13 +1299,10 @@ $savec = $ADODB_COUNTRECS; $ADODB_COUNTRECS = false; - if ($offset>0){ + if ($secs2cache != 0) $rs = $this->CacheExecute($secs2cache,$sql,$inputarr); else $rs = $this->Execute($sql,$inputarr); - } else { - if ($secs2cache != 0) $rs = $this->CacheExecute($secs2cache,$sql,$inputarr); - else $rs = $this->Execute($sql,$inputarr); - } + $ADODB_COUNTRECS = $savec; if ($rs && !$rs->EOF) { $rs = $this->_rs2rs($rs,$nrows,$offset); @@ -1456,7 +1571,7 @@ function GetRandRow($sql, $arr= false) { $rezarr = $this->GetAll($sql, $arr); - $sz = sizeof($rez); + $sz = sizeof($rezarr); return $rezarr[abs(rand()) % $sz]; } @@ -1573,104 +1688,18 @@ */ function CacheFlush($sql=false,$inputarr=false) { - global $ADODB_CACHE_DIR; - - if ($this->memCache) { - global $ADODB_INCLUDED_MEMCACHE; - - $key = false; - if (empty($ADODB_INCLUDED_MEMCACHE)) include(ADODB_DIR.'/adodb-memcache.lib.inc.php'); - if ($sql) $key = $this->_gencachename($sql.serialize($inputarr),false,true); - FlushMemCache($key, $this->memCacheHost, $this->memCachePort, $this->debug); - return; - } - - if (strlen($ADODB_CACHE_DIR) > 1 && !$sql) { - /*if (strncmp(PHP_OS,'WIN',3) === 0) - $dir = str_replace('/', '\\', $ADODB_CACHE_DIR); - else */ - $dir = $ADODB_CACHE_DIR; + global $ADODB_CACHE_DIR, $ADODB_CACHE; - if ($this->debug) { - ADOConnection::outp( "CacheFlush: $dir<br><pre>\n". $this->_dirFlush($dir)."</pre>"); - } else { - $this->_dirFlush($dir); - } + if (!$sql) { + $ADODB_CACHE->flushall($this->debug); return; } - global $ADODB_INCLUDED_CSV; - if (empty($ADODB_INCLUDED_CSV)) include(ADODB_DIR.'/adodb-csvlib.inc.php'); - $f = $this->_gencachename($sql.serialize($inputarr),false); - adodb_write_file($f,''); // is adodb_write_file needed? - if (!@unlink($f)) { - if ($this->debug) ADOConnection::outp( "CacheFlush: failed for $f"); - } + return $ADODB_CACHE->flushcache($f, $this->debug); } - /** - * Private function to erase all of the files and subdirectories in a directory. - * - * Just specify the directory, and tell it if you want to delete the directory or just clear it out. - * Note: $kill_top_level is used internally in the function to flush subdirectories. - * - */ - function _dirFlush($dir, $kill_top_level = false) - { - if(!$dh = @opendir($dir)) return; - - while (($obj = readdir($dh))) { - if($obj=='.' || $obj=='..') continue; - $f = $dir.'/'.$obj; - - if (strpos($obj,'.cache')) @unlink($f); - if (is_dir($f)) $this->_dirFlush($f, true); - } - if ($kill_top_level === true) @rmdir($dir); - return true; - } - - // this only deletes .cache files - function xCacheFlush($sql=false,$inputarr=false) - { - global $ADODB_CACHE_DIR; - if ($this->memCache) { - global $ADODB_INCLUDED_MEMCACHE; - $key = false; - if (empty($ADODB_INCLUDED_MEMCACHE)) include(ADODB_DIR.'/adodb-memcache.lib.inc.php'); - if ($sql) $key = $this->_gencachename($sql.serialize($inputarr),false,true); - flushmemCache($key, $this->memCacheHost, $this->memCachePort, $this->debug); - return; - } - - if (strlen($ADODB_CACHE_DIR) > 1 && !$sql) { - if (strncmp(PHP_OS,'WIN',3) === 0) { - $cmd = 'del /s '.str_replace('/','\\',$ADODB_CACHE_DIR).'\adodb_*.cache'; - } else { - //$cmd = 'find "'.$ADODB_CACHE_DIR.'" -type f -maxdepth 1 -print0 | xargs -0 rm -f'; - $cmd = 'rm -rf '.$ADODB_CACHE_DIR.'/[0-9a-f][0-9a-f]/'; - // old version 'rm -f `find '.$ADODB_CACHE_DIR.' -name adodb_*.cache`'; - } - if ($this->debug) { - ADOConnection::outp( "CacheFlush: $cmd<br><pre>\n", system($cmd),"</pre>"); - } else { - exec($cmd); - } - return; - } - - global $ADODB_INCLUDED_CSV; - if (empty($ADODB_INCLUDED_CSV)) include(ADODB_DIR.'/adodb-csvlib.inc.php'); - - $f = $this->_gencachename($sql.serialize($inputarr),false); - adodb_write_file($f,''); // is adodb_write_file needed? - if (!@unlink($f)) { - if ($this->debug) ADOConnection::outp( "CacheFlush: failed for $f"); - } - } - /** * Private function to generate filename for caching. * Filename is generated based on: @@ -1685,10 +1714,9 @@ * Assuming that we can have 50,000 files per directory with good performance, * then we can scale to 12.8 million unique cached recordsets. Wow! */ - function _gencachename($sql,$createdir,$memcache=false) + function _gencachename($sql,$createdir) { - global $ADODB_CACHE_DIR; - static $notSafeMode; + global $ADODB_CACHE, $ADODB_CACHE_DIR; if ($this->fetchMode === false) { global $ADODB_FETCH_MODE; @@ -1697,17 +1725,10 @@ $mode = $this->fetchMode; } $m = md5($sql.$this->databaseType.$this->database.$this->user.$mode); - if ($memcache) return $m; + if (!$ADODB_CACHE->createdir) return $m; + if (!$createdir) $dir = $ADODB_CACHE->getdirname($m); + else $dir = $ADODB_CACHE->createdir($m, $this->debug); - if (!isset($notSafeMode)) $notSafeMode = !ini_get('safe_mode'); - $dir = ($notSafeMode) ? $ADODB_CACHE_DIR.'/'.substr($m,0,2) : $ADODB_CACHE_DIR; - - if ($createdir && $notSafeMode && !file_exists($dir)) { - $oldu = umask(0); - if (!@mkdir($dir,0771)) - if(!is_dir($dir) && $this->debug) ADOConnection::outp( "Unable to mkdir $dir for $sql"); - umask($oldu); - } return $dir.'/adodb_'.$m.'.cache'; } @@ -1723,6 +1744,8 @@ */ function CacheExecute($secs2cache,$sql=false,$inputarr=false) { + global $ADODB_CACHE; + if (!is_numeric($secs2cache)) { $inputarr = $sql; $sql = $secs2cache; @@ -1735,30 +1758,19 @@ } else $sqlparam = $sql; - if ($this->memCache) { - global $ADODB_INCLUDED_MEMCACHE; - if (empty($ADODB_INCLUDED_MEMCACHE)) include(ADODB_DIR.'/adodb-memcache.lib.inc.php'); - $md5file = $this->_gencachename($sql.serialize($inputarr),false,true); - } else { - global $ADODB_INCLUDED_CSV; - if (empty($ADODB_INCLUDED_CSV)) include(ADODB_DIR.'/adodb-csvlib.inc.php'); + $md5file = $this->_gencachename($sql.serialize($inputarr),true); - } - $err = ''; if ($secs2cache > 0){ - if ($this->memCache) - $rs = getmemCache($md5file,$err,$secs2cache, $this->memCacheHost, $this->memCachePort); - else - $rs = csv2rs($md5file,$err,$secs2cache,$this->arrayClass); + $rs = &$ADODB_CACHE->readcache($md5file,$err,$secs2cache,$this->arrayClass); $this->numCacheHits += 1; } else { $err='Timeout 1'; $rs = false; $this->numCacheMisses += 1; } - $rs = false; + if (!$rs) { // no cached rs found if ($this->debug) { @@ -1770,19 +1782,14 @@ $rs = $this->Execute($sqlparam,$inputarr); - if ($rs && $this->memCache) { - $rs = $this->_rs2rs($rs); // read entire recordset into memory immediately - if(!putmemCache($md5file, $rs, $this->memCacheHost, $this->memCachePort, $this->memCacheCompress, $this->debug)) { - if ($fn = $this->raiseErrorFn) - $fn($this->databaseType,'CacheExecute',-32000,"Cache write error",$md5file,$sql,$this); - if ($this->debug) ADOConnection::outp( " Cache write error"); - } - } else if ($rs) { + if ($rs) { + $eof = $rs->EOF; $rs = $this->_rs2rs($rs); // read entire recordset into memory immediately + $rs->timeCreated = time(); // used by caching $txt = _rs2serialize($rs,false,$sql); // serialize - $ok = adodb_write_file($md5file,$txt,$this->debug); + $ok = $ADODB_CACHE->writecache($md5file,$txt,$this->debug, $secs2cache); if (!$ok) { if ($ok === false) { $em = 'Cache write error'; @@ -1805,9 +1812,8 @@ $rs->connection = $this; // Pablo suggestion } - } else - if (!$this->memCache) - @unlink($md5file); + } else if (!$this->memCache) + $ADODB_CACHE->flushcache($md5file); } else { $this->_errorMsg = ''; $this->_errorCode = 0; @@ -2719,12 +2725,12 @@ function key() { - return $false; + return false; } function current() { - return $false; + return false; } function next() Modified: trunk/mantisbt/core/adodb/datadict/datadict-access.inc.php =================================================================== --- trunk/mantisbt/core/adodb/datadict/datadict-access.inc.php 2008-07-28 11:58:08 UTC (rev 5434) +++ trunk/mantisbt/core/adodb/datadict/datadict-access.inc.php 2008-07-28 13:55:59 UTC (rev 5435) @@ -1,7 +1,7 @@ <?php /** - V5.03 22 Jan 2008 (c) 2000-2008 John Lim (jlim#natsoft.com.my). All rights reserved. + V5.05 11 July 2008 (c) 2000-2008 John Lim (jlim#natsoft.com). All rights reserved. Released under both BSD license and Lesser GPL library license. Whenever there is any discrepancy between the two licenses, the BSD license will take precedence. Modified: trunk/mantisbt/core/adodb/datadict/datadict-db2.inc.php =================================================================== --- trunk/mantisbt/core/adodb/datadict/datadict-db2.inc.php 2008-07-28 11:58:08 UTC (rev 5434) +++ trunk/mantisbt/core/adodb/datadict/datadict-db2.inc.php 2008-07-28 13:55:59 UTC (rev 5435) @@ -1,7 +1,7 @@ <?php /** - V5.03 22 Jan 2008 (c) 2000-2008 John Lim (jlim#natsoft.com.my). All rights reserved. + V5.05 11 July 2008 (c) 2000-2008 John Lim (jlim#natsoft.com). All rights reserved. Released under both BSD license and Lesser GPL library license. Whenever there is any discrepancy between the two licenses, the BSD license will take precedence. Modified: trunk/mantisbt/core/adodb/datadict/datadict-firebird.inc.php =================================================================== --- trunk/mantisbt/core/adodb/datadict/datadict-firebird.inc.php 2008-07-28 11:58:08 UTC (rev 5434) +++ trunk/mantisbt/core/adodb/datadict/datadict-firebird.inc.php 2008-07-28 13:55:59 UTC (rev 5435) @@ -1,7 +1,7 @@ <?php /** - V5.03 22 Jan 2008 (c) 2000-2008 John Lim (jlim#natsoft.com.my). All rights reserved. + V5.05 11 July 2008 (c) 2000-2008 John Lim (jlim#natsoft.com). All rights reserved. Released under both BSD license and Lesser GPL library license. Whenever there is any discrepancy between the two licenses, the BSD license will take precedence. Modified: trunk/mantisbt/core/adodb/datadict/datadict-generic.inc.php =================================================================== --- trunk/mantisbt/core/adodb/datadict/datadict-generic.inc.php 2008-07-28 11:58:08 UTC (rev 5434) +++ trunk/mantisbt/core/adodb/datadict/datadict-generic.inc.php 2008-07-28 13:55:59 UTC (rev 5435) @@ -1,7 +1,7 @@ <?php /** - V5.03 22 Jan 2008 (c) 2000-2008 John Lim (jlim#natsoft.com.my). All rights reserved. + V5.05 11 July 2008 (c) 2000-2008 John Lim (jlim#natsoft.com). All rights reserved. Released under both BSD license and Lesser GPL library license. Whenever there is any discrepancy between the two licenses, the BSD license will take precedence. Modified: trunk/mantisbt/core/adodb/datadict/datadict-ibase.inc.php =================================================================== --- trunk/mantisbt/core/adodb/datadict/datadict-ibase.inc.php 2008-07-28 11:58:08 UTC (rev 5434) +++ trunk/mantisbt/core/adodb/datadict/datadict-ibase.inc.php 2008-07-28 13:55:59 UTC (rev 5435) @@ -1,7 +1,7 @@ <?php /** - V5.03 22 Jan 2008 (c) 2000-2008 John Lim (jlim#natsoft.com.my). All rights reserved. + V5.05 11 July 2008 (c) 2000-2008 John Lim (jlim#natsoft.com). All rights reserved. Released under both BSD license and Lesser GPL library license. Whenever there is any discrepancy between the two licenses, the BSD license will take precedence. Modified: trunk/mantisbt/core/adodb/datadict/datadict-informix.inc.php =================================================================== --- trunk/mantisbt/core/adodb/datadict/datadict-informix.inc.php 2008-07-28 11:58:08 UTC (rev 5434) +++ trunk/mantisbt/core/adodb/datadict/datadict-informix.inc.php 2008-07-28 13:55:59 UTC (rev 5435) @@ -1,7 +1,7 @@ <?php /** - V5.03 22 Jan 2008 (c) 2000-2008 John Lim (jlim#natsoft.com.my). All rights reserved. + V5.05 11 July 2008 (c) 2000-2008 John Lim (jlim#natsoft.com). All rights reserved. Released under both BSD license and Lesser GPL library license. Whenever there is any discrepancy between the two licenses, the BSD license will take precedence. Modified: trunk/mantisbt/core/adodb/datadict/datadict-mssql.inc.php =================================================================== --- trunk/mantisbt/core/adodb/datadict/datadict-mssql.inc.php 2008-07-28 11:58:08 UTC (rev 5434) +++ trunk/mantisbt/core/adodb/datadict/datadict-mssql.inc.php 2008-07-28 13:55:59 UTC (rev 5435) @@ -1,7 +1,7 @@ <?php /** - V5.03 22 Jan 2008 (c) 2000-2008 John Lim (jlim#natsoft.com.my). All rights reserved. + V5.05 11 July 2008 (c) 2000-2008 John Lim (jlim#natsoft.com). All rights reserved. Released under both BSD license and Lesser GPL library license. Whenever there is any discrepancy between the two licenses, the BSD license will take precedence. Modified: trunk/mantisbt/core/adodb/datadict/datadict-mysql.inc.php =================================================================== --- trunk/mantisbt/core/adodb/datadict/datadict-mysql.inc.php 2008-07-28 11:58:08 UTC (rev 5434) +++ trunk/mantisbt/core/adodb/datadict/datadict-mysql.inc.php 2008-07-28 13:55:59 UTC (rev 5435) @@ -1,7 +1,7 @@ <?php /** - V5.03 22 Jan 2008 (c) 2000-2008 John Lim (jlim#natsoft.com.my). All rights reserved. + V5.05 11 July 2008 (c) 2000-2008 John Lim (jlim#natsoft.com). All rights reserved. Released under both BSD license and Lesser GPL library license. Whenever there is any discrepancy between the two licenses, the BSD license will take precedence. Modified: trunk/mantisbt/core/adodb/datadict/datadict-oci8.inc.php =================================================================== --- trunk/mantisbt/core/adodb/datadict/datadict-oci8.inc.php 2008-07-28 11:58:08 UTC (rev 5434) +++ trunk/mantisbt/core/adodb/datadict/datadict-oci8.inc.php 2008-07-28 13:55:59 UTC (rev 5435) @@ -1,7 +1,7 @@ <?php /** - V5.03 22 Jan 2008 (c) 2000-2008 John Lim (jlim#natsoft.com.my). All rights reserved. + V5.05 11 July 2008 (c) 2000-2008 John Lim (jlim#natsoft.com). All rights reserved. Released under both BSD license and Lesser GPL library license. Whenever there is any discrepancy between the two licenses, the BSD license will take precedence. Modified: trunk/mantisbt/core/adodb/datadict/datadict-postgres.inc.php =================================================================== --- trunk/mantisbt/core/adodb/datadict/datadict-postgres.inc.php 2008-07-28 11:58:08 UTC (rev 5434) +++ trunk/mantisbt/core/adodb/datadict/datadict-postgres.inc.php 2008-07-28 13:55:59 UTC (rev 5435) @@ -1,7 +1,7 @@ <?php /** - V4.94 23 Jan 2007 (c) 2000-2007 John Lim (jlim#natsoft.com.my). All rights reserved. + V5.05 11 July 2008 (c) 2000-2008 John Lim (jlim#natsoft.com). All rights reserved. Released under both BSD license and Lesser GPL library license. Whenever there is any discrepancy between the two licenses, the BSD license will take precedence. Modified: trunk/mantisbt/core/adodb/datadict/datadict-sapdb.inc.php =================================================================== --- trunk/mantisbt/core/adodb/datadict/datadict-sapdb.inc.php 2008-07-28 11:58:08 UTC (rev 5434) +++ trunk/mantisbt/core/adodb/datadict/datadict-sapdb.inc.php 2008-07-28 13:55:59 UTC (rev 5435) @@ -1,7 +1,7 @@ <?php /** - V4.50 6 July 2004 (c) 2000-2008 John Lim (jlim#natsoft.com.my). All rights reserved. + V4.50 6 July 2004 (c) 2000-2008 John Lim (jlim#natsoft.com). All rights reserved. Released under both BSD license and Lesser GPL library license. Whenever there is any discrepancy between the two licenses, the BSD license will take precedence. Modified: trunk/mantisbt/core/adodb/datadict/datadict-sybase.inc.php =================================================================== --- trunk/mantisbt/core/adodb/datadict/datadict-sybase.inc.php 2008-07-28 11:58:08 UTC (rev 5434) +++ trunk/mantisbt/core/adodb/datadict/datadict-sybase.inc.php 2008-07-28 13:55:59 UTC (rev 5435) @@ -1,7 +1,7 @@ <?php /** - V5.03 22 Jan 2008 (c) 2000-2008 John Lim (jlim#natsoft.com.my). All rights reserved. + V5.05 11 July 2008 (c) 2000-2008 John Lim (jlim#natsoft.com). All rights reserved. Released under both BSD license and Lesser GPL library license. Whenever there is any discrepancy between the two licenses, the BSD license will take precedence. Modified: trunk/mantisbt/core/adodb/docs/docs-active-record.htm =================================================================== --- trunk/mantisbt/core/adodb/docs/docs-active-record.htm 2008-07-28 11:58:08 UTC (rev 5434) +++ trunk/mantisbt/core/adodb/docs/docs-active-record.htm 2008-07-28 13:55:59 UTC (rev 5435) @@ -69,12 +69,12 @@ ADOdb_Active_Record's are object representations of table rows. Each table in the database is represented by a class in PHP. To begin working with a table as a ADOdb_Active_Record, a class that extends ADOdb_Active_Records needs to be created for it. <pre> -class Person extends ADOdb_Active_Record{} -$person = new Person(); +class person extends ADOdb_Active_Record{} +$person = new person(); </pre> <p> -In the above example, a new ADOdb_Active_Record object $person was created to access the "persons" table. Zend_Db_DataObject takes the name of the class, pluralizes it (according to American English rules), and assumes that this is the name of the table in the database. +In the above example, a new ADOdb_Active_Record object $person was created to access the "persons" table. Zend_Db_DataObject takes the name of the class, pluralizes it (according to American English rules), and assumes that this is the name of the table in the database. Also note that with MySQL, table names are case-sensitive, so your class name must match the table name's case. With other databases with case-insensitive tables, your class can be capitalized differently. <p> This kind of behavior is typical of ADOdb_Active_Record. It will assume as much as possible by convention rather than explicit configuration. In situations where it isn't possible to use the conventions that ADOdb_Active_Record expects, options can be overridden as we'll see later. Modified: trunk/mantisbt/core/adodb/docs/docs-adodb.htm =================================================================== --- trunk/mantisbt/core/adodb/docs/docs-adodb.htm 2008-07-28 11:58:08 UTC (rev 5434) +++ trunk/mantisbt/core/adodb/docs/docs-adodb.htm 2008-07-28 13:55:59 UTC (rev 5435) @@ -10,12 +10,12 @@ padding: 0.75em 1.5em; font-size: 12px; border: 1px solid #ddd; -} +}f </style></head> <body bgcolor="#ffffff" text="black"> -<h2>ADOdb Library for PHP</h2> -<p>V5.03 22 Jan 2008 (c) 2000-2008 John Lim (jlim#natsoft.com)</p> +<h2>ADOdb Library for PHP</h2> +<p>V5.05 11 July 2008 (c) 2000-2008 John Lim (jlim#natsoft.com)</p> <p><font size="1">This software is dual licensed using BSD-Style and LGPL. This means you can use it in compiled proprietary and commercial products.</font></p> @@ -51,8 +51,10 @@ <br> <b> <a href="#errorhandling">Using Custom Error Handlers and PEAR_Error</a><br> <a href="#DSN">Data Source Names</a><br> - <a href="#caching">Caching</a><br> - <a href="#pivot">Pivot Tables</a></b> + <a href="#caching">Caching</a></b><br> + <a href="#memcache">MemCache</a><br> + <a href="#cacheapi">Caching API</a><br> + <b><a href="#pivot">Pivot Tables</a></b> </p><p><a href="#ref"><b>REFERENCE</b></a> </p><p> <font size="2">Variables: <a href="#adodb_countrecs">$ADODB_COUNTRECS</a> <a href="#adodb_ansi_padding_off">$ADODB_ANSI_PADDING_OFF</a> @@ -200,7 +202,7 @@ </li></ul><p> </p><h2>Feature Requests and Bug Reports<a name="bugs"></a></h2> -<p>Feature requests and bug reports can be emailed to <a href="mailto:jlim#natsoft.com.my">jlim#natsoft.com.my</a> +<p>Feature requests and bug reports can be emailed to <a href="mailto:jlim#natsoft.com">jlim#natsoft.com</a> or posted to the ADOdb Help forums at <a href="http://phplens.com/lens/lensforum/topics.php?id=4">http://phplens.com/lens/lensforum/topics.php?id=4</a>.</p> <h2>Installation Guide<a name="install"></a></h2> <p>Make sure you are running PHP 4.0.5 or later. @@ -234,7 +236,7 @@ to a particular database is in the adodb/driver/adodb-????.inc.php file.</p> <a name="adonewconnection"></a> <p>For example, to connect to a mysql database:</p> -<pre>include('/path/to/set/here/adodb.inc.php');<br>$conn =ADONewConnection('mysql');<br></pre> +<pre>include('/path/to/set/here/adodb.inc.php');<br>$conn = &ADONewConnection('mysql');<br></pre> <p>Whenever you need to connect to a database, you create a Connection object using the <b>ADONewConnection</b>($driver) function. <b>NewADOConnection</b>($driver) is an alternative name for the same function.</p> @@ -307,7 +309,7 @@ <h4><a name="connect_ex">MySQL and Most Other Database Drivers</a></h4> <p><a name="connect_ex">MySQL connections are very straightforward, and the parameters are identical to mysql_connect:</a></p> -<pre><a name="connect_ex"> $conn =ADONewConnection('mysql'); <br> $conn->PConnect('localhost','userid','password','database');<br> <br> <font color="#008000"># or dsn </font> +<pre><a name="connect_ex"> $conn = &ADONewConnection('mysql'); <br> $conn->PConnect('localhost','userid','password','database');<br> <br> <font color="#008000"># or dsn </font> $dsn = 'mysql://user:pwd@localhost/mydb'; $conn = ADONewConnection($dsn); # no need for Connect() @@ -328,19 +330,19 @@ <h4>PDO</h4> <p>PDO, which only works with PHP5, accepts a driver specific connection string: <pre> - $conn = NewADOConnection('pdo'); + $conn =& NewADConnection('pdo'); $conn->Connect('mysql:host=localhost',$user,$pwd,$mydb); $conn->Connect('mysql:host=localhost;dbname=mydb',$user,$pwd); $conn->Connect("mysql:host=localhost;dbname=mydb;username=$user;password=$pwd"); </pre> <p>The DSN mechanism is also supported: <pre> - $conn = NewADOConnection("pdo_mysql://user:pwd@localhost/mydb?persist"); # persist is optional + $conn =& NewADConnection("pdo_mysql://user:pwd@localhost/mydb?persist"); # persist is optional </pre> <h4>PostgreSQL</h4> <p>PostgreSQL 7 and 8 accepts connections using: </p> <p>a. the standard connection string:</p> -<pre> $conn = ADONewConnection('postgres'); <br> $conn->PConnect('host=localhost port=5432 dbname=mary');</pre> +<pre> $conn = &ADONewConnection('postgres'); <br> $conn->PConnect('host=localhost port=5432 dbname=mary');</pre> <p> b. the classical 4 parameters:</p> <pre> $conn->PConnect('localhost','userid','password','database');<br> </pre> <p>c. dsn: @@ -402,12 +404,12 @@ </pre> <h4>Interbase/Firebird</h4> You define the database in the $host parameter: -<pre> $conn =ADONewConnection('ibase'); <br> $conn->PConnect('localhost:c:\ibase\employee.gdb','sysdba','masterkey');<br></pre> +<pre> $conn = &ADONewConnection('ibase'); <br> $conn->PConnect('localhost:c:\ibase\employee.gdb','sysdba','masterkey');<br></pre> <p>Or dsn: </p><pre> $dsn = 'firebird://user:pwd@localhost/mydb?persist&dialect=3'; # persist is optional<br> $conn = ADONewConnection($dsn); # no need for Connect/PConnect<br></pre> <h4>SQLite</h4> Sqlite will create the database file if it does not exist. -<pre> $conn =ADONewConnection('sqlite'); +<pre> $conn = &ADONewConnection('sqlite'); $conn->PConnect('c:\path\to\sqlite.db'); # sqlite will create if does not exist<br></pre> <p>Or dsn: </p><pre> $path = urlencode('c:\path\to\sqlite.db'); @@ -440,17 +442,17 @@ connection.To use DSN-less connections with ODBC you need PHP 4.3 or later. </p> <p>For Microsoft Access:</p> -<pre> $db = ADONewConnection('access');<br> $dsn = <strong>"Driver={Microsoft Access Driver (*.mdb)};Dbq=d:\\northwind.mdb;Uid=Admin;Pwd=;";</strong> +<pre> $db =& ADONewConnection('access');<br> $dsn = <strong>"Driver={Microsoft Access Driver (*.mdb)};Dbq=d:\\northwind.mdb;Uid=Admin;Pwd=;";</strong> $db->Connect($dsn); </pre> For Microsoft SQL Server: -<pre> $db = ADONewConnection('odbc_mssql');<br> $dsn = <strong>"Driver={SQL Server};Server=localhost;Database=northwind;"</strong>;<br> $db->Connect($dsn,'userid','password');<br></pre> +<pre> $db =& ADONewConnection('odbc_mssql');<br> $dsn = <strong>"Driver={SQL Server};Server=localhost;Database=northwind;"</strong>;<br> $db->Connect($dsn,'userid','password');<br></pre> or if you prefer to use the mssql extension (which is limited to mssql 6.5 functionality): -<pre> $db = ADONewConnection('mssql');<br> $db->Execute('localhost', 'userid', 'password', 'northwind');<br></pre> +<pre> $db =& ADONewConnection('mssql');<br> $db->Execute('localhost', 'userid', 'password', 'northwind');<br></pre> For DB2: <pre> $dbms = 'db2'; # or 'odbc_db2' if db2 extension not available - $db = ADONewConnection($dbms); + $db =& ADONewConnection($dbms); $dsn = "driver={IBM db2 odbc DRIVER};Database=sample;hostname=localhost;port=50000;protocol=TCPIP;". "uid=root; pwd=secret";<br> $db->Connect($dsn); </pre> @@ -458,7 +460,7 @@ If you are using versions of PHP earlier than PHP 4.3.0, DSN-less connections only work with Microsoft's ADO, which is Microsoft's COM based API. An example using the ADOdb library and Microsoft's ADO: -<pre><?php<br> include('adodb.inc.php'); <br> $db =ADONewConnection("ado_mssql");<br> print "<h1>Connecting DSN-less $db->databaseType...</h1>";<br> <br> <b>$myDSN="PROVIDER=MSDASQL;DRIVER={SQL Server};"<br> . "SERVER=flipper;DATABASE=ai;UID=sa;PWD=;" ;</b> +<pre><?php<br> include('adodb.inc.php'); <br> $db = &ADONewConnection("ado_mssql");<br> print "<h1>Connecting DSN-less $db->databaseType...</h1>";<br> <br> <b>$myDSN="PROVIDER=MSDASQL;DRIVER={SQL Server};"<br> . "SERVER=flipper;DATABASE=ai;UID=sa;PWD=;" ;</b> $db->Connect($myDSN); $rs = $db->Execute("select * from table"); @@ -495,8 +497,8 @@ <p>Some examples:</p> <table align="center" border="1"><tbody><tr><td><b>Fastest data retrieval using PHP</b></td><td><b>Fastest data retrieval using ADOdb extension</b></td></tr> <tr><td> -<pre>$rs = $rs->Execute($sql);<br>while (!$rs->EOF) {<br> var_dump($rs->fields);<br> $rs->MoveNext();<br>}</pre></td><td> -<pre>$rs = $rs->Execute($sql);<br>$array = adodb_getall($rs);<br>var_dump($a... [truncated message content] |
From: <pri...@us...> - 2008-09-27 20:36:53
|
Revision: 5599 http://mantisbt.svn.sourceforge.net/mantisbt/?rev=5599&view=rev Author: prichards Date: 2008-09-27 20:36:49 +0000 (Sat, 27 Sep 2008) Log Message: ----------- Fix ADODB odbc_mssql issues, fix mssql datadict + //if ($ty == 'X' || $ty == 'X2' || $ty == 'B') $fnotnull = false; // some blob types do not accept nulls +//if ($ty == 'X') $fdefault = false; These have been commented out as we've made possible values for custom fields as type X: ADODB doesn't allow 'type X' to be not null or have default values as some db's may not support it for some blob types - so far i'm not aware of any issues, and the behaviour of silently dropping DEFAULT/NOTNULL for blobs breaks updates for mssql. Modified Paths: -------------- trunk/mantisbt/core/adodb/adodb-datadict.inc.php trunk/mantisbt/core/adodb/datadict/datadict-mssql.inc.php trunk/mantisbt/core/adodb/drivers/adodb-odbc.inc.php trunk/mantisbt/core/adodb/drivers/adodb-odbc_mssql.inc.php Modified: trunk/mantisbt/core/adodb/adodb-datadict.inc.php =================================================================== --- trunk/mantisbt/core/adodb/adodb-datadict.inc.php 2008-09-27 20:29:30 UTC (rev 5598) +++ trunk/mantisbt/core/adodb/adodb-datadict.inc.php 2008-09-27 20:36:49 UTC (rev 5599) @@ -713,12 +713,12 @@ $ftype = $this->_GetSize($ftype, $ty, $fsize, $fprec); - if ($ty == 'X' || $ty == 'X2' || $ty == 'B') $fnotnull = false; // some blob types do not accept nulls + //if ($ty == 'X' || $ty == 'X2' || $ty == 'B') $fnotnull = false; // some blob types do not accept nulls if ($fprimary) $pkey[] = $fname; // some databases do not allow blobs to have defaults - if ($ty == 'X') $fdefault = false; + //if ($ty == 'X') $fdefault = false; // build list of indexes if ($findex != '') { Modified: trunk/mantisbt/core/adodb/datadict/datadict-mssql.inc.php =================================================================== --- trunk/mantisbt/core/adodb/datadict/datadict-mssql.inc.php 2008-09-27 20:29:30 UTC (rev 5598) +++ trunk/mantisbt/core/adodb/datadict/datadict-mssql.inc.php 2008-09-27 20:36:49 UTC (rev 5599) @@ -121,19 +121,62 @@ return $sql; } - /* - function AlterColumnSQL($tabname, $flds) + function AlterColumnSQL($tabname, $flds, $tableflds='',$tableoptions='') { $tabname = $this->TableName ($tabname); $sql = array(); - list($lines,$pkey) = $this->_GenFields($flds); + + list($lines,$pkey,$idxs) = $this->_GenFields($flds); + // genfields can return FALSE at times + if ($lines == null) $lines = array(); + $alter = 'ALTER TABLE ' . $tabname . $this->alterCol . ' '; foreach($lines as $v) { - $sql[] = "ALTER TABLE $tabname $this->alterCol $v"; + + $not_null = false; + if ($not_null = preg_match('/NOT NULL/i',$v)) { + $v = preg_replace('/NOT NULL/i','',$v); + } + + if (preg_match('/^([^ ]+) .*DEFAULT (\'[^\']+\'|\"[^\"]+\"|[^ ]+)/',$v,$matches)) { + list(,$colname,$default) = $matches; + $existing = $this->MetaColumns($tabname); + $constraintname = false; + $rs = $this->connection->Execute( "select name from sys.default_constraints WHERE object_name(parent_object_id) = '" . $tabname ."' AND col_name(parent_object_id, parent_column_id) = '" . $colname . "'"); + if ( is_object($rs) ) { + $row = $rs->FetchRow(); + $constraintname = $row[0]; + } + $v = preg_replace('/^' . preg_quote($colname) . '\s/', '', $v); + $t = trim(str_replace('DEFAULT '.$default,'',$v)); + if ( $constraintname != false ) { + $sql[] = 'ALTER TABLE '.$tabname.' DROP CONSTRAINT '. $constraintname; + } + $sql[] = $alter . $colname . ' ' . $t ; + if ( $constraintname != false ) { + $sql[] = 'ALTER TABLE '.$tabname.' ADD CONSTRAINT '.$constraintname.' DEFAULT ' . $default . ' FOR ' . $colname; + } else { + $sql[] = 'ALTER TABLE '.$tabname.' ADD CONSTRAINT DF__'. $tabname . '__'. $colname. '__' . dechex(rand()) .' DEFAULT ' . $default . ' FOR ' . $colname; + } + if ($not_null) { + $sql[] = $alter . $colname . ' ' . $t . ' NOT NULL'; + } + } else { + if ($not_null) { + $sql[] = $alter . $v . ' NOT NULL'; + } else { + $sql[] = $alter . $v; + } + } } + if (is_array($idxs)) { + foreach($idxs as $idx => $idxdef) { + $sql_idxs = $this->CreateIndexSql($idx, $tabname, $idxdef['cols'], $idxdef['opts']); + $sql = array_merge($sql, $sql_idxs); + } + } return $sql; - } - */ + } function DropColumnSQL($tabname, $flds) { @@ -143,6 +186,13 @@ $f = array(); $s = 'ALTER TABLE ' . $tabname; foreach($flds as $v) { + $rs = $this->connection->Execute( "select name from sys.default_constraints WHERE object_name(parent_object_id) = '" . $tabname ."' AND col_name(parent_object_id, parent_column_id) = '" . $v . "'"); + if ( is_object($rs) ) { + $row = $rs->FetchRow(); + $constraintname = $row[0]; + $sql[] = 'ALTER TABLE '.$tabname.' DROP CONSTRAINT '. $constraintname; + } + $f[] = "\n$this->dropCol ".$this->NameQuote($v); } $s .= implode(', ',$f); Modified: trunk/mantisbt/core/adodb/drivers/adodb-odbc.inc.php =================================================================== --- trunk/mantisbt/core/adodb/drivers/adodb-odbc.inc.php 2008-09-27 20:29:30 UTC (rev 5598) +++ trunk/mantisbt/core/adodb/drivers/adodb-odbc.inc.php 2008-09-27 20:36:49 UTC (rev 5599) @@ -500,13 +500,13 @@ $stmtid = $sql[1]; } else { $stmtid = odbc_prepare($this->_connectionID,$sql); - + if ($stmtid == false) { $this->_errorMsg = isset($php_errormsg) ? $php_errormsg : ''; return false; } } - + if (! odbc_execute($stmtid,$inputarr)) { //@odbc_free_result($stmtid); if ($this->_haserrorfunctions) { @@ -515,7 +515,6 @@ } return false; } - } else if (is_array($sql)) { $stmtid = $sql[1]; if (!odbc_execute($stmtid)) { @@ -531,6 +530,9 @@ $this->_lastAffectedRows = 0; if ($stmtid) { + if (!is_array($sql) && preg_match('/^\\s*insert/i', $sql)) { + return $stmtid; + } if (@odbc_num_fields($stmtid) == 0) { $this->_lastAffectedRows = odbc_num_rows($stmtid); $stmtid = true; Modified: trunk/mantisbt/core/adodb/drivers/adodb-odbc_mssql.inc.php =================================================================== --- trunk/mantisbt/core/adodb/drivers/adodb-odbc_mssql.inc.php 2008-09-27 20:29:30 UTC (rev 5598) +++ trunk/mantisbt/core/adodb/drivers/adodb-odbc_mssql.inc.php 2008-09-27 20:36:49 UTC (rev 5599) @@ -72,7 +72,11 @@ // the same scope. A scope is a module -- a stored procedure, trigger, // function, or batch. Thus, two statements are in the same scope if // they are in the same stored procedure, function, or batch. + if ($this->lastInsID !== false) { + return $this->lastInsID; // InsID from sp_executesql call + } else { return $this->GetOne($this->identitySQL); + } } @@ -180,7 +184,20 @@ function _query($sql,$inputarr) { if (is_string($sql)) $sql = str_replace('||','+',$sql); - return ADODB_odbc::_query($sql,$inputarr); + $getIdentity = false; + if (!is_array($sql) && preg_match('/^\\s*insert/i', $sql)) { + $getIdentity = true; + $sql .= (preg_match('/;\\s*$/i', $sql) ? ' ' : '; ') . $this->identitySQL . ' as insertid'; + } + + if ($getIdentity) { + $res = ADODB_odbc::_query($sql,$inputarr); + $row = odbc_fetch_array($res); + $this->lastInsID = isset($row['insertid']) ? (int)$row['insertid'] : false; + } else { + $this->lastInsID = false; + return ADODB_odbc::_query($sql,$inputarr); + } } function SetTransactionMode( $transaction_mode ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |