Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Add doctrine 1.2 RC1

  • Loading branch information...
commit db01b49bf47960c7086ce4e1077b54993d2340de 1 parent b8bab8a
@abtris authored
Showing with 28,382 additions and 2 deletions.
  1. +6 −0 .gitignore
  2. +3 −0  README.markdown
  3. +2 −2 application/configs/application.ini
  4. +38 −0 library/Doctrine.php
  5. +203 −0 library/Doctrine/Access.php
  6. +34 −0 library/Doctrine/Adapter/Exception.php
  7. +47 −0 library/Doctrine/Adapter/Interface.php
  8. +294 −0 library/Doctrine/Adapter/Mock.php
  9. +319 −0 library/Doctrine/Adapter/Oracle.php
  10. +131 −0 library/Doctrine/Adapter/Statement.php
  11. +276 −0 library/Doctrine/Adapter/Statement/Interface.php
  12. +379 −0 library/Doctrine/Adapter/Statement/Mock.php
  13. +594 −0 library/Doctrine/Adapter/Statement/Oracle.php
  14. +159 −0 library/Doctrine/AuditLog.php
  15. +152 −0 library/Doctrine/AuditLog/Listener.php
  16. +56 −0 library/Doctrine/Builder.php
  17. +99 −0 library/Doctrine/Cache/Apc.php
  18. +96 −0 library/Doctrine/Cache/Array.php
  19. +221 −0 library/Doctrine/Cache/Db.php
  20. +329 −0 library/Doctrine/Cache/Driver.php
  21. +36 −0 library/Doctrine/Cache/Exception.php
  22. +71 −0 library/Doctrine/Cache/Interface.php
  23. +128 −0 library/Doctrine/Cache/Memcache.php
  24. +98 −0 library/Doctrine/Cache/Xcache.php
  25. +679 −0 library/Doctrine/Cli.php
  26. +160 −0 library/Doctrine/Cli/AnsiColorFormatter.php
  27. +34 −0 library/Doctrine/Cli/Exception.php
  28. +116 −0 library/Doctrine/Cli/Formatter.php
  29. +1,036 −0 library/Doctrine/Collection.php
  30. +34 −0 library/Doctrine/Collection/Exception.php
  31. +119 −0 library/Doctrine/Collection/Iterator.php
  32. +54 −0 library/Doctrine/Collection/Iterator/Expandable.php
  33. +42 −0 library/Doctrine/Collection/Iterator/Normal.php
  34. +37 −0 library/Doctrine/Collection/Iterator/Offset.php
  35. +65 −0 library/Doctrine/Collection/Offset.php
  36. +100 −0 library/Doctrine/Collection/OnDemand.php
  37. +163 −0 library/Doctrine/Column.php
  38. +137 −0 library/Doctrine/Compiler.php
  39. +34 −0 library/Doctrine/Compiler/Exception.php
  40. +427 −0 library/Doctrine/Configurable.php
  41. +1,661 −0 library/Doctrine/Connection.php
  42. +57 −0 library/Doctrine/Connection/Common.php
  43. +64 −0 library/Doctrine/Connection/Db2.php
  44. +130 −0 library/Doctrine/Connection/Exception.php
  45. +51 −0 library/Doctrine/Connection/Mock.php
  46. +83 −0 library/Doctrine/Connection/Module.php
  47. +270 −0 library/Doctrine/Connection/Mssql.php
  48. +75 −0 library/Doctrine/Connection/Mssql/Exception.php
  49. +213 −0 library/Doctrine/Connection/Mysql.php
  50. +86 −0 library/Doctrine/Connection/Mysql/Exception.php
  51. +145 −0 library/Doctrine/Connection/Oracle.php
  52. +80 −0 library/Doctrine/Connection/Oracle/Exception.php
  53. +243 −0 library/Doctrine/Connection/Pgsql.php
  54. +108 −0 library/Doctrine/Connection/Pgsql/Exception.php
  55. +182 −0 library/Doctrine/Connection/Profiler.php
  56. +35 −0 library/Doctrine/Connection/Profiler/Exception.php
  57. +129 −0 library/Doctrine/Connection/Sqlite.php
  58. +78 −0 library/Doctrine/Connection/Sqlite/Exception.php
  59. +484 −0 library/Doctrine/Connection/Statement.php
  60. +939 −0 library/Doctrine/Connection/UnitOfWork.php
  61. +1,213 −0 library/Doctrine/Core.php
  62. +279 −0 library/Doctrine/Data.php
  63. +34 −0 library/Doctrine/Data/Exception.php
  64. +212 −0 library/Doctrine/Data/Export.php
  65. +402 −0 library/Doctrine/Data/Import.php
  66. +54 −0 library/Doctrine/DataDict.php
  67. +34 −0 library/Doctrine/DataDict/Exception.php
  68. +266 −0 library/Doctrine/DataDict/Mssql.php
  69. +511 −0 library/Doctrine/DataDict/Mysql.php
  70. +230 −0 library/Doctrine/DataDict/Oracle.php
  71. +655 −0 library/Doctrine/DataDict/Pgsql.php
  72. +321 −0 library/Doctrine/DataDict/Sqlite.php
  73. +375 −0 library/Doctrine/Event.php
  74. +119 −0 library/Doctrine/EventListener.php
  75. +504 −0 library/Doctrine/EventListener/Chain.php
  76. +34 −0 library/Doctrine/EventListener/Exception.php
  77. +68 −0 library/Doctrine/EventListener/Interface.php
  78. +92 −0 library/Doctrine/Exception.php
  79. +1,386 −0 library/Doctrine/Export.php
  80. +34 −0 library/Doctrine/Export/Exception.php
  81. +472 −0 library/Doctrine/Export/Mssql.php
  82. +784 −0 library/Doctrine/Export/Mysql.php
  83. +606 −0 library/Doctrine/Export/Oracle.php
  84. +391 −0 library/Doctrine/Export/Pgsql.php
  85. +51 −0 library/Doctrine/Export/Reporter.php
  86. +151 −0 library/Doctrine/Export/Schema.php
  87. +421 −0 library/Doctrine/Export/Sqlite.php
  88. +158 −0 library/Doctrine/Expression.php
  89. +775 −0 library/Doctrine/Expression/Driver.php
  90. +34 −0 library/Doctrine/Expression/Exception.php
  91. +35 −0 library/Doctrine/Expression/Mock.php
  92. +104 −0 library/Doctrine/Expression/Mssql.php
  93. +160 −0 library/Doctrine/Expression/Mysql.php
  94. +108 −0 library/Doctrine/Expression/Oracle.php
  95. +233 −0 library/Doctrine/Expression/Pgsql.php
  96. +180 −0 library/Doctrine/Expression/Sqlite.php
  97. +55 −0 library/Doctrine/File.php
  98. +57 −0 library/Doctrine/File/Index.php
  99. +273 −0 library/Doctrine/Formatter.php
  100. +230 −0 library/Doctrine/Hook.php
  101. +52 −0 library/Doctrine/Hook/Equal.php
  102. +75 −0 library/Doctrine/Hook/Integer.php
  103. +67 −0 library/Doctrine/Hook/Parser.php
  104. +107 −0 library/Doctrine/Hook/Parser/Complex.php
  105. +66 −0 library/Doctrine/Hook/WordLike.php
  106. +141 −0 library/Doctrine/Hydrator.php
  107. +86 −0 library/Doctrine/Hydrator/Abstract.php
  108. +92 −0 library/Doctrine/Hydrator/ArrayDriver.php
  109. +83 −0 library/Doctrine/Hydrator/ArrayHierarchyDriver.php
  110. +34 −0 library/Doctrine/Hydrator/Exception.php
  111. +423 −0 library/Doctrine/Hydrator/Graph.php
  112. +40 −0 library/Doctrine/Hydrator/NoneDriver.php
  113. +124 −0 library/Doctrine/Hydrator/RecordDriver.php
  114. +39 −0 library/Doctrine/Hydrator/RecordHierarchyDriver.php
  115. +97 −0 library/Doctrine/Hydrator/ScalarDriver.php
  116. +39 −0 library/Doctrine/Hydrator/SingleScalarDriver.php
  117. +131 −0 library/Doctrine/I18n.php
  118. +34 −0 library/Doctrine/I18n/Exception.php
  119. +444 −0 library/Doctrine/Import.php
  120. +1,175 −0 library/Doctrine/Import/Builder.php
  121. +34 −0 library/Doctrine/Import/Builder/Exception.php
  122. +34 −0 library/Doctrine/Import/Exception.php
  123. +248 −0 library/Doctrine/Import/Mssql.php
  124. +240 −0 library/Doctrine/Import/Mysql.php
  125. +255 −0 library/Doctrine/Import/Oracle.php
