[TASK] Update ADOdb library to version 5.14
authorXavier Perseguers <xavier@typo3.org>
Tue, 1 Nov 2011 11:46:31 +0000 (12:46 +0100)
committerXavier Perseguers <xavier@typo3.org>
Mon, 21 Nov 2011 08:39:15 +0000 (09:39 +0100)
Change-Id: Ib30675a445160b455dced98e6db6361f44b8bf51
Resolves: #31486
Releases: 4.5, 4.6, 4.7
Reviewed-on: http://review.typo3.org/6766
Reviewed-by: Xavier Perseguers
Tested-by: Xavier Perseguers
117 files changed:
typo3/sysext/adodb/adodb/adodb-active-record.inc.php
typo3/sysext/adodb/adodb/adodb-active-recordx.inc.php
typo3/sysext/adodb/adodb/adodb-csvlib.inc.php
typo3/sysext/adodb/adodb/adodb-datadict.inc.php
typo3/sysext/adodb/adodb/adodb-error.inc.php
typo3/sysext/adodb/adodb/adodb-errorhandler.inc.php
typo3/sysext/adodb/adodb/adodb-errorpear.inc.php
typo3/sysext/adodb/adodb/adodb-exceptions.inc.php
typo3/sysext/adodb/adodb/adodb-iterator.inc.php
typo3/sysext/adodb/adodb/adodb-lib.inc.php
typo3/sysext/adodb/adodb/adodb-memcache.lib.inc.php
typo3/sysext/adodb/adodb/adodb-pager.inc.php
typo3/sysext/adodb/adodb/adodb-pear.inc.php
typo3/sysext/adodb/adodb/adodb-perf.inc.php
typo3/sysext/adodb/adodb/adodb-php4.inc.php
typo3/sysext/adodb/adodb/adodb-time.inc.php
typo3/sysext/adodb/adodb/adodb-xmlschema.inc.php
typo3/sysext/adodb/adodb/adodb-xmlschema03.inc.php
typo3/sysext/adodb/adodb/adodb.inc.php
typo3/sysext/adodb/adodb/datadict/datadict-access.inc.php
typo3/sysext/adodb/adodb/datadict/datadict-db2.inc.php
typo3/sysext/adodb/adodb/datadict/datadict-firebird.inc.php
typo3/sysext/adodb/adodb/datadict/datadict-generic.inc.php
typo3/sysext/adodb/adodb/datadict/datadict-ibase.inc.php
typo3/sysext/adodb/adodb/datadict/datadict-informix.inc.php
typo3/sysext/adodb/adodb/datadict/datadict-mssql.inc.php
typo3/sysext/adodb/adodb/datadict/datadict-mssqlnative.inc.php
typo3/sysext/adodb/adodb/datadict/datadict-mysql.inc.php
typo3/sysext/adodb/adodb/datadict/datadict-oci8.inc.php
typo3/sysext/adodb/adodb/datadict/datadict-postgres.inc.php
typo3/sysext/adodb/adodb/datadict/datadict-sapdb.inc.php
typo3/sysext/adodb/adodb/datadict/datadict-sqlite.inc.php
typo3/sysext/adodb/adodb/datadict/datadict-sybase.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-access.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-ado.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-ado5.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-ado_access.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-ado_mssql.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-borland_ibase.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-csv.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-db2.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-db2oci.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-db2ora.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-fbsql.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-firebird.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-ibase.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-informix.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-informix72.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-ldap.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-mssql.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-mssql_n.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-mssqlnative.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-mssqlpo.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-mysql.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-mysqli.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-mysqlpo.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-mysqlt.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-netezza.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-oci8.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-oci805.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-oci8po.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-odbc.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-odbc_db2.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-odbc_mssql.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-odbc_oracle.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-odbtp.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-odbtp_unicode.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-oracle.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-pdo.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-pdo_mssql.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-pdo_mysql.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-pdo_oci.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-pdo_pgsql.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-pdo_sqlite.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-postgres.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-postgres64.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-postgres7.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-postgres8.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-proxy.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-sapdb.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-sqlanywhere.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-sqlite.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-sqlite3.inc.php [new file with mode: 0644]
typo3/sysext/adodb/adodb/drivers/adodb-sqlitepo.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-sybase.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-sybase_ase.inc.php
typo3/sysext/adodb/adodb/drivers/adodb-vfp.inc.php
typo3/sysext/adodb/adodb/lang/adodb-esperanto.inc.php
typo3/sysext/adodb/adodb/lang/adodb-it.inc.php
typo3/sysext/adodb/adodb/lang/adodb-pt-br.inc.php
typo3/sysext/adodb/adodb/pear/Auth/Container/ADOdb.php [new file with mode: 0644]
typo3/sysext/adodb/adodb/pear/readme.Auth.txt [new file with mode: 0644]
typo3/sysext/adodb/adodb/perf/perf-db2.inc.php
typo3/sysext/adodb/adodb/perf/perf-informix.inc.php
typo3/sysext/adodb/adodb/perf/perf-mssql.inc.php
typo3/sysext/adodb/adodb/perf/perf-mssqlnative.inc.php
typo3/sysext/adodb/adodb/perf/perf-mysql.inc.php
typo3/sysext/adodb/adodb/perf/perf-oci8.inc.php
typo3/sysext/adodb/adodb/perf/perf-postgres.inc.php
typo3/sysext/adodb/adodb/pivottable.inc.php
typo3/sysext/adodb/adodb/rsfilter.inc.php
typo3/sysext/adodb/adodb/server.php
typo3/sysext/adodb/adodb/session/adodb-compress-bzip2.php
typo3/sysext/adodb/adodb/session/adodb-compress-gzip.php
typo3/sysext/adodb/adodb/session/adodb-cryptsession.php
typo3/sysext/adodb/adodb/session/adodb-cryptsession2.php
typo3/sysext/adodb/adodb/session/adodb-encrypt-mcrypt.php
typo3/sysext/adodb/adodb/session/adodb-encrypt-md5.php
typo3/sysext/adodb/adodb/session/adodb-encrypt-secret.php
typo3/sysext/adodb/adodb/session/adodb-session-clob.php
typo3/sysext/adodb/adodb/session/adodb-session-clob2.php
typo3/sysext/adodb/adodb/session/adodb-session.php
typo3/sysext/adodb/adodb/session/adodb-session2.php
typo3/sysext/adodb/adodb/session/crypt.inc.php
typo3/sysext/adodb/adodb/toexport.inc.php
typo3/sysext/adodb/adodb/tohtml.inc.php
typo3/sysext/adodb/ext_emconf.php

index 845c656..b7553d5 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /*
 
-@version V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+@version V5.14 8 Sept 2011   (c) 2000-2011 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. 
index 974b611..994b86b 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /*
 
-@version V5.06 29 Sept 2008   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+@version V5.06 29 Sept 2008   (c) 2000-2011 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. 
@@ -1418,4 +1418,4 @@ function adodb_GetActiveRecordsClass(&$db, $class, $tableObj,$whereOrderBy,$bind
 
                return $arr;
 }
-?>
\ No newline at end of file
+?>
index 1c0d081..2d2449d 100644 (file)
@@ -8,7 +8,7 @@ $ADODB_INCLUDED_CSV = 1;
 
 /* 
 
-  V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+  V5.14 8 Sept 2011   (c) 2000-2011 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. 
index 69060c5..31acb2d 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 /**
-  V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+  V5.14 8 Sept 2011   (c) 2000-2011 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.
index 6ec614d..e140a67 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /** 
- * @version V5.06 16 Oct 2008  (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+ * @version V5.14 8 Sept 2011  (c) 2000-2011 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. 
index b760089..91d7027 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * @version V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+ * @version V5.14 8 Sept 2011   (c) 2000-2011 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.
index 6882e0a..bdc9238 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /** 
- * @version V5.06 16 Oct 2008  (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+ * @version V5.14 8 Sept 2011  (c) 2000-2011 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. 
index 65f8943..bb9ed9e 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 /**
- * @version V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+ * @version V5.14 8 Sept 2011   (c) 2000-2011 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.
index e8b5e57..25c4a87 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 /*
-  V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+  V5.14 8 Sept 2011   (c) 2000-2011 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.
index 6b2e891..f906778 100644 (file)
@@ -1,8 +1,4 @@
 <?php
-
-
-
-
 // security - hide paths
 if (!defined('ADODB_DIR')) die();
 
@@ -10,7 +6,7 @@ global $ADODB_INCLUDED_LIB;
 $ADODB_INCLUDED_LIB = 1;
 
 /* 
@version V5.06 16 Oct 2008  (c) 2000-2010 John Lim (jlim\@natsoft.com.my). All rights reserved.
 @version V5.14 8 Sept 2011  (c) 2000-2011 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. 
@@ -546,7 +542,7 @@ function _adodb_pageexecute_all_rows(&$zthis, $sql, $nrows, $page,
        return $rsreturn;
 }
 
-// Iván Oliva version
+// Ivn Oliva version
 function _adodb_pageexecute_no_last_page(&$zthis, $sql, $nrows, $page, $inputarr=false, $secs2cache=0) 
 {
 
@@ -647,9 +643,17 @@ function _adodb_getupdatesql(&$zthis,&$rs, $arrFields,$forceUpdate=false,$magicq
                                                $type = 'C';
                                        }
                                        
-                                       if ((strpos($upperfname,' ') !== false) || ($ADODB_QUOTE_FIELDNAMES))
-                                               $fnameq = $zthis->nameQuote.$upperfname.$zthis->nameQuote;
-                                       else
+                                       if ((strpos($upperfname,' ') !== false) || ($ADODB_QUOTE_FIELDNAMES)) {
+                                               switch (ADODB_QUOTE_FIELDNAMES) {
+                                               case 'LOWER':
+                                                       $fnameq = $zthis->nameQuote.strtolower($field->name).$zthis->nameQuote;break;
+                                               case 'NATIVE':
+                                                       $fnameq = $zthis->nameQuote.$field->name.$zthis->nameQuote;break;
+                                               case 'UPPER':
+                                               default:
+                                                       $fnameq = $zthis->nameQuote.$upperfname.$zthis->nameQuote;break;
+                                               }
+                                       } else
                                                $fnameq = $upperfname;
                                        
                                        
@@ -811,9 +815,17 @@ static $cacheCols;
                $upperfname = strtoupper($field->name);
                if (adodb_key_exists($upperfname,$arrFields,$force)) {
                        $bad = false;
-                       if ((strpos($upperfname,' ') !== false) || ($ADODB_QUOTE_FIELDNAMES))
-                               $fnameq = $zthis->nameQuote.$upperfname.$zthis->nameQuote;
-                       else
+                       if ((strpos($upperfname,' ') !== false) || ($ADODB_QUOTE_FIELDNAMES)) {
+                               switch (ADODB_QUOTE_FIELDNAMES) {
+                               case 'LOWER':
+                                       $fnameq = $zthis->nameQuote.strtolower($field->name).$zthis->nameQuote;break;
+                               case 'NATIVE':
+                                       $fnameq = $zthis->nameQuote.$field->name.$zthis->nameQuote;break;
+                               case 'UPPER':
+                               default:
+                                       $fnameq = $zthis->nameQuote.$upperfname.$zthis->nameQuote;break;
+                               }
+                       } else
                                $fnameq = $upperfname;
                        
                        $type = $recordSet->MetaType($field->type);
index e666d56..37b81d4 100644 (file)
@@ -11,7 +11,7 @@ if (empty($ADODB_INCLUDED_CSV)) include(ADODB_DIR.'/adodb-csvlib.inc.php');
 
 /* 
 
-  V5.06 16 Oct 2008  (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+  V5.14 8 Sept 2011  (c) 2000-2011 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. 
@@ -91,7 +91,7 @@ $db->CacheExecute($sql);
                        }
                        if (!$this->_memcache) return false;
                        
-                       if (!$this->_memcache->set($filename, $contents, $this->compress, $secs2cache)) {
+                       if (!$this->_memcache->set($filename, $contents, $this->compress ? MEMCACHE_COMPRESSED : 0, $secs2cache)) {
                                if ($debug) ADOConnection::outp(" Failed to save data at the memcached server!<br>\n");
                                return false;
                        }
index 2d1d787..d5d4883 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 /*
-       V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+       V5.14 8 Sept 2011   (c) 2000-2011 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.
index 04441a7..f157bbd 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /** 
- * @version V5.06 16 Oct 2008  (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+ * @version V5.14 8 Sept 2011  (c) 2000-2011 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. 
index 4b2ea9e..651e45f 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /*
-V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+V5.14 8 Sept 2011   (c) 2000-2011 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.
@@ -188,7 +188,7 @@ function adodb_log_sql(&$connx,$sql,$inputarr)
                                timer decimal(16,6))");
                        }
                        if (!$ok) {
-                               ADOConnection::outp( "<p><strong>LOGSQL Insert Failed</strong>: $isql<br />$err2</p>");
+                               ADOConnection::outp( "<p><b>LOGSQL Insert Failed</b>: $isql<br>$err2</p>");
                                $conn->_logsql = false;
                        }
                }
@@ -217,8 +217,8 @@ Each database parameter element in the array is itself an array consisting of:
 class adodb_perf {
        var $conn;
        var $color = '#F0F0F0';
-       var $table = '<table border="1" bgcolor="white">';
-       var $titles = '<tr><td><strong>Parameter</strong></td><td><strong>Value</strong></td><td><strong>Description</strong></td></tr>';
+       var $table = '<table border=1 bgcolor=white>';
+       var $titles = '<tr><td><b>Parameter</b></td><td><b>Value</b></td><td><b>Description</b></td></tr>';
        var $warnRatio = 90;
        var $tablesSQL = false;
        var $cliFormat = "%32s => %s \r\n";
@@ -476,7 +476,7 @@ Committed_AS:   348732 kB
                        if (!$rs) return "<p>$this->helpurl. ".$this->conn->ErrorMsg()."</p>";
                        $s = "<h3>Suspicious SQL</h3>
 <font size=1>The following SQL have high average execution times</font><br>
-<table border=1 bgcolor=white><tr><td><strong>Avg Time</strong><td><strong>Count</strong><td><strong>SQL</strong><td><strong>Max</strong><td><strong>Min</strong></tr>\n";
+<table border=1 bgcolor=white><tr><td><b>Avg Time</b><td><b>Count</b><td><b>SQL</b><td><b>Max</b><td><b>Min</b></tr>\n";
                        $max = $this->maxLength;
                        while (!$rs->EOF) {
                                $sql = $rs->fields[1];
@@ -554,8 +554,8 @@ Committed_AS:   348732 kB
                        $ADODB_FETCH_MODE = $save;
                        if (!$rs) return "<p>$this->helpurl. ".$this->conn->ErrorMsg()."</p>";
                        $s = "<h3>Expensive SQL</h3>
-<font size=\"1\">Tuning the following SQL could reduce the server load substantially</font><br>
-<table border=\"1\" bgcolor=\"white\"><tr><td><strong>Load</strong><td><strong>Count</strong><td><strong>SQL</strong><td><strong>Max</strong><td><strong>Min</strong></tr>\n";
+<font size=1>Tuning the following SQL could reduce the server load substantially</font><br>
+<table border=1 bgcolor=white><tr><td><b>Load</b><td><b>Count</b><td><b>SQL</b><td><b>Max</b><td><b>Min</b></tr>\n";
                        $max = $this->maxLength;
                        while (!$rs->EOF) {
                                $sql = $rs->fields[1];
@@ -656,7 +656,7 @@ Committed_AS:   348732 kB
        function WarnCacheRatio($val)
        {
                if ($val < $this->warnRatio)
-                        return '<font color="red"><strong>Cache ratio should be at least '.$this->warnRatio.'%</strong></font>';
+                        return '<font color=red><b>Cache ratio should be at least '.$this->warnRatio.'%</b></font>';
                else return '';
        }
 
@@ -719,10 +719,10 @@ Committed_AS:   348732 kB
 
        if  (empty($_GET['hidem']))
        echo "<table border=1 width=100% bgcolor=lightyellow><tr><td colspan=2>
-       <strong><a href=http://adodb.sourceforge.net/?perf=1>ADOdb</a> Performance Monitor</strong> <font size=1>for $app</font></tr><tr><td>
-       <a href=?do=stats><strong>Performance Stats</strong></a> &nbsp; <a href=?do=viewsql><strong>View SQL</strong></a>
-        &nbsp; <a href=?do=tables><strong>View Tables</strong></a> &nbsp; <a href=?do=poll><strong>Poll Stats</strong></a>",
-        $allowsql ? ' &nbsp; <a href=?do=dosql><strong>Run SQL</strong></a>' : '',
+       <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> &nbsp; <a href=?do=viewsql><b>View SQL</b></a>
+        &nbsp; <a href=?do=tables><b>View Tables</b></a> &nbsp; <a href=?do=poll><b>Poll Stats</b></a>",
+        $allowsql ? ' &nbsp; <a href=?do=dosql><b>Run SQL</b></a>' : '',
         "$form",
         "</tr></table>";
 
index e46a74d..3b50789 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 /*
-  V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+  V5.14 8 Sept 2011   (c) 2000-2011 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.
index 4f4298a..3420ca3 100644 (file)
@@ -242,6 +242,12 @@ b. Implement daylight savings, which looks awfully complicated, see
 
 CHANGELOG
 
+- 7 Feb 2011 0.35
+Changed adodb_date to be symmetric with adodb_mktime. See $jan1_71. fix for bc.
+
+- 13 July 2010 0.34
+Changed adodb_get_gm_diff to use DateTimeZone().
+
 - 11 Feb 2008 0.33
 * Bug in 0.32 fix for hour handling. Fixed.
 
@@ -386,7 +392,7 @@ First implementation.
 /*
        Version Number
 */
