<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="http://www.phpclasses.org/rss1html.xsl"?>
<!-- Generated by: http://www.phpclasses.org/rsswriter $Revision: 1.12 $ -->
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" xmlns:dc="http://purl.org/dc/elements/1.1/">
 <channel rdf:about="http://snipt.org">
  <description>Share source code on Twitter and the Web</description>
  <link>http://snipt.org</link>
  <title>SniptBox for odin88 | Snipt.org</title>
  <dc:date>Tue, 21 May 2013 04:09:00 -0400</dc:date>
  <image rdf:resource="http://snipt.org/images/snipt_logo.jpg"/>
  <items>
   <rdf:Seq>
    <rdf:li rdf:resource="http://snipt.org/uIgg5"/>
   </rdf:Seq>
  </items>
 </channel>
 <image rdf:about="http://snipt.org/images/snipt_logo.jpg">
  <url>http://snipt.org/images/snipt_logo.jpg</url>
  <link>http://snipt.org</link>
  <title>Snipt.org</title>
  <description>Share source code on Twitter and the Web</description>
 </image>
 <item rdf:about="http://snipt.org/uIgg5">
  <description>&lt;?php&lt;br /&gt;&#13;&#10;/**&lt;br /&gt;&#13;&#10; * Oracle layer for DBO.&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * PHP versions 4 and 5&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)&lt;br /&gt;&#13;&#10; * Copyright 2005-2011, Cake Software Foundation, Inc. (http://cakefoundation.org)&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * Licensed under The MIT License&lt;br /&gt;&#13;&#10; * Redistributions of files must retain the above copyright notice.&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * @copyright     Copyright 2005-2011, Cake Software Foundation, Inc. (http://cakefoundation.org)&lt;br /&gt;&#13;&#10; * @link          http://cakephp.org CakePHP(tm) Project&lt;br /&gt;&#13;&#10; * @package       cake&lt;br /&gt;&#13;&#10; * @subpackage    cake.cake.libs.model.datasources.dbo&lt;br /&gt;&#13;&#10; * @since         CakePHP v 1.2.0.4041&lt;br /&gt;&#13;&#10; * @license       MIT License (http://www.opensource.org/licenses/mit-license.php)&lt;br /&gt;&#13;&#10; */&lt;br /&gt;&#13;&#10;App::uses(&apos;DboSource&apos;, &apos;Model/Datasource&apos;);&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;/**&lt;br /&gt;&#13;&#10; * Oracle layer for DBO.&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * Long description for class&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * @package       cake&lt;br /&gt;&#13;&#10; * @subpackage    cake.cake.libs.model.datasources.dbo&lt;br /&gt;&#13;&#10; */&lt;br /&gt;&#13;&#10;class Oracle extends DboSource {&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;/**&lt;br /&gt;&#13;&#10; * Configuration options&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * @var array&lt;br /&gt;&#13;&#10; * @access public&lt;br /&gt;&#13;&#10; */&lt;br /&gt;&#13;&#10;&#9;var $config = array();&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;/**&lt;br /&gt;&#13;&#10; * Alias&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * @var string&lt;br /&gt;&#13;&#10; */&lt;br /&gt;&#13;&#10;&#9;var $alias = &apos;&apos;;&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;/**&lt;br /&gt;&#13;&#10; * Sequence names as introspected from the database&lt;br /&gt;&#13;&#10; */&lt;br /&gt;&#13;&#10;&#9;var $_sequences = array();&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;/**&lt;br /&gt;&#13;&#10; * Transaction in progress flag&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * @var boolean&lt;br /&gt;&#13;&#10; */&lt;br /&gt;&#13;&#10;&#9;var $__transactionStarted = false;&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;/**&lt;br /&gt;&#13;&#10; * Column definitions&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * @var array&lt;br /&gt;&#13;&#10; * @access public&lt;br /&gt;&#13;&#10; */&lt;br /&gt;&#13;&#10;&#9;var $columns = array(&lt;br /&gt;&#13;&#10;&#9;&#9;&apos;primary_key&apos; =&gt; array(&apos;name&apos; =&gt; &apos;&apos;),&lt;br /&gt;&#13;&#10;&#9;&#9;&apos;string&apos; =&gt; array(&apos;name&apos; =&gt; &apos;varchar2&apos;, &apos;limit&apos; =&gt; &apos;255&apos;),&lt;br /&gt;&#13;&#10;&#9;&#9;&apos;text&apos; =&gt; array(&apos;name&apos; =&gt; &apos;varchar2&apos;),&lt;br /&gt;&#13;&#10;&#9;&#9;&apos;integer&apos; =&gt; array(&apos;name&apos; =&gt; &apos;number&apos;),&lt;br /&gt;&#13;&#10;&#9;&#9;&apos;float&apos; =&gt; array(&apos;name&apos; =&gt; &apos;float&apos;),&lt;br /&gt;&#13;&#10;&#9;&#9;&apos;datetime&apos; =&gt; array(&apos;name&apos; =&gt; &apos;date&apos;, &apos;format&apos; =&gt; &apos;Y-m-d H:i:s&apos;),&lt;br /&gt;&#13;&#10;&#9;&#9;&apos;timestamp&apos; =&gt; array(&apos;name&apos; =&gt; &apos;date&apos;, &apos;format&apos; =&gt; &apos;Y-m-d H:i:s&apos;),&lt;br /&gt;&#13;&#10;&#9;&#9;&apos;time&apos; =&gt; array(&apos;name&apos; =&gt; &apos;date&apos;, &apos;format&apos; =&gt; &apos;Y-m-d H:i:s&apos;),&lt;br /&gt;&#13;&#10;&#9;&#9;&apos;date&apos; =&gt; array(&apos;name&apos; =&gt; &apos;date&apos;, &apos;format&apos; =&gt; &apos;Y-m-d H:i:s&apos;),&lt;br /&gt;&#13;&#10;&#9;&#9;&apos;binary&apos; =&gt; array(&apos;name&apos; =&gt; &apos;bytea&apos;),&lt;br /&gt;&#13;&#10;&#9;&#9;&apos;boolean&apos; =&gt; array(&apos;name&apos; =&gt; &apos;boolean&apos;),&lt;br /&gt;&#13;&#10;&#9;&#9;&apos;number&apos; =&gt; array(&apos;name&apos; =&gt; &apos;number&apos;),&lt;br /&gt;&#13;&#10;&#9;&#9;&apos;inet&apos; =&gt; array(&apos;name&apos; =&gt; &apos;inet&apos;));&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;/**&lt;br /&gt;&#13;&#10; * Connection object&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * @var mixed&lt;br /&gt;&#13;&#10; * @access protected&lt;br /&gt;&#13;&#10; */&lt;br /&gt;&#13;&#10;&#9;var $connection;&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;/**&lt;br /&gt;&#13;&#10; * Query limit&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * @var int&lt;br /&gt;&#13;&#10; * @access protected&lt;br /&gt;&#13;&#10; */&lt;br /&gt;&#13;&#10;&#9;var $_limit = -1;&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;/**&lt;br /&gt;&#13;&#10; * Query offset&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * @var int&lt;br /&gt;&#13;&#10; * @access protected&lt;br /&gt;&#13;&#10; */&lt;br /&gt;&#13;&#10;&#9;var $_offset = 0;&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;/**&lt;br /&gt;&#13;&#10; * Enter description here...&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * @var unknown_type&lt;br /&gt;&#13;&#10; * @access protected&lt;br /&gt;&#13;&#10; */&lt;br /&gt;&#13;&#10;&#9;var $_map;&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;/**&lt;br /&gt;&#13;&#10; * Current Row&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * @var mixed&lt;br /&gt;&#13;&#10; * @access protected&lt;br /&gt;&#13;&#10; */&lt;br /&gt;&#13;&#10;&#9;var $_currentRow;&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;/**&lt;br /&gt;&#13;&#10; * Number of rows&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * @var int&lt;br /&gt;&#13;&#10; * @access protected&lt;br /&gt;&#13;&#10; */&lt;br /&gt;&#13;&#10;&#9;var $_numRows;&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;/**&lt;br /&gt;&#13;&#10; * Query results&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * @var mixed&lt;br /&gt;&#13;&#10; * @access protected&lt;br /&gt;&#13;&#10; */&lt;br /&gt;&#13;&#10;&#9;var $_results;&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;/**&lt;br /&gt;&#13;&#10; * Last error issued by oci extension&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * @var unknown_type&lt;br /&gt;&#13;&#10; */&lt;br /&gt;&#13;&#10;&#9;var $_error;&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;/**&lt;br /&gt;&#13;&#10; * Base configuration settings for MySQL driver&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * @var array&lt;br /&gt;&#13;&#10; */&lt;br /&gt;&#13;&#10;&#9;var $_baseConfig = array(&lt;br /&gt;&#13;&#10;&#9;&#9;&apos;persistent&apos; =&gt; true,&lt;br /&gt;&#13;&#10;&#9;&#9;&apos;host&apos; =&gt; &apos;localhost&apos;,&lt;br /&gt;&#13;&#10;&#9;&#9;&apos;login&apos; =&gt; &apos;system&apos;,&lt;br /&gt;&#13;&#10;&#9;&#9;&apos;password&apos; =&gt; &apos;&apos;,&lt;br /&gt;&#13;&#10;&#9;&#9;&apos;database&apos; =&gt; &apos;cake&apos;,&lt;br /&gt;&#13;&#10;&#9;&#9;&apos;nls_sort&apos; =&gt; &apos;&apos;,&lt;br /&gt;&#13;&#10;&#9;&#9;&apos;nls_sort&apos; =&gt; &apos;&apos;&lt;br /&gt;&#13;&#10;&#9;);&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;/**&lt;br /&gt;&#13;&#10; * Table-sequence map&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * @var unknown_type&lt;br /&gt;&#13;&#10; */&lt;br /&gt;&#13;&#10;&#9;var $_sequenceMap = array();&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;/**&lt;br /&gt;&#13;&#10; * Connects to the database using options in the given configuration array.&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * @return boolean True if the database could be connected, else false&lt;br /&gt;&#13;&#10; * @access public&lt;br /&gt;&#13;&#10; */&lt;br /&gt;&#13;&#10;&#9;function connect() {&lt;br /&gt;&#13;&#10;&#9;&#9;$config = $this-&gt;config;&lt;br /&gt;&#13;&#10;&#9;&#9;$this-&gt;connected = false;&lt;br /&gt;&#13;&#10;&#9;&#9;$config[&apos;charset&apos;] = !empty($config[&apos;charset&apos;]) ? $config[&apos;charset&apos;] : null;&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;if (!$config[&apos;persistent&apos;]) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;$this-&gt;connection = @ocilogon($config[&apos;login&apos;], $config[&apos;password&apos;], $config[&apos;database&apos;], $config[&apos;charset&apos;]);&lt;br /&gt;&#13;&#10;&#9;&#9;} else {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;$this-&gt;connection = @ociplogon($config[&apos;login&apos;], $config[&apos;password&apos;], $config[&apos;database&apos;], $config[&apos;charset&apos;]);&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;if ($this-&gt;connection) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;$this-&gt;connected = true;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;if (!empty($config[&apos;nls_sort&apos;])) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;$this-&gt;execute(&apos;ALTER SESSION SET NLS_SORT=&apos;.$config[&apos;nls_sort&apos;]);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;if (!empty($config[&apos;nls_comp&apos;])) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;$this-&gt;execute(&apos;ALTER SESSION SET NLS_COMP=&apos;.$config[&apos;nls_comp&apos;]);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;$this-&gt;execute(&quot;ALTER SESSION SET NLS_DATE_FORMAT=&apos;YYYY-MM-DD HH24:MI:SS&apos;&quot;);&lt;br /&gt;&#13;&#10;&#9;&#9;} else {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;$this-&gt;connected = false;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;$this-&gt;_setError();&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;return false;&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;return $this-&gt;connected;&lt;br /&gt;&#13;&#10;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;/**&lt;br /&gt;&#13;&#10; * Keeps track of the most recent Oracle error&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; */&lt;br /&gt;&#13;&#10;&#9;function _setError($source = null, $clear = false) {&lt;br /&gt;&#13;&#10;&#9;&#9;if ($source) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;$e = ocierror($source);&lt;br /&gt;&#13;&#10;&#9;&#9;} else {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;$e = ocierror();&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;$this-&gt;_error = $e[&apos;message&apos;];&lt;br /&gt;&#13;&#10;&#9;&#9;if ($clear) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;$this-&gt;_error = null;&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;/**&lt;br /&gt;&#13;&#10; * Sets the encoding language of the session&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * @param string $lang language constant&lt;br /&gt;&#13;&#10; * @return bool&lt;br /&gt;&#13;&#10; */&lt;br /&gt;&#13;&#10;&#9;function setEncoding($lang) {&lt;br /&gt;&#13;&#10;&#9;&#9;if (!$this-&gt;execute(&apos;ALTER SESSION SET NLS_LANGUAGE=&apos;.$lang)) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;return false;&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;return true;&lt;br /&gt;&#13;&#10;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;/**&lt;br /&gt;&#13;&#10; * Gets the current encoding language&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * @return string language constant&lt;br /&gt;&#13;&#10; */&lt;br /&gt;&#13;&#10;&#9;function getEncoding() {&lt;br /&gt;&#13;&#10;&#9;&#9;$sql = &apos;SELECT VALUE FROM NLS_SESSION_PARAMETERS WHERE PARAMETER=\&apos;NLS_LANGUAGE\&apos;&apos;;&lt;br /&gt;&#13;&#10;&#9;&#9;if (!$this-&gt;execute($sql)) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;return false;&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;if (!$row = $this-&gt;fetchRow()) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;return false;&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;return $row[0][&apos;VALUE&apos;];&lt;br /&gt;&#13;&#10;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;/**&lt;br /&gt;&#13;&#10; * Disconnects from database.&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * @return boolean True if the database could be disconnected, else false&lt;br /&gt;&#13;&#10; * @access public&lt;br /&gt;&#13;&#10; */&lt;br /&gt;&#13;&#10;&#9;function disconnect() {&lt;br /&gt;&#13;&#10;&#9;&#9;if ($this-&gt;connection) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;$this-&gt;connected = !ocilogoff($this-&gt;connection);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;return !$this-&gt;connected;&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;/**&lt;br /&gt;&#13;&#10; * Scrape the incoming SQL to create the association map. This is an extremely&lt;br /&gt;&#13;&#10; * experimental method that creates the association maps since Oracle will not tell us.&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * @param string $sql&lt;br /&gt;&#13;&#10; * @return false if sql is nor a SELECT&lt;br /&gt;&#13;&#10; * @access protected&lt;br /&gt;&#13;&#10; */&lt;br /&gt;&#13;&#10;&#9;function _scrapeSQL($sql) {&lt;br /&gt;&#13;&#10;&#9;&#9;$sql = str_replace(&quot;\&quot;&quot;, &apos;&apos;, $sql);&lt;br /&gt;&#13;&#10;&#9;&#9;$preFrom = preg_split(&apos;/\bFROM\b/&apos;, $sql);&lt;br /&gt;&#13;&#10;&#9;&#9;$preFrom = $preFrom[0];&lt;br /&gt;&#13;&#10;&#9;&#9;$find = array(&apos;SELECT&apos;);&lt;br /&gt;&#13;&#10;&#9;&#9;$replace = array(&apos;&apos;);&lt;br /&gt;&#13;&#10;&#9;&#9;$fieldList = trim(str_replace($find, $replace, $preFrom));&lt;br /&gt;&#13;&#10;&#9;&#9;$fields = preg_split(&apos;/,\s+/&apos;, $fieldList);//explode(&apos;, &apos;, $fieldList);&lt;br /&gt;&#13;&#10;&#9;&#9;$lastTableName&#9;= &apos;&apos;;&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;foreach($fields as $key =&gt; $value) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;if ($value != &apos;COUNT(*) AS count&apos;) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;if (preg_match(&apos;/\s+(\w+(\.\w+)*)$/&apos;, $value, $matches)) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;$fields[$key]&#9;= $matches[1];&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;if (preg_match(&apos;/^(\w+\.)/&apos;, $value, $matches)) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;$fields[$key]&#9;= $matches[1] . $fields[$key];&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;$lastTableName&#9;= $matches[1];&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;/*&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;if (preg_match(&apos;/(([[:alnum:]_]+)\.[[:alnum:]_]+)(\s+AS\s+(\w+))?$/i&apos;, $value, $matches)) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;$fields[$key]&#9;= isset($matches[4]) ? $matches[2] . &apos;.&apos; . $matches[4] : $matches[1];&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;*/&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;$this-&gt;_map = array();&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;foreach($fields as $f) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;$e = explode(&apos;.&apos;, $f);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;if (count($e) &gt; 1) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;$table = $e[0];&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;$field = strtolower($e[1]);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;} else {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;$table = 0;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;$field = $e[0];&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;$this-&gt;_map[] = array($table, $field);&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;/**&lt;br /&gt;&#13;&#10; * Modify a SQL query to limit (and offset) the result set&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * @param integer $limit Maximum number of rows to return&lt;br /&gt;&#13;&#10; * @param integer $offset Row to begin returning&lt;br /&gt;&#13;&#10; * @return modified SQL Query&lt;br /&gt;&#13;&#10; * @access public&lt;br /&gt;&#13;&#10; */&lt;br /&gt;&#13;&#10;&#9;function limit($limit = -1, $offset = 0) {&lt;br /&gt;&#13;&#10;&#9;&#9;$this-&gt;_limit = (int) $limit;&lt;br /&gt;&#13;&#10;&#9;&#9;$this-&gt;_offset = (int) $offset;&lt;br /&gt;&#13;&#10;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;/**&lt;br /&gt;&#13;&#10; * Returns number of rows in previous resultset. If no previous resultset exists,&lt;br /&gt;&#13;&#10; * this returns false.&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * @return integer Number of rows in resultset&lt;br /&gt;&#13;&#10; * @access public&lt;br /&gt;&#13;&#10; */&lt;br /&gt;&#13;&#10;&#9;function lastNumRows() {&lt;br /&gt;&#13;&#10;&#9;&#9;return $this-&gt;_numRows;&lt;br /&gt;&#13;&#10;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;/**&lt;br /&gt;&#13;&#10; * Executes given SQL statement. This is an overloaded method.&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * @param string $sql SQL statement&lt;br /&gt;&#13;&#10; * @return resource Result resource identifier or null&lt;br /&gt;&#13;&#10; * @access protected&lt;br /&gt;&#13;&#10; */&lt;br /&gt;&#13;&#10;&#9;function _execute($sql) {&lt;br /&gt;&#13;&#10;&#9;&#9;$this-&gt;_statementId = @ociparse($this-&gt;connection, $sql);&lt;br /&gt;&#13;&#10;&#9;&#9;if (!$this-&gt;_statementId) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;$this-&gt;_setError($this-&gt;connection);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;return false;&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;if ($this-&gt;__transactionStarted) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;$mode = OCI_DEFAULT;&lt;br /&gt;&#13;&#10;&#9;&#9;} else {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;$mode = OCI_COMMIT_ON_SUCCESS;&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;if (!@ociexecute($this-&gt;_statementId, $mode)) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;$this-&gt;_setError($this-&gt;_statementId);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;return false;&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;$this-&gt;_setError(null, true);&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;switch(ocistatementtype($this-&gt;_statementId)) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;case &apos;DESCRIBE&apos;:&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;case &apos;SELECT&apos;:&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;$this-&gt;_scrapeSQL($sql);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;break;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;default:&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;return $this-&gt;_statementId;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;break;&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;if ($this-&gt;_limit &gt;= 1) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;ocisetprefetch($this-&gt;_statementId, $this-&gt;_limit);&lt;br /&gt;&#13;&#10;&#9;&#9;} else {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;ocisetprefetch($this-&gt;_statementId, 3000);&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;$this-&gt;_numRows = ocifetchstatement($this-&gt;_statementId, $this-&gt;_results, $this-&gt;_offset, $this-&gt;_limit, OCI_NUM | OCI_FETCHSTATEMENT_BY_ROW);&lt;br /&gt;&#13;&#10;&#9;&#9;$this-&gt;_currentRow = 0;&lt;br /&gt;&#13;&#10;&#9;&#9;$this-&gt;limit();&lt;br /&gt;&#13;&#10;&#9;&#9;return $this-&gt;_statementId;&lt;br /&gt;&#13;&#10;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;/**&lt;br /&gt;&#13;&#10; * Fetch result row&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * @return array&lt;br /&gt;&#13;&#10; * @access public&lt;br /&gt;&#13;&#10; */&lt;br /&gt;&#13;&#10;&#9;function fetchRow() {&lt;br /&gt;&#13;&#10;&#9;&#9;if ($this-&gt;_currentRow &gt;= $this-&gt;_numRows) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;ocifreestatement($this-&gt;_statementId);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;$this-&gt;_map = null;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;$this-&gt;_results = null;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;$this-&gt;_currentRow = null;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;$this-&gt;_numRows = null;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;return false;&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;$resultRow = array();&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;foreach($this-&gt;_results[$this-&gt;_currentRow] as $index =&gt; $field) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;list($table, $column) = $this-&gt;_map[$index];&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;if (strpos($column, &apos; count&apos;)) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;$resultRow[0][&apos;count&apos;] = $field;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;} else {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;$resultRow[$table][$column] = $this-&gt;_results[$this-&gt;_currentRow][$index];&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;$this-&gt;_currentRow++;&lt;br /&gt;&#13;&#10;&#9;&#9;return $resultRow;&lt;br /&gt;&#13;&#10;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;/**&lt;br /&gt;&#13;&#10; * Fetches the next row from the current result set&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * @return unknown&lt;br /&gt;&#13;&#10; */&lt;br /&gt;&#13;&#10;&#9;function fetchResult() {&lt;br /&gt;&#13;&#10;&#9;&#9;return $this-&gt;fetchRow();&lt;br /&gt;&#13;&#10;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;/**&lt;br /&gt;&#13;&#10; * Checks to see if a named sequence exists&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * @param string $sequence&lt;br /&gt;&#13;&#10; * @return bool&lt;br /&gt;&#13;&#10; * @access public&lt;br /&gt;&#13;&#10; */&lt;br /&gt;&#13;&#10;&#9;function sequenceExists($sequence) {&lt;br /&gt;&#13;&#10;&#9;&#9;$sql = &quot;SELECT SEQUENCE_NAME FROM USER_SEQUENCES WHERE SEQUENCE_NAME = &apos;$sequence&apos;&quot;;&lt;br /&gt;&#13;&#10;&#9;&#9;if (!$this-&gt;execute($sql)) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;return false;&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;return $this-&gt;fetchRow();&lt;br /&gt;&#13;&#10;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;/**&lt;br /&gt;&#13;&#10; * Creates a database sequence&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * @param string $sequence&lt;br /&gt;&#13;&#10; * @return bool&lt;br /&gt;&#13;&#10; * @access public&lt;br /&gt;&#13;&#10; */&lt;br /&gt;&#13;&#10;&#9;function createSequence($sequence) {&lt;br /&gt;&#13;&#10;&#9;&#9;$sql = &quot;CREATE SEQUENCE $sequence&quot;;&lt;br /&gt;&#13;&#10;&#9;&#9;return $this-&gt;execute($sql);&lt;br /&gt;&#13;&#10;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;/**&lt;br /&gt;&#13;&#10; * Create trigger&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * @param string $table&lt;br /&gt;&#13;&#10; * @return mixed&lt;br /&gt;&#13;&#10; * @access public&lt;br /&gt;&#13;&#10; */&lt;br /&gt;&#13;&#10;&#9;function createTrigger($table) {&lt;br /&gt;&#13;&#10;&#9;&#9;$sql = &quot;CREATE OR REPLACE TRIGGER pk_$table&quot; . &quot;_trigger BEFORE INSERT ON $table FOR EACH ROW BEGIN SELECT pk_$table.NEXTVAL INTO :NEW.ID FROM DUAL; END;&quot;;&lt;br /&gt;&#13;&#10;&#9;&#9;return $this-&gt;execute($sql);&lt;br /&gt;&#13;&#10;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;/**&lt;br /&gt;&#13;&#10; * Returns an array of tables in the database. If there are no tables, an error is&lt;br /&gt;&#13;&#10; * raised and the application exits.&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * @return array tablenames in the database&lt;br /&gt;&#13;&#10; * @access public&lt;br /&gt;&#13;&#10; */&lt;br /&gt;&#13;&#10;&#9;function listSources() {&lt;br /&gt;&#13;&#10;&#9;&#9;$cache = parent::listSources();&lt;br /&gt;&#13;&#10;&#9;&#9;if ($cache != null) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;return $cache;&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;$sql = &apos;SELECT view_name AS name FROM all_views UNION SELECT table_name AS name FROM all_tables&apos;;&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;if (!$this-&gt;execute($sql)) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;return false;&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;$sources = array();&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;while($r = $this-&gt;fetchRow()) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;$sources[] = strtolower($r[0][&apos;name&apos;]);&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;parent::listSources($sources);&lt;br /&gt;&#13;&#10;&#9;&#9;return $sources;&lt;br /&gt;&#13;&#10;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;/**&lt;br /&gt;&#13;&#10; * Returns an array of the fields in given table name.&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * @param object instance of a model to inspect&lt;br /&gt;&#13;&#10; * @return array Fields in table. Keys are name and type&lt;br /&gt;&#13;&#10; * @access public&lt;br /&gt;&#13;&#10; */&lt;br /&gt;&#13;&#10;&#9;public function describe(&amp;$model) {&lt;br /&gt;&#13;&#10;&#9;&#9;$table = $this-&gt;fullTableName($model, false);&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;if (!empty($model-&gt;sequence)) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;$this-&gt;_sequenceMap[$table] = $model-&gt;sequence;&lt;br /&gt;&#13;&#10;&#9;&#9;} elseif (!empty($model-&gt;table)) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;$this-&gt;_sequenceMap[$table] = $model-&gt;table . &apos;_seq&apos;;&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;$cache = parent::describe($model);&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;if ($cache != null) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;return $cache;&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;$sql = &apos;SELECT COLUMN_NAME, DATA_TYPE, DATA_LENGTH FROM all_tab_columns WHERE table_name = \&apos;&apos;;&lt;br /&gt;&#13;&#10;&#9;&#9;$sql .= strtoupper($this-&gt;fullTableName($model)) . &apos;\&apos;&apos;;&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;if (!$this-&gt;execute($sql)) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;return false;&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;$fields = array();&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;for ($i = 0; $row = $this-&gt;fetchRow(); $i++) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;$fields[strtolower($row[0][&apos;COLUMN_NAME&apos;])] = array(&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&apos;type&apos;=&gt; $this-&gt;column($row[0][&apos;DATA_TYPE&apos;]),&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&apos;length&apos;=&gt; $row[0][&apos;DATA_LENGTH&apos;]&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;);&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;#$this-&gt;__cacheDescription($this-&gt;fullTableName($model, false), $fields);&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;return $fields;&lt;br /&gt;&#13;&#10;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;/**&lt;br /&gt;&#13;&#10; * Deletes all the records in a table and drops all associated auto-increment sequences.&lt;br /&gt;&#13;&#10; * Using DELETE instead of TRUNCATE because it causes locking problems.&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * @param mixed $table A string or model class representing the table to be truncated&lt;br /&gt;&#13;&#10; * @param integer $reset If -1, sequences are dropped, if 0 (default), sequences are reset,&lt;br /&gt;&#13;&#10; *&#9;&#9;&#9;&#9;&#9;&#9;and if 1, sequences are not modified&lt;br /&gt;&#13;&#10; * @return boolean&#9;SQL TRUNCATE TABLE statement, false if not applicable.&lt;br /&gt;&#13;&#10; * @access public&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; */&lt;br /&gt;&#13;&#10;&#9;function truncate($table, $reset = 0) {&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;if (empty($this-&gt;_sequences)) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;$sql = &quot;SELECT sequence_name FROM all_sequences&quot;;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;$this-&gt;execute($sql);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;while ($row = $this-&gt;fetchRow()) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;$this-&gt;_sequences[] = strtolower($row[0][&apos;sequence_name&apos;]);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;$this-&gt;execute(&apos;DELETE FROM &apos; . $this-&gt;fullTableName($table));&lt;br /&gt;&#13;&#10;&#9;&#9;if (!isset($this-&gt;_sequenceMap[$table]) || !in_array($this-&gt;_sequenceMap[$table], $this-&gt;_sequences)) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;return true;&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;if ($reset === 0) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;$this-&gt;execute(&quot;SELECT {$this-&gt;_sequenceMap[$table]}.nextval FROM dual&quot;);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;$row = $this-&gt;fetchRow();&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;$currval = $row[$this-&gt;_sequenceMap[$table]][&apos;nextval&apos;];&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;$this-&gt;execute(&quot;SELECT min_value FROM all_sequences WHERE sequence_name = &apos;{$this-&gt;_sequenceMap[$table]}&apos;&quot;);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;$row = $this-&gt;fetchRow();&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;$min_value = $row[0][&apos;min_value&apos;];&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;if ($min_value == 1) $min_value = 0;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;$offset = -($currval - $min_value);&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;$this-&gt;execute(&quot;ALTER SEQUENCE {$this-&gt;_sequenceMap[$table]} INCREMENT BY $offset MINVALUE $min_value&quot;);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;$this-&gt;execute(&quot;SELECT {$this-&gt;_sequenceMap[$table]}.nextval FROM dual&quot;);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;$this-&gt;execute(&quot;ALTER SEQUENCE {$this-&gt;_sequenceMap[$table]} INCREMENT BY 1&quot;);&lt;br /&gt;&#13;&#10;&#9;&#9;} else {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;//$this-&gt;execute(&quot;DROP SEQUENCE {$this-&gt;_sequenceMap[$table]}&quot;);&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;return true;&lt;br /&gt;&#13;&#10;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;/**&lt;br /&gt;&#13;&#10; * Enables, disables, and lists table constraints&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * Note: This method could have been written using a subselect for each table,&lt;br /&gt;&#13;&#10; * however the effort Oracle expends to run the constraint introspection is very high.&lt;br /&gt;&#13;&#10; * Therefore, this method caches the result once and loops through the arrays to find&lt;br /&gt;&#13;&#10; * what it needs. It reduced my query time by 50%. YMMV.&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * @param string $action&lt;br /&gt;&#13;&#10; * @param string $table&lt;br /&gt;&#13;&#10; * @return mixed boolean true or array of constraints&lt;br /&gt;&#13;&#10; */&lt;br /&gt;&#13;&#10;&#9;function constraint($action, $table) {&lt;br /&gt;&#13;&#10;&#9;&#9;if (empty($table)) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;trigger_error(__(&apos;Must specify table to operate on constraints&apos;, true));&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;$table = strtoupper($table);&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;if (empty($this-&gt;_keyConstraints)) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;$sql = &quot;SELECT&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;  table_name,&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;  c.constraint_name&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;FROM all_cons_columns cc&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;LEFT JOIN all_indexes i ON (cc.constraint_name = i.index_name)&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;LEFT JOIN all_constraints c ON(c.constraint_name = cc.constraint_name)&quot;;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;$this-&gt;execute($sql);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;while ($row = $this-&gt;fetchRow()) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;$this-&gt;_keyConstraints[] = array($row[0][&apos;table_name&apos;], $row[&apos;c&apos;][&apos;constraint_name&apos;]);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;$relatedKeys = array();&lt;br /&gt;&#13;&#10;&#9;&#9;foreach ($this-&gt;_keyConstraints as $c) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;if ($c[0] == $table) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;$relatedKeys[] = $c[1];&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;if (empty($this-&gt;_constraints)) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;$sql = &quot;SELECT&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;  table_name,&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;  constraint_name,&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;  r_constraint_name&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;FROM&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;  all_constraints&quot;;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;$this-&gt;execute($sql);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;while ($row = $this-&gt;fetchRow()) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;$this-&gt;_constraints[] = $row[0];&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;$constraints = array();&lt;br /&gt;&#13;&#10;&#9;&#9;foreach ($this-&gt;_constraints as $c) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;if (in_array($c[&apos;r_constraint_name&apos;], $relatedKeys)) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;$constraints[] = array($c[&apos;table_name&apos;], $c[&apos;constraint_name&apos;]);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;foreach ($constraints as $c) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;list($table, $constraint) = $c;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;switch ($action) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;case &apos;enable&apos;:&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;$this-&gt;execute(&quot;ALTER TABLE $table ENABLE CONSTRAINT $constraint&quot;);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;break;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;case &apos;disable&apos;:&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;$this-&gt;execute(&quot;ALTER TABLE $table DISABLE CONSTRAINT $constraint&quot;);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;break;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;case &apos;list&apos;:&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;return $constraints;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;break;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;default:&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;trigger_error(__(&apos;DboOracle::constraint() accepts only enable, disable, or list&apos;, true));&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;return true;&lt;br /&gt;&#13;&#10;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;/**&lt;br /&gt;&#13;&#10; * Returns an array of the indexes in given table name.&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * @param string $model Name of model to inspect&lt;br /&gt;&#13;&#10; * @return array Fields in table. Keys are column and unique&lt;br /&gt;&#13;&#10; */&lt;br /&gt;&#13;&#10;&#9;function index($model) {&lt;br /&gt;&#13;&#10;&#9;&#9;$index = array();&lt;br /&gt;&#13;&#10;&#9;&#9;$table = $this-&gt;fullTableName($model, false);&lt;br /&gt;&#13;&#10;&#9;&#9;if ($table) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;$indexes = $this-&gt;query(&apos;SELECT&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;  cc.table_name,&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;  cc.column_name,&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;  cc.constraint_name,&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;  c.constraint_type,&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;  i.index_name,&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;  i.uniqueness&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;FROM all_cons_columns cc&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;LEFT JOIN all_indexes i ON(cc.constraint_name = i.index_name)&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;LEFT JOIN all_constraints c ON(c.constraint_name = cc.constraint_name)&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;WHERE cc.table_name = \&apos;&apos; . strtoupper($table) .&apos;\&apos;&apos;);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;foreach ($indexes as $i =&gt; $idx) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;if ($idx[&apos;c&apos;][&apos;constraint_type&apos;] == &apos;P&apos;) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;$key = &apos;PRIMARY&apos;;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;} else {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;continue;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;if (!isset($index[$key])) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;$index[$key][&apos;column&apos;] = strtolower($idx[&apos;cc&apos;][&apos;column_name&apos;]);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;$index[$key][&apos;unique&apos;] = intval($idx[&apos;i&apos;][&apos;uniqueness&apos;] == &apos;UNIQUE&apos;);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;} else {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;if (!is_array($index[$key][&apos;column&apos;])) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;$col[] = $index[$key][&apos;column&apos;];&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;$col[] = strtolower($idx[&apos;cc&apos;][&apos;column_name&apos;]);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;$index[$key][&apos;column&apos;] = $col;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;return $index;&lt;br /&gt;&#13;&#10;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;/**&lt;br /&gt;&#13;&#10; * Generate a Oracle Alter Table syntax for the given Schema comparison&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * @param unknown_type $schema&lt;br /&gt;&#13;&#10; * @return unknown&lt;br /&gt;&#13;&#10; */&lt;br /&gt;&#13;&#10;&#9;function alterSchema($compare, $table = null) {&lt;br /&gt;&#13;&#10;&#9;&#9;if (!is_array($compare)) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;return false;&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;$out = &apos;&apos;;&lt;br /&gt;&#13;&#10;&#9;&#9;$colList = array();&lt;br /&gt;&#13;&#10;&#9;&#9;foreach($compare as $curTable =&gt; $types) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;if (!$table || $table == $curTable) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;$out .= &apos;ALTER TABLE &apos; . $this-&gt;fullTableName($curTable) . &quot; \n&quot;;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;foreach($types as $type =&gt; $column) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;switch($type) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;case &apos;add&apos;:&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;foreach($column as $field =&gt; $col) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;$col[&apos;name&apos;] = $field;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;$alter = &apos;ADD &apos;.$this-&gt;buildColumn($col);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;if (isset($col[&apos;after&apos;])) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;$alter .= &apos; AFTER &apos;. $this-&gt;name($col[&apos;after&apos;]);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;$colList[] = $alter;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;break;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;case &apos;drop&apos;:&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;foreach($column as $field =&gt; $col) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;$col[&apos;name&apos;] = $field;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;$colList[] = &apos;DROP &apos;.$this-&gt;name($field);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;break;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;case &apos;change&apos;:&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;foreach($column as $field =&gt; $col) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;if (!isset($col[&apos;name&apos;])) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;$col[&apos;name&apos;] = $field;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;$colList[] = &apos;CHANGE &apos;. $this-&gt;name($field).&apos; &apos;.$this-&gt;buildColumn($col);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;break;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;$out .= &quot;\t&quot; . implode(&quot;,\n\t&quot;, $colList) . &quot;;\n\n&quot;;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;return $out;&lt;br /&gt;&#13;&#10;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;/**&lt;br /&gt;&#13;&#10; * This method should quote Oracle identifiers. Well it doesn&apos;t.&lt;br /&gt;&#13;&#10; * It would break all scaffolding and all of Cake&apos;s default assumptions.&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * @param unknown_type $var&lt;br /&gt;&#13;&#10; * @return unknown&lt;br /&gt;&#13;&#10; * @access public&lt;br /&gt;&#13;&#10; */&lt;br /&gt;&#13;&#10;&#9;function name($name) {&lt;br /&gt;&#13;&#10;&#9;&#9;if (strpos($name, &apos;.&apos;) !== false &amp;&amp; strpos($name, &apos;&quot;&apos;) === false) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;list($model, $field) = explode(&apos;.&apos;, $name);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;if ($field[0] == &quot;_&quot;) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;$name = &quot;$model.\&quot;$field\&quot;&quot;;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;} else {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;if ($name[0] == &quot;_&quot;) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;$name = &quot;\&quot;$name\&quot;&quot;;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;return $name;&lt;br /&gt;&#13;&#10;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;/**&lt;br /&gt;&#13;&#10; * Begin a transaction&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * @param unknown_type $model&lt;br /&gt;&#13;&#10; * @return boolean True on success, false on fail&lt;br /&gt;&#13;&#10; * (i.e. if the database/model does not support transactions).&lt;br /&gt;&#13;&#10; */&lt;br /&gt;&#13;&#10;&#9;function begin() {&lt;br /&gt;&#13;&#10;&#9;&#9;$this-&gt;__transactionStarted = true;&lt;br /&gt;&#13;&#10;&#9;&#9;return true;&lt;br /&gt;&#13;&#10;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;/**&lt;br /&gt;&#13;&#10; * Rollback a transaction&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * @param unknown_type $model&lt;br /&gt;&#13;&#10; * @return boolean True on success, false on fail&lt;br /&gt;&#13;&#10; * (i.e. if the database/model does not support transactions,&lt;br /&gt;&#13;&#10; * or a transaction has not started).&lt;br /&gt;&#13;&#10; */&lt;br /&gt;&#13;&#10;&#9;function rollback() {&lt;br /&gt;&#13;&#10;&#9;&#9;return ocirollback($this-&gt;connection);&lt;br /&gt;&#13;&#10;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;/**&lt;br /&gt;&#13;&#10; * Commit a transaction&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * @param unknown_type $model&lt;br /&gt;&#13;&#10; * @return boolean True on success, false on fail&lt;br /&gt;&#13;&#10; * (i.e. if the database/model does not support transactions,&lt;br /&gt;&#13;&#10; * or a transaction has not started).&lt;br /&gt;&#13;&#10; */&lt;br /&gt;&#13;&#10;&#9;function commit() {&lt;br /&gt;&#13;&#10;&#9;&#9;$this-&gt;__transactionStarted = false;&lt;br /&gt;&#13;&#10;&#9;&#9;return ocicommit($this-&gt;connection);&lt;br /&gt;&#13;&#10;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;/**&lt;br /&gt;&#13;&#10; * Converts database-layer column types to basic types&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * @param string $real Real database-layer column type (i.e. &quot;varchar(255)&quot;)&lt;br /&gt;&#13;&#10; * @return string Abstract column type (i.e. &quot;string&quot;)&lt;br /&gt;&#13;&#10; * @access public&lt;br /&gt;&#13;&#10; */&lt;br /&gt;&#13;&#10;&#9;function column($real) {&lt;br /&gt;&#13;&#10;&#9;&#9;if (is_array($real)) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;$col = $real[&apos;name&apos;];&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;if (isset($real[&apos;limit&apos;])) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;$col .= &apos;(&apos;.$real[&apos;limit&apos;].&apos;)&apos;;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;return $col;&lt;br /&gt;&#13;&#10;&#9;&#9;} else {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;$real = strtolower($real);&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;$col = str_replace(&apos;)&apos;, &apos;&apos;, $real);&lt;br /&gt;&#13;&#10;&#9;&#9;$limit = null;&lt;br /&gt;&#13;&#10;&#9;&#9;if (strpos($col, &apos;(&apos;) !== false) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;list($col, $limit) = explode(&apos;(&apos;, $col);&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;if (in_array($col, array(&apos;date&apos;, &apos;timestamp&apos;))) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;return $col;&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;if (strpos($col, &apos;number&apos;) !== false) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;return &apos;integer&apos;;&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;if (strpos($col, &apos;integer&apos;) !== false) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;return &apos;integer&apos;;&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;if (strpos($col, &apos;char&apos;) !== false) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;return &apos;string&apos;;&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;if (strpos($col, &apos;text&apos;) !== false) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;return &apos;text&apos;;&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;if (strpos($col, &apos;blob&apos;) !== false) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;return &apos;binary&apos;;&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;if (in_array($col, array(&apos;float&apos;, &apos;double&apos;, &apos;decimal&apos;))) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;return &apos;float&apos;;&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;if ($col == &apos;boolean&apos;) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;return $col;&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;return &apos;text&apos;;&lt;br /&gt;&#13;&#10;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;/**&lt;br /&gt;&#13;&#10; * Returns a quoted and escaped string of $data for use in an SQL statement.&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * @param string $data String to be prepared for use in an SQL statement&lt;br /&gt;&#13;&#10; * @return string Quoted and escaped&lt;br /&gt;&#13;&#10; * @access public&lt;br /&gt;&#13;&#10; */&lt;br /&gt;&#13;&#10;&#9;function value($data, $column = null, $safe = false) {&lt;br /&gt;&#13;&#10;&#9;&#9;$parent = parent::value($data, $column, $safe);&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;if ($parent != null) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;return $parent;&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;if ($data === null) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;return &apos;NULL&apos;;&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;if ($data === &apos;&apos;) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;return  &quot;&apos;&apos;&quot;;&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;switch($column) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;case &apos;date&apos;:&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;$data = date(&apos;Y-m-d H:i:s&apos;, strtotime($data));&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;$data = &quot;TO_DATE(&apos;$data&apos;, &apos;YYYY-MM-DD HH24:MI:SS&apos;)&quot;;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;break;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;case &apos;integer&apos; :&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;case &apos;float&apos; :&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;case null :&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;if (is_numeric($data)) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;break;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;default:&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;$data = str_replace(&quot;&apos;&quot;, &quot;&apos;&apos;&quot;, $data);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;$data = &quot;&apos;$data&apos;&quot;;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;break;&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;return $data;&lt;br /&gt;&#13;&#10;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;/**&lt;br /&gt;&#13;&#10; * Returns the ID generated from the previous INSERT operation.&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * @param string&lt;br /&gt;&#13;&#10; * @return integer&lt;br /&gt;&#13;&#10; * @access public&lt;br /&gt;&#13;&#10; */&lt;br /&gt;&#13;&#10;&#9;function lastInsertId($source) {&lt;br /&gt;&#13;&#10;&#9;&#9;$sequence = $this-&gt;_sequenceMap[$source];&lt;br /&gt;&#13;&#10;&#9;&#9;$sql = &quot;SELECT $sequence.currval FROM dual&quot;;&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;if (!$this-&gt;execute($sql)) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;return false;&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;while($row = $this-&gt;fetchRow()) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;return $row[$sequence][&apos;currval&apos;];&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;return false;&lt;br /&gt;&#13;&#10;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;/**&lt;br /&gt;&#13;&#10; * Returns a formatted error message from previous database operation.&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * @return string Error message with error number&lt;br /&gt;&#13;&#10; * @access public&lt;br /&gt;&#13;&#10; */&lt;br /&gt;&#13;&#10;&#9;function lastError() {&lt;br /&gt;&#13;&#10;&#9;&#9;return $this-&gt;_error;&lt;br /&gt;&#13;&#10;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;/**&lt;br /&gt;&#13;&#10; * Returns number of affected rows in previous database operation. If no previous operation exists, this returns false.&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * @return int Number of affected rows&lt;br /&gt;&#13;&#10; * @access public&lt;br /&gt;&#13;&#10; */&lt;br /&gt;&#13;&#10;&#9;function lastAffected() {&lt;br /&gt;&#13;&#10;&#9;&#9;return $this-&gt;_statementId ? ocirowcount($this-&gt;_statementId): false;&lt;br /&gt;&#13;&#10;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;/**&lt;br /&gt;&#13;&#10; * Renders a final SQL statement by putting together the component parts in the correct order&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * @param string $type&lt;br /&gt;&#13;&#10; * @param array $data&lt;br /&gt;&#13;&#10; * @return string&lt;br /&gt;&#13;&#10; */&lt;br /&gt;&#13;&#10;&#9;function renderStatement($type, $data) {&lt;br /&gt;&#13;&#10;&#9;&#9;extract($data);&lt;br /&gt;&#13;&#10;&#9;&#9;$aliases = null;&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;switch (strtolower($type)) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;case &apos;select&apos;:&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;return &quot;SELECT {$fields} FROM {$table} {$alias} {$joins} {$conditions} {$group} {$order} {$limit}&quot;;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;break;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;case &apos;create&apos;:&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;return &quot;INSERT INTO {$table} ({$fields}) VALUES ({$values})&quot;;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;break;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;case &apos;update&apos;:&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;if (!empty($alias)) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;$aliases = &quot;{$this-&gt;alias}{$alias} &quot;;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;return &quot;UPDATE {$table} {$aliases}SET {$fields} {$conditions}&quot;;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;break;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;case &apos;delete&apos;:&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;if (!empty($alias)) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;$aliases = &quot;{$this-&gt;alias}{$alias} &quot;;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;return &quot;DELETE FROM {$table} {$aliases}{$conditions}&quot;;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;break;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;case &apos;schema&apos;:&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;foreach (array(&apos;columns&apos;, &apos;indexes&apos;) as $var) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;if (is_array(${$var})) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;${$var} = &quot;\t&quot; . implode(&quot;,\n\t&quot;, array_filter(${$var}));&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;if (trim($indexes) != &apos;&apos;) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;$columns .= &apos;,&apos;;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;return &quot;CREATE TABLE {$table} (\n{$columns}{$indexes})&quot;;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;break;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;case &apos;alter&apos;:&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;break;&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;/**&lt;br /&gt;&#13;&#10; * Enter description here...&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * @param Model $model&lt;br /&gt;&#13;&#10; * @param unknown_type $linkModel&lt;br /&gt;&#13;&#10; * @param string $type Association type&lt;br /&gt;&#13;&#10; * @param unknown_type $association&lt;br /&gt;&#13;&#10; * @param unknown_type $assocData&lt;br /&gt;&#13;&#10; * @param unknown_type $queryData&lt;br /&gt;&#13;&#10; * @param unknown_type $external&lt;br /&gt;&#13;&#10; * @param unknown_type $resultSet&lt;br /&gt;&#13;&#10; * @param integer $recursive Number of levels of association&lt;br /&gt;&#13;&#10; * @param array $stack&lt;br /&gt;&#13;&#10; */&lt;br /&gt;&#13;&#10;&#9;function queryAssociation(&amp;$model, &amp;$linkModel, $type, $association, $assocData, &amp;$queryData, $external = false, &amp;$resultSet, $recursive, $stack) {&lt;br /&gt;&#13;&#10;&#9;&#9;if ($query = $this-&gt;generateAssociationQuery($model, $linkModel, $type, $association, $assocData, $queryData, $external, $resultSet)) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;if (!isset($resultSet) || !is_array($resultSet)) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;if (Configure::read() &gt; 0) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;echo &apos;&lt;div style = &quot;font: Verdana bold 12px; color: #FF0000&quot;&gt;&apos; . sprintf(__(&apos;SQL Error in model %s:&apos;, true), $model-&gt;alias) . &apos; &apos;;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;if (isset($this-&gt;error) &amp;&amp; $this-&gt;error != null) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;echo $this-&gt;error;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;echo &apos;&lt;/div&gt;&apos;;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;return null;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;$count = count($resultSet);&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;if ($type === &apos;hasMany&apos; &amp;&amp; (!isset($assocData[&apos;limit&apos;]) || empty($assocData[&apos;limit&apos;]))) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;$ins = $fetch = array();&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;for ($i = 0; $i &lt; $count; $i++) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;if ($in = $this-&gt;insertQueryData(&apos;{$__cakeID__$}&apos;, $resultSet[$i], $association, $assocData, $model, $linkModel, $stack)) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;$ins[] = $in;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;if (!empty($ins)) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;$fetch = array();&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;$ins = array_chunk($ins, 1000);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;foreach ($ins as $i) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;$q = str_replace(&apos;{$__cakeID__$}&apos;, implode(&apos;, &apos;, $i), $query);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;$q = str_replace(&apos;= (&apos;, &apos;IN (&apos;, $q);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;$res = $this-&gt;fetchAll($q, $model-&gt;cacheQueries, $model-&gt;alias);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;$fetch = array_merge($fetch, $res);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;if (!empty($fetch) &amp;&amp; is_array($fetch)) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;if ($recursive &gt; 0) {&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;foreach ($linkModel-&gt;__associations as $type1) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;foreach ($linkModel-&gt;{$type1} as $assoc1 =&gt; $assocData1) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;$deepModel =&amp; $linkModel-&gt;{$assoc1};&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;$tmpStack = $stack;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;$tmpStack[] = $assoc1;&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;if ($linkModel-&gt;useDbConfig === $deepModel-&gt;useDbConfig) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;$db =&amp; $this;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;} else {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;$db =&amp; ConnectionManager::getDataSource($deepModel-&gt;useDbConfig);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;$db-&gt;queryAssociation($linkModel, $deepModel, $type1, $assoc1, $assocData1, $queryData, true, $fetch, $recursive - 1, $tmpStack);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;return $this-&gt;__mergeHasMany($resultSet, $fetch, $association, $model, $linkModel, $recursive);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;} elseif ($type === &apos;hasAndBelongsToMany&apos;) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;$ins = $fetch = array();&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;for ($i = 0; $i &lt; $count; $i++) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;if ($in = $this-&gt;insertQueryData(&apos;{$__cakeID__$}&apos;, $resultSet[$i], $association, $assocData, $model, $linkModel, $stack)) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;$ins[] = $in;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;$foreignKey = $model-&gt;hasAndBelongsToMany[$association][&apos;foreignKey&apos;];&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;$joinKeys = array($foreignKey, $model-&gt;hasAndBelongsToMany[$association][&apos;associationForeignKey&apos;]);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;list($with, $habtmFields) = $model-&gt;joinModel($model-&gt;hasAndBelongsToMany[$association][&apos;with&apos;], $joinKeys);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;$habtmFieldsCount = count($habtmFields);&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;if (!empty($ins)) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;$fetch = array();&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;$ins = array_chunk($ins, 1000);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;foreach ($ins as $i) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;$q = str_replace(&apos;{$__cakeID__$}&apos;, &apos;(&apos; .implode(&apos;, &apos;, $i) .&apos;)&apos;, $query);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;$q = str_replace(&apos;= (&apos;, &apos;IN (&apos;, $q);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;$q = str_replace(&apos;  WHERE 1 = 1&apos;, &apos;&apos;, $q);&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;$q = $this-&gt;insertQueryData($q, null, $association, $assocData, $model, $linkModel, $stack);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;if ($q != false) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;$res = $this-&gt;fetchAll($q, $model-&gt;cacheQueries, $model-&gt;alias);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;$fetch = array_merge($fetch, $res);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;for ($i = 0; $i &lt; $count; $i++) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;$row =&amp; $resultSet[$i];&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;if ($type !== &apos;hasAndBelongsToMany&apos;) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;$q = $this-&gt;insertQueryData($query, $resultSet[$i], $association, $assocData, $model, $linkModel, $stack);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;if ($q != false) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;$fetch = $this-&gt;fetchAll($q, $model-&gt;cacheQueries, $model-&gt;alias);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;} else {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;$fetch = null;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;if (!empty($fetch) &amp;&amp; is_array($fetch)) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;if ($recursive &gt; 0) {&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;foreach ($linkModel-&gt;__associations as $type1) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;foreach ($linkModel-&gt;{$type1} as $assoc1 =&gt; $assocData1) {&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;$deepModel =&amp; $linkModel-&gt;{$assoc1};&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;if (($type1 === &apos;belongsTo&apos;) || ($deepModel-&gt;alias === $model-&gt;alias &amp;&amp; $type === &apos;belongsTo&apos;) || ($deepModel-&gt;alias != $model-&gt;alias)) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;$tmpStack = $stack;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;$tmpStack[] = $assoc1;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;if ($linkModel-&gt;useDbConfig == $deepModel-&gt;useDbConfig) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;$db =&amp; $this;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;} else {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;$db =&amp; ConnectionManager::getDataSource($deepModel-&gt;useDbConfig);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;$db-&gt;queryAssociation($linkModel, $deepModel, $type1, $assoc1, $assocData1, $queryData, true, $fetch, $recursive - 1, $tmpStack);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;if ($type == &apos;hasAndBelongsToMany&apos;) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;$merge = array();&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;foreach($fetch as $j =&gt; $data) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;if (isset($data[$with]) &amp;&amp; $data[$with][$foreignKey] === $row[$model-&gt;alias][$model-&gt;primaryKey]) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;if ($habtmFieldsCount &gt; 2) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;$merge[] = $data;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;} else {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;$merge[] = Set::diff($data, array($with =&gt; $data[$with]));&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;if (empty($merge) &amp;&amp; !isset($row[$association])) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;$row[$association] = $merge;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;} else {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;$this-&gt;__mergeAssociation($resultSet[$i], $merge, $association, $type);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;} else {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;&#9;$this-&gt;__mergeAssociation($resultSet[$i], $fetch, $association, $type);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;$resultSet[$i][$association] = $linkModel-&gt;afterfind($resultSet[$i][$association]);&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;} else {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;$tempArray[0][$association] = false;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;$this-&gt;__mergeAssociation($resultSet[$i], $tempArray, $association, $type);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;}&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;/**&lt;br /&gt;&#13;&#10; * Generate a &quot;drop table&quot; statement for the given Schema object&lt;br /&gt;&#13;&#10; *&lt;br /&gt;&#13;&#10; * @param object $schema An instance of a subclass of CakeSchema&lt;br /&gt;&#13;&#10; * @param string $table Optional.  If specified only the table name given will be generated.&lt;br /&gt;&#13;&#10; *&#9;&#9;&#9;&#9;&#9;&#9;Otherwise, all tables defined in the schema are generated.&lt;br /&gt;&#13;&#10; * @return string&lt;br /&gt;&#13;&#10; */&lt;br /&gt;&#13;&#10;&#9;&#9;function dropSchema($schema, $table = null) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;if (!is_a($schema, &apos;CakeSchema&apos;)) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;trigger_error(__(&apos;Invalid schema object&apos;, true), E_USER_WARNING);&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;return null;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;$out = &apos;&apos;;&lt;br /&gt;&#13;&#10;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;foreach ($schema-&gt;tables as $curTable =&gt; $columns) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;if (!$table || $table == $curTable) {&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;&#9;$out .= &apos;DROP TABLE &apos; . $this-&gt;fullTableName($curTable) . &quot;\n&quot;;&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;}&lt;br /&gt;&#13;&#10;&#9;&#9;&#9;return $out;&lt;br /&gt;&#13;&#10;&#9;&#9;}&lt;br /&gt;&#13;&#10;}&lt;br /&gt;&#13;&#10;</description>
  <link>http://snipt.org/uIgg5</link>
  <title>Oracle Datasource CakePHP 2.0</title>
  <dc:date>Mon, 09 Jan 2012 10:03:42 EST</dc:date>
 </item>
</rdf:RDF>