Sorry, we could not display the entire diff because too many files (330) changed.
View
6 .gitignore
@@ -0,0 +1,6 @@
+*~
+# logs
+tests/logs/**
+logs/**
+# ide
+.idea/*
View
3  README.markdown
@@ -0,0 +1,3 @@
+Use this tutorials:
+
+http://dev.juokaz.com/php/zend-framework-and-doctrine-part-2
View
4 application/configs/application.ini
@@ -1,6 +1,6 @@
[production]
-resources.doctrine.connection_string = "mysql://user:psw@localhost/db"
+resources.doctrine.connection_string = "mysql://doctrine:doctrine@localhost/doctrine"
resources.doctrine.compiled = true ; use compiled version of Doctrine
resources.doctrine.cache = true ; use query cache
@@ -17,4 +17,4 @@ resources.doctrine.phpDocEmail = info@company.com
[development : production]
resources.doctrine.compiled = false ; use compiled version of Doctrine
-resources.doctrine.cache = false ; use query cache
+resources.doctrine.cache = false ; use query cache
View
38 library/Doctrine.php
@@ -0,0 +1,38 @@
+<?php
+/*
+ * $Id: Doctrine.php 6489 2009-10-12 20:21:01Z jwage $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.org>.
+ */
+
+require_once 'Doctrine/Core.php';
+
+/**
+ * This class only exists for backwards compatability. All code was moved to
+ * Doctrine_Core and this class extends Doctrine_Core
+ *
+ * @package Doctrine
+ * @author Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author Lukas Smith <smith@pooteeweet.org> (PEAR MDB2 library)
+ * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @link www.phpdoctrine.org
+ * @since 1.0
+ * @version $Revision: 6489 $
+ */
+class Doctrine extends Doctrine_Core
+{
+}
View
203 library/Doctrine/Access.php
@@ -0,0 +1,203 @@
+<?php
+/*
+ * $Id: Access.php 6506 2009-10-13 23:29:18Z jwage $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.org>.
+ */
+
+/**
+ * Provides array access and property overload interface for Doctrine subclasses
+ *
+ * @package Doctrine
+ * @subpackage Access
+ * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @link www.phpdoctrine.org
+ * @since 1.0
+ * @version $Revision: 6506 $
+ * @author Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+abstract class Doctrine_Access extends Doctrine_Locator_Injectable implements ArrayAccess
+{
+ /**
+ * Set an entire aray to the data
+ *
+ * @param array $array An array of key => value pairs
+ * @return Doctrine_Access
+ */
+ public function setArray(array $array)
+ {
+ foreach ($array as $k => $v) {
+ $this->set($k, $v);
+ }
+
+ return $this;
+ }
+
+ /**
+ * Set key and value to data
+ *
+ * @see set, offsetSet
+ * @param $name
+ * @param $value
+ * @return void
+ */
+ public function __set($name, $value)
+ {
+ $this->set($name, $value);
+ }
+
+ /**
+ * Get key from data
+ *
+ * @see get, offsetGet
+ * @param mixed $name
+ * @return mixed
+ */
+ public function __get($name)
+ {
+ return $this->get($name);
+ }
+
+ /**
+ * Check if key exists in data
+ *
+ * @param string $name
+ * @return boolean whether or not this object contains $name
+ */
+ public function __isset($name)
+ {
+ return $this->contains($name);
+ }
+
+ /**
+ * Remove key from data
+ *
+ * @param string $name
+ * @return void
+ */
+ public function __unset($name)
+ {
+ return $this->remove($name);
+ }
+
+ /**
+ * Check if an offset axists
+ *
+ * @param mixed $offset
+ * @return boolean Whether or not this object contains $offset
+ */
+ public function offsetExists($offset)
+ {
+ return $this->contains($offset);
+ }
+
+ /**
+ * An alias of get()
+ *
+ * @see get, __get
+ * @param mixed $offset
+ * @return mixed
+ */
+ public function offsetGet($offset)
+ {
+ return $this->get($offset);
+ }
+
+ /**
+ * Sets $offset to $value
+ *
+ * @see set, __set
+ * @param mixed $offset
+ * @param mixed $value
+ * @return void
+ */
+ public function offsetSet($offset, $value)
+ {
+ if ( ! isset($offset)) {
+ $this->add($value);
+ } else {
+ $this->set($offset, $value);
+ }
+ }
+
+ /**
+ * Unset a given offset
+ *
+ * @see set, offsetSet, __set
+ * @param mixed $offset
+ */
+ public function offsetUnset($offset)
+ {
+ return $this->remove($offset);
+ }
+
+ /**
+ * Remove the element with the specified offset
+ *
+ * @param mixed $offset The offset to remove
+ * @return boolean True if removed otherwise false
+ */
+ public function remove($offset)
+ {
+ throw new Doctrine_Exception('Remove is not supported for ' . get_class($this));
+ }
+
+ /**
+ * Return the element with the specified offset
+ *
+ * @param mixed $offset The offset to return
+ * @return mixed
+ */
+ public function get($offset)
+ {
+ throw new Doctrine_Exception('Get is not supported for ' . get_class($this));
+ }
+
+ /**
+ * Set the offset to the value
+ *
+ * @param mixed $offset The offset to set
+ * @param mixed $value The value to set the offset to
+ *
+ */
+ public function set($offset, $value)
+ {
+ throw new Doctrine_Exception('Set is not supported for ' . get_class($this));
+ }
+
+ /**
+ * Check if the specified offset exists
+ *
+ * @param mixed $offset The offset to check
+ * @return boolean True if exists otherwise false
+ */
+ public function contains($offset)
+ {
+ throw new Doctrine_Exception('Contains is not supported for ' . get_class($this));
+ }
+
+ /**
+ * Add the value
+ *
+ * @param mixed $value The value to add
+ * @return void
+ */
+ public function add($value)
+ {
+ throw new Doctrine_Exception('Add is not supported for ' . get_class($this));
+ }
+}
View
34 library/Doctrine/Adapter/Exception.php
@@ -0,0 +1,34 @@
+<?php
+/*
+ * $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.org>.
+ */
+
+/**
+ * Doctrine_Adapter exception class
+ *
+ * @package Doctrine
+ * @subpackage Adapter
+ * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @link www.phpdoctrine.org
+ * @since 1.0
+ * @version $Revision$
+ * @author Konsta Vesterinen <kvesteri@cc.hut.fi>
+ */
+class Doctrine_Adapter_Exception extends Doctrine_Exception
+{ }
View
47 library/Doctrine/Adapter/Interface.php
@@ -0,0 +1,47 @@
+<?php
+/*
+ * $Id: Interface.php 5942 2009-06-25 22:04:16Z jwage $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.org>.
+ */
+
+/**
+ * This adapter interface should be implemented by all custom adapters
+ *
+ * @author Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @package Doctrine
+ * @subpackage Adapter
+ * @link www.phpdoctrine.org
+ * @since 1.0
+ * @version $Revision: 5942 $
+ */
+interface Doctrine_Adapter_Interface
+{
+ public function prepare($prepareString);
+ public function query($queryString);
+ public function quote($input);
+ public function exec($statement);
+ public function lastInsertId();
+ public function beginTransaction();
+ public function commit();
+ public function rollBack();
+ public function errorCode();
+ public function errorInfo();
+ public function setAttribute($attribute, $value);
+ public function getAttribute($attribute);
+}
View
294 library/Doctrine/Adapter/Mock.php
@@ -0,0 +1,294 @@
+<?php
+/*
+ * $Id: Mock.php 6484 2009-10-12 17:40:41Z jwage $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.org>.
+ */
+
+/**
+ * Doctrine mock connection adapter. This class is used for special testing purposes.
+ *
+ * @package Doctrine
+ * @subpackage Adapter
+ * @author Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @link www.phpdoctrine.org
+ * @since 1.0
+ * @version $Revision: 6484 $
+ */
+class Doctrine_Adapter_Mock implements Doctrine_Adapter_Interface, Countable
+{
+ /**
+ * Name of the dbms to mock
+ *
+ * @var string
+ */
+ private $_name;
+
+ /**
+ * Array of queries executed through this instance of the mock adapter
+ *
+ * @var array $queries
+ */
+ private $_queries = array();
+
+ /**
+ * Array of exceptions thrown
+ *
+ * @var array $exceptions
+ */
+ private $_exception = array();
+
+ /**
+ * Bool true/false variable for whether or not the last insert failed
+ *
+ * @var boolean $lastInsertIdFail
+ */
+ private $_lastInsertIdFail = false;
+
+ /**
+ * Doctrine mock adapter constructor
+ *
+ * <code>
+ * $conn = new Doctrine_Adapter_Mock('mysql');
+ * </code>
+ *
+ * @param string $name
+ * @return void
+ */
+ public function __construct($name = null)
+ {
+ $this->_name = $name;
+ }
+
+ /**
+ * Get the name of the dbms used in this instance of the mock adapter
+ *
+ * @return string $name Name of the dbms
+ */
+ public function getName()
+ {
+ return $this->_name;
+ }
+
+ /**
+ * Pop the last executed query from the array of executed queries and return it
+ *
+ * @return string $sql Last executed sql string
+ */
+ public function pop()
+ {
+ return array_pop($this->_queries);
+ }
+
+ /**
+ * Force an exception in to the array of exceptions
+ *
+ * @param string $name Name of exception
+ * @param string $message Message for the exception
+ * @param integer $code Code of the exception
+ * @return void
+ */
+ public function forceException($name, $message = '', $code = 0)
+ {
+ $this->_exception = array($name, $message, $code);
+ }
+
+ /**
+ * Prepare a query statement
+ *
+ * @param string $query Query to prepare
+ * @return Doctrine_Adapter_Statement_Mock $mock Mock prepared statement
+ */
+ public function prepare($query)
+ {
+ $mock = new Doctrine_Adapter_Statement_Mock($this, $query);
+ $mock->queryString = $query;
+
+ return $mock;
+ }
+
+ /**
+ * Add query to the stack of executed queries
+ *
+ * @param string $query
+ * @return void
+ */
+ public function addQuery($query)
+ {
+ $this->_queries[] = $query;
+ }
+
+ /**
+ * Fake the execution of query and add it to the stack of executed queries
+ *
+ * @param string $query
+ * @return Doctrine_Adapter_Statement_Mock $stmt
+ */
+ public function query($query)
+ {
+ $this->_queries[] = $query;
+
+ $e = $this->_exception;
+
+ if ( ! empty($e)) {
+ $name = $e[0];
+
+ $this->_exception = array();
+
+ throw new $name($e[1], $e[2]);
+ }
+
+ $stmt = new Doctrine_Adapter_Statement_Mock($this, $query);
+ $stmt->queryString = $query;
+
+ return $stmt;
+ }
+
+ /**
+ * Get all the executed queries
+ *
+ * @return array $queries Array of all executed queries
+ */
+ public function getAll()
+ {
+ return $this->_queries;
+ }
+
+ /**
+ * Quote a value for the dbms
+ *
+ * @param string $input
+ * @return string $quoted
+ */
+ public function quote($input)
+ {
+ return "'" . addslashes($input) . "'";
+ }
+
+ /**
+ * Execute a raw sql statement
+ *
+ * @param string $statement
+ * @return void
+ */
+ public function exec($statement)
+ {
+ $this->_queries[] = $statement;
+
+ $e = $this->_exception;
+
+ if ( ! empty($e)) {
+ $name = $e[0];
+
+ $this->_exception = array();
+
+ throw new $name($e[1], $e[2]);
+ }
+
+ return 0;
+ }
+
+ /**
+ * Force last insert to be failed
+ *
+ * @param boolean $fail
+ * @return void
+ */
+ public function forceLastInsertIdFail($fail = true)
+ {
+ if ($fail) {
+ $this->_lastInsertIdFail = true;
+ } else {
+ $this->_lastInsertIdFail = false;
+ }
+ }
+
+ /**
+ * Get the id of the last inserted record
+ *
+ * @return integer $id
+ */
+ public function lastInsertId()
+ {
+ $this->_queries[] = 'LAST_INSERT_ID()';
+ if ($this->_lastInsertIdFail) {
+ return null;
+ } else {
+ return 1;
+ }
+ }
+
+ /**
+ * Get the number of queries executed
+ *
+ * @return integer $count
+ */
+ public function count()
+ {
+ return count($this->_queries);
+ }
+
+ /**
+ * Begin a transaction
+ *
+ * @return void
+ */
+ public function beginTransaction()
+ {
+ $this->_queries[] = 'BEGIN TRANSACTION';
+ }
+
+ /**
+ * Commit a transaction
+ *
+ * @return void
+ */
+ public function commit()
+ {
+ $this->_queries[] = 'COMMIT';
+ }
+
+ /**
+ * Rollback a transaction
+ *
+ * @return void
+ */
+ public function rollBack()
+ {
+ $this->_queries[] = 'ROLLBACK';
+ }
+
+ public function getAttribute($attribute)
+ {
+ if ($attribute == Doctrine_Core::ATTR_DRIVER_NAME) {
+ return strtolower($this->_name);
+ }
+ }
+
+ public function errorCode()
+ { }
+
+ public function errorInfo()
+ { }
+
+ public function setAttribute($attribute, $value)
+ { }
+
+ public function sqliteCreateFunction()
+ { }
+}
View
319 library/Doctrine/Adapter/Oracle.php
@@ -0,0 +1,319 @@
+<?php
+/*
+ * $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.org>.
+ */
+
+/**
+ * Custom Doctrine connection adapter for oracle
+ *
+ * @package Doctrine
+ * @subpackage Adapter
+ * @author Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author vadik56
+ * @author Miloslav Kmet <adrive-nospam@hip-hop.sk>
+ * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @link www.phpdoctrine.org
+ * @since 1.0
+ * @version $Revision$
+ */
+
+class Doctrine_Adapter_Oracle implements Doctrine_Adapter_Interface
+{
+ /**
+ * execution mode
+ */
+ protected $executeMode = OCI_COMMIT_ON_SUCCESS;
+
+ /**
+ * Resource representing connection to database
+ */
+ protected $connection = false;
+
+
+ protected $attributes = array(Doctrine_Core::ATTR_DRIVER_NAME => "oci8",
+ Doctrine_Core::ATTR_ERRMODE => Doctrine_Core::ERRMODE_SILENT);
+
+ /**
+ * User-provided configuration.
+ *
+ * Basic keys are:
+ *
+ * username => (string) Connect to the database as this username.
+ * password => (string) Password associated with the username.
+ * dbname => Either the name of the local Oracle instance, or the
+ * name of the entry in tnsnames.ora to which you want to connect.
+ *
+ * @var array
+ */
+ protected $config = array(
+ 'dbname' => null,
+ 'username' => null,
+ 'password' => null,
+ 'charset' => null,
+ 'persistent' => false
+ );
+
+ /**
+ * Doctrine Oracle adapter constructor
+ *
+ * <code>
+ * $conn = new Doctrine_Adapter_Oracle(array('dbname'=>'db','username'=>'usr','password'=>'pass'));
+ * </code>
+ *
+ * or
+ *
+ * <code>
+ * Doctrine_Manager::connection(array('oracle:dbname=SID;charset=NLS_CHARACTERSET;persistent=true','usr', 'pass'),"doctrine_connection_name")
+ * </code>
+ *
+ * @param string $name
+ * @return void
+ */
+ public function __construct($config = array(), $username = null, $password = null)
+ {
+ if (is_string($config))
+ {
+ $config = str_replace("oracle:","",$config);
+ $parts = explode(";", $config);
+ foreach($parts as $part) {
+ $e = explode("=", $part);
+ $key = array_shift($e);
+ $this->config[$key] = implode('=', $e);
+ }
+
+ if ($username) {
+ $this->config['username'] = $username;
+ }
+ if ($password) {
+ $this->config['password'] = $password;
+ }
+ } else {
+ if ( ! isset($config['password']) || ! isset($config['username'])) {
+ throw new Doctrine_Adapter_Exception('config array must have at least a username and a password');
+ }
+
+ $this->config['username'] = $config['username'];
+ $this->config['password'] = $config['password'];
+ $this->config['dbname'] = $config['dbname'];
+
+ if (isset($config['charset'])) {
+ $this->config['charset'] = $config['charset'];
+ }
+
+ if (isset($config['persistent'])) {
+ $this->config['persistent'] = $config['persistent'];
+ }
+ }
+
+
+ if ($this->config['persistent'] == 'true'){
+ $this->connection = @oci_pconnect($this->config['username'], $this->config['password'],
+ $this->config['dbname'], $this->config['charset']);
+ } else {
+ $this->connection = @oci_new_connect($this->config['username'], $this->config['password'],
+ $this->config['dbname'], $this->config['charset']);
+ }
+
+ if ($this->connection === false) {
+ throw new Doctrine_Adapter_Exception(sprintf("Unable to Connect to :'%s' as '%s'", $this->config['dbname'], $this->config['username']));
+ }
+ }
+
+ /**
+ * Prepare a query statement
+ *
+ * @param string $query Query to prepare
+ * @return Doctrine_Adapter_Statement_Oracle $stmt prepared statement
+ */
+ public function prepare($query)
+ {
+ $stmt = new Doctrine_Adapter_Statement_Oracle($this, $query, $this->executeMode);
+
+ return $stmt;
+ }
+
+ /**
+ * Execute query and return results as statement object
+ *
+ * @param string $query
+ * @return Doctrine_Adapter_Statement_Oracle $stmt
+ */
+ public function query($query)
+ {
+ $stmt = new Doctrine_Adapter_Statement_Oracle($this, $query, $this->executeMode);
+ $stmt->execute();
+
+ return $stmt;
+ }
+
+ /**
+ * Quote a value for the dbms
+ *
+ * @param string $input
+ * @return string $quoted
+ */
+ public function quote($input)
+ {
+ return "'" . str_replace("'","''",$input) . "'";
+ }
+
+ /**
+ * Execute a raw sql statement
+ *
+ * @param string $statement
+ * @return void
+ */
+ public function exec($statement)
+ {
+ $stmt = new Doctrine_Adapter_Statement_Oracle($this, $statement, $this->executeMode);
+ $stmt->execute();
+ $count = $stmt->rowCount();
+
+ return $count;
+ }
+
+ /**
+ * Get the id of the last inserted record
+ *
+ * @return integer $id
+ */
+ public function lastInsertId()
+ {
+ throw new Doctrine_Adapter_Exception("unsupported");
+ }
+
+ /**
+ * Begin a transaction
+ *
+ * @return boolean
+ */
+ public function beginTransaction()
+ {
+ $this->executeMode = OCI_DEFAULT;
+ return true;
+ }
+
+ /**
+ * Commit a transaction
+ *
+ * @return void
+ */
+ public function commit()
+ {
+ return @oci_commit($this->connection);
+ }
+
+ /**
+ * Rollback a transaction
+ *
+ * @return boolean
+ */
+ public function rollBack()
+ {
+ return @oci_rollback($this->connection);
+ }
+
+ /**
+ * Set connection attribute
+ *
+ * @param integer $attribute
+ * @param mixed $value the value of given attribute
+ * @return boolean Returns TRUE on success or FALSE on failure.
+ */
+ public function setAttribute($attribute, $value)
+ {
+ switch ($attribute) {
+ case Doctrine_Core::ATTR_DRIVER_NAME:
+ //TODO throw an error since driver name can not be changed
+ case Doctrine_Core::ATTR_ERRMODE:
+ break;
+ case Doctrine_Core::ATTR_CASE:
+ if ($value == Doctrine_Core::CASE_NATURAL) {
+ break;
+ } else {
+ throw new Doctrine_Adapter_Exception("Unsupported Option for ATTR_CASE: $value");
+ }
+ default:
+ throw new Doctrine_Adapter_Exception("Unsupported Attribute: $attribute");
+ return false;
+ }
+ $this->attributes[$attribute] = $value;
+ return true;
+ }
+
+ /**
+ * Retrieve a statement attribute
+ *
+ * @param integer $attribute
+ * @see Doctrine_Core::ATTR_* constants
+ * @return mixed the attribute value
+ */
+ public function getAttribute($attribute)
+ {
+ return $this->attributes[$attribute];
+ }
+
+ /**
+ * Returns established OCI connection handler
+ *
+ * @return resource OCI connection handler
+ */
+ public function getConnection()
+ {
+ return $this->connection;
+ }
+
+ /**
+ * Returns current user name
+ *
+ * @return string current user name
+ */
+ public function getUserName()
+ {
+ return $this->config['username'];
+ }
+
+ public function errorCode()
+ {
+ if (is_resource($this->connection)) {
+ $error = @oci_error($this->connection);
+ } else {
+ $error = @oci_error();
+ }
+ return $error['code'];
+ }
+
+ public function errorInfo()
+ {
+ if (is_resource($this->connection)) {
+ $error = @oci_error($this->connection);
+ } else {
+ $error = @oci_error();
+ }
+ return $error['message'];
+ }
+
+ public function __destruct()
+ {
+ if (is_resource($this->connection)) {
+ @oci_rollback($this->connection);
+ @oci_close($this->connection);
+ }
+ }
+}
View
131 library/Doctrine/Adapter/Statement.php
@@ -0,0 +1,131 @@
+<?php
+/*
+ * $Id: Statement.php 6484 2009-10-12 17:40:41Z jwage $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.org>.
+ */
+
+/**
+ * Doctrine_Adapter_Statement
+ *
+ * @author Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @package Doctrine
+ * @subpackage Adapter
+ * @link www.phpdoctrine.org
+ * @since 1.0
+ * @version $Revision: 6484 $
+ */
+abstract class Doctrine_Adapter_Statement
+{
+ /**
+ * bindValue
+ *
+ * @param string $no
+ * @param string $value
+ * @return void
+ */
+ public function bindValue($no, $value)
+ { }
+
+ /**
+ * fetch
+ *
+ * @see Doctrine_Core::FETCH_* constants
+ * @param integer $fetchStyle Controls how the next row will be returned to the caller.
+ * This value must be one of the Doctrine_Core::FETCH_* constants,
+ * defaulting to Doctrine_Core::FETCH_BOTH
+ *
+ * @param integer $cursorOrientation For a PDOStatement object representing a scrollable cursor,
+ * this value determines which row will be returned to the caller.
+ * This value must be one of the Doctrine_Core::FETCH_ORI_* constants, defaulting to
+ * Doctrine_Core::FETCH_ORI_NEXT. To request a scrollable cursor for your
+ * Doctrine_Adapter_Statement_Interface object,
+ * you must set the Doctrine_Core::ATTR_CURSOR attribute to Doctrine_Core::CURSOR_SCROLL when you
+ * prepare the SQL statement with Doctrine_Adapter_Interface->prepare().
+ *
+ * @param integer $cursorOffset For a Doctrine_Adapter_Statement_Interface object representing a scrollable cursor for which the
+ * $cursorOrientation parameter is set to Doctrine_Core::FETCH_ORI_ABS, this value specifies
+ * the absolute number of the row in the result set that shall be fetched.
+ *
+ * For a Doctrine_Adapter_Statement_Interface object representing a scrollable cursor for
+ * which the $cursorOrientation parameter is set to Doctrine_Core::FETCH_ORI_REL, this value
+ * specifies the row to fetch relative to the cursor position before
+ * Doctrine_Adapter_Statement_Interface->fetch() was called.
+ *
+ * @return mixed
+ */
+ public function fetch()
+ { }
+
+ /**
+ * nextRowSet
+ *
+ * @return void
+ */
+ public function nextRowset()
+ { }
+
+ /**
+ * execute()
+ *
+ * @return void
+ */
+ public function execute()
+ { }
+
+ /**
+ * errorCode
+ *
+ * @return void
+ */
+ public function errorCode()
+ { }
+
+ /**
+ * errorInfo
+ *
+ * @return void
+ */
+ public function errorInfo()
+ { }
+
+ /**
+ * rowCount
+ *
+ * @return void
+ */
+ public function rowCount()
+ { }
+
+ /**
+ * setFetchMode
+ *
+ * @param string $mode
+ * @return void
+ */
+ public function setFetchMode($mode)
+ { }
+
+ /**
+ * columnCount
+ *
+ * @return void
+ */
+ public function columnCount()
+ { }
+}
View
276 library/Doctrine/Adapter/Statement/Interface.php
@@ -0,0 +1,276 @@
+<?php
+/*
+ * $Id: Interface.php 6484 2009-10-12 17:40:41Z jwage $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.org>.
+ */
+
+/**
+ * Interface for Doctrine adapter statements
+ *
+ * @author Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @package Doctrine
+ * @subpackage Adapter
+ * @link www.phpdoctrine.org
+ * @since 1.0
+ * @version $Revision: 6484 $
+ */
+interface Doctrine_Adapter_Statement_Interface
+{
+ /**
+ * Bind a column to a PHP variable
+ *
+ * @param mixed $column Number of the column (1-indexed) or name of the column in the result set.
+ * If using the column name, be aware that the name should match
+ * the case of the column, as returned by the driver.
+ * @param string $param Name of the PHP variable to which the column will be bound.
+ * @param integer $type Data type of the parameter, specified by the Doctrine_Core::PARAM_* constants.
+ * @return boolean Returns TRUE on success or FALSE on failure
+ */
+ public function bindColumn($column, $param, $type = null);
+
+ /**
+ * Binds a value to a corresponding named or question mark
+ * placeholder in the SQL statement that was use to prepare the statement.
+ *
+ * @param mixed $param Parameter identifier. For a prepared statement using named placeholders,
+ * this will be a parameter name of the form :name. For a prepared statement
+ * using question mark placeholders, this will be the 1-indexed position of the parameter
+ *
+ * @param mixed $value The value to bind to the parameter.
+ * @param integer $type Explicit data type for the parameter using the Doctrine_Core::PARAM_* constants.
+ *
+ * @return boolean Returns TRUE on success or FALSE on failure.
+ */
+ public function bindValue($param, $value, $type = null);
+
+ /**
+ * Binds a PHP variable to a corresponding named or question mark placeholder in the
+ * SQL statement that was use to prepare the statement. Unlike Doctrine_Adapter_Statement_Interface->bindValue(),
+ * the variable is bound as a reference and will only be evaluated at the time
+ * that Doctrine_Adapter_Statement_Interface->execute() is called.
+ *
+ * Most parameters are input parameters, that is, parameters that are
+ * used in a read-only fashion to build up the query. Some drivers support the invocation
+ * of stored procedures that return data as output parameters, and some also as input/output
+ * parameters that both send in data and are updated to receive it.
+ *
+ * @param mixed $param Parameter identifier. For a prepared statement using named placeholders,
+ * this will be a parameter name of the form :name. For a prepared statement
+ * using question mark placeholders, this will be the 1-indexed position of the parameter
+ *
+ * @param mixed $variable Name of the PHP variable to bind to the SQL statement parameter.
+ *
+ * @param integer $type Explicit data type for the parameter using the Doctrine_Core::PARAM_* constants. To return
+ * an INOUT parameter from a stored procedure, use the bitwise OR operator to set the
+ * Doctrine_Core::PARAM_INPUT_OUTPUT bits for the data_type parameter.
+ *
+ * @param integer $length Length of the data type. To indicate that a parameter is an OUT parameter
+ * from a stored procedure, you must explicitly set the length.
+ * @param mixed $driverOptions
+ * @return boolean Returns TRUE on success or FALSE on failure.
+ */
+ public function bindParam($column, &$variable, $type = null, $length = null, $driverOptions = array());
+
+ /**
+ * Closes the cursor, enabling the statement to be executed again.
+ *
+ * @return boolean Returns TRUE on success or FALSE on failure.
+ */
+ public function closeCursor();
+
+ /**
+ * Returns the number of columns in the result set
+ *
+ * @return integer Returns the number of columns in the result set represented
+ * by the Doctrine_Adapter_Statement_Interface object. If there is no result set,
+ * this method should return 0.
+ */
+ public function columnCount();
+
+ /**
+ * Fetch the SQLSTATE associated with the last operation on the statement handle
+ *
+ * @see Doctrine_Adapter_Interface::errorCode()
+ * @return string error code string
+ */
+ public function errorCode();
+
+ /**
+ * Fetch extended error information associated with the last operation on the statement handle
+ *
+ * @see Doctrine_Adapter_Interface::errorInfo()
+ * @return array error info array
+ */
+ public function errorInfo();
+
+ /**
+ * Executes a prepared statement
+ *
+ * If the prepared statement included parameter markers, you must either:
+ * call PDOStatement->bindParam() to bind PHP variables to the parameter markers:
+ * bound variables pass their value as input and receive the output value,
+ * if any, of their associated parameter markers or pass an array of input-only
+ * parameter values
+ *
+ *
+ * @param array $params An array of values with as many elements as there are
+ * bound parameters in the SQL statement being executed.
+ * @return boolean Returns TRUE on success or FALSE on failure.
+ */
+ public function execute($params = null);
+
+ /**
+ * fetch
+ *
+ * @see Doctrine_Core::FETCH_* constants
+ * @param integer $fetchStyle Controls how the next row will be returned to the caller.
+ * This value must be one of the Doctrine_Core::FETCH_* constants,
+ * defaulting to Doctrine_Core::FETCH_BOTH
+ *
+ * @param integer $cursorOrientation For a PDOStatement object representing a scrollable cursor,
+ * this value determines which row will be returned to the caller.
+ * This value must be one of the Doctrine_Core::FETCH_ORI_* constants, defaulting to
+ * Doctrine_Core::FETCH_ORI_NEXT. To request a scrollable cursor for your
+ * Doctrine_Adapter_Statement_Interface object,
+ * you must set the Doctrine_Core::ATTR_CURSOR attribute to Doctrine_Core::CURSOR_SCROLL when you
+ * prepare the SQL statement with Doctrine_Adapter_Interface->prepare().
+ *
+ * @param integer $cursorOffset For a Doctrine_Adapter_Statement_Interface object representing a scrollable cursor for which the
+ * $cursorOrientation parameter is set to Doctrine_Core::FETCH_ORI_ABS, this value specifies
+ * the absolute number of the row in the result set that shall be fetched.
+ *
+ * For a Doctrine_Adapter_Statement_Interface object representing a scrollable cursor for
+ * which the $cursorOrientation parameter is set to Doctrine_Core::FETCH_ORI_REL, this value
+ * specifies the row to fetch relative to the cursor position before
+ * Doctrine_Adapter_Statement_Interface->fetch() was called.
+ *
+ * @return mixed
+ */
+ public function fetch($fetchStyle = Doctrine_Core::FETCH_BOTH,
+ $cursorOrientation = Doctrine_Core::FETCH_ORI_NEXT,
+ $cursorOffset = null);
+
+ /**
+ * Returns an array containing all of the result set rows
+ *
+ * @param integer $fetchStyle Controls how the next row will be returned to the caller.
+ * This value must be one of the Doctrine_Core::FETCH_* constants,
+ * defaulting to Doctrine_Core::FETCH_BOTH
+ *
+ * @param integer $columnIndex Returns the indicated 0-indexed column when the value of $fetchStyle is
+ * Doctrine_Core::FETCH_COLUMN. Defaults to 0.
+ *
+ * @return array
+ */
+ public function fetchAll($fetchStyle = Doctrine_Core::FETCH_BOTH);
+
+ /**
+ * Returns a single column from the next row of a
+ * result set or FALSE if there are no more rows.
+ *
+ * @param integer $columnIndex 0-indexed number of the column you wish to retrieve from the row. If no
+ * value is supplied, Doctrine_Adapter_Statement_Interface->fetchColumn()
+ * fetches the first column.
+ *
+ * @return string returns a single column in the next row of a result set.
+ */
+ public function fetchColumn($columnIndex = 0);
+
+ /**
+ * Fetches the next row and returns it as an object.
+ *
+ * Fetches the next row and returns it as an object. This function is an alternative to
+ * Doctrine_Adapter_Statement_Interface->fetch() with Doctrine_Core::FETCH_CLASS or Doctrine_Core::FETCH_OBJ style.
+ *
+ * @param string $className Name of the created class, defaults to stdClass.
+ * @param array $args Elements of this array are passed to the constructor.
+ *
+ * @return mixed an instance of the required class with property names that correspond
+ * to the column names or FALSE in case of an error.
+ */
+ public function fetchObject($className = 'stdClass', $args = array());
+
+ /**
+ * Retrieve a statement attribute
+ *
+ * @param integer $attribute
+ * @see Doctrine_Core::ATTR_* constants
+ * @return mixed the attribute value
+ */
+ public function getAttribute($attribute);
+
+ /**
+ * Returns metadata for a column in a result set
+ *
+ * @param integer $column The 0-indexed column in the result set.
+ *
+ * @return array Associative meta data array with the following structure:
+ *
+ * native_type The PHP native type used to represent the column value.
+ * driver:decl_ type The SQL type used to represent the column value in the database. If the column in the result set is the result of a function, this value is not returned by PDOStatement->getColumnMeta().
+ * flags Any flags set for this column.
+ * name The name of this column as returned by the database.
+ * len The length of this column. Normally -1 for types other than floating point decimals.
+ * precision The numeric precision of this column. Normally 0 for types other than floating point decimals.
+ * pdo_type The type of this column as represented by the PDO::PARAM_* constants.
+ */
+ public function getColumnMeta($column);
+
+ /**
+ * Advances to the next rowset in a multi-rowset statement handle
+ *
+ * Some database servers support stored procedures that return more than one rowset
+ * (also known as a result set). The nextRowset() method enables you to access the second
+ * and subsequent rowsets associated with a PDOStatement object. Each rowset can have a
+ * different set of columns from the preceding rowset.
+ *
+ * @return boolean Returns TRUE on success or FALSE on failure.
+ */
+ public function nextRowset();
+
+ /**
+ * rowCount() returns the number of rows affected by the last DELETE, INSERT, or UPDATE statement
+ * executed by the corresponding object.
+ *
+ * If the last SQL statement executed by the associated Statement object was a SELECT statement,
+ * some databases may return the number of rows returned by that statement. However,
+ * this behaviour is not guaranteed for all databases and should not be
+ * relied on for portable applications.
+ *
+ * @return integer Returns the number of rows.
+ */
+ public function rowCount();
+
+ /**
+ * Set a statement attribute
+ *
+ * @param integer $attribute
+ * @param mixed $value the value of given attribute
+ * @return boolean Returns TRUE on success or FALSE on failure.
+ */
+ public function setAttribute($attribute, $value);
+
+ /**
+ * Set the default fetch mode for this statement
+ *
+ * @param integer $mode The fetch mode must be one of the Doctrine_Core::FETCH_* constants.
+ * @return boolean Returns 1 on success or FALSE on failure.
+ */
+ public function setFetchMode($mode, $arg1 = null, $arg2 = null);
+}
View
379 library/Doctrine/Adapter/Statement/Mock.php
@@ -0,0 +1,379 @@
+<?php
+/*
+ * $Id: Mock.php 6484 2009-10-12 17:40:41Z jwage $
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.org>.
+ */
+
+/**
+ * Mock connection adapter statement class. Used for special testing purposes
+ *
+ * @package Doctrine
+ * @subpackage Adapter
+ * @author Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @link www.phpdoctrine.org
+ * @since 1.0
+ * @version $Revision: 6484 $
+ */
+class Doctrine_Adapter_Statement_Mock implements Doctrine_Adapter_Statement_Interface
+{
+ /**
+ * Variable which stores instance of Doctrine_Adapter_Mock
+ *
+ * @var Doctrine_Adapter_Mock
+ */
+ private $_mock;
+
+ /**
+ * queryString
+ *
+ * @var string
+ */
+ public $queryString;
+
+ /**
+ * Constructor for mock adapter statements. Accepts instance of Doctrine_Adapter_Mock
+ *
+ * @param Doctrine_Adapter_Mock $mock
+ */
+ public function __construct($mock)
+ {
+ $this->_mock = $mock;
+ }
+
+ /**
+ * bindColumn
+ *
+ * Bind a column to a PHP variable
+ *
+ * @param mixed $column Number of the column (1-indexed) or name of the column in the result set.
+ * If using the column name, be aware that the name should match
+ * the case of the column, as returned by the driver.
+ * @param string $param Name of the PHP variable to which the column will be bound.
+ * @param integer $type Data type of the parameter, specified by the Doctrine_Core::PARAM_* constants.
+ * @return boolean Returns TRUE on success or FALSE on failure
+ */
+ public function bindColumn($column, $param, $type = null)
+ { }
+
+ /**
+ * bindValue
+ *
+ * Binds a value to a corresponding named or question mark
+ * placeholder in the SQL statement that was use to prepare the statement.
+ *
+ * @param mixed $param Parameter identifier. For a prepared statement using named placeholders,
+ * this will be a parameter name of the form :name. For a prepared statement
+ * using question mark placeholders, this will be the 1-indexed position of the parameter
+ *
+ * @param mixed $value The value to bind to the parameter.
+ * @param integer $type Explicit data type for the parameter using the Doctrine_Core::PARAM_* constants.
+ *
+ * @return boolean Returns TRUE on success or FALSE on failure.
+ */
+ public function bindValue($param, $value, $type = null)
+ { }
+
+ /**
+ * bindParam
+ *
+ * Binds a PHP variable to a corresponding named or question mark placeholder in the
+ * SQL statement that was use to prepare the statement. Unlike Doctrine_Adapter_Statement_Interface->bindValue(),
+ * the variable is bound as a reference and will only be evaluated at the time
+ * that Doctrine_Adapter_Statement_Interface->execute() is called.
+ *
+ * Most parameters are input parameters, that is, parameters that are
+ * used in a read-only fashion to build up the query. Some drivers support the invocation
+ * of stored procedures that return data as output parameters, and some also as input/output
+ * parameters that both send in data and are updated to receive it.
+ *
+ * @param mixed $param Parameter identifier. For a prepared statement using named placeholders,
+ * this will be a parameter name of the form :name. For a prepared statement
+ * using question mark placeholders, this will be the 1-indexed position of the parameter
+ *
+ * @param mixed $variable Name of the PHP variable to bind to the SQL statement parameter.
+ *
+ * @param integer $type Explicit data type for the parameter using the Doctrine_Core::PARAM_* constants. To return
+ * an INOUT parameter from a stored procedure, use the bitwise OR operator to set the
+ * Doctrine_Core::PARAM_INPUT_OUTPUT bits for the data_type parameter.
+ *
+ * @param integer $length Length of the data type. To indicate that a parameter is an OUT parameter
+ * from a stored procedure, you must explicitly set the length.
+ * @param mixed $driverOptions
+ * @return boolean Returns TRUE on success or FALSE on failure.
+ */
+ public function bindParam($column, &$variable, $type = null, $length = null, $driverOptions = array())
+ {
+
+ }
+
+ /**
+ * closeCursor
+ *
+ * Closes the cursor, enabling the statement to be executed again.
+ *
+ * @return boolean Returns TRUE on success or FALSE on failure.
+ */
+ public function closeCursor()
+ {
+ return true;
+ }
+
+ /**
+ * columnCount
+ *
+ * Returns the number of columns in the result set
+ *
+ * @return integer Returns the number of columns in the result set represented
+ * by the Doctrine_Adapter_Statement_Interface object. If there is no result set,
+ * this method should return 0.
+ */
+ public function columnCount()
+ {
+ return 0;
+ }
+
+ /**
+ * errorCode
+ *
+ * Fetch the SQLSTATE associated with the last operation on the statement handle
+ *
+ * @see Doctrine_Adapter_Interface::errorCode()
+ * @return string error code string
+ */
+ public function errorCode()
+ {
+ return array();
+ }
+
+ /**
+ * errorInfo
+ *
+ * Fetch extended error information associated with the last operation on the statement handle
+ *
+ * @see Doctrine_Adapter_Interface::errorInfo()
+ * @return array error info array
+ */
+ public function errorInfo()
+ {
+ return array();
+ }
+
+ /**
+ * fetch
+ *
+ * @see Doctrine_Core::FETCH_* constants
+ * @param integer $fetchStyle Controls how the next row will be returned to the caller.
+ * This value must be one of the Doctrine_Core::FETCH_* constants,
+ * defaulting to Doctrine_Core::FETCH_BOTH
+ *
+ * @param integer $cursorOrientation For a PDOStatement object representing a scrollable cursor,
+ * this value determines which row will be returned to the caller.
+ * This value must be one of the Doctrine_Core::FETCH_ORI_* constants, defaulting to
+ * Doctrine_Core::FETCH_ORI_NEXT. To request a scrollable cursor for your
+ * Doctrine_Adapter_Statement_Interface object,
+ * you must set the Doctrine_Core::ATTR_CURSOR attribute to Doctrine_Core::CURSOR_SCROLL when you
+ * prepare the SQL statement with Doctrine_Adapter_Interface->prepare().
+ *
+ * @param integer $cursorOffset For a Doctrine_Adapter_Statement_Interface object representing a scrollable cursor for which the
+ * $cursorOrientation parameter is set to Doctrine_Core::FETCH_ORI_ABS, this value specifies
+ * the absolute number of the row in the result set that shall be fetched.
+ *
+ * For a Doctrine_Adapter_Statement_Interface object representing a scrollable cursor for
+ * which the $cursorOrientation parameter is set to Doctrine_Core::FETCH_ORI_REL, this value
+ * specifies the row to fetch relative to the cursor position before
+ * Doctrine_Adapter_Statement_Interface->fetch() was called.
+ *
+ * @return mixed
+ */
+ public function fetch($fetchStyle = Doctrine_Core::FETCH_BOTH,
+ $cursorOrientation = Doctrine_Core::FETCH_ORI_NEXT,
+ $cursorOffset = null)
+ {
+ return array();
+ }
+
+ /**
+ * fetchAll
+ *
+ * Returns an array containing all of the result set rows
+ *
+ * @param integer $fetchStyle Controls how the next row will be returned to the caller.
+ * This value must be one of the Doctrine_Core::FETCH_* constants,
+ * defaulting to Doctrine_Core::FETCH_BOTH
+ *
+ * @param integer $columnIndex Returns the indicated 0-indexed column when the value of $fetchStyle is
+ * Doctrine_Core::FETCH_COLUMN. Defaults to 0.
+ *
+ * @return array
+ */
+ public function fetchAll($fetchMode = Doctrine_Core::FETCH_BOTH)
+ {
+ return array();
+ }
+
+ /**
+ * execute
+ *
+ * Executes a prepared statement
+ *
+ * If the prepared statement included parameter markers, you must either:
+ * call PDOStatement->bindParam() to bind PHP variables to the parameter markers:
+ * bound variables pass their value as input and receive the output value,
+ * if any, of their associated parameter markers or pass an array of input-only
+ * parameter values
+ *
+ *
+ * @param array $params An array of values with as many elements as there are
+ * bound parameters in the SQL statement being executed.
+ * @return boolean Returns TRUE on success or FALSE on failure.
+ */
+ public function execute($params = null)
+ {
+ if (is_object($this->_mock)) {
+ $this->_mock->addQuery($this->queryString);
+ }
+ return true;
+ }
+
+ /**
+ * fetchColumn
+ *
+ * Returns a single column from the next row of a
+ * result set or FALSE if there are no more rows.
+ *
+ * @param integer $columnIndex 0-indexed number of the column you wish to retrieve from the row. If no
+ * value is supplied, Doctrine_Adapter_Statement_Interface->fetchColumn()
+ * fetches the first column.
+ *
+ * @return string returns a single column in the next row of a result set.
+ */
+ public function fetchColumn($columnIndex = 0)
+ {
+ return 0;
+ }
+
+ /**
+ * fetchObject
+ *
+ * Fetches the next row and returns it as an object.
+ *
+ * Fetches the next row and returns it as an object. This function is an alternative to
+ * Doctrine_Adapter_Statement_Interface->fetch() with Doctrine_Core::FETCH_CLASS or Doctrine_Core::FETCH_OBJ style.
+ *
+ * @param string $className Name of the created class, defaults to stdClass.
+ * @param array $args Elements of this array are passed to the constructor.
+ *
+ * @return mixed an instance of the required class with property names that correspond
+ * to the column names or FALSE in case of an error.
+ */
+ public function fetchObject($className = 'stdClass', $args = array())
+ {
+ return new $className();
+ }
+
+ /**
+ * nextRowset
+ *
+ * Advances to the next rowset in a multi-rowset statement handle
+ *
+ * Some database servers support stored procedures that return more than one rowset
+ * (also known as a result set). The nextRowset() method enables you to access the second
+ * and subsequent rowsets associated with a PDOStatement object. Each rowset can have a
+ * different set of columns from the preceding rowset.
+ *
+ * @return boolean Returns TRUE on success or FALSE on failure.
+ */
+ public function nextRowset()
+ {
+ return true;
+ }
+
+ /**
+ * rowCount
+ *
+ * rowCount() returns the number of rows affected by the last DELETE, INSERT, or UPDATE statement
+ * executed by the corresponding object.
+ *
+ * If the last SQL statement executed by the associated Statement object was a SELECT statement,
+ * some databases may return the number of rows returned by that statement. However,
+ * this behaviour is not guaranteed for all databases and should not be
+ * relied on for portable applications.
+ *
+ * @return integer Returns the number of rows.
+ */
+ public function rowCount()
+ {
+ return 0;
+ }
+
+ /**
+ * getColumnMeta
+ *
+ * Returns metadata for a column in a result set
+ *
+ * @param integer $column The 0-indexed column in the result set.
+ *
+ * @return array Associative meta data array with the following structure:
+ *
+ * native_type The PHP native type used to represent the column value.
+ * driver:decl_ type The SQL type used to represent the column value in the database. If the column in the result set is the result of a function, this value is not returned by PDOStatement->getColumnMeta().
+ * flags Any flags set for this column.
+ * name The name of this column as returned by the database.
+ * len The length of this column. Normally -1 for types other than floating point decimals.
+ * precision The numeric precision of this column. Normally 0 for types other than floating point decimals.
+ * pdo_type The type of this column as represented by the PDO::PARAM_* constants.
+ */
+ public function getColumnMeta($column)
+ { }
+
+ /**
+ * getAttribute
+ *
+ * Retrieve a statement attribute
+ *
+ * @param integer $attribute
+ * @see Doctrine_Core::ATTR_* constants
+ * @return mixed the attribute value
+ */
+ public function getAttribute($attribute)
+ { }
+
+ /**
+ * setAttribute
+ *
+ * Set a statement attribute
+ *
+ * @param integer $attribute
+ * @param mixed $value the value of given attribute
+ * @return boolean Returns TRUE on success or FALSE on failure.
+ */
+ public function setAttribute($attribute, $value)
+ { }
+
+ /**
+ * setFetchMode
+ *
+ * Set the default fetch mode for this statement
+ *
+ * @param integer $mode The fetch mode must be one of the Doctrine_Core::FETCH_* constants.
+ * @return boolean Returns 1 on success or FALSE on failure.
+ */
+ public function setFetchMode($mode, $arg1 = null, $arg2 = null)
+ { }
+}
View
594 library/Doctrine/Adapter/Statement/Oracle.php
@@ -0,0 +1,594 @@
+<?php
+/*
+ * $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.org>.
+ */
+
+/**
+ * Oracle connection adapter statement class.
+ *
+ * @package Doctrine
+ * @subpackage Adapter
+ * @author Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author vadik56
+ * @author Miloslav Kmet <adrive-nospam@hip-hop.sk>
+ * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @link www.phpdoctrine.org
+ * @since 1.0
+ * @version $Rev$
+ */
+class Doctrine_Adapter_Statement_Oracle implements Doctrine_Adapter_Statement_Interface
+{
+ /**
+ * @var string $queryString actual query string
+ */
+ public $queryString;
+
+ /**
+ * @var resource $connection OCI connection handler
+ */
+ protected $connection;
+
+ /**
+ * @var resource $statement OCI prepared statement
+ */
+ protected $statement;
+
+ /**
+ * @var integer $executeMode OCI statement execution mode
+ */
+ protected $executeMode = OCI_COMMIT_ON_SUCCESS;
+
+ /**
+ * @var array $bind_params Array of parameters bounded to a statement
+ */
+ protected $bindParams = array();
+
+ /**
+ * @var array $attributes Array of attributes
+ */
+ protected $attributes = array();
+
+ /**
+ * @var array $ociErrors Array of errors
+ */
+ protected $ociErrors = array();
+
+ /**
+ * the constructor
+ *
+ * @param Doctrine_Adapter_Oracle $connection
+ * @param string $query Query string to be executed
+ * @param integer $executeMode OCI execute mode
+ */
+ public function __construct( Doctrine_Adapter_Oracle $connection, $query, $executeMode)
+ {
+ $this->connection = $connection->getConnection();
+ $this->queryString = $query;
+ $this->executeMode = $executeMode;
+ $this->attributes[Doctrine_Core::ATTR_ERRMODE] = $connection->getAttribute(Doctrine_Core::ATTR_ERRMODE);
+
+ $this->parseQuery();
+ }
+
+ /**
+ * Bind a column to a PHP variable
+ *
+ * @param mixed $column Number of the column (1-indexed) or name of the column in the result set.
+ * If using the column name, be aware that the name should match
+ * the case of the column, as returned by the driver.
+ * @param string $param Name of the PHP variable to which the column will be bound.
+ * @param integer $type Data type of the parameter, specified by the Doctrine_Core::PARAM_* constants.
+ * @return boolean Returns TRUE on success or FALSE on failure
+ */
+ public function bindColumn($column, $param, $type = null)
+ {
+ throw new Exception("Unsupported");
+ }
+
+ /**
+ * Binds a value to a corresponding named or question mark
+ * placeholder in the SQL statement that was use to prepare the statement.
+ *
+ * @param mixed $param Parameter identifier. For a prepared statement using named placeholders,
+ * this will be a parameter name of the form :name. For a prepared statement
+ * using question mark placeholders, this will be the 1-indexed position of the parameter
+ *
+ * @param mixed $value The value to bind to the parameter.
+ * @param integer $type Explicit data type for the parameter using the Doctrine_Core::PARAM_* constants.
+ *
+ * @return boolean Returns TRUE on success or FALSE on failure.
+ */
+ public function bindValue($param, $value, $type = null)
+ {
+ /**
+ * need to store the value internally since binding is done by reference
+ */
+ $this->bindParams[] = $value;
+ $this->bindParam($param, $this->bindParams[count($this->bindParams) - 1], $type);
+ }
+
+ /**
+ * Binds a PHP variable to a corresponding named or question mark placeholder in the
+ * SQL statement that was use to prepare the statement. Unlike Doctrine_Adapter_Statement_Interface->bindValue(),
+ * the variable is bound as a reference and will only be evaluated at the time
+ * that Doctrine_Adapter_Statement_Interface->execute() is called.
+ *
+ * Most parameters are input parameters, that is, parameters that are
+ * used in a read-only fashion to build up the query. Some drivers support the invocation
+ * of stored procedures that return data as output parameters, and some also as input/output
+ * parameters that both send in data and are updated to receive it.
+ *
+ * @param mixed $param Parameter identifier. For a prepared statement using named placeholders,
+ * this will be a parameter name of the form :name. For a prepared statement
+ * using question mark placeholders, this will be the 1-indexed position of the parameter
+ *
+ * @param mixed $variable Name of the PHP variable to bind to the SQL statement parameter.
+ *
+ * @param integer $type Explicit data type for the parameter using the Doctrine_Core::PARAM_* constants. To return
+ * an INOUT parameter from a stored procedure, use the bitwise OR operator to set the
+ * Doctrine_Core::PARAM_INPUT_OUTPUT bits for the data_type parameter.
+ *
+ * @param integer $length Length of the data type. To indicate that a parameter is an OUT parameter
+ * from a stored procedure, you must explicitly set the length.
+ * @param mixed $driverOptions
+ * @return boolean Returns TRUE on success or FALSE on failure.
+ */
+ public function bindParam($column, &$variable, $type = null, $length = null, $driverOptions = array())
+ {
+ if ($driverOptions || $length ) {
+ throw new Doctrine_Adapter_Exception('Unsupported parameters:$length, $driverOptions');
+ }
+
+ if ($length === null) {
+ $oci_length = -1;
+ }
+ $oci_type = SQLT_CHR;
+
+ switch ($type) {
+ case Doctrine_Core::PARAM_STR:
+ $oci_type = SQLT_CHR;
+ break;
+ }
+
+ if (is_integer($column)) {
+ $variable_name = ":oci_b_var_$column";
+ } else {
+ $variable_name = $column;
+ }
+ //print "Binding $variable to $variable_name".PHP_EOL;
+ $status = @oci_bind_by_name($this->statement, $variable_name, $variable, $oci_length, $oci_type);
+ if ($status === false) {
+ $this->handleError();
+ }
+ return $status;
+ }
+
+ /**
+ * Closes the cursor, enabling the statement to be executed again.
+ *
+ * @return boolean Returns TRUE on success or FALSE on failure.
+ */
+ public function closeCursor()
+ {
+ $this->bind_params = array();
+ return oci_free_statement($this->statement);
+ }
+
+ /**
+ * Returns the number of columns in the result set
+ *
+ * @return integer Returns the number of columns in the result set represented
+ * by the Doctrine_Adapter_Statement_Interface object. If there is no result set,
+ * this method should return 0.
+ */
+ public function columnCount()
+ {
+ return oci_num_fields ( $this->statement );
+ }
+
+ /**
+ * Fetch the SQLSTATE associated with the last operation on the statement handle
+ *
+ * @see Doctrine_Adapter_Interface::errorCode()
+ * @return string error code string
+ */
+ public function errorCode()
+ {
+ $oci_error = $this->getOciError();
+ return $oci_error['code'];
+ }
+
+ /**
+ * Fetch extended error information associated with the last operation on the statement handle
+ *
+ * @see Doctrine_Adapter_Interface::errorInfo()
+ * @return array error info array
+ */
+ public function errorInfo()
+ {
+ $oci_error = $this->getOciError();
+ return $oci_error['message'] . " : " . $oci_error['sqltext'];
+ }
+
+ private function getOciError()
+ {
+ if (is_resource($this->statement)) {
+ $oci_error = oci_error ($this->statement);
+ } else {
+ $oci_error = oci_error ();
+ }
+
+ if ($oci_error) {
+ //store the error
+ $this->oci_errors[] = $oci_error;
+ } else if (count($this->ociErrors) > 0) {
+ $oci_error = $this->ociErrors[count($this->ociErrors)-1];
+ }
+ return $oci_error;
+ }
+
+ /**
+ * Executes a prepared statement
+ *
+ * If the prepared statement included parameter markers, you must either:
+ * call PDOStatement->bindParam() to bind PHP variables to the parameter markers:
+ * bound variables pass their value as input and receive the output value,
+ * if any, of their associated parameter markers or pass an array of input-only
+ * parameter values
+ *
+ *
+ * @param array $params An array of values with as many elements as there are
+ * bound parameters in the SQL statement being executed.
+ * @return boolean Returns TRUE on success or FALSE on failure.
+ */
+ public function execute($params = null)
+ {
+ if (is_array($params)) {
+ foreach ($params as $var => $value) {
+ $this->bindValue($var+1, $value);
+ }
+ }
+
+ $result = @oci_execute($this->statement , $this->executeMode );
+
+ if ($result === false) {
+ $this->handleError();
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * fetch
+ *
+ * @see Doctrine_Core::FETCH_* constants
+ * @param integer $fetchStyle Controls how the next row will be returned to the caller.
+ * This value must be one of the Doctrine_Core::FETCH_* constants,
+ * defaulting to Doctrine_Core::FETCH_BOTH
+ *
+ * @param integer $cursorOrientation For a PDOStatement object representing a scrollable cursor,
+ * this value determines which row will be returned to the caller.
+ * This value must be one of the Doctrine_Core::FETCH_ORI_* constants, defaulting to
+ * Doctrine_Core::FETCH_ORI_NEXT. To request a scrollable cursor for your
+ * Doctrine_Adapter_Statement_Interface object,
+ * you must set the Doctrine_Core::ATTR_CURSOR attribute to Doctrine_Core::CURSOR_SCROLL when you
+ * prepare the SQL statement with Doctrine_Adapter_Interface->prepare().
+ *
+ * @param integer $cursorOffset For a Doctrine_Adapter_Statement_Interface object representing a scrollable cursor for which the
+ * $cursorOrientation parameter is set to Doctrine_Core::FETCH_ORI_ABS, this value specifies
+ * the absolute number of the row in the result set that shall be fetched.
+ *
+ * For a Doctrine_Adapter_Statement_Interface object representing a scrollable cursor for
+ * which the $cursorOrientation parameter is set to Doctrine_Core::FETCH_ORI_REL, this value
+ * specifies the row to fetch relative to the cursor position before
+ * Doctrine_Adapter_Statement_Interface->fetch() was called.
+ *
+ * @return mixed
+ */
+ public function fetch($fetchStyle = Doctrine_Core::FETCH_BOTH, $cursorOrientation = Doctrine_Core::FETCH_ORI_NEXT, $cursorOffset = null)
+ {
+ switch ($fetchStyle) {
+ case Doctrine_Core::FETCH_BOTH :
+ return oci_fetch_array($this->statement, OCI_BOTH + OCI_RETURN_NULLS + OCI_RETURN_LOBS);
+ break;
+ case Doctrine_Core::FETCH_ASSOC :
+ return oci_fetch_array($this->statement, OCI_ASSOC + OCI_RETURN_NULLS + OCI_RETURN_LOBS);
+ break;
+ case Doctrine_Core::FETCH_NUM :
+ return oci_fetch_array($this->statement, OCI_NUM + OCI_RETURN_NULLS + OCI_RETURN_LOBS);
+ break;
+ case FETCH_OBJ:
+ return oci_fetch_object($this->statement, OCI_NUM + OCI_RETURN_NULLS + OCI_RETURN_LOBS);
+ break;
+ default:
+ throw new Doctrine_Adapter_Exception("This type of fetch is not supported: ".$fetchStyle);
+/*
+ case Doctrine_Core::FETCH_BOUND:
+ case Doctrine_Core::FETCH_CLASS:
+ case FETCH_CLASSTYPE:
+ case FETCH_COLUMN:
+ case FETCH_FUNC:
+ case FETCH_GROUP:
+ case FETCH_INTO:
+ case FETCH_LAZY:
+ case FETCH_NAMED:
+ case FETCH_SERIALIZE:
+ case FETCH_UNIQUE:
+ case FETCH_ORI_ABS:
+ case FETCH_ORI_FIRST:
+ case FETCH_ORI_LAST:
+ case FETCH_ORI_NEXT:
+ case FETCH_ORI_PRIOR:
+ case FETCH_ORI_REL:
+*/
+ }
+ }
+
+ /**
+ * Returns an array containing all of the result set rows
+ *
+ * @param integer $fetchStyle Controls how the next row will be returned to the caller.
+ * This value must be one of the Doctrine_Core::FETCH_* constants,
+ * defaulting to Doctrine_Core::FETCH_BOTH
+ *
+ * @param integer $columnIndex Returns the indicated 0-indexed column when the value of $fetchStyle is
+ * Doctrine_Core::FETCH_COLUMN. Defaults to 0.
+ *
+ * @return array
+ */
+ public function fetchAll($fetchStyle = Doctrine_Core::FETCH_BOTH, $colnum=0)
+ {
+ $fetchColumn = false;
+ $skip = 0;
+ $maxrows = -1;
+ $data = array();
+ $flags = OCI_FETCHSTATEMENT_BY_ROW + OCI_ASSOC;
+
+ $int = $fetchStyle & Doctrine_Core::FETCH_COLUMN;
+
+ if ($fetchStyle == Doctrine_Core::FETCH_BOTH) {
+ $flags = OCI_BOTH;
+ } else if ($fetchStyle == Doctrine_Core::FETCH_ASSOC) {
+ $numberOfRows = @oci_fetch_all($this->statement, $data, $skip, $maxrows, OCI_FETCHSTATEMENT_BY_ROW + OCI_ASSOC + OCI_RETURN_LOBS);
+ } else if ($fetchStyle == Doctrine_Core::FETCH_NUM) {
+ $numberOfRows = @oci_fetch_all($this->statement, $data, $skip, $maxrows, OCI_FETCHSTATEMENT_BY_ROW + OCI_NUM + OCI_RETURN_LOBS);
+ } else if ($fetchStyle == Doctrine_Core::FETCH_COLUMN) {
+ while ($row = @oci_fetch_array ($this->statement, OCI_NUM+OCI_RETURN_LOBS)) {
+ $data[] = $row[$colnum];
+ }
+ } else {
+ throw new Exception("Unsupported mode: '" . $fetchStyle . "' ");
+ }
+
+ return $data;
+ }
+
+ /**
+ * Returns a single column from the next row of a
+ * result set or FALSE if there are no more rows.
+ *
+ * @param integer $columnIndex 0-indexed number of the column you wish to retrieve from the row. If no
+ * value is supplied, Doctrine_Adapter_Statement_Interface->fetchColumn()
+ * fetches the first column.
+ *
+ * @return string returns a single column in the next row of a result set.
+ */
+ public function fetchColumn($columnIndex = 0)
+ {
+ if ( ! is_integer($columnIndex)) {
+ $this->handleError(array('message'=>"columnIndex parameter should be numeric"));
+ }
+ $row = $this->fetch(Doctrine_Core::FETCH_NUM);
+ return $row[$columnIndex];
+ }
+
+ /**
+ * Fetches the next row and returns it as an object.
+ *
+ * Fetches the next row and returns it as an object. This function is an alternative to
+ * Doctrine_Adapter_Statement_Interface->fetch() with Doctrine_Core::FETCH_CLASS or Doctrine_Core::FETCH_OBJ style.
+ *
+ * @param string $className Name of the created class, defaults to stdClass.
+ * @param array $args Elements of this array are passed to the constructor.
+ *
+ * @return mixed an instance of the required class with property names that correspond
+ * to the column names or FALSE in case of an error.
+ */
+ public function fetchObject($className = 'stdClass', $args = array())
+ {
+ $row = $this->fetch(Doctrine_Core::FETCH_ASSOC);
+ if ($row === false) {
+ return false;
+ }
+
+ $instantiation_code = "\$object = new $className(";
+ $firstParam=true;
+ foreach ($args as $index=>$value) {
+ if ( ! $firstParam ) {
+ $instantiation_code = $instantiation_code . ",";
+ } else {
+ $firstParam= false;
+ }
+ if ( is_string($index)) {
+ $instantiation_code = $instantiation_code . " \$args['$index']";
+ } else {
+ $instantiation_code = $instantiation_code . "\$args[$index]";
+ }
+ }
+
+ $instantiation_code = $instantiation_code . ");";
+
+ eval($instantiation_code);
+
+ //initialize instance of $className class
+ foreach ($row as $col => $value) {
+ $object->$col = $value;
+ }
+
+ return $object;
+ }
+
+ /**
+ * Returns metadata for a column in a result set
+ *
+ * @param integer $column The 0-indexed column in the result set.
+ *
+ * @return array Associative meta data array with the following structure:
+ *
+ * native_type The PHP native type used to represent the column value.
+ * driver:decl_ type The SQL type used to represent the column value in the database. If the column in the result set is the result of a function, this value is not returned by PDOStatement->getColumnMeta().
+ * flags Any flags set for this column.
+ * name The name of this column as returned by the database.
+ * len The length of this column. Normally -1 for types other than floating point decimals.
+ * precision The numeric precision of this column. Normally 0 for types other than floating point decimals.
+ * pdo_type The type of this column as represented by the PDO::PARAM_* constants.
+ */
+ public function getColumnMeta