-define('ADODB_DATE_VERSION',0.33);
+define('ADODB_DATE_VERSION',0.35);
 
 $ADODB_DATETIME_CLASS = (PHP_VERSION >= 5.2);
 
@@ -413,7 +419,7 @@ function adodb_date_test_date($y1,$m,$d=13)
        if ($h == 0) $h = '00';
        else if ($h < 10) $h = '0'.$h;
        if ("$y1-$m-$d $h:00:00" != $rez) {
-               print "<strong>$y1 error, expected=$y1-$m-$d $h:00:00, adodb=$rez</strong><br />";
+               print "<b>$y1 error, expected=$y1-$m-$d $h:00:00, adodb=$rez</b><br>";
                return false;
        }
        return true;
@@ -484,10 +490,10 @@ function adodb_date_test()
        print  adodb_mktime(0,0,0,10,4,1582).' ';
        print adodb_mktime(0,0,0,10,15,1582);
        $diff = (adodb_mktime(0,0,0,10,15,1582) - adodb_mktime(0,0,0,10,4,1582));
-       if ($diff != 3600*24) print " <strong>Error in gregorian correction = ".($diff/3600/24)." days </strong><br />";
+       if ($diff != 3600*24) print " <b>Error in gregorian correction = ".($diff/3600/24)." days </b><br>";
 
-       print " 15 Oct 1582, Fri=".(adodb_dow(1582,10,15) == 5 ? 'Fri' : '<strong>Error</strong>')."<br>";
-       print " 4 Oct 1582, Thu=".(adodb_dow(1582,10,4) == 4 ? 'Thu' : '<strong>Error</strong>')."<br>";
+       print " 15 Oct 1582, Fri=".(adodb_dow(1582,10,15) == 5 ? 'Fri' : '<b>Error</b>')."<br>";
+       print " 4 Oct 1582, Thu=".(adodb_dow(1582,10,4) == 4 ? 'Thu' : '<b>Error</b>')."<br>";
 
        print "<p>Testing overflow<p>";
 
@@ -538,9 +544,9 @@ function adodb_date_test()
                                        break;
                                }
                        }
-                       print "<strong>Error date(): $ts<br /><pre>
+                       print "<b>Error date(): $ts<br><pre>
 &nbsp; \"$s1\" (date len=".strlen($s1).")
-&nbsp; \"$s2\" (adodb_date len=".strlen($s2).")</strong></pre><br />";
+&nbsp; \"$s2\" (adodb_date len=".strlen($s2).")</b></pre><br>";
                        $fail = true;
                }
 
@@ -548,9 +554,9 @@ function adodb_date_test()
                $a2 = adodb_getdate($ts);
                $rez = array_diff($a1,$a2);
                if (sizeof($rez)>0) {
-                       print "<strong>Error getdate() $ts</strong><br />";
+                       print "<b>Error getdate() $ts</b><br>";
                                print_r($a1);
-                       print "<br />";
+                       print "<br>";
                                print_r($a2);
                        print "<p>";
                        $fail = true;
@@ -598,7 +604,7 @@ function adodb_date_test()
        }
        echo "Tested $cnt dates<br>";
        if (!$fail) print "<p>Passed !</p>";
-       else print "<p><strong>Failed</strong> :-(</p>";
+       else print "<p><b>Failed</b> :-(</p>";
 }
 
 /**
@@ -729,9 +735,17 @@ global $ADODB_DATETIME_CLASS;
        } else {
                if (isset($TZ)) return $TZ;
                $y = date('Y');
-               $TZ = mktime(0,0,0,12,2,$y,0) - gmmktime(0,0,0,12,2,$y,0);
+               /*
+               if (function_exists('date_default_timezone_get') && function_exists('timezone_offset_get')) {
+                       $tzonename = date_default_timezone_get();
+                       if ($tzonename) {
+                               $tobj = new DateTimeZone($tzonename);
+                               $TZ = -timezone_offset_get($tobj,new DateTime("now",$tzo));
+                       }
+               }
+               */
+               if (empty($TZ)) $TZ = mktime(0,0,0,12,2,$y) - gmmktime(0,0,0,12,2,$y);
        }
-
        return $TZ;
 }
 
@@ -1040,11 +1054,19 @@ function adodb_date($fmt,$d=false,$is_gmt=false)
 {
 static $daylight;
 global $ADODB_DATETIME_CLASS;
+static $jan1_1971;
+
+
+       if (!isset($daylight)) {
+               $daylight = function_exists('adodb_daylight_sv');
+               if (empty($jan1_1971)) $jan1_1971 = mktime(0,0,0,1,1,1971); // we only use date() when > 1970 as adodb_mktime() only uses mktime() when > 1970
+       }
 
        if ($d === false) return ($is_gmt)? @gmdate($fmt): @date($fmt);
        if (!defined('ADODB_TEST_DATES')) {
                if ((abs($d) <= 0x7FFFFFFF)) { // check if number in 32-bit signed range
-                       if (!defined('ADODB_NO_NEGATIVE_TS') || $d >= 0) // if windows, must be +ve integer
+
+                       if (!defined('ADODB_NO_NEGATIVE_TS') || $d >= $jan1_1971) // if windows, must be +ve integer
                                return ($is_gmt)? @gmdate($fmt,$d): @date($fmt,$d);
 
                }
@@ -1053,7 +1075,6 @@ global $ADODB_DATETIME_CLASS;
 
        $arr = _adodb_getdate($d,true,$is_gmt);
 
-       if (!isset($daylight)) $daylight = function_exists('adodb_daylight_sv');
        if ($daylight) adodb_daylight_sv($arr, $is_gmt);
 
        $year = $arr['year'];
@@ -1426,4 +1447,4 @@ global $ADODB_DATE_LOCALE;
 }
 
 
-?>
\ No newline at end of file
+?>
index 1279d1e..b409376 100644 (file)
@@ -1871,7 +1871,7 @@ class adoSchema {
                                           . '<table>' . "\n";
 
                foreach( $msg as $label => $details ) {
-                       $error_details .= '<tr><td><strong>' . $label . ': </strong></td><td>' . htmlentities( $details ) . '</td></tr>' . "\n";
+                       $error_details .= '<tr><td><b>' . $label . ': </b></td><td>' . htmlentities( $details ) . '</td></tr>' . "\n";
                }
 
                $error_details .= '</table>';
index 064a010..1f09712 100644 (file)
@@ -2031,7 +2031,7 @@ class adoSchema {
                                           . '<table>' . "\n";
 
                foreach( $msg as $label => $details ) {
-                       $error_details .= '<tr><td><strong>' . $label . ': </strong></td><td>' . htmlentities( $details ) . '</td></tr>' . "\n";
+                       $error_details .= '<tr><td><b>' . $label . ': </b></td><td>' . htmlentities( $details ) . '</td></tr>' . "\n";
                }
 
                $error_details .= '</table>';
index 66bd774..215576c 100644 (file)
@@ -14,7 +14,7 @@
 /**
        \mainpage
 
-        @version V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+        @version V5.14 8 Sept 2011   (c) 2000-2011 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.
                /**
                 * ADODB version as a string.
                 */
-               $ADODB_vers = 'V5.11 5 May 2010  (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved. Released BSD & LGPL.';
+               $ADODB_vers = 'V5.14 8 Sept 2011  (c) 2000-2011 John Lim (jlim#natsoft.com). All rights reserved. Released BSD & LGPL.';
 
                /**
                 * Determines whether recordset->RecordCount() is used.
                        $element0 = reset($inputarr);
                        # is_object check because oci8 descriptors can be passed in
                        $array_2d = $this->bulkBind && is_array($element0) && !is_object(reset($element0));
+
                        //remove extra memory copy of input -mikefedyk
                        unset($element0);
 
                                $sqlarr = explode('?',$sql);
                                $nparams = sizeof($sqlarr)-1;
                                if (!$array_2d) $inputarr = array($inputarr);
+
                                foreach($inputarr as $arr) {
                                        $sql = ''; $i = 0;
                                        //Use each() instead of foreach to reduce memory usage -mikefedyk
                                if (get_magic_quotes_runtime() && !$this->memCache) {
                                        ADOConnection::outp("Please disable magic_quotes_runtime - it corrupts cache files :(");
                                }
-                               if ($this->debug !== -1) ADOConnection::outp( " $md5file cache failure: $err (see sql below)");
+                               if ($this->debug !== -1) ADOConnection::outp( " $md5file cache failure: $err (this is a notice and not an error)");
                        }
 
                        $rs = $this->Execute($sqlparam,$inputarr);
@@ -2657,7 +2659,7 @@ http://www.stanford.edu/dept/itss/docs/oracle/10g/server.101/b10759/statements_1
        /**
        * Will select the supplied $page number from a recordset, given that it is paginated in pages of
        * $nrows rows per page. It also saves two boolean values saying if the given page is the first
-       * and/or last one of the recordset. Added by Iván Oliva to provide recordset pagination.
+       * and/or last one of the recordset. Added by Ivn Oliva to provide recordset pagination.
        *
        * See readme.htm#ex8 for an example of usage.
        *
@@ -2684,7 +2686,7 @@ http://www.stanford.edu/dept/itss/docs/oracle/10g/server.101/b10759/statements_1
        /**
        * Will select the supplied $page number from a recordset, given that it is paginated in pages of
        * $nrows rows per page. It also saves two boolean values saying if the given page is the first
-       * and/or last one of the recordset. Added by Iván Oliva to provide recordset pagination.
+       * and/or last one of the recordset. Added by Ivn Oliva to provide recordset pagination.
        *
        * @param secs2cache     seconds to cache data, set to 0 to force query
        * @param sql
@@ -2883,9 +2885,9 @@ http://www.stanford.edu/dept/itss/docs/oracle/10g/server.101/b10759/statements_1
        var $_obj;                              /** Used by FetchObj */
        var $_names;                    /** Used by FetchObj */
 
-       var $_currentPage = -1; /** Added by Iván Oliva to implement recordset pagination */
-       var $_atFirstPage = false;      /** Added by Iván Oliva to implement recordset pagination */
-       var $_atLastPage = false;       /** Added by Iván Oliva to implement recordset pagination */
+       var $_currentPage = -1; /** Added by Ivn Oliva to implement recordset pagination */
+       var $_atFirstPage = false;      /** Added by Ivn Oliva to implement recordset pagination */
+       var $_atLastPage = false;       /** Added by Ivn Oliva to implement recordset pagination */
        var $_lastPageNo = -1;
        var $_maxRecordCount = 0;
        var $datetime = false;
@@ -4153,7 +4155,7 @@ http://www.stanford.edu/dept/itss/docs/oracle/10g/server.101/b10759/statements_1
                                $fakedsn = str_replace('@/','@adodb-fakehost/',$fakedsn);
                        }
 
-                        if ((strpos($origdsn, 'sqlite')) !== FALSE) {
+                        if ((strpos($origdsn, 'sqlite')) !== FALSE && stripos($origdsn, '%2F') === FALSE) {
              // special handling for SQLite, it only might have the path to the database file.
              // If you try to connect to a SQLite database using a dsn like 'sqlite:///path/to/database', the 'parse_url' php function
              // will throw you an exception with a message such as "unable to parse url"
@@ -4413,4 +4415,4 @@ http://www.stanford.edu/dept/itss/docs/oracle/10g/server.101/b10759/statements_1
 
 
 }
-?>
\ No newline at end of file
+?>
index 294b8ae..7c020d7 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 /**
-  V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+  V5.14 8 Sept 2011  (c) 2000-2011 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.
index 2aec30f..04d51e4 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 /**
-  V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+  V5.14 8 Sept 2011  (c) 2000-2011 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.
index 1f1d252..ca8c333 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 /**
-  V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+  V5.14 8 Sept 2011  (c) 2000-2011 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.
index b6e10ab..b067bbd 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 /**
-  V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+  V5.14 8 Sept 2011  (c) 2000-2011 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.
index e86b4a5..b711b6e 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 /**
-  V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+  V5.14 8 Sept 2011  (c) 2000-2011 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.
index 4ab60d3..cffb556 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 /**
-  V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+  V5.14 8 Sept 2011  (c) 2000-2011 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.
index b35284f..ae7136e 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 /**
-  V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+  V5.14 8 Sept 2011  (c) 2000-2011 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.
index 8e43420..4a43290 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 /**
-  V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+  V5.14 8 Sept 2011  (c) 2000-2011 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.
index 82b1af6..9250028 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 /**
-  V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+  V5.14 8 Sept 2011  (c) 2000-2011 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.
index 7f6ccc4..5466383 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 /**
-  V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+  V5.14 8 Sept 2011  (c) 2000-2011 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.
index dfeb98c..d36da77 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 /**
-  V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+  V5.14 8 Sept 2011  (c) 2000-2011 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.
index 888922b..1d2c57b 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 /**
-  V4.50 6 July 2004  (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+  V4.50 6 July 2004  (c) 2000-2011 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.
index e5a65fc..c15fdad 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 /**
-  V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+  V5.14 8 Sept 2011  (c) 2000-2011 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.
index fea2d98..f5f2ffc 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 /**
-  V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+  V5.14 8 Sept 2011  (c) 2000-2011 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.
index ef94e9b..eea7ccf 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /* 
-V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+V5.14 8 Sept 2011  (c) 2000-2011 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. 
index 0793401..8d8b7a3 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /*
-V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+V5.14 8 Sept 2011   (c) 2000-2011 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.
index 26863c8..e4573af 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /*
-V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+V5.14 8 Sept 2011   (c) 2000-2011 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.
@@ -99,12 +99,11 @@ class ADODB_ado extends ADOConnection {
                        if (!$argUsername) $argHostname .= ";Trusted_Connection=Yes";
                } else if ($argProvider=='access')
                        $argProvider = "Microsoft.Jet.OLEDB.4.0"; // Microsoft Jet Provider
-
+               
                if ($argProvider) $dbc->Provider = $argProvider;
 
                if ($argProvider) $argHostname = "PROVIDER=$argProvider;DRIVER={SQL Server};SERVER=$argHostname";
 
-
                if ($argDatabasename) $argHostname .= ";DATABASE=$argDatabasename";
                if ($argUsername) $argHostname .= ";$u=$argUsername";
                if ($argPassword)$argHostname .= ";$p=$argPassword";
index 5b30f44..f692534 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /* 
-V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+V5.14 8 Sept 2011  (c) 2000-2011 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. 
index dd2f58a..fcd2d95 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /* 
-V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+V5.14 8 Sept 2011  (c) 2000-2011 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. 
index b19210f..c6c377c 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /* 
-V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+V5.14 8 Sept 2011  (c) 2000-2011 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. 
index 5606ca6..6e7fca5 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /*
-V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+V5.14 8 Sept 2011  (c) 2000-2011 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.
index faf6c0a..745035a 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /* 
-  V5.11 5 May 2010   (c) 2000-2010 (jlim#natsoft.com). All rights reserved.
+  V5.14 8 Sept 2011  (c) 2000-2011 (jlim#natsoft.com). All rights reserved.
 
   This is a version of the ADODB driver for DB2.  It uses the 'ibm_db2' PECL extension
   for PHP (http://pecl.php.net/package/ibm_db2), which in turn requires DB2 V8.2.2 or
index 6afa944..9cf86bc 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /* 
-V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+V5.14 8 Sept 2011  (c) 2000-2011 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. 
index e02e269..91c29aa 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /* 
-V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+V5.14 8 Sept 2011  (c) 2000-2011 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. 
index 1cb5597..ba6da84 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /*
- @version V5.11 5 May 2010  (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+ @version V5.14 8 Sept 2011 (c) 2000-2011 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. 
index 3bb07e7..cb1ac10 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /* 
-V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+V5.14 8 Sept 2011  (c) 2000-2011 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. 
index 71c3a5e..e600667 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /*
-V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.  
+V5.14 8 Sept 2011  (c) 2000-2011 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.
index 18ad037..a5637ff 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
-* @version V5.11 5 May 2010  (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+* @version V5.14 8 Sept 2011 (c) 2000-2011 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.
index 1c9aec6..b894700 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /*
-V5.11 5 May 2010   (c) 2000-2010 John Lim. All rights reserved.
+V5.14 8 Sept 2011  (c) 2000-2011 John Lim. 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.
index 4c5eb1a..16f38ad 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /*
-  V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+  V5.14 8 Sept 2011  (c) 2000-2011 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.
index 9de8f78..a63b481 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /* 
-V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+V5.14 8 Sept 2011  (c) 2000-2011 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. 
index 78d2c6c..740645e 100644 (file)
@@ -9,7 +9,7 @@
 // ADOdb  - Database Abstraction Library for PHP                         //
 //          http://adodb.sourceforge.net/                                //
 //                                                                       //
-// Copyright (c) 2000-2010 John Lim (jlim\@natsoft.com.my)               //
+// Copyright (c) 2000-2011 John Lim (jlim\@natsoft.com.my)               //
 //          All rights reserved.                                         //
 //          Released under both BSD license and LGPL library license.    //
 //          Whenever there is any discrepancy between the two licenses,  //
index 9531085..d7f2b58 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /*
-V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+V5.14 8 Sept 2011   (c) 2000-2011 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.
@@ -156,6 +156,7 @@ class ADODB_mssqlnative extends ADOConnection {
                } else
                        $savem = $this->SetFetchMode(ADODB_FETCH_NUM);
                $arrServerInfo = sqlsrv_server_info($this->_connectionID);
+               $ADODB_FETCH_MODE = $savem;
                $arr['description'] = $arrServerInfo['SQLServerName'].' connected to '.$arrServerInfo['CurrentDatabase'];
                $arr['version'] = $arrServerInfo['SQLServerVersion'];//ADOConnection::_findvers($arr['description']);
                return $arr;
@@ -432,7 +433,7 @@ class ADODB_mssqlnative extends ADOConnection {
                So all your blobs must be of type "image".
 
                Remember to set in php.ini the following...
-
+               
                ; Valid range 0 - 2147483647. Default = 4096.
                mssql.textlimit = 0 ; zero to pass through
 
@@ -461,15 +462,7 @@ class ADODB_mssqlnative extends ADOConnection {
                } else {
                        $rez = sqlsrv_query($this->_connectionID,$sql);
                }
-        if ($this->debug) error_log("<hr>running query: ".var_export($sql,true)."<hr>input array: ".var_export($inputarr,true)."<hr>result: ".var_export($rez,true));//"<hr>connection: ".serialize($this->_connectionID)
-        //fix for returning true on anything besides select statements
-        if (is_array($sql)) $sql = $sql[1];
-        $sql = ltrim($sql);
-        if(stripos($sql, 'SELECT') !== 0 && $rez !== false) {
-            if ($this->debug) error_log(" isn't a select query, returning boolean true");
-            return true;
-        }
-        //end fix
+        if ($this->debug) error_log("<hr>running query: ".var_export($sql,true)."<hr>input array: ".var_export($inputarr,true)."<hr>result: ".var_export($rez,true));
         if(!$rez) $rez = false;
                return $rez;
        }
@@ -486,13 +479,13 @@ class ADODB_mssqlnative extends ADOConnection {
        // mssql uses a default date like Dec 30 2000 12:00AM
        static function UnixDate($v)
        {
-               return ADORecordSet_array_mssql::UnixDate($v);
+               return ADORecordSet_array_mssqlnative::UnixDate($v);
        }
 
        static function UnixTimeStamp($v)
        {
-               return ADORecordSet_array_mssql::UnixTimeStamp($v);
-       }
+               return ADORecordSet_array_mssqlnative::UnixTimeStamp($v);
+       }       
 
        function &MetaIndexes($table,$primary=false, $owner = false)
        {
@@ -702,7 +695,7 @@ class ADORecordset_mssqlnative extends ADORecordSet {
                fields in a certain query result. If the field offset isn't specified, the next field that wasn't yet retrieved by
                fetchField() is retrieved.      */
 
-       function &FetchField($fieldOffset = -1)
+       function FetchField($fieldOffset = -1)
        {
         if ($this->connection->debug) error_log("<hr>fetchfield: $fieldOffset, fetch array: <pre>".print_r($this->fields,true)."</pre> backtrace: ".adodb_backtrace(false));
                if ($fieldOffset != -1) $this->fieldOffset = $fieldOffset;
@@ -710,7 +703,8 @@ class ADORecordset_mssqlnative extends ADORecordSet {
                if(array_key_exists($this->fieldOffset,$arrKeys) && !array_key_exists($arrKeys[$this->fieldOffset],$this->fields)) {
                        $f = false;
                } else {
-                       $f = $this->fields[ $arrKeys[$this->fieldOffset] ];
+                       $f = new ADOFetchObj();
+                       $f->name = $arrKeys[$this->fieldOffset];
                        if($fieldOffset == -1) $this->fieldOffset++;
                }
 
@@ -748,7 +742,7 @@ class ADORecordset_mssqlnative extends ADORecordSet {
        function _fetch($ignore_fields=false)
        {
         if ($this->connection->debug) error_log("_fetch()");
-               if ($this->fetchMode & ADODB_FETCH_ASSOC) {
+               if ($this->fetchMode & ADODB_FETCH_BOTH) {
                        if ($this->fetchMode & ADODB_FETCH_NUM) {
                 if ($this->connection->debug) error_log("fetch mode: both");
                                $this->fields = @sqlsrv_fetch_array($this->_queryID,SQLSRV_FETCH_BOTH);
index dd3b377..0a0ea57 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
-* @version V5.11 5 May 2010  (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+* @version V5.14 8 Sept 2011 (c) 2000-2011 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.
index 4b215e5..8252b67 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /*
-V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+V5.14 8 Sept 2011  (c) 2000-2011 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.
index 094c150..2808d14 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /*
-V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+V5.14 8 Sept 2011  (c) 2000-2011 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.
@@ -99,6 +99,9 @@ class ADODB_mysqli extends ADOConnection {
                        mysqli_options($this->_connectionID,$arr[0],$arr[1]);
                }
 
+               //http ://php.net/manual/en/mysqli.persistconns.php
+               if ($persist && PHP_VERSION > 5.2 && strncmp($argHostname,'p:',2) != 0) $argHostname = 'p:'.$argHostname;
+
                #if (!empty($this->port)) $argHostname .= ":".$this->port;
                $ok = mysqli_real_connect($this->_connectionID,
                                    $argHostname,
@@ -144,10 +147,13 @@ class ADODB_mysqli extends ADOConnection {
        // do not use $ADODB_COUNTRECS
        function GetOne($sql,$inputarr=false)
        {
+               global $ADODB_GETONE_EOF;
+       
                $ret = false;
                $rs = $this->Execute($sql,$inputarr);
-               if ($rs) {      
-                       if (!$rs->EOF) $ret = reset($rs->fields);
+               if ($rs) {
+                       if ($rs->EOF) $ret = $ADODB_GETONE_EOF;
+                       else $ret = reset($rs->fields);
                        $rs->Close();
                }
                return $ret;
index 668bdcf..5327834 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 /*
-V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+V5.14 8 Sept 2011  (c) 2000-2011 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.
index 5007b75..f300143 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 /*
-V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+V5.14 8 Sept 2011  (c) 2000-2011 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.
index 13eec41..3da7a69 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /*
-  V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+  V5.14 8 Sept 2011  (c) 2000-2011 John Lim (jlim#natsoft.com). All rights reserved.
 
   First cut at the Netezza Driver by Josh Eldridge joshuae74#hotmail.com
  Based on the previous postgres drivers.
index b8568ca..dc942c3 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /*
 
-  version V5.11 5 May 2010  (c) 2000-2010 John Lim. All rights reserved.
+  version V5.14 8 Sept 2011 (c) 2000-2011 John Lim. All rights reserved.
 
   Released under both BSD license and Lesser GPL library license.
   Whenever there is any discrepancy between the two licenses,
@@ -30,8 +30,8 @@ For Oracle the default is dd-mon-yy or dd-mon-yyyy, and for SQL-92 the default i
 yy-mm-dd or yyyy-mm-dd.
 
 Using 'RR' in the format forces two-digit years less than or equal to 49 to be
-interpreted as years in the 21st century (2000\962049), and years over 50 as years in
-the 20th century (1950\961999). Setting the RR format as the default for all two-digit
+interpreted as years in the 21st century (2000-2049), and years over 50 as years in
+the 20th century (1950-1999). Setting the RR format as the default for all two-digit
 year entries allows you to become year-2000 compliant. For example:
 NLS_DATE_FORMAT='RR-MM-DD'
 
@@ -73,7 +73,14 @@ class ADODB_oci8 extends ADOConnection {
        var $_bindInputArray = true;
        var $hasGenID = true;
        var $_genIDSQL = "SELECT (%s.nextval) FROM DUAL";
-       var $_genSeqSQL = "CREATE SEQUENCE %s START WITH %s";
+       var $_genSeqSQL = "
+DECLARE
+  PRAGMA AUTONOMOUS_TRANSACTION;
+BEGIN
+       execute immediate 'CREATE SEQUENCE %s START WITH %s';
+END;
+";
+
        var $_dropSeqSQL = "DROP SEQUENCE %s";
        var $hasAffectedRows = true;
        var $random = "abs(mod(DBMS_RANDOM.RANDOM,10000001)/10000000)";
@@ -328,7 +335,7 @@ NATSOFT.DOMAIN =
                if (is_string($ts)) $ts = ADORecordSet::UnixTimeStamp($ts);
 
                if (is_object($ts)) $tss = $ts->format("'Y-m-d H:i:s'");
-               else $tss = adodb_date("'Y-m-d H:i:s'",$ts);
+               else $tss = date("'Y-m-d H:i:s'",$ts);
 
                return 'TO_DATE('.$tss.",'RRRR-MM-DD, HH24:MI:SS')";
        }
@@ -598,10 +605,13 @@ NATSOFT.DOMAIN =
        {
                // seems that oracle only supports 1 hint comment in 8i
                if ($this->firstrows) {
+                       if ($nrows > 500 && $nrows < 1000) $hint = "FIRST_ROWS($nrows)";
+                       else $hint = 'FIRST_ROWS';
+
                        if (strpos($sql,'/*+') !== false)
-                               $sql = str_replace('/*+ ','/*+FIRST_ROWS ',$sql);
+                               $sql = str_replace('/*+ ',"/*+$hint ",$sql);
                        else
-                               $sql = preg_replace('/^[ \t\n]*select/i','SELECT /*+FIRST_ROWS*/',$sql);
+                               $sql = preg_replace('/^[ \t\n]*select/i',"SELECT /*+$hint*/",$sql);
                }
 
                if ($offset == -1 || ($offset < $this->selectOffsetAlg1 && 0 < $nrows && $nrows < 1000)) {
@@ -789,10 +799,13 @@ NATSOFT.DOMAIN =
                        #if (!is_array($inputarr)) $inputarr = array($inputarr);
 
                        $element0 = reset($inputarr);
+                       $array2d =  $this->bulkBind && is_array($element0) && !is_object(reset($element0));
+
+                       # see http://phplens.com/lens/lensforum/msgs.php?id=18786
+                       if ($array2d || !$this->_bindInputArray) {
 
-                       if (!$this->_bindInputArray) {
                        # is_object check because oci8 descriptors can be passed in
-                       if (is_array($element0) && !is_object(reset($element0))) {
+                       if ($array2d && $this->_bindInputArray) {
                                if (is_string($sql))
                                        $stmt = $this->Prepare($sql);
                                else
@@ -802,6 +815,7 @@ NATSOFT.DOMAIN =
                                        $ret = $this->_Execute($stmt,$arr);
                                        if (!$ret) return $ret;
                                }
+                               return $ret;
                        } else {
                                $sqlarr = explode(':',$sql);
                                $sql = '';
index 6d8a202..d017257 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /** 
- * @version V5.11 5 May 2010  (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+ * @version V5.14 8 Sept 2011 (c) 2000-2011 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. 
index 3f80db1..dae16c4 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /*
-V5.11 5 May 2010   (c) 2000-2010 John Lim. All rights reserved.
+V5.14 8 Sept 2011  (c) 2000-2011 John Lim. 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.
@@ -48,7 +48,12 @@ class ADODB_oci8po extends ADODB_oci8 {
                } 
                return ADODB_oci8::Prepare($sql,$cursor);
        }
-       
+
+       function Execute($sql,$inputarr=false)
+       {
+               return ADOConnection::Execute($sql,$inputarr);
+       }
+
        // emulate handling of parameters ? ?, replacing with :bind0 :bind1
        function _query($sql,$inputarr=false)
        {
index 0beb4bf..9089616 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /* 
-V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+V5.14 8 Sept 2011  (c) 2000-2011 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. 
index 8bec473..5b56cec 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /* 
-V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+V5.14 8 Sept 2011  (c) 2000-2011 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. 
index fe47341..6a67678 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /* 
-V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+V5.14 8 Sept 2011  (c) 2000-2011 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. 
index 7c2c77f..a00fab2 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /* 
-V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+V5.14 8 Sept 2011  (c) 2000-2011 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. 
index 15227f4..7c9ebef 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /*
-  V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+  V5.14 8 Sept 2011  (c) 2000-2011 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.
@@ -836,4 +836,4 @@ class ADORecordSet_odbtp_sybase extends ADORecordSet_odbtp {
                return $this->ADORecordSet_odbtp($id,$mode);
        }
 }
-?>
\ No newline at end of file
+?>
index e7360e1..ce93961 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /*
-       V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+       V5.14 8 Sept 2011  (c) 2000-2011 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.
@@ -36,4 +36,4 @@ class ADODB_odbtp_unicode extends ADODB_odbtp {
                $this->ADODB_odbtp();
        }
 }
-?>
\ No newline at end of file
+?>
index fa18eee..4c6cbb1 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /*
-V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+V5.14 8 Sept 2011  (c) 2000-2011 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.
index bc88507..652e370 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /* 
-V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+V5.14 8 Sept 2011  (c) 2000-2011 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. 
index 5a7dd51..6e2be46 100644 (file)
@@ -2,7 +2,7 @@
 
 
 /*
-V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+V5.14 8 Sept 2011  (c) 2000-2011 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.
index 94b59fb..8809072 100644 (file)
@@ -2,7 +2,7 @@
 
 
 /*
-V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+V5.14 8 Sept 2011  (c) 2000-2011 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.
index 6e9dcc0..d7c6b72 100644 (file)
@@ -2,7 +2,7 @@
 
 
 /*
-V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+V5.14 8 Sept 2011  (c) 2000-2011 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.
index 5405dc3..62ca0f6 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 /*
-V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+V5.14 8 Sept 2011  (c) 2000-2011 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.
index 0306a05..80c9548 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 /* 
- V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+ V5.14 8 Sept 2011  (c) 2000-2011 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. 
index 6f580ff..3c313d1 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /*
- V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+ V5.14 8 Sept 2011  (c) 2000-2011 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.
index 8258149..bf7fc71 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /*
- V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+ V5.14 8 Sept 2011  (c) 2000-2011 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.
@@ -109,6 +109,8 @@ WHERE relkind in ('r','v') AND (c.relname='%s' or c.relname = lower('%s'))
        var $_bindInputArray = false; // requires postgresql 7.3+ and ability to modify database
        var $disableBlobs = false; // set to true to disable blob checking, resulting in 2-5% improvement in performance.
        
+       var $_pnum = 0;
+       
        // The last (fmtTimeStamp is not entirely correct: 
        // PostgreSQL also has support for time zones, 
        // and writes these time in this format: "2001-03-01 18:59:26+02". 
@@ -206,19 +208,17 @@ a different OID if a database must be reloaded. */
        {
                $info = $this->ServerInfo();
                if ($info['version'] >= 7.3) {
-               $this->metaTablesSQL = "select tablename,'T' from pg_tables where tablename not like 'pg\_%'
-                         and schemaname  not in ( 'pg_catalog','information_schema')
-       union 
-        select viewname,'V' from pg_views where viewname not like 'pg\_%'  and schemaname  not in ( 'pg_catalog','information_schema') ";
+               $this->metaTablesSQL = "select table_name,'T' from information_schema.tables where table_schema not in ( 'pg_catalog','information_schema')
+                       union
+                      select table_name,'V' from information_schema.views where table_schema not in ( 'pg_catalog','information_schema') ";
                }
                if ($mask) {
                        $save = $this->metaTablesSQL;
                        $mask = $this->qstr(strtolower($mask));
                        if ($info['version']>=7.3)
-                               $this->metaTablesSQL = "
-select tablename,'T' from pg_tables where tablename like $mask and schemaname not in ( 'pg_catalog','information_schema')  
- union 
-select viewname,'V' from pg_views where viewname like $mask and schemaname  not in ( 'pg_catalog','information_schema')  ";
+                               $this->metaTablesSQL = "select table_name,'T' from information_schema.tables where table_name like $mask and table_schema not in ( 'pg_catalog','information_schema')
+                       union
+                      select table_name,'V' from information_schema.views where table_name like $mask and table_schema not in ( 'pg_catalog','information_schema') ";
                        else
                                $this->metaTablesSQL = "
 select tablename,'T' from pg_tables where tablename like $mask 
@@ -444,7 +444,6 @@ select viewname,'V' from pg_views where viewname like $mask";
        // assumes bytea for blob, and varchar for clob
        function UpdateBlob($table,$column,$val,$where,$blobtype='BLOB')
        {
-       
                if ($blobtype == 'CLOB') {
                return $this->Execute("UPDATE $table SET $column=" . $this->qstr($val) . " WHERE $where");
                }
@@ -584,6 +583,12 @@ select viewname,'V' from pg_views where viewname like $mask";
                
        }
 
+       function Param($name)
+       {
+               $this->_pnum += 1;
+               return '$'.$this->_pnum;
+       }
+
          function MetaIndexes ($table, $primary = FALSE, $owner = false)
       {
          global $ADODB_FETCH_MODE;
@@ -721,6 +726,7 @@ WHERE (c2.relname=\'%s\' or c2.relname=lower(\'%s\'))';
        // returns queryID or false
        function _query($sql,$inputarr=false)
        {
+               $this->_pnum = 0;
                $this->_errorMsg = false;
                if ($inputarr) {
                /*
@@ -950,8 +956,8 @@ class ADORecordSet_postgres64 extends ADORecordSet{
        function _decode($blob)
        {
                if ($blob === NULL) return NULL;
-               eval('$realblob="'.adodb_str_replace(array('"','$'),array('\"','\$'),$blob).'";');
-               return $realblob;       
+//             eval('$realblob="'.adodb_str_replace(array('"','$'),array('\"','\$'),$blob).'";');
+               return pg_unescape_bytea($blob);
        }
        
        function _fixblobs()
index eecfdc3..98855d6 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /*
- V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+ V5.14 8 Sept 2011  (c) 2000-2011 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.
@@ -146,6 +146,8 @@ class ADODB_postgres7 extends ADODB_postgres64 {
                        // We don't have native support for parameterized queries, so let's emulate it at the parent
                        return ADODB_postgres64::_query($sql, $inputarr);
                }
+               
+               $this->_pnum = 0;
                $this->_errorMsg = false;
                // -- added Cristiano da Cunha Duarte
                if ($inputarr) {
index 3134e3c..14e6e70 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /*
- V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+ V5.14 8 Sept 2011  (c) 2000-2011 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.
index a7292b8..0c1521b 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /*
-V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+V5.14 8 Sept 2011  (c) 2000-2011 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.
index 8a4bf9a..c5f0dc1 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /* 
-V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+V5.14 8 Sept 2011  (c) 2000-2011 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. 
index b81e5e7..d7cadf9 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /* 
-version V5.06 16 Oct 2008  (c) 2000-2010  John Lim (jlim#natsoft.com).  All rights
+version V5.14 8 Sept 2011  (c) 2000-2011  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, 
@@ -166,4 +166,4 @@ if (!defined('ADODB_SYBASE_SQLANYWHERE')){
 
 
 } //define
-?>
\ No newline at end of file
+?>
index bb95a42..b184864 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /*
-V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+V5.14 8 Sept 2011  (c) 2000-2011 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.
@@ -104,7 +104,8 @@ class ADODB_sqlite extends ADOConnection {
            $fld->max_length = $size;
            $fld->not_null = $r['notnull'];
            $fld->default_value = $r['dflt_value'];
-           $fld->scale = 0;
+           $fld->scale = 0;    
+           if (isset($r['pk']) && $r['pk']) $fld->primary_key=1;
            if ($save == ADODB_FETCH_NUM) $arr[] = $fld;        
            else $arr[strtoupper($fld->name)] = $fld;
          }
diff --git a/typo3/sysext/adodb/adodb/drivers/adodb-sqlite3.inc.php b/typo3/sysext/adodb/adodb/drivers/adodb-sqlite3.inc.php
new file mode 100644 (file)
index 0000000..f55311a
--- /dev/null
@@ -0,0 +1,430 @@
+<?php
+/*
+V5.14 8 Sept 2011  (c) 2000-2011 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.
+
+  Latest version is available at http://adodb.sourceforge.net
+  
+  SQLite info: http://www.hwaci.com/sw/sqlite/
+    
+  Install Instructions:
+  ====================
+  1. Place this in adodb/drivers
+  2. Rename the file, remove the .txt prefix.
+*/
+
+// security - hide paths
+if (!defined('ADODB_DIR')) die();
+
+// class ADODB_sqlite extends ADOConnection { **change
+class ADODB_sqlite3 extends ADOConnection {
+       //var $databaseType = "sqlite"; **change
+       var $databaseType = "sqlite3";
+       var $replaceQuote = "''"; // string to use to replace quotes
+       var $concat_operator='||';
+       var $_errorNo = 0;
+       var $hasLimit = true;   
+       var $hasInsertID = true;                /// supports autoincrement ID?
+       var $hasAffectedRows = true;    /// supports affected rows for update/delete?
+       var $metaTablesSQL = "SELECT name FROM sqlite_master WHERE type='table' ORDER BY name";
+       var $sysDate = "adodb_date('Y-m-d')";
+       var $sysTimeStamp = "adodb_date('Y-m-d H:i:s')";
+       var $fmtTimeStamp = "'Y-m-d H:i:s'";
+       
+       //function ADODB_sqlite3() **change
+       function ADODB_sqlite3() 
+       {
+       }
+       
+/*
+  function __get($name) 
+  {
+       switch($name) {
+       case 'sysDate': return "'".date($this->fmtDate)."'";
+       case 'sysTimeStamp' : return "'".date($this->sysTimeStamp)."'";
+       }
+  }*/
+       
+       function ServerInfo()
+       {
+               $arr['version'] = sqlite_libversion(); //**tochange
+               $arr['description'] = 'SQLite '; //**tochange
+               $arr['encoding'] = sqlite_libencoding();//**tochange
+               return $arr;
+       }
+       
+       function BeginTrans()
+       {         
+                if ($this->transOff) return true; 
+                $ret = $this->Execute("BEGIN TRANSACTION");
+                $this->transCnt += 1;
+                return true;
+       }
+       
+       function CommitTrans($ok=true) 
+       { 
+               if ($this->transOff) return true; 
+               if (!$ok) return $this->RollbackTrans();
+               $ret = $this->Execute("COMMIT");
+               if ($this->transCnt>0)$this->transCnt -= 1;
+               return !empty($ret);
+       }
+       
+       function RollbackTrans()
+       {
+               if ($this->transOff) return true; 
+               $ret = $this->Execute("ROLLBACK");
+               if ($this->transCnt>0)$this->transCnt -= 1;
+               return !empty($ret);
+       }
+       
+       // mark newnham
+       function MetaColumns($table, $normalize=true) 
+       {
+         global $ADODB_FETCH_MODE;
+         $false = false;
+         $save = $ADODB_FETCH_MODE;
+         $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
+         if ($this->fetchMode !== false) $savem = $this->SetFetchMode(false);
+         $rs = $this->Execute("PRAGMA table_info('$table')");
+         if (isset($savem)) $this->SetFetchMode($savem);
+         if (!$rs) {
+           $ADODB_FETCH_MODE = $save; 
+           return $false;
+         }
+         $arr = array();
+         while ($r = $rs->FetchRow()) {
+         
+           $type = explode('(',$r['type']);
+           $size = '';
+           if (sizeof($type)==2)
+           $size = trim($type[1],')');
+           $fn = strtoupper($r['name']);
+           $fld = new ADOFieldObject;
+           $fld->name = $r['name'];
+           $fld->type = $type[0];
+           $fld->max_length = $size;
+           $fld->not_null = $r['notnull'];
+           $fld->default_value = $r['dflt_value'];
+           $fld->scale = 0;
+               if (isset($r['pk']) && $r['pk']) $fld->primary_key=1;
+           if ($save == ADODB_FETCH_NUM) $arr[] = $fld;        
+           else $arr[strtoupper($fld->name)] = $fld;
+         }
+         $rs->Close();
+         $ADODB_FETCH_MODE = $save;
+         return $arr;
+       }
+       
+       function _init($parentDriver)
+       {
+       
+               $parentDriver->hasTransactions = false;
+               $parentDriver->hasInsertID = true;
+       }
+
+       function _insertid()
+       {
+               //return sqlite_last_insert_rowid($this->_connectionID)->; //**change
+               $temp = $this->_connectionID;
+               return $temp->lastInsertRowID();
+       }
+       
+       function _affectedrows()
+       {
+       return sqlite3_changes($this->_connectionID); //**tochange
+    }
+       
+       function ErrorMsg() 
+       {
+               if ($this->_logsql) return $this->_errorMsg;
+               
+               return ($this->_errorNo) ? sqlite_error_string($this->_errorNo) : ''; //**tochange?
+       }
+       function ErrorNo() 
+       {
+               return $this->_errorNo; //**tochange??
+       }
+       
+       function SQLDate($fmt, $col=false)
+       {
+               $fmt = $this->qstr($fmt);
+               return ($col) ? "adodb_date2($fmt,$col)" : "adodb_date($fmt)";
+       }
+       
+       
+       function _createFunctions()
+       {
+               //@sqlite3_create_function($this->_connectionID, 'adodb_date', 'adodb_date', 1); *change
+               $this->_connectionID->createFunction('adodb_date', 'adodb_date', 1);
+               
+               //@sqlite3_create_function($this->_connectionID, 'adodb_date2', 'adodb_date2', 2);**change
+               $this->_connectionID->createFunction('adodb_date2', 'adodb_date2', 2);
+       }
+       
+
+       // returns true or false
+       function _connect($argHostname, $argUsername, $argPassword, $argDatabasename) //**tochange: all the function need to be changed, just hacks for the moment
+       {
+               $this->_connectionID = new SQLite3('/path/mydb'); // hack
+               if (empty($argHostname) && $argDatabasename) $argHostname = $argDatabasename; // hack
+               $this->_createFunctions();
+               
+               return true; // hack
+               
+               if (!function_exists('sqlite_open')) return null;
+               if (empty($argHostname) && $argDatabasename) $argHostname = $argDatabasename;
+               
+               $this->_connectionID = sqlite_open($argHostname);
+               if ($this->_connectionID === false) return false;
+               $this->_createFunctions();
+               return true;
+       }
+       
+       // returns true or false
+       function _pconnect($argHostname, $argUsername, $argPassword, $argDatabasename) //**tochange
+       {
+               if (!function_exists('sqlite_open')) return null;
+               if (empty($argHostname) && $argDatabasename) $argHostname = $argDatabasename;
+               
+               $this->_connectionID = sqlite_popen($argHostname);
+               if ($this->_connectionID === false) return false;
+               $this->_createFunctions();
+               return true;
+       }
+
+       // returns query ID if successful, otherwise false
+       function _query($sql,$inputarr=false)
+       {
+               //$rez = sqlite_query($sql,$this->_connectionID);//**change
+               $rez = $this->_connectionID->query($sql);
+               if (!$rez) {
+                       //$this->_errorNo = sqlite3_last_error($this->_connectionID);**change
+                       $this->_connectionID->lastErrorCode();
+               }
+               
+               return $rez;
+       }
+       
+       function SelectLimit($sql,$nrows=-1,$offset=-1,$inputarr=false,$secs2cache=0) 
+       {
+               $offsetStr = ($offset >= 0) ? " OFFSET $offset" : '';
+               $limitStr  = ($nrows >= 0)  ? " LIMIT $nrows" : ($offset >= 0 ? ' LIMIT 999999999' : '');
+               if ($secs2cache)
+                       $rs = $this->CacheExecute($secs2cache,$sql."$limitStr$offsetStr",$inputarr);
+               else
+                       $rs = $this->Execute($sql."$limitStr$offsetStr",$inputarr);
+                       
+               return $rs;
+       }
+       
+       /*
+               This algorithm is not very efficient, but works even if table locking
+               is not available.
+               
+               Will return false if unable to generate an ID after $MAXLOOPS attempts.
+       */
+       var $_genSeqSQL = "create table %s (id integer)";
+       
+       function GenID($seq='adodbseq',$start=1)
+       {       
+               // if you have to modify the parameter below, your database is overloaded,
+               // or you need to implement generation of id's yourself!
+               $MAXLOOPS = 100;
+               //$this->debug=1;
+               while (--$MAXLOOPS>=0) {
+                       @($num = $this->GetOne("select id from $seq"));
+                       if ($num === false) {
+                               $this->Execute(sprintf($this->_genSeqSQL ,$seq));       
+                               $start -= 1;
+                               $num = '0';
+                               $ok = $this->Execute("insert into $seq values($start)");
+                               if (!$ok) return false;
+                       } 
+                       $this->Execute("update $seq set id=id+1 where id=$num");
+                       
+                       if ($this->affected_rows() > 0) {
+                               $num += 1;
+                               $this->genID = $num;
+                               return $num;
+                       }
+               }
+               if ($fn = $this->raiseErrorFn) {
+                       $fn($this->databaseType,'GENID',-32000,"Unable to generate unique id after $MAXLOOPS attempts",$seq,$num);
+               }
+               return false;
+       }
+
+       function CreateSequence($seqname='adodbseq',$start=1)
+       {
+               if (empty($this->_genSeqSQL)) return false;
+               $ok = $this->Execute(sprintf($this->_genSeqSQL,$seqname));
+               if (!$ok) return false;
+               $start -= 1;
+               return $this->Execute("insert into $seqname values($start)");
+       }
+       
+       var $_dropSeqSQL = 'drop table %s';
+       function DropSequence($seqname)
+       {
+               if (empty($this->_dropSeqSQL)) return false;
+               return $this->Execute(sprintf($this->_dropSeqSQL,$seqname));
+       }
+       
+       // returns true or false
+       function _close()
+       {
+               //return @sqlite3_close($this->_connectionID);**change
+               return $this->_connectionID->close();
+       }
+
+       function MetaIndexes($table, $primary = FALSE, $owner=false, $owner = false)
+       {
+               $false = false;
+               // save old fetch mode
+        global $ADODB_FETCH_MODE;
+        $save = $ADODB_FETCH_MODE;
+        $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
+        if ($this->fetchMode !== FALSE) {
+               $savem = $this->SetFetchMode(FALSE);
+        }
+               $SQL=sprintf("SELECT name,sql FROM sqlite_master WHERE type='index' AND tbl_name='%s'", strtolower($table));
+        $rs = $this->Execute($SQL);
+        if (!is_object($rs)) {
+                       if (isset($savem)) 
+                               $this->SetFetchMode($savem);
+                       $ADODB_FETCH_MODE = $save;
+            return $false;
+        }
+
+               $indexes = array ();
+               while ($row = $rs->FetchRow()) {
+                       if ($primary && preg_match("/primary/i",$row[1]) == 0) continue;
+            if (!isset($indexes[$row[0]])) {
+
+                       $indexes[$row[0]] = array(
+                                  'unique' => preg_match("/unique/i",$row[1]),
+                                  'columns' => array());
+                       }
+                       /**
+                         * There must be a more elegant way of doing this,
+                         * the index elements appear in the SQL statement
+                         * in cols[1] between parentheses
+                         * e.g CREATE UNIQUE INDEX ware_0 ON warehouse (org,warehouse)
+                         */
+                       $cols = explode("(",$row[1]);
+                       $cols = explode(")",$cols[1]);
+                       array_pop($cols);
+                       $indexes[$row[0]]['columns'] = $cols;
+               }
+               if (isset($savem)) { 
+            $this->SetFetchMode($savem);
+                       $ADODB_FETCH_MODE = $save;
+               }
+        return $indexes;
+       }
+
+}
+
+/*--------------------------------------------------------------------------------------
+                Class Name: Recordset
+--------------------------------------------------------------------------------------*/
+
+//class ADORecordset_sqlite extends ADORecordSet {**change
+class ADORecordset_sqlite3 extends ADORecordSet {
+
+       //var $databaseType = "sqlite";**change
+       var $databaseType = "sqlite3";
+       var $bind = false;
+
+       //function ADORecordset_sqlite($queryID,$mode=false)**change
+       function ADORecordset_sqlite3($queryID,$mode=false)
+       {
+               
+               if ($mode === false) { 
+                       global $ADODB_FETCH_MODE;
+                       $mode = $ADODB_FETCH_MODE;
+               }
+               switch($mode) {
+               //case ADODB_FETCH_NUM: $this->fetchMode = SQLITE_NUM; break;**change
+               case ADODB_FETCH_NUM: $this->fetchMode = SQLITE3_NUM; break;
+               //case ADODB_FETCH_ASSOC: $this->fetchMode = SQLITE_ASSOC; break;**change
+               case ADODB_FETCH_ASSOC: $this->fetchMode = SQLITE3_ASSOC; break;
+               //default: $this->fetchMode = SQLITE_BOTH; break;**change
+               default: $this->fetchMode = SQLITE3_BOTH; break;
+               }
+               $this->adodbFetchMode = $mode;
+               
+               $this->_queryID = $queryID;
+       
+               $this->_inited = true;
+               $this->fields = array();
+               if ($queryID) {
+                       $this->_currentRow = 0;
+                       $this->EOF = !$this->_fetch();
+                       @$this->_initrs();
+               } else {
+                       $this->_numOfRows = 0;
+                       $this->_numOfFields = 0;
+                       $this->EOF = true;
+               }
+               
+               return $this->_queryID;
+       }
+
+
+       function FetchField($fieldOffset = -1)
+       {
+               $fld = new ADOFieldObject;
+               //$fld->name = sqlite3_field_name($this->_queryID, $fieldOffset);**change
+               $fld->name->columnName($this->_queryID, $fieldOffset);
+               $fld->type = 'VARCHAR';
+               $fld->max_length = -1;
+               return $fld;
+       }
+       
+   function _initrs()
+   {
+               //$this->_numOfRows = @sqlite_num_rows($this->_queryID); **tochange but sqlite3 doesn't implement this!
+               $this->_numOfRows = 1;
+               //$this->_numOfFields = @sqlite3_num_fields($this->_queryID);**change
+               $this->_numOfFields = $this->_queryID->numColumns();
+               
+   }
+
+       function Fields($colname)
+       {
+               //if ($this->fetchMode != SQLITE_NUM) return $this->fields[$colname];**change
+               if ($this->fetchMode != SQLITE3_NUM) return $this->fields[$colname];
+               if (!$this->bind) {
+                       $this->bind = array();
+                       for ($i=0; $i < $this->_numOfFields; $i++) {
+                               $o = $this->FetchField($i);
+                               $this->bind[strtoupper($o->name)] = $i;
+                       }
+               }
+               
+                return $this->fields[$this->bind[strtoupper($colname)]];
+       }
+       
+   function _seek($row)
+   {
+               return sqlite3_seek($this->_queryID, $row);//**tochange but sqlite3 seems not to implement seek!
+   }
+
+       function _fetch($ignore_fields=false) 
+       {
+               //$this->fields = @sqlite3_fetch_array($this->_queryID,$this->fetchMode);**change
+               $this->fields = $this->_queryID->fetchArray($this->fetchMode);
+               return !empty($this->fields);
+       }
+       
+       function _close() 
+       {
+       }
+
+}
+?>
\ No newline at end of file
index 2bdb99a..b7046ec 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /*
-V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+V5.14 8 Sept 2011  (c) 2000-2011 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.
index 9a28ce5..1ca7da5 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /* 
-V5.11 5 May 2010   (c) 2000-2010 John Lim. All rights reserved.
+V5.14 8 Sept 2011  (c) 2000-2011 John Lim. 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. 
@@ -425,4 +425,4 @@ class ADORecordSet_array_sybase extends ADORecordSet_array {
                return  mktime($rr[4],$rr[5],0,$themth,$rr[2],$rr[3]);
        }
 }
-?>
\ No newline at end of file
+?>
index 5d2023c..384ace5 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /*
-  V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+  V5.14 8 Sept 2011  (c) 2000-2011 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.
index d1ccae3..59f4b08 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /* 
-V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+V5.14 8 Sept 2011  (c) 2000-2011 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. 
index 110bb5c..16ca00e 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-// Vivu Esperanto cxiam!
+// Vivu Esperanto cxiam! 
 // Traduko fare de Antono Vasiljev (anders[#]brainactive.org)
 
 $ADODB_LANG_ARRAY = array (
index 6206847..20c5b93 100644 (file)
@@ -1,34 +1,34 @@
-<?php
-// Italian language file contributed by Tiraboschi Massimiliano aka TiMax
-// www.maxdev.com  timax@maxdev.com
-$ADODB_LANG_ARRAY = array (
-            'LANG'                      => 'it',
-            DB_ERROR                    => 'errore sconosciuto',
-            DB_ERROR_ALREADY_EXISTS     => 'esiste gi&agrave;',
-            DB_ERROR_CANNOT_CREATE      => 'non posso creare',
-            DB_ERROR_CANNOT_DELETE      => 'non posso cancellare',
-            DB_ERROR_CANNOT_DROP        => 'non posso eliminare',
-            DB_ERROR_CONSTRAINT         => 'violazione constraint',
-            DB_ERROR_DIVZERO            => 'divisione per zero',
-            DB_ERROR_INVALID            => 'non valido',
-            DB_ERROR_INVALID_DATE       => 'data od ora non valida',
-            DB_ERROR_INVALID_NUMBER     => 'numero non valido',
-            DB_ERROR_MISMATCH           => 'diversi',
-            DB_ERROR_NODBSELECTED       => 'nessun database selezionato',
-            DB_ERROR_NOSUCHFIELD        => 'nessun campo trovato',
-            DB_ERROR_NOSUCHTABLE        => 'nessuna tabella trovata',
-            DB_ERROR_NOT_CAPABLE        => 'DB backend non abilitato',
-            DB_ERROR_NOT_FOUND          => 'non trovato',
-            DB_ERROR_NOT_LOCKED         => 'non bloccato',
-            DB_ERROR_SYNTAX             => 'errore di sintassi',
-            DB_ERROR_UNSUPPORTED        => 'non supportato',
-            DB_ERROR_VALUE_COUNT_ON_ROW => 'valore inserito troppo grande per una colonna',
-            DB_ERROR_INVALID_DSN        => 'DSN non valido',
-            DB_ERROR_CONNECT_FAILED     => 'connessione fallita',
-            0                           => 'nessun errore', // DB_OK
-            DB_ERROR_NEED_MORE_DATA     => 'dati inseriti insufficienti',
-            DB_ERROR_EXTENSION_NOT_FOUND=> 'estensione non trovata',
-            DB_ERROR_NOSUCHDB           => 'database non trovato',
-            DB_ERROR_ACCESS_VIOLATION   => 'permessi insufficienti'
-);
+<?php\r
+// Italian language file contributed by Tiraboschi Massimiliano aka TiMax  \r
+// www.maxdev.com  timax@maxdev.com\r
+$ADODB_LANG_ARRAY = array (\r
+            'LANG'                      => 'it',\r
+            DB_ERROR                    => 'errore sconosciuto',\r
+            DB_ERROR_ALREADY_EXISTS     => 'esiste gi&agrave;',\r
+            DB_ERROR_CANNOT_CREATE      => 'non posso creare',\r
+            DB_ERROR_CANNOT_DELETE      => 'non posso cancellare',\r
+            DB_ERROR_CANNOT_DROP        => 'non posso eliminare',\r
+            DB_ERROR_CONSTRAINT         => 'violazione constraint',\r
+            DB_ERROR_DIVZERO            => 'divisione per zero',\r
+            DB_ERROR_INVALID            => 'non valido',\r
+            DB_ERROR_INVALID_DATE       => 'data od ora non valida',\r
+            DB_ERROR_INVALID_NUMBER     => 'numero non valido',\r
+            DB_ERROR_MISMATCH           => 'diversi',\r
+            DB_ERROR_NODBSELECTED       => 'nessun database selezionato',\r
+            DB_ERROR_NOSUCHFIELD        => 'nessun campo trovato',\r
+            DB_ERROR_NOSUCHTABLE        => 'nessuna tabella trovata',\r
+            DB_ERROR_NOT_CAPABLE        => 'DB backend non abilitato',\r
+            DB_ERROR_NOT_FOUND          => 'non trovato',\r
+            DB_ERROR_NOT_LOCKED         => 'non bloccato',\r
+            DB_ERROR_SYNTAX             => 'errore di sintassi',\r
+            DB_ERROR_UNSUPPORTED        => 'non supportato',\r
+            DB_ERROR_VALUE_COUNT_ON_ROW => 'valore inserito troppo grande per una colonna',\r
+            DB_ERROR_INVALID_DSN        => 'DSN non valido',\r
+            DB_ERROR_CONNECT_FAILED     => 'connessione fallita',\r
+            0                           => 'nessun errore', // DB_OK\r
+            DB_ERROR_NEED_MORE_DATA     => 'dati inseriti insufficienti',\r
+            DB_ERROR_EXTENSION_NOT_FOUND=> 'estensione non trovata',\r
+            DB_ERROR_NOSUCHDB           => 'database non trovato',\r
+            DB_ERROR_ACCESS_VIOLATION   => 'permessi insufficienti'\r
+);\r
 ?>
\ No newline at end of file
index cd1e29d..cd28f7e 100644 (file)
@@ -21,7 +21,7 @@ $ADODB_LANG_ARRAY = array (
             DB_ERROR_NOT_FOUND          => 'não encontrado',
             DB_ERROR_NOT_LOCKED         => 'não bloqueado',
             DB_ERROR_SYNTAX             => 'erro de sintaxe',
-            DB_ERROR_UNSUPPORTED        =>
+            DB_ERROR_UNSUPPORTED        => 
 'não suportado',
             DB_ERROR_VALUE_COUNT_ON_ROW => 'a quantidade de colunas não corresponde ao de valores',
             DB_ERROR_INVALID_DSN        => 'DSN inválido',
diff --git a/typo3/sysext/adodb/adodb/pear/Auth/Container/ADOdb.php b/typo3/sysext/adodb/adodb/pear/Auth/Container/ADOdb.php
new file mode 100644 (file)
index 0000000..91579f1
--- /dev/null
@@ -0,0 +1,405 @@
+<?php
+/* 
+V5.14 8 Sept 2011  (c) 2000-2011 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
+  
+       Original Authors: Martin Jansen <mj#php.net>
+       Richard Tango-Lowy <richtl#arscognita.com>                          
+*/
+
+require_once 'Auth/Container.php';
+require_once 'adodb.inc.php';
+require_once 'adodb-pear.inc.php';
+require_once 'adodb-errorpear.inc.php';
+
+/**
+ * Storage driver for fetching login data from a database using ADOdb-PHP.
+ *
+ * This storage driver can use all databases which are supported
+ * by the ADBdb DB abstraction layer to fetch login data.
+ * See http://php.weblogs.com/adodb for information on ADOdb.
+ * NOTE: The ADOdb directory MUST be in your PHP include_path!
+ *
+ * @author   Richard Tango-Lowy <richtl@arscognita.com>
+ * @package  Auth
+ * @version  $Revision: 1.3 $
+ */
+class Auth_Container_ADOdb extends Auth_Container
+{
+
+    /**
+     * Additional options for the storage container
+     * @var array
+     */
+    var $options = array();
+
+    /**
+     * DB object
+     * @var object
+     */
+    var $db = null;
+    var $dsn = '';
+       
+    /**
+     * User that is currently selected from the DB.
+     * @var string
+     */
+    var $activeUser = '';
+
+    // {{{ Constructor
+
+    /**
+     * Constructor of the container class
+     *
+     * Initate connection to the database via PEAR::ADOdb
+     *
+     * @param  string Connection data or DB object
+     * @return object Returns an error object if something went wrong
+     */
+    function Auth_Container_ADOdb($dsn)
+    {
+        $this->_setDefaults();
+               
+        if (is_array($dsn)) {
+            $this->_parseOptions($dsn);
+
+            if (empty($this->options['dsn'])) {
+                PEAR::raiseError('No connection parameters specified!');
+            }
+        } else {
+               // Extract db_type from dsn string.
+            $this->options['dsn'] = $dsn;
+        }
+    }
+
+    // }}}
+    // {{{ _connect()
+
+    /**
+     * Connect to database by using the given DSN string
+     *
+     * @access private
+     * @param  string DSN string
+     * @return mixed  Object on error, otherwise bool
+     */
+     function _connect($dsn)
+    {
+        if (is_string($dsn) || is_array($dsn)) {
+               if(!$this->db) {
+                       $this->db = ADONewConnection($dsn);
+                       if( $err = ADODB_Pear_error() ) {
+                               return PEAR::raiseError($err);
+                       }
+               }
+               
+        } else {
+            return PEAR::raiseError('The given dsn was not valid in file ' . __FILE__ . ' at line ' . __LINE__,
+                                    41,
+                                    PEAR_ERROR_RETURN,
+                                    null,
+                                    null
+                                    );
+        }
+        
+        if(!$this->db) {
+               return PEAR::raiseError(ADODB_Pear_error());
+        } else {
+               return true;
+        }
+    }
+
+    // }}}
+    // {{{ _prepare()
+
+    /**
+     * Prepare database connection
+     *
+     * This function checks if we have already opened a connection to
+     * the database. If that's not the case, a new connection is opened.
+     *
+     * @access private
+     * @return mixed True or a DB error object.
+     */
+    function _prepare()
+    {
+       if(!$this->db) {
+               $res = $this->_connect($this->options['dsn']);                  
+       }
+        return true;
+    }
+
+    // }}}
+    // {{{ query()
+
+    /**
+     * Prepare query to the database
+     *
+     * This function checks if we have already opened a connection to
+     * the database. If that's not the case, a new connection is opened.
+     * After that the query is passed to the database.
+     *
+     * @access public
+     * @param  string Query string
+     * @return mixed  a DB_result object or DB_OK on success, a DB
+     *                or PEAR error on failure
+     */
+    function query($query)
+    {
+        $err = $this->_prepare();
+        if ($err !== true) {
+            return $err;
+        }
+        return $this->db->query($query);
+    }
+
+    // }}}
+    // {{{ _setDefaults()
+
+    /**
+     * Set some default options
+     *
+     * @access private
+     * @return void
+     */
+    function _setDefaults()
+    {
+       $this->options['db_type']       = 'mysql';
+        $this->options['table']       = 'auth';
+        $this->options['usernamecol'] = 'username';
+        $this->options['passwordcol'] = 'password';
+        $this->options['dsn']         = '';
+        $this->options['db_fields']   = '';
+        $this->options['cryptType']   = 'md5';
+    }
+
+    // }}}
+    // {{{ _parseOptions()
+
+    /**
+     * Parse options passed to the container class
+     *
+     * @access private
+     * @param  array
+     */
+    function _parseOptions($array)
+    {
+        foreach ($array as $key => $value) {
+            if (isset($this->options[$key])) {
+                $this->options[$key] = $value;
+            }
+        }
+
+        /* Include additional fields if they exist */
+        if(!empty($this->options['db_fields'])){
+            if(is_array($this->options['db_fields'])){
+                $this->options['db_fields'] = join($this->options['db_fields'], ', ');
+            }
+            $this->options['db_fields'] = ', '.$this->options['db_fields'];
+        }
+    }
+
+    // }}}
+    // {{{ fetchData()
+
+    /**
+     * Get user information from database
+     *
+     * This function uses the given username to fetch
+     * the corresponding login data from the database
+     * table. If an account that matches the passed username
+     * and password is found, the function returns true.
+     * Otherwise it returns false.
+     *
+     * @param   string Username
+     * @param   string Password
+     * @return  mixed  Error object or boolean
+     */
+    function fetchData($username, $password)
+    {
+        // Prepare for a database query
+        $err = $this->_prepare();
+        if ($err !== true) {
+            return PEAR::raiseError($err->getMessage(), $err->getCode());
+        }
+
+        // Find if db_fields contains a *, i so assume all col are selected
+        if(strstr($this->options['db_fields'], '*')){
+            $sql_from = "*";
+        }
+        else{
+            $sql_from = $this->options['usernamecol'] . ", ".$this->options['passwordcol'].$this->options['db_fields'];
+        }
+        
+        $query = "SELECT ".$sql_from.
+                " FROM ".$this->options['table'].
+                " WHERE ".$this->options['usernamecol']." = " . $this->db->Quote($username);
+        
+        $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
+        $rset = $this->db->Execute( $query );
+        $res = $rset->fetchRow();
+
+        if (DB::isError($res)) {
+            return PEAR::raiseError($res->getMessage(), $res->getCode());
+        }
+        if (!is_array($res)) {
+            $this->activeUser = '';
+            return false;
+        }
+        if ($this->verifyPassword(trim($password, "\r\n"),
+                                  trim($res[$this->options['passwordcol']], "\r\n"),
+                                  $this->options['cryptType'])) {
+            // Store additional field values in the session
+            foreach ($res as $key => $value) {
+                if ($key == $this->options['passwordcol'] ||
+                    $key == $this->options['usernamecol']) {
+                    continue;
+                }
+                // Use reference to the auth object if exists
+                // This is because the auth session variable can change so a static call to setAuthData does not make sence
+                if(is_object($this->_auth_obj)){
+                    $this->_auth_obj->setAuthData($key, $value);
+                } else {
+                    Auth::setAuthData($key, $value);
+                }
+            }
+
+            return true;
+        }
+
+        $this->activeUser = $res[$this->options['usernamecol']];
+        return false;
+    }
+
+    // }}}
+    // {{{ listUsers()
+
+    function listUsers()
+    {
+        $err = $this->_prepare();
+        if ($err !== true) {
+            return PEAR::raiseError($err->getMessage(), $err->getCode());
+        }
+
+        $retVal = array();
+
+        // Find if db_fileds contains a *, i so assume all col are selected
+        if(strstr($this->options['db_fields'], '*')){
+            $sql_from = "*";
+        }
+        else{
+            $sql_from = $this->options['usernamecol'] . ", ".$this->options['passwordcol'].$this->options['db_fields'];
+        }
+
+        $query = sprintf("SELECT %s FROM %s",
+                         $sql_from,
+                         $this->options['table']
+                         );
+        $res = $this->db->getAll($query, null, DB_FETCHMODE_ASSOC);
+
+        if (DB::isError($res)) {
+            return PEAR::raiseError($res->getMessage(), $res->getCode());
+        } else {
+            foreach ($res as $user) {
+                $user['username'] = $user[$this->options['usernamecol']];
+                $retVal[] = $user;
+            }
+        }
+        return $retVal;
+    }
+
+    // }}}
+    // {{{ addUser()
+
+    /**
+     * Add user to the storage container
+     *
+     * @access public
+     * @param  string Username
+     * @param  string Password
+     * @param  mixed  Additional information that are stored in the DB
+     *
+     * @return mixed True on success, otherwise error object
+     */
+    function addUser($username, $password, $additional = "")
+    {
+        if (function_exists($this->options['cryptType'])) {
+            $cryptFunction = $this->options['cryptType'];
+        } else {
+            $cryptFunction = 'md5';
+        }
+
+        $additional_key   = '';
+        $additional_value = '';
+
+        if (is_array($additional)) {
+            foreach ($additional as $key => $value) {
+                $additional_key .= ', ' . $key;
+                $additional_value .= ", '" . $value . "'";
+            }
+        }
+
+        $query = sprintf("INSERT INTO %s (%s, %s%s) VALUES ('%s', '%s'%s)",
+                         $this->options['table'],
+                         $this->options['usernamecol'],
+                         $this->options['passwordcol'],
+                         $additional_key,
+                         $username,
+                         $cryptFunction($password),
+                         $additional_value
+                         );
+
+        $res = $this->query($query);
+
+        if (DB::isError($res)) {
+           return PEAR::raiseError($res->getMessage(), $res->getCode());
+        } else {
+          return true;
+        }
+    }
+
+    // }}}
+    // {{{ removeUser()
+
+    /**
+     * Remove user from the storage container
+     *
+     * @access public
+     * @param  string Username
+     *
+     * @return mixed True on success, otherwise error object
+     */
+    function removeUser($username)
+    {
+        $query = sprintf("DELETE FROM %s WHERE %s = '%s'",
+                         $this->options['table'],
+                         $this->options['usernamecol'],
+                         $username
+                         );
+
+        $res = $this->query($query);
+
+        if (DB::isError($res)) {
+           return PEAR::raiseError($res->getMessage(), $res->getCode());
+        } else {
+          return true;
+        }
+    }
+
+    // }}}
+}
+
+function showDbg( $string ) {
+       print "
+-- $string</P>";
+}
+function dump( $var, $str, $vardump = false ) {
+       print "<H4>$str</H4><pre>";
+       ( !$vardump ) ? ( print_r( $var )) : ( var_dump( $var ));
+       print "</pre>";
+}
+?>
diff --git a/typo3/sysext/adodb/adodb/pear/readme.Auth.txt b/typo3/sysext/adodb/adodb/pear/readme.Auth.txt
new file mode 100644 (file)
index 0000000..db28319
--- /dev/null
@@ -0,0 +1,20 @@
+From: Rich Tango-Lowy (richtl#arscognita.com)\r
+Date: Sat, May 29, 2004 11:20 am\r
+\r
+OK, I hacked out an ADOdb container for PEAR-Auth. The error handling's \r
+a bit of a mess, but all the methods work.\r
+\r
+Copy ADOdb.php to your pear/Auth/Container/ directory.\r
+\r
+Use the ADOdb container exactly as you would the DB\r
+container, but specify 'ADOdb' instead of 'DB':\r
+\r
+$dsn = "mysql://myuser:mypass@localhost/authdb";\r
+$a = new Auth("ADOdb", $dsn, "loginFunction");\r
+\r
+\r
+-------------------\r
+\r
+John Lim adds:\r
+\r
+See http://pear.php.net/manual/en/package.authentication.php\r
index 7531e59..86b7198 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /* 
-V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+V5.14 8 Sept 2011  (c) 2000-2011 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. 
index 9e680a3..1a6909c 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /* 
-V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+V5.14 8 Sept 2011  (c) 2000-2011 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. 
index cb0178a..5594930 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 /*
-V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+V5.14 8 Sept 2011  (c) 2000-2011 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.
@@ -99,7 +99,7 @@ class perf_mssql extends adodb_perf{
                $rs = $this->conn->Execute($sql);
                //adodb_printr($rs);
                $ADODB_FETCH_MODE = $save;
-               if ($rs) {
+               if ($rs && !$rs->EOF) {
                        $rs->MoveNext();
                        $s .= '<table bgcolor=white border=0 cellpadding="1" callspacing=0><tr><td nowrap align=center> Rows<td nowrap align=center> IO<td nowrap align=center> CPU<td align=left> &nbsp; &nbsp; Plan</tr>';
                        while (!$rs->EOF) {
index 2b00bcc..cad3548 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 /*
-V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+V5.14 8 Sept 2011  (c) 2000-2011 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.
index 84543ee..93fcce4 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /*
-V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+V5.14 8 Sept 2011  (c) 2000-2011 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.
index 2e22ed9..de89c0a 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /*
-V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+V5.14 8 Sept 2011  (c) 2000-2011 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.
@@ -94,7 +94,7 @@ AND    b.name = 'sorts (memory)'",
                "select nvl(value,0)/1024.0/1024 || 'M'  from v\$parameter where name = 'sga_target'",
                        'If sga_target is defined then data cache, shared, java and large pool size can be 0. This is because all these pools are consolidated into one sga_target.' ),
        'PGA aggr target' => array( 'DATAC',
-               "select value from v\$parameter where name = 'pga_aggregate_target'",
+               "select nvl(value,0)/1024.0/1024 || 'M' from v\$parameter where name = 'pga_aggregate_target'",
                        'If pga_aggregate_target is defined then this is the maximum memory that can be allocated for cursor operations such as sorts, group by, joins, merges. When in doubt, set it to 20% of sga_target.' ),
        'data cache size' => array('DATAC',
                        "select value from v\$parameter where name = 'db_cache_size'",
@@ -109,10 +109,6 @@ AND    b.name = 'sorts (memory)'",
                        "select value from v\$parameter where name='large_pool_size'",
                        'this pool is for large mem allocations (not because it is larger than shared pool), for MTS sessions, parallel queries, io buffers (large_pool_size) ' ),
 
-               'pga buffer size' => array('CACHE',
-                       "select value from v\$parameter where name='pga_aggregate_target'",
-                       'program global area is private memory for sorting, and hash and bitmap merges - since oracle 9i (pga_aggregate_target)' ),
-
                'dynamic memory usage' => array('CACHE', "select '-' from dual", '=DynMemoryUsage'),
 
                'Connections',
@@ -146,8 +142,8 @@ AND    b.name = 'sorts (memory)'",
                        "select value from v\$parameter where name='sort_area_size'",
                        'max in-mem sort_area_size (per query), uses memory in pga' ),
 
-               'pga usage at peak' => array('RATIOU',
-               '=PGA','Mb utilization at peak transactions (requires Oracle 9i+)'),
+               /*'pga usage at peak' => array('RATIOU',
+               '=PGA','Mb utilization at peak transactions (requires Oracle 9i+)'),*/
        'Transactions',
                'rollback segments' => array('ROLLBACK',
                        "select count(*) from sys.v_\$rollstat",
@@ -177,18 +173,11 @@ having count(*) > 100)",'These are sql statements that should be using bind vari
                'random page cost' => array('COST',
                        "select value from v\$parameter where name = 'optimizer_index_cost_adj'",
                        '=WarnPageCost'),
-
+       'Waits',
+               'Recent wait events' => array('WAITS','select \'Top 5 events\' from dual','=TopRecentWaits'),
+//             'Historical wait SQL' => array('WAITS','select \'Last 2 days\' from dual','=TopHistoricalWaits'), -- requires AWR license
        'Backup',
-               'Achivelog Mode' => array('BACKUP', 'select log_mode from v$database', 'To turn on archivelog:<br>
-       <pre>
-        SQLPLUS> connect sys as sysdba;
-        SQLPLUS> shutdown immediate;
-
-        SQLPLUS> startup mount exclusive;
-        SQLPLUS> alter database archivelog;
-        SQLPLUS> archive log start;
-        SQLPLUS> alter database open;
-</pre>'),
+               'Achivelog Mode' => array('BACKUP', 'select log_mode from v$database', '=LogMode'),
 
                'DBID' => array('BACKUP','select dbid from v$database','Primary key of database, used for recovery with an RMAN Recovery Catalog'),
                'Archive Log Dest' => array('BACKUP', "SELECT NVL(v1.value,v2.value)
@@ -198,7 +187,7 @@ FROM v\$parameter v1, v\$parameter v2 WHERE v1.name='log_archive_dest' AND v2.na
 
                'Flashback Usage' => array('BACKUP', "select nvl('-','Flashback Area not used') from v\$parameter where name=lower('DB_RECOVERY_FILE_DEST')", '=FlashUsage', 'Flashback area usage.'),
 
-               'Control File Keep Time' => array('BACKUP', "select value from v\$parameter where name='control_file_record_keep_time'",'No of days to keep RMAN info in control file. I recommend it be set to x2 or x3 times the frequency of your full backup.'),
+               'Control File Keep Time' => array('BACKUP', "select value from v\$parameter where name='control_file_record_keep_time'",'No of days to keep RMAN info in control file.  Recommended set to x2 or x3 times the frequency of your full backup.'),
                'Recent RMAN Jobs' => array('BACKUP', "select '-' from dual", "=RMAN"),
 
                //              'Control File Keep Time' => array('BACKUP', "select value from v\$parameter where name='control_file_record_keep_time'",'No of days to keep RMAN info in control file. I recommend it be set to x2 or x3 times the frequency of your full backup.'),
@@ -210,12 +199,76 @@ FROM v\$parameter v1, v\$parameter v2 WHERE v1.name='log_archive_dest' AND v2.na
 
        function perf_oci8(&$conn)
        {
-               $savelog = $conn->LogSQL(false);
+               global $gSQLBlockRows;
+
+               $gSQLBlockRows = 1000;
+               $savelog = $conn->LogSQL(false);        
                $this->version = $conn->ServerInfo();
                $conn->LogSQL($savelog);
                $this->conn = $conn;
        }
 
+       function LogMode()
+       {
+               $mode = $this->conn->GetOne("select log_mode from v\$database");
+
+               if ($mode == 'ARCHIVELOG') return 'To turn off archivelog:<br>
+       <pre><font size=-2>
+        SQLPLUS> connect sys as sysdba;
+        SQLPLUS> shutdown immediate;
+
+        SQLPLUS> startup mount exclusive;
+        SQLPLUS> alter database noarchivelog;
+        SQLPLUS> alter database open;
+</font></pre>';
+
+               return 'To turn on archivelog:<br>
+       <pre><font size=-2>
+        SQLPLUS> connect sys as sysdba;
+        SQLPLUS> shutdown immediate;
+
+        SQLPLUS> startup mount exclusive;
+        SQLPLUS> alter database archivelog;
+        SQLPLUS> archive log start;
+        SQLPLUS> alter database open;
+</font></pre>';
+       }
+
+       function TopRecentWaits()
+       {
+
+               $rs = $this->conn->Execute("select * from (
+               select event, round(100*time_waited/(select sum(time_waited) from v\$system_event where wait_class <> 'Idle'),1) \"% Wait\",
+    total_waits,time_waited, average_wait,wait_class from v\$system_event where wait_class <> 'Idle' order by 2 desc
+       ) where rownum <=5");
+
+               $ret = rs2html($rs,false,false,false,false);
+               return "&nbsp;<p>".$ret."&nbsp;</p>";
+
+       }
+
+       function TopHistoricalWaits()
+       {
+               $days = 2;
+
+               $rs = $this->conn->Execute("select * from (   SELECT
+         b.wait_class,B.NAME,
+        round(sum(wait_time+TIME_WAITED)/1000000) waitsecs,
+        parsing_schema_name,
+        C.SQL_TEXT, a.sql_id
+FROM    V\$ACTIVE_SESSION_HISTORY A
+        join V\$EVENT_NAME B  on  A.EVENT# = B.EVENT#
+       join V\$SQLAREA C  on  A.SQL_ID = C.SQL_ID
+WHERE   A.SAMPLE_TIME BETWEEN sysdate-$days and sysdate
+       and parsing_schema_name not in ('SYS','SYSMAN','DBSNMP','SYSTEM')
+GROUP BY b.wait_class,parsing_schema_name,C.SQL_TEXT, B.NAME,A.sql_id
+order by 3 desc) where rownum <=10");
+
+               $ret = rs2html($rs,false,false,false,false);            
+               return "&nbsp;<p>".$ret."&nbsp;</p>";
+
+       }
+
        function RMAN()
        {
                $rs = $this->conn->Execute("select * from (select start_time, end_time, operation, status, mbytes_processed, output_device_type
@@ -247,7 +300,7 @@ FROM v\$parameter v1, v\$parameter v2 WHERE v1.name='log_archive_dest' AND v2.na
 
        function WarnPageCost($val)
        {
-               if ($val == 100) $s = '<font color="red"><strong>Too High</strong>. </font>';
+               if ($val == 100 && $this->version['version'] < 10) $s = '<font color=red><strong>Too High</strong>. </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>. ';
@@ -255,7 +308,7 @@ FROM v\$parameter v1, v\$parameter v2 WHERE v1.name='log_archive_dest' AND v2.na
 
        function WarnIndexCost($val)
        {
-               if ($val == 0) $s = '<font color="red"><strong>Too Low</strong>. </font>';
+               if ($val == 0 && $this->version['version'] < 10) $s = '<font color=red><strong>Too Low</strong>. </font>';
                else $s = '';
 
                return $s.'Percentage of indexed data blocks expected in the cache.
@@ -264,23 +317,35 @@ FROM v\$parameter v1, v\$parameter v2 WHERE v1.name='log_archive_dest' AND v2.na
                }
 
        function PGA()
-       {
-               if ($this->version['version'] < 9) return 'Oracle 9i or later required';
+       {       
 
-               $rs = $this->conn->Execute("select a.mb,a.targ as pga_size_pct,a.pct from
-          (select round(pga_target_for_estimate/1024.0/1024.0,0) MB,
-                  pga_target_factor targ,estd_pga_cache_hit_percentage pct,rownum as r
-                  from v\$pga_target_advice) a left join
-          (select round(pga_target_for_estimate/1024.0/1024.0,0) MB,
-                  pga_target_factor targ,estd_pga_cache_hit_percentage pct,rownum as r
-                  from v\$pga_target_advice) b on
-         a.r = b.r+1 where
-               b.pct < 100");
-               if (!$rs) return "Only in 9i or later";
-               $rs->Close();
-               if ($rs->EOF) return "PGA could be too big";
-
-               return reset($rs->fields);
+               //if ($this->version['version'] < 9) return 'Oracle 9i or later required';
+       }
+       function PGA_Advice()
+       {
+               $t = "<h3>PGA Advice Estimate</h3>";
+               if ($this->version['version'] < 9) return $t.'Oracle 9i or later required';
+       
+               $rs = $this->conn->Execute('select a.MB,
+                       case when a.targ = 1 then \'<<= Current \'
+                       when a.targ < 1  or a.pct <= b.pct then null
+                       else
+                       \'- BETTER than Current by \'||round(a.pct/b.pct*100-100,2)||\'%\' end as "Percent Improved",
+       a.targ as  "PGA Size Factor",a.pct "% Perf"
+       from
+       (select round(pga_target_for_estimate/1024.0/1024.0,0) MB,
+              pga_target_factor targ,estd_pga_cache_hit_percentage pct,rownum as r
+              from v$pga_target_advice) a left join
+       (select round(pga_target_for_estimate/1024.0/1024.0,0) MB,
+              pga_target_factor targ,estd_pga_cache_hit_percentage pct,rownum as r
+              from v$pga_target_advice) b on
+      a.r = b.r+1 where
+          b.pct < 100');
+               if (!$rs) return $t."Only in 9i or later";
+       //      $rs->Close();
+               if ($rs->EOF) return $t."PGA could be too big";
+
+               return $t.rs2html($rs,false,false,true,false);
        }
 
        function Explain($sql,$partial=false)
@@ -368,7 +433,7 @@ CONNECT BY prior id=parent_id and statement_id='$id'");
                if ($this->version['version'] < 9) return 'Oracle 9i or later required';
 
                 $rs = $this->conn->Execute("
-select  b.size_for_estimate as cache_mb_estimate,
+select  a.name Buffer_Pool, b.size_for_estimate as cache_mb_estimate,
        case when b.size_factor=1 then
                '&lt;&lt;= Current'
         when a.estd_physical_read_factor-b.estd_physical_read_factor > 0.001 and b.estd_physical_read_factor<1 then
@@ -376,22 +441,23 @@ select  b.size_for_estimate as cache_mb_estimate,
        else ' ' end as RATING,
    b.estd_physical_read_factor \"Phys. Reads Factor\",
    round((a.estd_physical_read_factor-b.estd_physical_read_factor)/b.estd_physical_read_factor*100,2) as \"% Improve\"
-   from (select size_for_estimate,size_factor,estd_physical_read_factor,rownum  r from v\$db_cache_advice order by 1) a ,
-   (select size_for_estimate,size_factor,estd_physical_read_factor,rownum r from v\$db_cache_advice order by 1) b where a.r = b.r-1
+   from (select size_for_estimate,size_factor,estd_physical_read_factor,rownum  r,name from v\$db_cache_advice order by name,1) a ,
+   (select size_for_estimate,size_factor,estd_physical_read_factor,rownum r,name from v\$db_cache_advice order by name,1) b
+   where a.r = b.r-1 and a.name = b.name
   ");
                if (!$rs) return false;
 
                /*
                The v$db_cache_advice utility show the marginal changes in physical data block reads for different sizes of db_cache_size
                */
-               $s = "<h3>Data Cache Estimate</h3>";
+               $s = "<h3>Data Cache Advice Estimate</h3>";
                if ($rs->EOF) {
                        $s .= "<p>Cache that is 50% of current size is still too big</p>";
                } else {
-                       $s .= "Ideal size of Data Cache is when %Improve gets close to zero.";
+                       $s .= "Ideal size of Data Cache is when %BETTER gets close to zero.";
                        $s .= rs2html($rs,false,false,false,false);
                }
-               return $s;
+               return $s.$this->PGA_Advice();
        }
 
        /*
index a61c092..e3a3b89 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 /*
-V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+V5.14 8 Sept 2011  (c) 2000-2011 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.
index 48890b8..70c38bd 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /** 
- * @version V4.93 10 Oct 2006 (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+ * @version V4.93 10 Oct 2006 (c) 2000-2011 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. 
index 501ffc9..d2df3a5 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /** 
- * @version V4.93 10 Oct 2006 (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+ * @version V4.93 10 Oct 2006 (c) 2000-2011 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. 
index 91d6812..52adc43 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 /** 
- * @version V4.93 10 Oct 2006 (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+ * @version V4.93 10 Oct 2006 (c) 2000-2011 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. 
index 245c83e..999909d 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 /*
-V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+V5.14 8 Sept 2011  (c) 2000-2011 John Lim (jlim#natsoft.com). All rights reserved.
          Contributed by Ross Smith (adodb@netebb.com). 
   Released under both BSD license and Lesser GPL library license.
   Whenever there is any discrepancy between the two licenses,
@@ -115,4 +115,4 @@ class ADODB_Compress_Bzip2 {
 
 return 1;
 
-?>
\ No newline at end of file
+?>
index af74e85..c72a78e 100644 (file)
@@ -2,7 +2,7 @@
 
 
 /*
-V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+V5.14 8 Sept 2011  (c) 2000-2011 John Lim (jlim#natsoft.com). All rights reserved.
          Contributed by Ross Smith (adodb@netebb.com). 
   Released under both BSD license and Lesser GPL library license.
   Whenever there is any discrepancy between the two licenses,
index bb144da..339f715 100644 (file)
@@ -2,7 +2,7 @@
 
 
 /*
-V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+V5.14 8 Sept 2011  (c) 2000-2011 John Lim (jlim#natsoft.com). All rights reserved.
          Contributed by Ross Smith (adodb@netebb.com). 
   Released under both BSD license and Lesser GPL library license.
   Whenever there is any discrepancy between the two licenses,
index 0b0d3b9..b218064 100644 (file)
@@ -2,7 +2,7 @@
 
 
 /*
-V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+V5.14 8 Sept 2011  (c) 2000-2011 John Lim (jlim#natsoft.com). All rights reserved.
          Contributed by Ross Smith (adodb@netebb.com). 
   Released under both BSD license and Lesser GPL library license.
   Whenever there is any discrepancy between the two licenses,
index b1f6642..3c1ddf2 100644 (file)
@@ -2,7 +2,7 @@
 
 
 /*
-V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+V5.14 8 Sept 2011  (c) 2000-2011 John Lim (jlim#natsoft.com). All rights reserved.
          Contributed by Ross Smith (adodb@netebb.com). 
   Released under both BSD license and Lesser GPL library license.
   Whenever there is any discrepancy between the two licenses,
@@ -106,4 +106,4 @@ class ADODB_Encrypt_MCrypt {
 
 return 1;
 
-?>
\ No newline at end of file
+?>
index f2209cc..cf17563 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 /*
-V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+V5.14 8 Sept 2011  (c) 2000-2011 John Lim (jlim#natsoft.com). All rights reserved.
          Contributed by Ross Smith (adodb@netebb.com). 
   Released under both BSD license and Lesser GPL library license.
   Whenever there is any discrepancy between the two licenses,
index 7d02e7f..2393399 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 /*
-V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+V5.14 8 Sept 2011  (c) 2000-2011 John Lim (jlim#natsoft.com). All rights reserved.
          Contributed by Ross Smith (adodb@netebb.com). 
   Released under both BSD license and Lesser GPL library license.
   Whenever there is any discrepancy between the two licenses,
@@ -45,4 +45,4 @@ class ADODB_Encrypt_Secret {
 
 return 1;
 
-?>
\ No newline at end of file
+?>
index 532151b..f6f4978 100644 (file)
@@ -2,7 +2,7 @@
 
 
 /*
-V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+V5.14 8 Sept 2011  (c) 2000-2011 John Lim (jlim#natsoft.com). All rights reserved.
          Contributed by Ross Smith (adodb@netebb.com). 
   Released under both BSD license and Lesser GPL library license.
   Whenever there is any discrepancy between the two licenses,
index 6aed573..c170da8 100644 (file)
@@ -2,7 +2,7 @@
 
 
 /*
-V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+V5.14 8 Sept 2011  (c) 2000-2011 John Lim (jlim#natsoft.com). All rights reserved.
          Contributed by Ross Smith (adodb@netebb.com). 
   Released under both BSD license and Lesser GPL library license.
   Whenever there is any discrepancy between the two licenses,
index 1d2e307..7ffcf7c 100644 (file)
@@ -2,7 +2,7 @@
 
 
 /*
-V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+V5.14 8 Sept 2011  (c) 2000-2011 John Lim (jlim#natsoft.com). All rights reserved.
          Contributed by Ross Smith (adodb@netebb.com).
   Released under both BSD license and Lesser GPL library license.
   Whenever there is any discrepancy between the two licenses,
index dc45b5d..7c20e85 100644 (file)
@@ -2,7 +2,7 @@
 
 
 /*
-V5.11 5 May 2010   (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+V5.14 8 Sept 2011  (c) 2000-2011 John Lim (jlim#natsoft.com). All rights reserved.
          Contributed by Ross Smith (adodb@netebb.com). 
   Released under both BSD license and Lesser GPL library license.
   Whenever there is any discrepancy between the two licenses,
@@ -727,7 +727,7 @@ class ADODB_Session {
                        if ($rs) $rs->Close();
                                        
                        if ($rs && reset($rs->fields) > 0) {
-                               $sql = "UPDATE $table SET expiry=$expiry, sessdata=".$conn->Param(0).", expireref= ".$conn->Param(1).",modified=$sysTimeStamp WHERE sesskey = ".$conn->Param('2');
+                               $sql = "UPDATE $table SET expiry=$expiry, sessdata=".$conn->Param(0).", expireref= ".$conn->Param(1).",modified=$sysTimeStamp WHERE sesskey = ".$conn->Param(2);
                                
                        } else {
                                $sql = "INSERT INTO $table (expiry, sessdata, expireref, sesskey, created, modified) 
@@ -882,8 +882,8 @@ class ADODB_Session {
                $savem = $conn->SetFetchMode(ADODB_FETCH_NUM);
                $sql = "SELECT expireref, sesskey FROM $table WHERE expiry < $time ORDER BY 2"; # add order by to prevent deadlock
                $rs = $conn->SelectLimit($sql,1000);
-               ADODB_Session::_dumprs($rs);
-               if ($debug) $conn->SetFetchMode($savem);
+               if ($debug) ADODB_Session::_dumprs($rs);
+               $conn->SetFetchMode($savem);
                if ($rs) {
                        $tr = $conn->hasTransactions;
                        if ($tr) $conn->BeginTrans();
index 41cb06a..61d145b 100644 (file)
@@ -64,7 +64,6 @@ class MD5Crypt{
 
 
 class SHA1Crypt{
-
                function keyED($txt,$encrypt_key)
                {
 
@@ -81,8 +80,6 @@ class SHA1Crypt{
 
                }
 
-
-
                function Encrypt($txt,$key)
                {
 
index 6975b51..12a2782 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 /** 
- * @version V4.93 10 Oct 2006 (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+ * @version V4.93 10 Oct 2006 (c) 2000-2011 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. 
index 7624566..be8e997 100644 (file)
@@ -1,6 +1,6 @@
 <?php 
 /*
-  V4.93 10 Oct 2006  (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved.
+  V4.93 10 Oct 2006  (c) 2000-2011 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.
index c2619fa..f5932ec 100644 (file)
@@ -28,12 +28,12 @@ $EM_CONF[$_EXTKEY] = array(
        'clearCacheOnLoad' => 0,
        'lockType' => '',
        'author' => 'Xavier Perseguers',
-       'author_email' => 'typo3@perseguers.ch',
+       'author_email' => 'xavier@typo3.org',
        'author_company' => '',
        'CGLcompliance' => '',
        'CGLcompliance_note' => '',
-       'version' => '5.11.0',
-       '_md5_values_when_last_written' => 'a:163:{s:25:"checkconnectionwizard.php";s:4:"b738";s:27:"class.tx_adodb_tceforms.php";s:4:"6a33";s:26:"datasource_flexform_ds.xml";s:4:"96fb";s:12:"ext_icon.gif";s:4:"c778";s:17:"ext_localconf.php";s:4:"62dd";s:31:"locallang_datasource_config.xml";s:4:"df55";s:20:"locallang_wizard.xml";s:4:"dca8";s:33:"adodb/adodb-active-record.inc.php";s:4:"64e5";s:34:"adodb/adodb-active-recordx.inc.php";s:4:"c6c9";s:26:"adodb/adodb-csvlib.inc.php";s:4:"db96";s:28:"adodb/adodb-datadict.inc.php";s:4:"ab5c";s:25:"adodb/adodb-error.inc.php";s:4:"e76c";s:32:"adodb/adodb-errorhandler.inc.php";s:4:"5add";s:29:"adodb/adodb-errorpear.inc.php";s:4:"7ab4";s:30:"adodb/adodb-exceptions.inc.php";s:4:"526b";s:28:"adodb/adodb-iterator.inc.php";s:4:"3604";s:23:"adodb/adodb-lib.inc.php";s:4:"7e31";s:32:"adodb/adodb-memcache.lib.inc.php";s:4:"1b01";s:25:"adodb/adodb-pager.inc.php";s:4:"5382";s:24:"adodb/adodb-pear.inc.php";s:4:"2f1f";s:24:"adodb/adodb-perf.inc.php";s:4:"46e2";s:24:"adodb/adodb-php4.inc.php";s:4:"e5ce";s:24:"adodb/adodb-time.inc.php";s:4:"8762";s:29:"adodb/adodb-xmlschema.inc.php";s:4:"ff89";s:31:"adodb/adodb-xmlschema03.inc.php";s:4:"0a18";s:19:"adodb/adodb.inc.php";s:4:"3994";s:17:"adodb/license.txt";s:4:"af93";s:24:"adodb/pivottable.inc.php";s:4:"a423";s:16:"adodb/readme.txt";s:4:"a2d2";s:22:"adodb/rsfilter.inc.php";s:4:"cd4e";s:16:"adodb/server.php";s:4:"ebb5";s:22:"adodb/toexport.inc.php";s:4:"3514";s:20:"adodb/tohtml.inc.php";s:4:"f696";s:19:"adodb/xmlschema.dtd";s:4:"26f3";s:21:"adodb/xmlschema03.dtd";s:4:"fa85";s:30:"adodb/contrib/toxmlrpc.inc.php";s:4:"b8a4";s:38:"adodb/datadict/datadict-access.inc.php";s:4:"38fe";s:35:"adodb/datadict/datadict-db2.inc.php";s:4:"58f4";s:40:"adodb/datadict/datadict-firebird.inc.php";s:4:"c97c";s:39:"adodb/datadict/datadict-generic.inc.php";s:4:"3505";s:37:"adodb/datadict/datadict-ibase.inc.php";s:4:"3f44";s:40:"adodb/datadict/datadict-informix.inc.php";s:4:"43ba";s:37:"adodb/datadict/datadict-mssql.inc.php";s:4:"39d7";s:43:"adodb/datadict/datadict-mssqlnative.inc.php";s:4:"58da";s:37:"adodb/datadict/datadict-mysql.inc.php";s:4:"fb01";s:36:"adodb/datadict/datadict-oci8.inc.php";s:4:"1e19";s:40:"adodb/datadict/datadict-postgres.inc.php";s:4:"583a";s:37:"adodb/datadict/datadict-sapdb.inc.php";s:4:"d6c7";s:38:"adodb/datadict/datadict-sqlite.inc.php";s:4:"f4df";s:38:"adodb/datadict/datadict-sybase.inc.php";s:4:"c944";s:34:"adodb/drivers/adodb-access.inc.php";s:4:"e812";s:31:"adodb/drivers/adodb-ado.inc.php";s:4:"fd86";s:32:"adodb/drivers/adodb-ado5.inc.php";s:4:"c758";s:38:"adodb/drivers/adodb-ado_access.inc.php";s:4:"8605";s:37:"adodb/drivers/adodb-ado_mssql.inc.php";s:4:"c272";s:31:"adodb/drivers/adodb-ads.inc.php";s:4:"c7c7";s:41:"adodb/drivers/adodb-borland_ibase.inc.php";s:4:"a9fc";s:31:"adodb/drivers/adodb-csv.inc.php";s:4:"82b3";s:31:"adodb/drivers/adodb-db2.inc.php";s:4:"febe";s:34:"adodb/drivers/adodb-db2oci.inc.php";s:4:"db0d";s:34:"adodb/drivers/adodb-db2ora.inc.php";s:4:"dd44";s:33:"adodb/drivers/adodb-fbsql.inc.php";s:4:"8587";s:36:"adodb/drivers/adodb-firebird.inc.php";s:4:"b89e";s:33:"adodb/drivers/adodb-ibase.inc.php";s:4:"daf7";s:36:"adodb/drivers/adodb-informix.inc.php";s:4:"5beb";s:38:"adodb/drivers/adodb-informix72.inc.php";s:4:"1595";s:32:"adodb/drivers/adodb-ldap.inc.php";s:4:"830d";s:33:"adodb/drivers/adodb-mssql.inc.php";s:4:"c4a2";s:35:"adodb/drivers/adodb-mssql_n.inc.php";s:4:"3c9e";s:39:"adodb/drivers/adodb-mssqlnative.inc.php";s:4:"8d39";s:35:"adodb/drivers/adodb-mssqlpo.inc.php";s:4:"5cd8";s:33:"adodb/drivers/adodb-mysql.inc.php";s:4:"c168";s:34:"adodb/drivers/adodb-mysqli.inc.php";s:4:"90d6";s:35:"adodb/drivers/adodb-mysqlpo.inc.php";s:4:"c0e7";s:34:"adodb/drivers/adodb-mysqlt.inc.php";s:4:"85c8";s:35:"adodb/drivers/adodb-netezza.inc.php";s:4:"f9c8";s:32:"adodb/drivers/adodb-oci8.inc.php";s:4:"bd00";s:34:"adodb/drivers/adodb-oci805.inc.php";s:4:"39e8";s:34:"adodb/drivers/adodb-oci8po.inc.php";s:4:"0b13";s:32:"adodb/drivers/adodb-odbc.inc.php";s:4:"c837";s:36:"adodb/drivers/adodb-odbc_db2.inc.php";s:4:"d6bd";s:38:"adodb/drivers/adodb-odbc_mssql.inc.php";s:4:"9d2c";s:39:"adodb/drivers/adodb-odbc_oracle.inc.php";s:4:"811d";s:33:"adodb/drivers/adodb-odbtp.inc.php";s:4:"cd66";s:41:"adodb/drivers/adodb-odbtp_unicode.inc.php";s:4:"e5c6";s:34:"adodb/drivers/adodb-oracle.inc.php";s:4:"3fe4";s:31:"adodb/drivers/adodb-pdo.inc.php";s:4:"b6eb";s:37:"adodb/drivers/adodb-pdo_mssql.inc.php";s:4:"ec5a";s:37:"adodb/drivers/adodb-pdo_mysql.inc.php";s:4:"b29d";s:35:"adodb/drivers/adodb-pdo_oci.inc.php";s:4:"76c7";s:37:"adodb/drivers/adodb-pdo_pgsql.inc.php";s:4:"1f04";s:38:"adodb/drivers/adodb-pdo_sqlite.inc.php";s:4:"8203";s:36:"adodb/drivers/adodb-postgres.inc.php";s:4:"4229";s:38:"adodb/drivers/adodb-postgres64.inc.php";s:4:"67ff";s:37:"adodb/drivers/adodb-postgres7.inc.php";s:4:"0017";s:37:"adodb/drivers/adodb-postgres8.inc.php";s:4:"0d1f";s:33:"adodb/drivers/adodb-proxy.inc.php";s:4:"3505";s:33:"adodb/drivers/adodb-sapdb.inc.php";s:4:"942c";s:39:"adodb/drivers/adodb-sqlanywhere.inc.php";s:4:"5386";s:34:"adodb/drivers/adodb-sqlite.inc.php";s:4:"167b";s:36:"adodb/drivers/adodb-sqlitepo.inc.php";s:4:"17f6";s:34:"adodb/drivers/adodb-sybase.inc.php";s:4:"1547";s:38:"adodb/drivers/adodb-sybase_ase.inc.php";s:4:"689f";s:31:"adodb/drivers/adodb-vfp.inc.php";s:4:"2c6e";s:27:"adodb/lang/adodb-ar.inc.php";s:4:"5660";s:27:"adodb/lang/adodb-bg.inc.php";s:4:"37b0";s:31:"adodb/lang/adodb-bgutf8.inc.php";s:4:"08ac";s:27:"adodb/lang/adodb-ca.inc.php";s:4:"b903";s:27:"adodb/lang/adodb-cn.inc.php";s:4:"c8e1";s:27:"adodb/lang/adodb-cz.inc.php";s:4:"0339";s:27:"adodb/lang/adodb-da.inc.php";s:4:"2ea2";s:27:"adodb/lang/adodb-de.inc.php";s:4:"6e6e";s:27:"adodb/lang/adodb-en.inc.php";s:4:"c542";s:27:"adodb/lang/adodb-es.inc.php";s:4:"de07";s:34:"adodb/lang/adodb-esperanto.inc.php";s:4:"9ca3";s:27:"adodb/lang/adodb-fa.inc.php";s:4:"aa96";s:27:"adodb/lang/adodb-fr.inc.php";s:4:"237c";s:27:"adodb/lang/adodb-hu.inc.php";s:4:"f308";s:27:"adodb/lang/adodb-it.inc.php";s:4:"481e";s:27:"adodb/lang/adodb-nl.inc.php";s:4:"ed3d";s:27:"adodb/lang/adodb-pl.inc.php";s:4:"8a53";s:30:"adodb/lang/adodb-pt-br.inc.php";s:4:"5130";s:27:"adodb/lang/adodb-ro.inc.php";s:4:"7105";s:31:"adodb/lang/adodb-ru1251.inc.php";s:4:"43c8";s:27:"adodb/lang/adodb-sv.inc.php";s:4:"2e5a";s:31:"adodb/lang/adodb-uk1251.inc.php";s:4:"822a";s:27:"adodb/lang/adodb_th.inc.php";s:4:"201d";s:27:"adodb/perf/perf-db2.inc.php";s:4:"6827";s:32:"adodb/perf/perf-informix.inc.php";s:4:"8e47";s:29:"adodb/perf/perf-mssql.inc.php";s:4:"57b7";s:35:"adodb/perf/perf-mssqlnative.inc.php";s:4:"01f6";s:29:"adodb/perf/perf-mysql.inc.php";s:4:"1241";s:28:"adodb/perf/perf-oci8.inc.php";s:4:"e306";s:32:"adodb/perf/perf-postgres.inc.php";s:4:"ce92";s:38:"adodb/session/adodb-compress-bzip2.php";s:4:"4c97";s:37:"adodb/session/adodb-compress-gzip.php";s:4:"a777";s:36:"adodb/session/adodb-cryptsession.php";s:4:"f246";s:37:"adodb/session/adodb-cryptsession2.php";s:4:"14db";s:38:"adodb/session/adodb-encrypt-mcrypt.php";s:4:"48dd";s:35:"adodb/session/adodb-encrypt-md5.php";s:4:"b153";s:38:"adodb/session/adodb-encrypt-secret.php";s:4:"68b8";s:36:"adodb/session/adodb-encrypt-sha1.php";s:4:"4c0b";s:28:"adodb/session/adodb-sess.txt";s:4:"a25a";s:36:"adodb/session/adodb-session-clob.php";s:4:"414f";s:37:"adodb/session/adodb-session-clob2.php";s:4:"703d";s:31:"adodb/session/adodb-session.php";s:4:"fa9c";s:32:"adodb/session/adodb-session2.php";s:4:"4067";s:38:"adodb/session/adodb-sessions.mysql.sql";s:4:"42fe";s:44:"adodb/session/adodb-sessions.oracle.clob.sql";s:4:"3c64";s:39:"adodb/session/adodb-sessions.oracle.sql";s:4:"08d0";s:27:"adodb/session/crypt.inc.php";s:4:"4dad";s:32:"adodb/session/session_schema.xml";s:4:"6443";s:33:"adodb/session/session_schema2.xml";s:4:"3409";s:29:"adodb/xsl/convert-0.1-0.2.xsl";s:4:"29d9";s:29:"adodb/xsl/convert-0.1-0.3.xsl";s:4:"6aad";s:29:"adodb/xsl/convert-0.2-0.1.xsl";s:4:"5d27";s:29:"adodb/xsl/convert-0.2-0.3.xsl";s:4:"4098";s:24:"adodb/xsl/remove-0.2.xsl";s:4:"0b2b";s:24:"adodb/xsl/remove-0.3.xsl";s:4:"678d";s:18:"doc/510.DBAL.patch";s:4:"e88d";s:10:"doc/README";s:4:"d375";s:25:"doc/mssql-error-fix.patch";s:4:"91bf";s:23:"res/checkconnection.gif";s:4:"1760";}',
+       'version' => '5.14.0',
+       '_md5_values_when_last_written' => 'a:166:{s:25:"checkconnectionwizard.php";s:4:"c043";s:27:"class.tx_adodb_tceforms.php";s:4:"6a33";s:26:"datasource_flexform_ds.xml";s:4:"96fb";s:12:"ext_icon.gif";s:4:"c778";s:17:"ext_localconf.php";s:4:"62dd";s:31:"locallang_datasource_config.xlf";s:4:"8b08";s:20:"locallang_wizard.xlf";s:4:"8b08";s:33:"adodb/adodb-active-record.inc.php";s:4:"c483";s:34:"adodb/adodb-active-recordx.inc.php";s:4:"c8b6";s:26:"adodb/adodb-csvlib.inc.php";s:4:"712f";s:28:"adodb/adodb-datadict.inc.php";s:4:"8842";s:25:"adodb/adodb-error.inc.php";s:4:"8428";s:32:"adodb/adodb-errorhandler.inc.php";s:4:"0010";s:29:"adodb/adodb-errorpear.inc.php";s:4:"aafe";s:30:"adodb/adodb-exceptions.inc.php";s:4:"13e4";s:28:"adodb/adodb-iterator.inc.php";s:4:"1396";s:23:"adodb/adodb-lib.inc.php";s:4:"bb8e";s:32:"adodb/adodb-memcache.lib.inc.php";s:4:"2a9d";s:25:"adodb/adodb-pager.inc.php";s:4:"abaa";s:24:"adodb/adodb-pear.inc.php";s:4:"5f9a";s:24:"adodb/adodb-perf.inc.php";s:4:"247e";s:24:"adodb/adodb-php4.inc.php";s:4:"2364";s:24:"adodb/adodb-time.inc.php";s:4:"0388";s:29:"adodb/adodb-xmlschema.inc.php";s:4:"6d73";s:31:"adodb/adodb-xmlschema03.inc.php";s:4:"2d3c";s:19:"adodb/adodb.inc.php";s:4:"a699";s:17:"adodb/license.txt";s:4:"af93";s:24:"adodb/pivottable.inc.php";s:4:"5e01";s:16:"adodb/readme.txt";s:4:"a2d2";s:22:"adodb/rsfilter.inc.php";s:4:"dd59";s:16:"adodb/server.php";s:4:"72c7";s:22:"adodb/toexport.inc.php";s:4:"bdd9";s:20:"adodb/tohtml.inc.php";s:4:"5545";s:19:"adodb/xmlschema.dtd";s:4:"26f3";s:21:"adodb/xmlschema03.dtd";s:4:"fa85";s:30:"adodb/contrib/toxmlrpc.inc.php";s:4:"b8a4";s:38:"adodb/datadict/datadict-access.inc.php";s:4:"ebf0";s:35:"adodb/datadict/datadict-db2.inc.php";s:4:"b1a0";s:40:"adodb/datadict/datadict-firebird.inc.php";s:4:"fd87";s:39:"adodb/datadict/datadict-generic.inc.php";s:4:"d11a";s:37:"adodb/datadict/datadict-ibase.inc.php";s:4:"40f3";s:40:"adodb/datadict/datadict-informix.inc.php";s:4:"a252";s:37:"adodb/datadict/datadict-mssql.inc.php";s:4:"7d84";s:43:"adodb/datadict/datadict-mssqlnative.inc.php";s:4:"88b5";s:37:"adodb/datadict/datadict-mysql.inc.php";s:4:"6e8a";s:36:"adodb/datadict/datadict-oci8.inc.php";s:4:"0b89";s:40:"adodb/datadict/datadict-postgres.inc.php";s:4:"fd55";s:37:"adodb/datadict/datadict-sapdb.inc.php";s:4:"bfe9";s:38:"adodb/datadict/datadict-sqlite.inc.php";s:4:"d18d";s:38:"adodb/datadict/datadict-sybase.inc.php";s:4:"ab7e";s:34:"adodb/drivers/adodb-access.inc.php";s:4:"c67c";s:31:"adodb/drivers/adodb-ado.inc.php";s:4:"3cdb";s:32:"adodb/drivers/adodb-ado5.inc.php";s:4:"6684";s:38:"adodb/drivers/adodb-ado_access.inc.php";s:4:"7eba";s:37:"adodb/drivers/adodb-ado_mssql.inc.php";s:4:"7142";s:31:"adodb/drivers/adodb-ads.inc.php";s:4:"c7c7";s:41:"adodb/drivers/adodb-borland_ibase.inc.php";s:4:"a79f";s:31:"adodb/drivers/adodb-csv.inc.php";s:4:"d361";s:31:"adodb/drivers/adodb-db2.inc.php";s:4:"400c";s:34:"adodb/drivers/adodb-db2oci.inc.php";s:4:"2d6f";s:34:"adodb/drivers/adodb-db2ora.inc.php";s:4:"6a88";s:33:"adodb/drivers/adodb-fbsql.inc.php";s:4:"f424";s:36:"adodb/drivers/adodb-firebird.inc.php";s:4:"8de0";s:33:"adodb/drivers/adodb-ibase.inc.php";s:4:"9988";s:36:"adodb/drivers/adodb-informix.inc.php";s:4:"dc03";s:38:"adodb/drivers/adodb-informix72.inc.php";s:4:"8708";s:32:"adodb/drivers/adodb-ldap.inc.php";s:4:"781c";s:33:"adodb/drivers/adodb-mssql.inc.php";s:4:"a5cd";s:35:"adodb/drivers/adodb-mssql_n.inc.php";s:4:"8bbe";s:39:"adodb/drivers/adodb-mssqlnative.inc.php";s:4:"68cd";s:35:"adodb/drivers/adodb-mssqlpo.inc.php";s:4:"7355";s:33:"adodb/drivers/adodb-mysql.inc.php";s:4:"a247";s:34:"adodb/drivers/adodb-mysqli.inc.php";s:4:"f42c";s:35:"adodb/drivers/adodb-mysqlpo.inc.php";s:4:"0cdf";s:34:"adodb/drivers/adodb-mysqlt.inc.php";s:4:"44d9";s:35:"adodb/drivers/adodb-netezza.inc.php";s:4:"badd";s:32:"adodb/drivers/adodb-oci8.inc.php";s:4:"cb43";s:34:"adodb/drivers/adodb-oci805.inc.php";s:4:"9772";s:34:"adodb/drivers/adodb-oci8po.inc.php";s:4:"ca0a";s:32:"adodb/drivers/adodb-odbc.inc.php";s:4:"f642";s:36:"adodb/drivers/adodb-odbc_db2.inc.php";s:4:"67aa";s:38:"adodb/drivers/adodb-odbc_mssql.inc.php";s:4:"c631";s:39:"adodb/drivers/adodb-odbc_oracle.inc.php";s:4:"3933";s:33:"adodb/drivers/adodb-odbtp.inc.php";s:4:"c068";s:41:"adodb/drivers/adodb-odbtp_unicode.inc.php";s:4:"1134";s:34:"adodb/drivers/adodb-oracle.inc.php";s:4:"59e6";s:31:"adodb/drivers/adodb-pdo.inc.php";s:4:"e689";s:37:"adodb/drivers/adodb-pdo_mssql.inc.php";s:4:"7951";s:37:"adodb/drivers/adodb-pdo_mysql.inc.php";s:4:"bb8b";s:35:"adodb/drivers/adodb-pdo_oci.inc.php";s:4:"0844";s:37:"adodb/drivers/adodb-pdo_pgsql.inc.php";s:4:"02ea";s:38:"adodb/drivers/adodb-pdo_sqlite.inc.php";s:4:"efa0";s:36:"adodb/drivers/adodb-postgres.inc.php";s:4:"3281";s:38:"adodb/drivers/adodb-postgres64.inc.php";s:4:"f798";s:37:"adodb/drivers/adodb-postgres7.inc.php";s:4:"725c";s:37:"adodb/drivers/adodb-postgres8.inc.php";s:4:"82d7";s:33:"adodb/drivers/adodb-proxy.inc.php";s:4:"e55f";s:33:"adodb/drivers/adodb-sapdb.inc.php";s:4:"7dce";s:39:"adodb/drivers/adodb-sqlanywhere.inc.php";s:4:"2e91";s:34:"adodb/drivers/adodb-sqlite.inc.php";s:4:"f7a8";s:35:"adodb/drivers/adodb-sqlite3.inc.php";s:4:"b434";s:36:"adodb/drivers/adodb-sqlitepo.inc.php";s:4:"d691";s:34:"adodb/drivers/adodb-sybase.inc.php";s:4:"96f9";s:38:"adodb/drivers/adodb-sybase_ase.inc.php";s:4:"b1bf";s:31:"adodb/drivers/adodb-vfp.inc.php";s:4:"b37d";s:27:"adodb/lang/adodb-ar.inc.php";s:4:"5660";s:27:"adodb/lang/adodb-bg.inc.php";s:4:"37b0";s:31:"adodb/lang/adodb-bgutf8.inc.php";s:4:"08ac";s:27:"adodb/lang/adodb-ca.inc.php";s:4:"b903";s:27:"adodb/lang/adodb-cn.inc.php";s:4:"c8e1";s:27:"adodb/lang/adodb-cz.inc.php";s:4:"0339";s:27:"adodb/lang/adodb-da.inc.php";s:4:"2ea2";s:27:"adodb/lang/adodb-de.inc.php";s:4:"6e6e";s:27:"adodb/lang/adodb-en.inc.php";s:4:"c542";s:27:"adodb/lang/adodb-es.inc.php";s:4:"de07";s:34:"adodb/lang/adodb-esperanto.inc.php";s:4:"32b9";s:27:"adodb/lang/adodb-fa.inc.php";s:4:"aa96";s:27:"adodb/lang/adodb-fr.inc.php";s:4:"237c";s:27:"adodb/lang/adodb-hu.inc.php";s:4:"f308";s:27:"adodb/lang/adodb-it.inc.php";s:4:"15e2";s:27:"adodb/lang/adodb-nl.inc.php";s:4:"ed3d";s:27:"adodb/lang/adodb-pl.inc.php";s:4:"8a53";s:30:"adodb/lang/adodb-pt-br.inc.php";s:4:"14cc";s:27:"adodb/lang/adodb-ro.inc.php";s:4:"7105";s:31:"adodb/lang/adodb-ru1251.inc.php";s:4:"43c8";s:27:"adodb/lang/adodb-sv.inc.php";s:4:"2e5a";s:31:"adodb/lang/adodb-uk1251.inc.php";s:4:"822a";s:27:"adodb/lang/adodb_th.inc.php";s:4:"201d";s:26:"adodb/pear/readme.Auth.txt";s:4:"4970";s:35:"adodb/pear/Auth/Container/ADOdb.php";s:4:"ebd8";s:27:"adodb/perf/perf-db2.inc.php";s:4:"83d7";s:32:"adodb/perf/perf-informix.inc.php";s:4:"1b0f";s:29:"adodb/perf/perf-mssql.inc.php";s:4:"f7f6";s:35:"adodb/perf/perf-mssqlnative.inc.php";s:4:"259c";s:29:"adodb/perf/perf-mysql.inc.php";s:4:"f4ec";s:28:"adodb/perf/perf-oci8.inc.php";s:4:"063a";s:32:"adodb/perf/perf-postgres.inc.php";s:4:"743e";s:38:"adodb/session/adodb-compress-bzip2.php";s:4:"688c";s:37:"adodb/session/adodb-compress-gzip.php";s:4:"d495";s:36:"adodb/session/adodb-cryptsession.php";s:4:"98ba";s:37:"adodb/session/adodb-cryptsession2.php";s:4:"2320";s:38:"adodb/session/adodb-encrypt-mcrypt.php";s:4:"e5ec";s:35:"adodb/session/adodb-encrypt-md5.php";s:4:"7443";s:38:"adodb/session/adodb-encrypt-secret.php";s:4:"98e5";s:36:"adodb/session/adodb-encrypt-sha1.php";s:4:"4c0b";s:28:"adodb/session/adodb-sess.txt";s:4:"a25a";s:36:"adodb/session/adodb-session-clob.php";s:4:"17c5";s:37:"adodb/session/adodb-session-clob2.php";s:4:"af17";s:31:"adodb/session/adodb-session.php";s:4:"ff84";s:32:"adodb/session/adodb-session2.php";s:4:"b4d3";s:38:"adodb/session/adodb-sessions.mysql.sql";s:4:"42fe";s:44:"adodb/session/adodb-sessions.oracle.clob.sql";s:4:"3c64";s:39:"adodb/session/adodb-sessions.oracle.sql";s:4:"08d0";s:27:"adodb/session/crypt.inc.php";s:4:"0559";s:32:"adodb/session/session_schema.xml";s:4:"6443";s:33:"adodb/session/session_schema2.xml";s:4:"3409";s:29:"adodb/xsl/convert-0.1-0.2.xsl";s:4:"29d9";s:29:"adodb/xsl/convert-0.1-0.3.xsl";s:4:"6aad";s:29:"adodb/xsl/convert-0.2-0.1.xsl";s:4:"5d27";s:29:"adodb/xsl/convert-0.2-0.3.xsl";s:4:"4098";s:24:"adodb/xsl/remove-0.2.xsl";s:4:"0b2b";s:24:"adodb/xsl/remove-0.3.xsl";s:4:"678d";s:18:"doc/510.DBAL.patch";s:4:"e88d";s:10:"doc/README";s:4:"d375";s:25:"doc/mssql-error-fix.patch";s:4:"91bf";s:23:"res/checkconnection.gif";s:4:"1760";}',
        'constraints' => array(
                'depends' => array(
                        'php' => '5.2.0-0.0.0',