diff --git a/.gitignore b/.gitignore
new file mode 100644
index 000000000..04f63f22d
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,9 @@
+build.properties
+build/
+logs/
+reports/
+dist/
+download/
+lib/api/
+lib/Doctrine/Common
+lib/Doctrine/DBAL
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 000000000..5621aa2e0
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,6 @@
+[submodule "lib/vendor/doctrine-common"]
+ path = lib/vendor/doctrine-common
+ url = git://github.com/doctrine/common.git
+[submodule "lib/vendor/doctrine-dbal"]
+ path = lib/vendor/doctrine-dbal
+ url = git://github.com/doctrine/dbal.git
diff --git a/CHANGELOG b/CHANGELOG
deleted file mode 100644
index 63fc8131d..000000000
--- a/CHANGELOG
+++ /dev/null
@@ -1 +0,0 @@
-xxxx
diff --git a/COPYRIGHT b/COPYRIGHT
deleted file mode 100644
index 5616eb8e9..000000000
--- a/COPYRIGHT
+++ /dev/null
@@ -1,39 +0,0 @@
-Copyrights
-----------
-
-Doctrine
---------
-
-Doctrine is a Object Relational Mapper built from scratch with PHP5. It contains a few ports of other popular PHP classes/libraries.
-
-Url: http://www.doctrine-project.org
-Copyright: 2005-2009 Konsta Vesterinen
-License: LGPL - see LICENSE file
-
-symfony
--------
-
-Doctrine contains ports of a few symfony classes/libraries
-
-Url: http://www.symfony-project.org
-Copyright: Fabien Potencier
-License: MIT - see LICENSE file
-
-Zend Framework
---------------
-
-Doctrine contains ports of a few Zend components and has borrowed concepts and ideas from the Zend Framework project.
-
-Url: http://framework.zend.com
-Copyright: Copyright © 2006-2009 by Zend Technologies, All rights reserved.
-License: New BSD License
-
-eZ Components
-------------
-
-Doctrine SchemaTool, Platforms and SchemaManagers borrow ideas and concepts
-from ezcDatabaseSchema.
-
-Url: http://www.ezcomponents.org
-License: New BSD License
-Copyright: Copyright (C) 2005-2009 eZ Systems AS. All rights reserved.
\ No newline at end of file
diff --git a/README.markdown b/README.markdown
new file mode 100644
index 000000000..e279f5f06
--- /dev/null
+++ b/README.markdown
@@ -0,0 +1,14 @@
+# Doctrine 2 ORM
+
+Doctrine 2 is an object-relational mapper (ORM) for PHP 5.3.0+ that provides transparent persistence
+for PHP objects. It sits on top of a powerful database abstraction layer (DBAL). One of its key features
+is the option to write database queries in a proprietary object oriented SQL dialect called Doctrine Query Language (DQL),
+inspired by Hibernates HQL. This provides developers with a powerful alternative to SQL that maintains flexibility
+without requiring unnecessary code duplication.
+
+More resources:
+
+* [Website](http://www.doctrine-project.org)
+* [Documentation](http://www.doctrine-project.org/projects/orm/2.0/docs/reference/introduction/en)
+* [Issue Tracker](http://www.doctrine-project.org/jira/browse/DDC)
+* [Downloads](http://github.com/doctrine/doctrine2/downloads)
\ No newline at end of file
diff --git a/UPGRADE_TO_2_0 b/UPGRADE_TO_2_0
index d1be43bf2..ebbdcb0b9 100644
--- a/UPGRADE_TO_2_0
+++ b/UPGRADE_TO_2_0
@@ -1,3 +1,13 @@
+# Update from 2.0-BETA2 to 2.0-BETA3
+
+## Default Allocation Size for Sequences
+
+The default allocation size for sequences has been changed from 10 to 1. This step was made
+to not cause confusion with users and also because it is partly some kind of premature optimization.
+
+# Update from 2.0-BETA1 to 2.0-BETA2
+
+There are no backwards incompatible changes in this release.
# Upgrade from 2.0-ALPHA4 to 2.0-BETA1
diff --git a/bin/doctrine.php b/bin/doctrine.php
index c307cb800..905dd17d2 100644
--- a/bin/doctrine.php
+++ b/bin/doctrine.php
@@ -2,10 +2,10 @@
require_once 'Doctrine/Common/ClassLoader.php';
-$classLoader = new \Doctrine\Common\ClassLoader('Doctrine', __DIR__ . '/../lib');
+$classLoader = new \Doctrine\Common\ClassLoader('Doctrine');
$classLoader->register();
-$classLoader = new \Doctrine\Common\ClassLoader('Symfony', __DIR__ . '/../lib/vendor');
+$classLoader = new \Doctrine\Common\ClassLoader('Symfony', 'Doctrine');
$classLoader->register();
$configFile = getcwd() . DIRECTORY_SEPARATOR . 'cli-config.php';
@@ -30,7 +30,7 @@ if (file_exists($configFile)) {
$helperSet = ($helperSet) ?: new \Symfony\Components\Console\Helper\HelperSet();
-$cli = new \Symfony\Components\Console\Application('Doctrine Command Line Interface', Doctrine\Common\Version::VERSION);
+$cli = new \Symfony\Components\Console\Application('Doctrine Command Line Interface', Doctrine\ORM\Version::VERSION);
$cli->setCatchExceptions(true);
$cli->setHelperSet($helperSet);
$cli->addCommands(array(
diff --git a/build.properties.dev b/build.properties.dev
index 4ad425aaa..e1ba8fb49 100644
--- a/build.properties.dev
+++ b/build.properties.dev
@@ -1,6 +1,5 @@
-version_name=2.0.0-ALPHA2
-version=2.0.0
-stability=alpha
+version=2.0.0BETA2
+stability=beta
build.dir=build
dist.dir=dist
report.dir=reports
diff --git a/build.xml b/build.xml
index 7665bdb63..024b63c89 100644
--- a/build.xml
+++ b/build.xml
@@ -5,18 +5,17 @@
-->
+
+
-
-
-
-
-
-
+
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
@@ -71,6 +66,9 @@
+
@@ -82,46 +80,31 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
+
-
+
+
+
+
+
+
-
+
-
-
@@ -142,7 +125,6 @@
-
@@ -156,51 +138,13 @@
-
-
-
- DoctrineCommon
- Common Doctrine code
- pear.doctrine-project.org
- The Doctrine Common package contains shared code between the other packages.
-
-
-
- LGPL
-
-
- -
-
-
-
-
-
-
-
-
- DoctrineDBAL
- Doctrine Database Abstraction Layer
- pear.doctrine-project.org
- The Doctrine DBAL package is the database abstraction layer used to power the ORM package.
-
-
-
- LGPL
-
-
- -
-
-
-
-
-
-
-
-
+
+
DoctrineORM
- Doctrine Object Relationl Mapper
+ Doctrine Object Relational Mapper
pear.doctrine-project.org
The Doctrine ORM package is the primary package containing the object relational mapper.
@@ -223,6 +167,7 @@
-
+
+
-
+
\ No newline at end of file
diff --git a/doctrine-mapping.xsd b/doctrine-mapping.xsd
index e74010a8e..9b6b7c629 100644
--- a/doctrine-mapping.xsd
+++ b/doctrine-mapping.xsd
@@ -124,6 +124,8 @@
+
+
@@ -135,7 +137,7 @@
-
+
diff --git a/jpgraph.php b/jpgraph.php
deleted file mode 100644
index 1d877a4ae..000000000
--- a/jpgraph.php
+++ /dev/null
@@ -1,92 +0,0 @@
-testsuite as $suite) {
- foreach ($suite->testcase as $test) {
- if (stripos((string)$suite['name'], 'performance') !== false || stripos((string)$test['name'], 'performance') !== false) {
- $name = (string)$suite['name'] . '#' . (string)$test['name'];
- $graphs[$name][] = (double)$test['time'];
- }
- }
- }
-}
-
-if (isset($testsuite) && isset($testcase)) {
- $graphName = $testsuite . '#' . $testcase;
- $graphData = $graphs[$graphName];
-
- // Create the graph. These two calls are always required
- $graph = new Graph(650,250);
-
- //$graph->SetScale('intint');
- $graph->SetScale('textlin');
- $graph->yaxis->scale->SetAutoMin(0);
-
- $graph->title->Set($testsuite);
- $graph->subtitle->Set($testcase);
-
- $graph->xaxis->title->Set('revision');
- $graph->yaxis->title->Set('seconds');
- $graph->SetMargin(100, 100, 50, 50);
-
- // Create the linear plot
- $lineplot = new LinePlot($graphData);
- $lineplot->SetColor('blue');
-
- $graph->xaxis->SetTickLabels($revisions);
-
- // Add the plot to the graph
- $graph->Add($lineplot);
-
- // Display the graph
- $graph->Stroke();
-} else {
-
- echo '';
- echo 'Pick a test and click "show":
';
- echo '';
- echo '';
-
-}
-
-
-
diff --git a/lib/Doctrine/Common/Annotations/Annotation.php b/lib/Doctrine/Common/Annotations/Annotation.php
deleted file mode 100644
index e2bf42bb5..000000000
--- a/lib/Doctrine/Common/Annotations/Annotation.php
+++ /dev/null
@@ -1,81 +0,0 @@
-.
- */
-
-namespace Doctrine\Common\Annotations;
-
-/**
- * Annotations class
- *
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @link www.doctrine-project.org
- * @since 2.0
- * @version $Revision$
- * @author Benjamin Eberlei
- * @author Guilherme Blanco
- * @author Jonathan Wage
- * @author Roman Borschel
- */
-class Annotation
-{
- /**
- * Value property. Common among all derived classes.
- *
- * @var string
- */
- public $value;
-
- /**
- * Constructor
- *
- * @param array $data Key-value for properties to be defined in this class
- */
- public final function __construct(array $data)
- {
- foreach ($data as $key => $value) {
- $this->$key = $value;
- }
- }
-
- /**
- * Error handler for unknown property accessor in Annotation class.
- *
- * @param string $name Unknown property name
- */
- public function __get($name)
- {
- throw new \BadMethodCallException(
- sprintf("Unknown property '%s' on annotation '%s'.", $name, get_class($this))
- );
- }
-
- /**
- * Error handler for unknown property mutator in Annotation class.
- *
- * @param string $name Unkown property name
- * @param mixed $value Property value
- */
- public function __set($name, $value)
- {
- throw new \BadMethodCallException(
- sprintf("Unknown property '%s' on annotation '%s'.", $name, get_class($this))
- );
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/Common/Annotations/AnnotationException.php b/lib/Doctrine/Common/Annotations/AnnotationException.php
deleted file mode 100644
index bdee49420..000000000
--- a/lib/Doctrine/Common/Annotations/AnnotationException.php
+++ /dev/null
@@ -1,59 +0,0 @@
-.
- */
-
-namespace Doctrine\Common\Annotations;
-
-/**
- * Description of AnnotationException
- *
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @link www.doctrine-project.org
- * @since 2.0
- * @version $Revision$
- * @author Benjamin Eberlei
- * @author Guilherme Blanco
- * @author Jonathan Wage
- * @author Roman Borschel
- */
-class AnnotationException extends \Exception
-{
- /**
- * Creates a new AnnotationException describing a Syntax error.
- *
- * @param string $message Exception message
- * @return AnnotationException
- */
- public static function syntaxError($message)
- {
- return new self('[Syntax Error] ' . $message);
- }
-
- /**
- * Creates a new AnnotationException describing a Semantical error.
- *
- * @param string $message Exception message
- * @return AnnotationException
- */
- public static function semanticalError($message)
- {
- return new self('[Semantical Error] ' . $message);
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/Common/Annotations/AnnotationReader.php b/lib/Doctrine/Common/Annotations/AnnotationReader.php
deleted file mode 100644
index 5b58fb72f..000000000
--- a/lib/Doctrine/Common/Annotations/AnnotationReader.php
+++ /dev/null
@@ -1,204 +0,0 @@
-.
- */
-
-namespace Doctrine\Common\Annotations;
-
-use \ReflectionClass,
- \ReflectionMethod,
- \ReflectionProperty,
- Doctrine\Common\Cache\Cache;
-
-/**
- * A reader for docblock annotations.
- *
- * @since 2.0
- * @author Benjamin Eberlei
- * @author Guilherme Blanco
- * @author Jonathan Wage
- * @author Roman Borschel
- */
-class AnnotationReader
-{
- /**
- * Cache salt
- *
- * @var string
- * @static
- */
- private static $CACHE_SALT = '@';
-
- /**
- * Annotations Parser
- *
- * @var Doctrine\Common\Annotations\Parser
- */
- private $_parser;
-
- /**
- * Cache mechanism to store processed Annotations
- *
- * @var Doctrine\Common\Cache\Cache
- */
- private $_cache;
-
- /**
- * Constructor. Initializes a new AnnotationReader that uses the given Cache provider.
- *
- * @param Cache $cache The cache provider to use. If none is provided, ArrayCache is used.
- */
- public function __construct(Cache $cache = null)
- {
- $this->_parser = new Parser;
- $this->_cache = $cache ?: new \Doctrine\Common\Cache\ArrayCache;
- }
-
- /**
- * Sets the default namespace that the AnnotationReader should assume for annotations
- * with not fully qualified names.
- *
- * @param string $defaultNamespace
- */
- public function setDefaultAnnotationNamespace($defaultNamespace)
- {
- $this->_parser->setDefaultAnnotationNamespace($defaultNamespace);
- }
-
- /**
- * Sets an alias for an annotation namespace.
- *
- * @param $namespace
- * @param $alias
- */
- public function setAnnotationNamespaceAlias($namespace, $alias)
- {
- $this->_parser->setAnnotationNamespaceAlias($namespace, $alias);
- }
-
- /**
- * Gets the annotations applied to a class.
- *
- * @param string|ReflectionClass $class The name or ReflectionClass of the class from which
- * the class annotations should be read.
- * @return array An array of Annotations.
- */
- public function getClassAnnotations(ReflectionClass $class)
- {
- $cacheKey = $class->getName() . self::$CACHE_SALT;
-
- // Attempt to grab data from cache
- if (($data = $this->_cache->fetch($cacheKey)) !== false) {
- return $data;
- }
-
- $annotations = $this->_parser->parse($class->getDocComment(), 'class ' . $class->getName());
- $this->_cache->save($cacheKey, $annotations, null);
-
- return $annotations;
- }
-
- /**
- * Gets a class annotation.
- *
- * @param $class
- * @param string $annotation The name of the annotation.
- * @return The Annotation or NULL, if the requested annotation does not exist.
- */
- public function getClassAnnotation(ReflectionClass $class, $annotation)
- {
- $annotations = $this->getClassAnnotations($class);
-
- return isset($annotations[$annotation]) ? $annotations[$annotation] : null;
- }
-
- /**
- * Gets the annotations applied to a property.
- *
- * @param string|ReflectionClass $class The name or ReflectionClass of the class that owns the property.
- * @param string|ReflectionProperty $property The name or ReflectionProperty of the property
- * from which the annotations should be read.
- * @return array An array of Annotations.
- */
- public function getPropertyAnnotations(ReflectionProperty $property)
- {
- $cacheKey = $property->getDeclaringClass()->getName() . '$' . $property->getName() . self::$CACHE_SALT;
-
- // Attempt to grab data from cache
- if (($data = $this->_cache->fetch($cacheKey)) !== false) {
- return $data;
- }
-
- $context = 'property ' . $property->getDeclaringClass()->getName() . "::\$" . $property->getName();
- $annotations = $this->_parser->parse($property->getDocComment(), $context);
- $this->_cache->save($cacheKey, $annotations, null);
-
- return $annotations;
- }
-
- /**
- * Gets a property annotation.
- *
- * @param ReflectionProperty $property
- * @param string $annotation The name of the annotation.
- * @return The Annotation or NULL, if the requested annotation does not exist.
- */
- public function getPropertyAnnotation(ReflectionProperty $property, $annotation)
- {
- $annotations = $this->getPropertyAnnotations($property);
-
- return isset($annotations[$annotation]) ? $annotations[$annotation] : null;
- }
-
- /**
- * Gets the annotations applied to a method.
- *
- * @param string|ReflectionClass $class The name or ReflectionClass of the class that owns the method.
- * @param string|ReflectionMethod $property The name or ReflectionMethod of the method from which
- * the annotations should be read.
- * @return array An array of Annotations.
- */
- public function getMethodAnnotations(ReflectionMethod $method)
- {
- $cacheKey = $method->getDeclaringClass()->getName() . '#' . $method->getName() . self::$CACHE_SALT;
-
- // Attempt to grab data from cache
- if (($data = $this->_cache->fetch($cacheKey)) !== false) {
- return $data;
- }
-
- $context = 'method ' . $method->getDeclaringClass()->getName() . '::' . $method->getName() . '()';
- $annotations = $this->_parser->parse($method->getDocComment(), $context);
- $this->_cache->save($cacheKey, $annotations, null);
-
- return $annotations;
- }
-
- /**
- * Gets a method annotation.
- *
- * @param ReflectionMethod $method
- * @param string $annotation The name of the annotation.
- * @return The Annotation or NULL, if the requested annotation does not exist.
- */
- public function getMethodAnnotation(ReflectionMethod $method, $annotation)
- {
- $annotations = $this->getMethodAnnotations($method);
-
- return isset($annotations[$annotation]) ? $annotations[$annotation] : null;
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/Common/Annotations/Lexer.php b/lib/Doctrine/Common/Annotations/Lexer.php
deleted file mode 100644
index a6b8c0675..000000000
--- a/lib/Doctrine/Common/Annotations/Lexer.php
+++ /dev/null
@@ -1,156 +0,0 @@
-.
- */
-
-namespace Doctrine\Common\Annotations;
-
-/**
- * Simple lexer for docblock annotations.
- *
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @link www.doctrine-project.org
- * @since 2.0
- * @version $Revision$
- * @author Benjamin Eberlei
- * @author Guilherme Blanco
- * @author Jonathan Wage
- * @author Roman Borschel
- */
-class Lexer extends \Doctrine\Common\Lexer
-{
- const T_NONE = 1;
- const T_IDENTIFIER = 2;
- const T_INTEGER = 3;
- const T_STRING = 4;
- const T_FLOAT = 5;
-
- const T_AT = 101;
- const T_CLOSE_CURLY_BRACES = 102;
- const T_CLOSE_PARENTHESIS = 103;
- const T_COMMA = 104;
- const T_EQUALS = 105;
- const T_FALSE = 106;
- const T_NAMESPACE_SEPARATOR = 107;
- const T_OPEN_CURLY_BRACES = 108;
- const T_OPEN_PARENTHESIS = 109;
- const T_TRUE = 110;
-
- /**
- * @inheritdoc
- */
- protected function getCatchablePatterns()
- {
- return array(
- '[a-z_][a-z0-9_:]*',
- '(?:[0-9]+(?:[\.][0-9]+)*)(?:e[+-]?[0-9]+)?',
- '"(?:[^"]|"")*"'
- );
- }
-
- /**
- * @inheritdoc
- */
- protected function getNonCatchablePatterns()
- {
- return array('\s+', '\*+', '(.)');
- }
-
- /**
- * @inheritdoc
- */
- protected function _getType(&$value)
- {
- $type = self::T_NONE;
- $newVal = $this->_getNumeric($value);
-
- // Checking numeric value
- if ($newVal !== false) {
- $value = $newVal;
-
- return (strpos($value, '.') !== false || stripos($value, 'e') !== false)
- ? self::T_FLOAT : self::T_INTEGER;
- }
-
- if ($value[0] === '"') {
- $value = str_replace('""', '"', substr($value, 1, strlen($value) - 2));
-
- return self::T_STRING;
- } else {
- switch (strtolower($value)) {
- case '@':
- return self::T_AT;
-
- case ',':
- return self::T_COMMA;
-
- case '(':
- return self::T_OPEN_PARENTHESIS;
-
- case ')':
- return self::T_CLOSE_PARENTHESIS;
-
- case '{':
- return self::T_OPEN_CURLY_BRACES;
-
- case '}': return self::T_CLOSE_CURLY_BRACES;
- case '=':
- return self::T_EQUALS;
-
- case '\\':
- return self::T_NAMESPACE_SEPARATOR;
-
- case 'true':
- return self::T_TRUE;
-
- case 'false':
- return self::T_FALSE;
-
- default:
- if (ctype_alpha($value[0]) || $value[0] === '_') {
- return self::T_IDENTIFIER;
- }
-
- break;
- }
- }
-
- return $type;
- }
-
- /**
- * Checks if a value is numeric or not
- *
- * @param mixed $value Value to be inspected
- * @return boolean|integer|float Processed value
- */
- private function _getNumeric($value)
- {
- if ( ! is_scalar($value)) {
- return false;
- }
-
- // Checking for valid numeric numbers: 1.234, -1.234e-2
- if (is_numeric($value)) {
- return $value;
- }
-
- return false;
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/Common/Annotations/Parser.php b/lib/Doctrine/Common/Annotations/Parser.php
deleted file mode 100644
index c421a7cd7..000000000
--- a/lib/Doctrine/Common/Annotations/Parser.php
+++ /dev/null
@@ -1,445 +0,0 @@
-.
- */
-
-namespace Doctrine\Common\Annotations;
-
-/**
- * A simple parser for docblock annotations.
- *
- * @since 2.0
- * @author Benjamin Eberlei
- * @author Guilherme Blanco
- * @author Jonathan Wage
- * @author Roman Borschel
- */
-class Parser
-{
- /**
- * Tags that are stripped prior to parsing in order to reduce parsing overhead.
- *
- * @var array
- */
- private static $_strippedInlineTags = array(
- "{@example", "{@id", "{@internal", "{@inheritdoc",
- "{@link", "{@source", "{@toc", "{@tutorial", "*/"
- );
-
- /**
- * The lexer.
- *
- * @var Doctrine\Common\Annotations\Lexer
- */
- private $_lexer;
-
- /**
- * Flag to control if the current Annotation is nested or not.
- *
- * @var boolean
- */
- private $_isNestedAnnotation = false;
-
- /**
- * Default namespace for Annotations.
- *
- * @var string
- */
- private $_defaultAnnotationNamespace = '';
-
- /**
- * Hashmap to store namespace aliases.
- *
- * @var array
- */
- private $_namespaceAliases = array();
-
- /**
- * @var string
- */
- private $_context = '';
-
- /**
- * Constructs a new AnnotationParser.
- *
- */
- public function __construct()
- {
- $this->_lexer = new Lexer;
- }
-
- /**
- * Sets the default namespace that is assumed for an annotation that does not
- * define a namespace prefix.
- *
- * @param $defaultNamespace
- */
- public function setDefaultAnnotationNamespace($defaultNamespace)
- {
- $this->_defaultAnnotationNamespace = $defaultNamespace;
- }
-
- /**
- * Sets an alias for an annotation namespace.
- *
- * @param $namespace
- * @param $alias
- */
- public function setAnnotationNamespaceAlias($namespace, $alias)
- {
- $this->_namespaceAliases[$alias] = $namespace;
- }
-
- /**
- * Parses the given docblock string for annotations.
- *
- * @param string $docBlockString
- * @param string $context
- * @return array Array of Annotations. If no annotations are found, an empty array is returned.
- */
- public function parse($docBlockString, $context='')
- {
- $this->_context = $context;
-
- // Strip out some known inline tags.
- $input = str_replace(self::$_strippedInlineTags, '', $docBlockString);
-
- // Cut of the beginning of the input until the first '@'.
- $input = substr($input, strpos($input, '@'));
-
- $this->_lexer->reset();
- $this->_lexer->setInput(trim($input, '* /'));
- $this->_lexer->moveNext();
-
- if ($this->_lexer->isNextToken(Lexer::T_AT)) {
- return $this->Annotations();
- }
-
- return array();
- }
-
- /**
- * Attempts to match the given token with the current lookahead token.
- * If they match, updates the lookahead token; otherwise raises a syntax error.
- *
- * @param int|string token type or value
- * @return bool True if tokens match; false otherwise.
- */
- public function match($token)
- {
- if ( ! ($this->_lexer->lookahead['type'] === $token)) {
- $this->syntaxError($this->_lexer->getLiteral($token));
- }
- $this->_lexer->moveNext();
- }
-
- /**
- * Generates a new syntax error.
- *
- * @param string $expected Expected string.
- * @param array $token Optional token.
- * @throws AnnotationException
- */
- private function syntaxError($expected, $token = null)
- {
- if ($token === null) {
- $token = $this->_lexer->lookahead;
- }
-
- $message = "Expected {$expected}, got ";
-
- if ($this->_lexer->lookahead === null) {
- $message .= 'end of string';
- } else {
- $message .= "'{$token['value']}' at position {$token['position']}";
- }
-
- if (strlen($this->_context)) {
- $message .= ' in ' . $this->_context;
- }
-
- $message .= '.';
-
- throw AnnotationException::syntaxError($message);
- }
-
- /**
- * Annotations ::= Annotation {[ "*" ]* [Annotation]}*
- *
- * @return array
- */
- public function Annotations()
- {
- $this->_isNestedAnnotation = false;
-
- $annotations = array();
- $annot = $this->Annotation();
-
- if ($annot !== false) {
- $annotations[get_class($annot)] = $annot;
- }
-
- while ($this->_lexer->lookahead !== null && $this->_lexer->isNextToken(Lexer::T_AT)) {
- $this->_isNestedAnnotation = false;
-
- $annot = $this->Annotation();
-
- if ($annot !== false) {
- $annotations[get_class($annot)] = $annot;
- }
- }
-
- return $annotations;
- }
-
- /**
- * Annotation ::= "@" AnnotationName ["(" [Values] ")"]
- * AnnotationName ::= QualifiedName | SimpleName | AliasedName
- * QualifiedName ::= NameSpacePart "\" {NameSpacePart "\"}* SimpleName
- * AliasedName ::= Alias ":" SimpleName
- * NameSpacePart ::= identifier
- * SimpleName ::= identifier
- * Alias ::= identifier
- *
- * @return mixed False if it is not a valid Annotation; instance of Annotation subclass otherwise.
- */
- public function Annotation()
- {
- $values = array();
- $nameParts = array();
-
- $this->match(Lexer::T_AT);
- $this->match(Lexer::T_IDENTIFIER);
- $nameParts[] = $this->_lexer->token['value'];
-
- while ($this->_lexer->isNextToken(Lexer::T_NAMESPACE_SEPARATOR)) {
- $this->match(Lexer::T_NAMESPACE_SEPARATOR);
- $this->match(Lexer::T_IDENTIFIER);
- $nameParts[] = $this->_lexer->token['value'];
- }
-
- // Effectively pick the name of the class (append default NS if none, grab from NS alias, etc)
- if (count($nameParts) == 1) {
- if (strpos($nameParts[0], ':')) {
- list ($alias, $simpleName) = explode(':', $nameParts[0]);
- $name = $this->_namespaceAliases[$alias] . $simpleName;
- } else {
- $name = $this->_defaultAnnotationNamespace . $nameParts[0];
- }
- } else {
- $name = implode('\\', $nameParts);
- }
-
- // Is it really an annotation class?
- if (
- ( ! $this->_isNestedAnnotation && $this->_lexer->lookahead != null &&
- ! $this->_lexer->isNextToken(Lexer::T_OPEN_PARENTHESIS) &&
- ! $this->_lexer->isNextToken(Lexer::T_AT)) ||
- ! class_exists($name, false)
- ) {
- $this->_lexer->skipUntil(Lexer::T_AT);
-
- return false;
- }
-
- // Next will be nested
- $this->_isNestedAnnotation = true;
-
- if ($this->_lexer->isNextToken(Lexer::T_OPEN_PARENTHESIS)) {
- $this->match(Lexer::T_OPEN_PARENTHESIS);
-
- if ( ! $this->_lexer->isNextToken(Lexer::T_CLOSE_PARENTHESIS)) {
- $values = $this->Values();
- }
-
- $this->match(Lexer::T_CLOSE_PARENTHESIS);
- }
-
- return new $name($values);
- }
-
- /**
- * Values ::= Array | Value {"," Value}*
- *
- * @return array
- */
- public function Values()
- {
- $values = array();
-
- // Handle the case of a single array as value, i.e. @Foo({....})
- if ($this->_lexer->isNextToken(Lexer::T_OPEN_CURLY_BRACES)) {
- $values['value'] = $this->Value();
- return $values;
- }
-
- $values[] = $this->Value();
-
- while ($this->_lexer->isNextToken(Lexer::T_COMMA)) {
- $this->match(Lexer::T_COMMA);
- $value = $this->Value();
-
- if ( ! is_array($value)) {
- $this->syntaxError('Value', $value);
- }
-
- $values[] = $value;
- }
-
- foreach ($values as $k => $value) {
- if (is_array($value) && is_string(key($value))) {
- $key = key($value);
- $values[$key] = $value[$key];
- } else {
- $values['value'] = $value;
- }
-
- unset($values[$k]);
- }
-
- return $values;
- }
-
- /**
- * Value ::= PlainValue | FieldAssignment
- *
- * @return mixed
- */
- public function Value()
- {
- $peek = $this->_lexer->glimpse();
-
- if ($peek['value'] === '=') {
- return $this->FieldAssignment();
- }
-
- return $this->PlainValue();
- }
-
- /**
- * PlainValue ::= integer | string | float | boolean | Array | Annotation
- *
- * @return mixed
- */
- public function PlainValue()
- {
- if ($this->_lexer->isNextToken(Lexer::T_OPEN_CURLY_BRACES)) {
- return $this->Arrayx();
- }
-
- if ($this->_lexer->isNextToken(Lexer::T_AT)) {
- return $this->Annotation();
- }
-
- switch ($this->_lexer->lookahead['type']) {
- case Lexer::T_STRING:
- $this->match(Lexer::T_STRING);
- return $this->_lexer->token['value'];
-
- case Lexer::T_INTEGER:
- $this->match(Lexer::T_INTEGER);
- return $this->_lexer->token['value'];
-
- case Lexer::T_FLOAT:
- $this->match(Lexer::T_FLOAT);
- return $this->_lexer->token['value'];
-
- case Lexer::T_TRUE:
- $this->match(Lexer::T_TRUE);
- return true;
-
- case Lexer::T_FALSE:
- $this->match(Lexer::T_FALSE);
- return false;
-
- default:
- $this->syntaxError('PlainValue');
- }
- }
-
- /**
- * FieldAssignment ::= FieldName "=" PlainValue
- * FieldName ::= identifier
- *
- * @return array
- */
- public function FieldAssignment()
- {
- $this->match(Lexer::T_IDENTIFIER);
- $fieldName = $this->_lexer->token['value'];
- $this->match(Lexer::T_EQUALS);
-
- return array($fieldName => $this->PlainValue());
- }
-
- /**
- * Array ::= "{" ArrayEntry {"," ArrayEntry}* "}"
- *
- * @return array
- */
- public function Arrayx()
- {
- $array = $values = array();
-
- $this->match(Lexer::T_OPEN_CURLY_BRACES);
- $values[] = $this->ArrayEntry();
-
- while ($this->_lexer->isNextToken(Lexer::T_COMMA)) {
- $this->match(Lexer::T_COMMA);
- $values[] = $this->ArrayEntry();
- }
-
- $this->match(Lexer::T_CLOSE_CURLY_BRACES);
-
- foreach ($values as $value) {
- list ($key, $val) = $value;
-
- if ($key !== null) {
- $array[$key] = $val;
- } else {
- $array[] = $val;
- }
- }
-
- return $array;
- }
-
- /**
- * ArrayEntry ::= Value | KeyValuePair
- * KeyValuePair ::= Key "=" PlainValue
- * Key ::= string | integer
- *
- * @return array
- */
- public function ArrayEntry()
- {
- $peek = $this->_lexer->glimpse();
-
- if ($peek['value'] == '=') {
- $this->match(
- $this->_lexer->isNextToken(Lexer::T_INTEGER) ? Lexer::T_INTEGER : Lexer::T_STRING
- );
-
- $key = $this->_lexer->token['value'];
- $this->match(Lexer::T_EQUALS);
-
- return array($key, $this->PlainValue());
- }
-
- return array(null, $this->Value());
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/Common/Annotations/README.markdown b/lib/Doctrine/Common/Annotations/README.markdown
deleted file mode 100644
index e69de29bb..000000000
diff --git a/lib/Doctrine/Common/Cache/AbstractCache.php b/lib/Doctrine/Common/Cache/AbstractCache.php
deleted file mode 100644
index fa9e0a505..000000000
--- a/lib/Doctrine/Common/Cache/AbstractCache.php
+++ /dev/null
@@ -1,214 +0,0 @@
-.
- */
-
-namespace Doctrine\Common\Cache;
-
-/**
- * Base class for cache driver implementations.
- *
- * @since 2.0
- * @author Guilherme Blanco
- * @author Jonathan Wage
- * @author Roman Borschel
- */
-abstract class AbstractCache implements Cache
-{
- /** @var string The cache id to store the index of cache ids under */
- private $_cacheIdsIndexId = 'doctrine_cache_ids';
-
- /** @var string The namespace to prefix all cache ids with */
- private $_namespace = null;
-
- /**
- * Set the namespace to prefix all cache ids with.
- *
- * @param string $namespace
- * @return void
- */
- public function setNamespace($namespace)
- {
- $this->_namespace = $namespace;
- }
-
- /**
- * {@inheritdoc}
- */
- public function fetch($id)
- {
- return $this->_doFetch($this->_getNamespacedId($id));
- }
-
- /**
- * {@inheritdoc}
- */
- public function contains($id)
- {
- return $this->_doContains($this->_getNamespacedId($id));
- }
-
- /**
- * {@inheritdoc}
- */
- public function save($id, $data, $lifeTime = 0)
- {
- $id = $this->_getNamespacedId($id);
- return $this->_doSave($id, $data, $lifeTime);
- }
-
- /**
- * {@inheritdoc}
- */
- public function delete($id)
- {
- $id = $this->_getNamespacedId($id);
-
- if (strpos($id, '*') !== false) {
- return $this->deleteByRegex('/' . str_replace('*', '.*', $id) . '/');
- }
-
- return $this->_doDelete($id);
- }
-
- /**
- * Delete all cache entries.
- *
- * @return array $deleted Array of the deleted cache ids
- */
- public function deleteAll()
- {
- $ids = $this->getIds();
- foreach ($ids as $id) {
- $this->delete($id);
- }
- return $ids;
- }
-
- /**
- * Delete cache entries where the id matches a PHP regular expressions
- *
- * @param string $regex
- * @return array $deleted Array of the deleted cache ids
- */
- public function deleteByRegex($regex)
- {
- $deleted = array();
- $ids = $this->getIds();
- foreach ($ids as $id) {
- if (preg_match($regex, $id)) {
- $this->delete($id);
- $deleted[] = $id;
- }
- }
- return $deleted;
- }
-
- /**
- * Delete cache entries where the id has the passed prefix
- *
- * @param string $prefix
- * @return array $deleted Array of the deleted cache ids
- */
- public function deleteByPrefix($prefix)
- {
- $deleted = array();
- $ids = $this->getIds();
- foreach ($ids as $id) {
- if (strpos($id, $prefix) === 0) {
- $this->delete($id);
- $deleted[] = $id;
- }
- }
- return $deleted;
- }
-
- /**
- * Delete cache entries where the id has the passed suffix
- *
- * @param string $suffix
- * @return array $deleted Array of the deleted cache ids
- */
- public function deleteBySuffix($suffix)
- {
- $deleted = array();
- $ids = $this->getIds();
- foreach ($ids as $id) {
- if (substr($id, -1 * strlen($suffix)) === $suffix) {
- $this->delete($id);
- $deleted[] = $id;
- }
- }
- return $deleted;
- }
-
- /**
- * Prefix the passed id with the configured namespace value
- *
- * @param string $id The id to namespace
- * @return string $id The namespaced id
- */
- private function _getNamespacedId($id)
- {
- if ( ! $this->_namespace || strpos($id, $this->_namespace) === 0) {
- return $id;
- } else {
- return $this->_namespace . $id;
- }
- }
-
- /**
- * Fetches an entry from the cache.
- *
- * @param string $id cache id The id of the cache entry to fetch.
- * @return string The cached data or FALSE, if no cache entry exists for the given id.
- */
- abstract protected function _doFetch($id);
-
- /**
- * Test if an entry exists in the cache.
- *
- * @param string $id cache id The cache id of the entry to check for.
- * @return boolean TRUE if a cache entry exists for the given cache id, FALSE otherwise.
- */
- abstract protected function _doContains($id);
-
- /**
- * Puts data into the cache.
- *
- * @param string $id The cache id.
- * @param string $data The cache entry/data.
- * @param int $lifeTime The lifetime. If != false, sets a specific lifetime for this cache entry (null => infinite lifeTime).
- * @return boolean TRUE if the entry was successfully stored in the cache, FALSE otherwise.
- */
- abstract protected function _doSave($id, $data, $lifeTime = false);
-
- /**
- * Deletes a cache entry.
- *
- * @param string $id cache id
- * @return boolean TRUE if the cache entry was successfully deleted, FALSE otherwise.
- */
- abstract protected function _doDelete($id);
-
- /**
- * Get an array of all the cache ids stored
- *
- * @return array $ids
- */
- abstract public function getIds();
-}
\ No newline at end of file
diff --git a/lib/Doctrine/Common/Cache/ApcCache.php b/lib/Doctrine/Common/Cache/ApcCache.php
deleted file mode 100644
index cf277a4fe..000000000
--- a/lib/Doctrine/Common/Cache/ApcCache.php
+++ /dev/null
@@ -1,87 +0,0 @@
-.
- */
-
-namespace Doctrine\Common\Cache;
-
-/**
- * APC cache driver.
- *
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @link www.doctrine-project.org
- * @since 2.0
- * @version $Revision$
- * @author Benjamin Eberlei
- * @author Guilherme Blanco
- * @author Jonathan Wage
- * @author Roman Borschel
- * @author David Abdemoulaie
- * @todo Rename: APCCache
- */
-class ApcCache extends AbstractCache
-{
- /**
- * {@inheritdoc}
- */
- public function getIds()
- {
- $ci = apc_cache_info('user');
- $keys = array();
-
- foreach ($ci['cache_list'] as $entry) {
- $keys[] = $entry['info'];
- }
- return $keys;
- }
-
- /**
- * {@inheritdoc}
- */
- protected function _doFetch($id)
- {
- return apc_fetch($id);
- }
-
- /**
- * {@inheritdoc}
- */
- protected function _doContains($id)
- {
- $found = false;
- apc_fetch($id, $found);
- return $found;
- }
-
- /**
- * {@inheritdoc}
- */
- protected function _doSave($id, $data, $lifeTime = 0)
- {
- return (bool) apc_store($id, $data, (int) $lifeTime);
- }
-
- /**
- * {@inheritdoc}
- */
- protected function _doDelete($id)
- {
- return apc_delete($id);
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/Common/Cache/ArrayCache.php b/lib/Doctrine/Common/Cache/ArrayCache.php
deleted file mode 100644
index d3285f7d1..000000000
--- a/lib/Doctrine/Common/Cache/ArrayCache.php
+++ /dev/null
@@ -1,88 +0,0 @@
-.
- */
-
-namespace Doctrine\Common\Cache;
-
-/**
- * Array cache driver.
- *
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @link www.doctrine-project.org
- * @since 2.0
- * @version $Revision: 3938 $
- * @author Benjamin Eberlei
- * @author Guilherme Blanco
- * @author Jonathan Wage
- * @author Roman Borschel
- * @author David Abdemoulaie
- */
-class ArrayCache extends AbstractCache
-{
- /**
- * @var array $data
- */
- private $data = array();
-
- /**
- * {@inheritdoc}
- */
- public function getIds()
- {
- return array_keys($this->data);
- }
-
- /**
- * {@inheritdoc}
- */
- protected function _doFetch($id)
- {
- if (isset($this->data[$id])) {
- return $this->data[$id];
- }
- return false;
- }
-
- /**
- * {@inheritdoc}
- */
- protected function _doContains($id)
- {
- return isset($this->data[$id]);
- }
-
- /**
- * {@inheritdoc}
- */
- protected function _doSave($id, $data, $lifeTime = 0)
- {
- $this->data[$id] = $data;
- return true;
- }
-
- /**
- * {@inheritdoc}
- */
- protected function _doDelete($id)
- {
- unset($this->data[$id]);
- return true;
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/Common/Cache/Cache.php b/lib/Doctrine/Common/Cache/Cache.php
deleted file mode 100644
index e4cb1c074..000000000
--- a/lib/Doctrine/Common/Cache/Cache.php
+++ /dev/null
@@ -1,71 +0,0 @@
-.
- */
-
-namespace Doctrine\Common\Cache;
-
-/**
- * Interface for cache drivers.
- *
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @link www.doctrine-project.org
- * @since 2.0
- * @version $Revision: 3938 $
- * @author Benjamin Eberlei
- * @author Guilherme Blanco
- * @author Jonathan Wage
- * @author Roman Borschel
- */
-interface Cache
-{
- /**
- * Fetches an entry from the cache.
- *
- * @param string $id cache id The id of the cache entry to fetch.
- * @return string The cached data or FALSE, if no cache entry exists for the given id.
- */
- function fetch($id);
-
- /**
- * Test if an entry exists in the cache.
- *
- * @param string $id cache id The cache id of the entry to check for.
- * @return boolean TRUE if a cache entry exists for the given cache id, FALSE otherwise.
- */
- function contains($id);
-
- /**
- * Puts data into the cache.
- *
- * @param string $id The cache id.
- * @param string $data The cache entry/data.
- * @param int $lifeTime The lifetime. If != 0, sets a specific lifetime for this cache entry (0 => infinite lifeTime).
- * @return boolean TRUE if the entry was successfully stored in the cache, FALSE otherwise.
- */
- function save($id, $data, $lifeTime = 0);
-
- /**
- * Deletes a cache entry.
- *
- * @param string $id cache id
- * @return boolean TRUE if the cache entry was successfully deleted, FALSE otherwise.
- */
- function delete($id);
-}
\ No newline at end of file
diff --git a/lib/Doctrine/Common/Cache/MemcacheCache.php b/lib/Doctrine/Common/Cache/MemcacheCache.php
deleted file mode 100644
index a76bd170e..000000000
--- a/lib/Doctrine/Common/Cache/MemcacheCache.php
+++ /dev/null
@@ -1,123 +0,0 @@
-.
- */
-
-namespace Doctrine\Common\Cache;
-
-use \Memcache;
-
-/**
- * Memcache cache driver.
- *
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @link www.doctrine-project.org
- * @since 2.0
- * @version $Revision: 3938 $
- * @author Benjamin Eberlei
- * @author Guilherme Blanco
- * @author Jonathan Wage
- * @author Roman Borschel
- * @author David Abdemoulaie
- */
-class MemcacheCache extends AbstractCache
-{
- /**
- * @var Memcache
- */
- private $_memcache;
-
- /**
- * Sets the memcache instance to use.
- *
- * @param Memcache $memcache
- */
- public function setMemcache(Memcache $memcache)
- {
- $this->_memcache = $memcache;
- }
-
- /**
- * Gets the memcache instance used by the cache.
- *
- * @return Memcache
- */
- public function getMemcache()
- {
- return $this->_memcache;
- }
-
- /**
- * {@inheritdoc}
- */
- public function getIds()
- {
- $keys = array();
- $allSlabs = $this->_memcache->getExtendedStats('slabs');
-
- foreach ($allSlabs as $server => $slabs) {
- if (is_array($slabs)) {
- foreach (array_keys($slabs) as $slabId) {
- $dump = $this->_memcache->getExtendedStats('cachedump', (int) $slabId);
-
- if ($dump) {
- foreach ($dump as $entries) {
- if ($entries) {
- $keys = array_merge($keys, array_keys($entries));
- }
- }
- }
- }
- }
- }
- return $keys;
- }
-
- /**
- * {@inheritdoc}
- */
- protected function _doFetch($id)
- {
- return $this->_memcache->get($id);
- }
-
- /**
- * {@inheritdoc}
- */
- protected function _doContains($id)
- {
- return (bool) $this->_memcache->get($id);
- }
-
- /**
- * {@inheritdoc}
- */
- protected function _doSave($id, $data, $lifeTime = 0)
- {
- return $this->_memcache->set($id, $data, 0, (int) $lifeTime);
- }
-
- /**
- * {@inheritdoc}
- */
- protected function _doDelete($id)
- {
- return $this->_memcache->delete($id);
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/Common/Cache/XcacheCache.php b/lib/Doctrine/Common/Cache/XcacheCache.php
deleted file mode 100644
index fadf2c322..000000000
--- a/lib/Doctrine/Common/Cache/XcacheCache.php
+++ /dev/null
@@ -1,102 +0,0 @@
-.
- */
-
-namespace Doctrine\Common\Cache;
-
-/**
- * Xcache cache driver.
- *
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @link www.doctrine-project.org
- * @since 2.0
- * @version $Revision: 3938 $
- * @author Benjamin Eberlei
- * @author Guilherme Blanco
- * @author Jonathan Wage
- * @author Roman Borschel
- * @author David Abdemoulaie
- */
-class XcacheCache extends AbstractCache
-{
- /**
- * {@inheritdoc}
- */
- public function getIds()
- {
- $this->_checkAuth();
- $keys = array();
- for ($i = 0, $count = xcache_count(XC_TYPE_VAR); $i < $count; $i++) {
- $entries = xcache_list(XC_TYPE_VAR, $i);
- if (is_array($entries['cache_list'])) {
- foreach ($entries['cache_list'] as $entry) {
- $keys[] = $entry['name'];
- }
- }
- }
- return $keys;
- }
-
- /**
- * {@inheritdoc}
- */
- protected function _doFetch($id)
- {
- return $this->_doContains($id) ? unserialize( xcache_get($id) ) : false;
- }
-
- /**
- * {@inheritdoc}
- */
- protected function _doContains($id)
- {
- return xcache_isset($id);
- }
-
- /**
- * {@inheritdoc}
- */
- protected function _doSave($id, $data, $lifeTime = 0)
- {
- return xcache_set($id, serialize($data), (int) $lifeTime);
- }
-
- /**
- * {@inheritdoc}
- */
- protected function _doDelete($id)
- {
- return xcache_unset($id);
- }
-
-
- /**
- * Checks that xcache.admin.enable_auth is Off
- *
- * @throws \BadMethodCallException When xcache.admin.enable_auth is On
- * @return void
- */
- protected function _checkAuth()
- {
- if (ini_get('xcache.admin.enable_auth')) {
- throw new \BadMethodCallException('To use all features of \Doctrine\Common\Cache\XcacheCache, you must set "xcache.admin.enable_auth" to "Off" in your php.ini.');
- }
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/Common/ClassLoader.php b/lib/Doctrine/Common/ClassLoader.php
deleted file mode 100644
index d971fe9a6..000000000
--- a/lib/Doctrine/Common/ClassLoader.php
+++ /dev/null
@@ -1,147 +0,0 @@
-.
- */
-
-namespace Doctrine\Common;
-
-/**
- * A ClassLoader is an autoloader for class files that can be
- * installed on the SPL autoload stack. It is a class loader that loads only classes
- * of a specific namespace or all namespaces and is suitable for working together
- * with other autoloaders in the SPL autoload stack.
- *
- * If no include path is configured through {@link setIncludePath}, a ClassLoader
- * relies on the PHP include_path.
- *
- * @author Roman Borschel
- * @since 2.0
- */
-class ClassLoader
-{
- private $_fileExtension = '.php';
- private $_namespace;
- private $_includePath;
- private $_namespaceSeparator = '\\';
-
- /**
- * Creates a new ClassLoader that loads classes of the
- * specified namespace.
- *
- * @param string $ns The namespace to use.
- */
- public function __construct($ns = null, $includePath = null)
- {
- $this->_namespace = $ns;
- $this->_includePath = $includePath;
- }
-
- /**
- * Sets the namespace separator used by classes in the namespace of this class loader.
- *
- * @param string $sep The separator to use.
- */
- public function setNamespaceSeparator($sep)
- {
- $this->_namespaceSeparator = $sep;
- }
-
- /**
- * Gets the namespace separator used by classes in the namespace of this class loader.
- *
- * @return string
- */
- public function getNamespaceSeparator()
- {
- return $this->_namespaceSeparator;
- }
-
- /**
- * Sets the base include path for all class files in the namespace of this class loader.
- *
- * @param string $includePath
- */
- public function setIncludePath($includePath)
- {
- $this->_includePath = $includePath;
- }
-
- /**
- * Gets the base include path for all class files in the namespace of this class loader.
- *
- * @return string
- */
- public function getIncludePath()
- {
- return $this->_includePath;
- }
-
- /**
- * Sets the file extension of class files in the namespace of this class loader.
- *
- * @param string $fileExtension
- */
- public function setFileExtension($fileExtension)
- {
- $this->_fileExtension = $fileExtension;
- }
-
- /**
- * Gets the file extension of class files in the namespace of this class loader.
- *
- * @return string
- */
- public function getFileExtension()
- {
- return $this->_fileExtension;
- }
-
- /**
- * Installs this class loader on the SPL autoload stack.
- */
- public function register()
- {
- spl_autoload_register(array($this, 'loadClass'));
- }
-
- /**
- * Uninstalls this class loader on the SPL autoload stack.
- */
- public function unregister()
- {
- spl_autoload_unregister(array($this, 'loadClass'));
- }
-
- /**
- * Loads the given class or interface.
- *
- * @param string $classname The name of the class to load.
- * @return boolean TRUE if the class has been successfully loaded, FALSE otherwise.
- */
- public function loadClass($className)
- {
- if ($this->_namespace !== null && strpos($className, $this->_namespace.$this->_namespaceSeparator) !== 0) {
- return false;
- }
-
- require ($this->_includePath !== null ? $this->_includePath . DIRECTORY_SEPARATOR : '')
- . str_replace($this->_namespaceSeparator, DIRECTORY_SEPARATOR, $className)
- . $this->_fileExtension;
-
- return true;
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/Common/Collections/ArrayCollection.php b/lib/Doctrine/Common/Collections/ArrayCollection.php
deleted file mode 100644
index 2db0714ca..000000000
--- a/lib/Doctrine/Common/Collections/ArrayCollection.php
+++ /dev/null
@@ -1,423 +0,0 @@
-.
- */
-
-namespace Doctrine\Common\Collections;
-
-use Closure, ArrayIterator;
-
-/**
- * An ArrayCollection is a Collection implementation that wraps a regular PHP array.
- *
- * @since 2.0
- * @author Guilherme Blanco
- * @author Jonathan Wage
- * @author Roman Borschel
- */
-class ArrayCollection implements Collection
-{
- /**
- * An array containing the entries of this collection.
- *
- * @var array
- */
- private $_elements;
-
- /**
- * Initializes a new ArrayCollection.
- *
- * @param array $elements
- */
- public function __construct(array $elements = array())
- {
- $this->_elements = $elements;
- }
-
- /**
- * Gets the PHP array representation of this collection.
- *
- * @return array The PHP array representation of this collection.
- */
- public function toArray()
- {
- return $this->_elements;
- }
-
- /**
- * Sets the internal iterator to the first element in the collection and
- * returns this element.
- *
- * @return mixed
- */
- public function first()
- {
- return reset($this->_elements);
- }
-
- /**
- * Sets the internal iterator to the last element in the collection and
- * returns this element.
- *
- * @return mixed
- */
- public function last()
- {
- return end($this->_elements);
- }
-
- /**
- * Gets the current key/index at the current internal iterator position.
- *
- * @return mixed
- */
- public function key()
- {
- return key($this->_elements);
- }
-
- /**
- * Moves the internal iterator position to the next element.
- *
- * @return mixed
- */
- public function next()
- {
- next($this->_elements);
- }
-
- /**
- * Gets the element of the collection at the current internal iterator position.
- *
- * @return mixed
- */
- public function current()
- {
- return current($this->_elements);
- }
-
- /**
- * Removes an element with a specific key/index from the collection.
- *
- * @param mixed $key
- * @return mixed The removed element or NULL, if no element exists for the given key.
- */
- public function remove($key)
- {
- if (isset($this->_elements[$key])) {
- $removed = $this->_elements[$key];
- unset($this->_elements[$key]);
-
- return $removed;
- }
-
- return null;
- }
-
- /**
- * Removes the specified element from the collection, if it is found.
- *
- * @param mixed $element
- * @return boolean
- */
- public function removeElement($element)
- {
- $key = array_search($element, $this->_elements, true);
-
- if ($key !== false) {
- $removed = $this->_elements[$key];
- unset($this->_elements[$key]);
-
- return $removed;
- }
-
- return null;
- }
-
- /**
- * ArrayAccess implementation of offsetExists()
- *
- * @see containsKey()
- */
- public function offsetExists($offset)
- {
- return $this->containsKey($offset);
- }
-
- /**
- * ArrayAccess implementation of offsetGet()
- *
- * @see get()
- */
- public function offsetGet($offset)
- {
- return $this->get($offset);
- }
-
- /**
- * ArrayAccess implementation of offsetGet()
- *
- * @see add()
- * @see set()
- */
- public function offsetSet($offset, $value)
- {
- if ( ! isset($offset)) {
- return $this->add($value);
- }
- return $this->set($offset, $value);
- }
-
- /**
- * ArrayAccess implementation of offsetUnset()
- *
- * @see remove()
- */
- public function offsetUnset($offset)
- {
- return $this->remove($offset);
- }
-
- /**
- * Checks whether the collection contains a specific key/index.
- *
- * @param mixed $key The key to check for.
- * @return boolean TRUE if the given key/index exists, FALSE otherwise.
- */
- public function containsKey($key)
- {
- return isset($this->_elements[$key]);
- }
-
- /**
- * Checks whether the given element is contained in the collection.
- * Only element values are compared, not keys. The comparison of two elements
- * is strict, that means not only the value but also the type must match.
- * For objects this means reference equality.
- *
- * @param mixed $element
- * @return boolean TRUE if the given element is contained in the collection,
- * FALSE otherwise.
- */
- public function contains($element)
- {
- return in_array($element, $this->_elements, true);
- }
-
- /**
- * Tests for the existance of an element that satisfies the given predicate.
- *
- * @param Closure $p The predicate.
- * @return boolean TRUE if the predicate is TRUE for at least one element, FALSE otherwise.
- */
- public function exists(Closure $p)
- {
- foreach ($this->_elements as $key => $element)
- if ($p($key, $element)) return true;
- return false;
- }
-
- /**
- * Searches for a given element and, if found, returns the corresponding key/index
- * of that element. The comparison of two elements is strict, that means not
- * only the value but also the type must match.
- * For objects this means reference equality.
- *
- * @param mixed $element The element to search for.
- * @return mixed The key/index of the element or FALSE if the element was not found.
- */
- public function indexOf($element)
- {
- return array_search($element, $this->_elements, true);
- }
-
- /**
- * Gets the element with the given key/index.
- *
- * @param mixed $key The key.
- * @return mixed The element or NULL, if no element exists for the given key.
- */
- public function get($key)
- {
- if (isset($this->_elements[$key])) {
- return $this->_elements[$key];
- }
- return null;
- }
-
- /**
- * Gets all keys/indexes of the collection elements.
- *
- * @return array
- */
- public function getKeys()
- {
- return array_keys($this->_elements);
- }
-
- /**
- * Gets all elements.
- *
- * @return array
- */
- public function getValues()
- {
- return array_values($this->_elements);
- }
-
- /**
- * Returns the number of elements in the collection.
- *
- * Implementation of the Countable interface.
- *
- * @return integer The number of elements in the collection.
- */
- public function count()
- {
- return count($this->_elements);
- }
-
- /**
- * Adds/sets an element in the collection at the index / with the specified key.
- *
- * When the collection is a Map this is like put(key,value)/add(key,value).
- * When the collection is a List this is like add(position,value).
- *
- * @param mixed $key
- * @param mixed $value
- */
- public function set($key, $value)
- {
- $this->_elements[$key] = $value;
- }
-
- /**
- * Adds an element to the collection.
- *
- * @param mixed $value
- * @return boolean Always TRUE.
- */
- public function add($value)
- {
- $this->_elements[] = $value;
- return true;
- }
-
- /**
- * Checks whether the collection is empty.
- *
- * Note: This is preferrable over count() == 0.
- *
- * @return boolean TRUE if the collection is empty, FALSE otherwise.
- */
- public function isEmpty()
- {
- return ! $this->_elements;
- }
-
- /**
- * Gets an iterator for iterating over the elements in the collection.
- *
- * @return ArrayIterator
- */
- public function getIterator()
- {
- return new ArrayIterator($this->_elements);
- }
-
- /**
- * Applies the given function to each element in the collection and returns
- * a new collection with the elements returned by the function.
- *
- * @param Closure $func
- * @return Collection
- */
- public function map(Closure $func)
- {
- return new ArrayCollection(array_map($func, $this->_elements));
- }
-
- /**
- * Returns all the elements of this collection that satisfy the predicate p.
- * The order of the elements is preserved.
- *
- * @param Closure $p The predicate used for filtering.
- * @return Collection A collection with the results of the filter operation.
- */
- public function filter(Closure $p)
- {
- return new ArrayCollection(array_filter($this->_elements, $p));
- }
-
- /**
- * Applies the given predicate p to all elements of this collection,
- * returning true, if the predicate yields true for all elements.
- *
- * @param Closure $p The predicate.
- * @return boolean TRUE, if the predicate yields TRUE for all elements, FALSE otherwise.
- */
- public function forAll(Closure $p)
- {
- foreach ($this->_elements as $key => $element) {
- if ( ! $p($key, $element)) {
- return false;
- }
- }
-
- return true;
- }
-
- /**
- * Partitions this collection in two collections according to a predicate.
- * Keys are preserved in the resulting collections.
- *
- * @param Closure $p The predicate on which to partition.
- * @return array An array with two elements. The first element contains the collection
- * of elements where the predicate returned TRUE, the second element
- * contains the collection of elements where the predicate returned FALSE.
- */
- public function partition(Closure $p)
- {
- $coll1 = $coll2 = array();
- foreach ($this->_elements as $key => $element) {
- if ($p($key, $element)) {
- $coll1[$key] = $element;
- } else {
- $coll2[$key] = $element;
- }
- }
- return array(new ArrayCollection($coll1), new ArrayCollection($coll2));
- }
-
- /**
- * Returns a string representation of this object.
- *
- * @return string
- */
- public function __toString()
- {
- return __CLASS__ . '@' . spl_object_hash($this);
- }
-
- /**
- * Clears the collection.
- */
- public function clear()
- {
- $this->_elements = array();
- }
-}
diff --git a/lib/Doctrine/Common/Collections/Collection.php b/lib/Doctrine/Common/Collections/Collection.php
deleted file mode 100644
index 41af440b5..000000000
--- a/lib/Doctrine/Common/Collections/Collection.php
+++ /dev/null
@@ -1,230 +0,0 @@
-.
- */
-
-namespace Doctrine\Common\Collections;
-
-use Closure, Countable, IteratorAggregate, ArrayAccess;
-
-/**
- * The missing (SPL) Collection/Array/OrderedMap interface.
- *
- * A Collection resembles the nature of a regular PHP array. That is,
- * it is essentially an ordered map that can also be used
- * like a list.
- *
- * A Collection has an internal iterator just like a PHP array. In addition,
- * a Collection can be iterated with external iterators, which is preferrable.
- * To use an external iterator simply use the foreach language construct to
- * iterate over the collection (which calls {@link getIterator()} internally) or
- * explicitly retrieve an iterator though {@link getIterator()} which can then be
- * used to iterate over the collection.
- * You can not rely on the internal iterator of the collection being at a certain
- * position unless you explicitly positioned it before. Prefer iteration with
- * external iterators.
- *
- * @since 2.0
- * @author Guilherme Blanco
- * @author Jonathan Wage
- * @author Roman Borschel
- */
-interface Collection extends Countable, IteratorAggregate, ArrayAccess
-{
- /**
- * Adds an element at the end of the collection.
- *
- * @param mixed $element The element to add.
- * @return boolean Always TRUE.
- */
- function add($element);
-
- /**
- * Clears the collection, removing all elements.
- */
- function clear();
-
- /**
- * Checks whether an element is contained in the collection.
- * This is an O(n) operation, where n is the size of the collection.
- *
- * @param mixed $element The element to search for.
- * @return boolean TRUE if the collection contains the element, FALSE otherwise.
- */
- function contains($element);
-
- /**
- * Checks whether the collection is empty (contains no elements).
- *
- * @return boolean TRUE if the collection is empty, FALSE otherwise.
- */
- function isEmpty();
-
- /**
- * Removes the element at the specified index from the collection.
- *
- * @param string|integer $key The kex/index of the element to remove.
- * @return mixed The removed element or NULL, if the collection did not contain the element.
- */
- function remove($key);
-
- /**
- * Removes an element from the collection.
- *
- * @param mixed $element The element to remove.
- * @return mixed The removed element or NULL, if the collection did not contain the element.
- */
- function removeElement($element);
-
- /**
- * Checks whether the collection contains an element with the specified key/index.
- *
- * @param string|integer $key The key/index to check for.
- * @return boolean TRUE if the collection contains an element with the specified key/index,
- * FALSE otherwise.
- */
- function containsKey($key);
-
- /**
- * Gets the element at the specified key/index.
- *
- * @param string|integer $key The key/index of the element to retrieve.
- * @return mixed
- */
- function get($key);
-
- /**
- * Gets all keys/indices of the collection.
- *
- * @return array The keys/indices of the collection, in the order of the corresponding
- * elements in the collection.
- */
- function getKeys();
-
- /**
- * Gets all values of the collection.
- *
- * @return array The values of all elements in the collection, in the order they
- * appear in the collection.
- */
- function getValues();
-
- /**
- * Sets an element in the collection at the specified key/index.
- *
- * @param string|integer $key The key/index of the element to set.
- * @param mixed $value The element to set.
- */
- function set($key, $value);
-
- /**
- * Gets a native PHP array representation of the collection.
- *
- * @return array
- */
- function toArray();
-
- /**
- * Sets the internal iterator to the first element in the collection and
- * returns this element.
- *
- * @return mixed
- */
- function first();
-
- /**
- * Sets the internal iterator to the last element in the collection and
- * returns this element.
- *
- * @return mixed
- */
- function last();
-
- /**
- * Gets the key/index of the element at the current iterator position.
- *
- */
- function key();
-
- /**
- * Gets the element of the collection at the current iterator position.
- *
- */
- function current();
-
- /**
- * Moves the internal iterator position to the next element.
- *
- */
- function next();
-
- /**
- * Tests for the existence of an element that satisfies the given predicate.
- *
- * @param Closure $p The predicate.
- * @return boolean TRUE if the predicate is TRUE for at least one element, FALSE otherwise.
- */
- function exists(Closure $p);
-
- /**
- * Returns all the elements of this collection that satisfy the predicate p.
- * The order of the elements is preserved.
- *
- * @param Closure $p The predicate used for filtering.
- * @return Collection A collection with the results of the filter operation.
- */
- function filter(Closure $p);
-
- /**
- * Applies the given predicate p to all elements of this collection,
- * returning true, if the predicate yields true for all elements.
- *
- * @param Closure $p The predicate.
- * @return boolean TRUE, if the predicate yields TRUE for all elements, FALSE otherwise.
- */
- function forAll(Closure $p);
-
- /**
- * Applies the given function to each element in the collection and returns
- * a new collection with the elements returned by the function.
- *
- * @param Closure $func
- * @return Collection
- */
- function map(Closure $func);
-
- /**
- * Partitions this collection in two collections according to a predicate.
- * Keys are preserved in the resulting collections.
- *
- * @param Closure $p The predicate on which to partition.
- * @return array An array with two elements. The first element contains the collection
- * of elements where the predicate returned TRUE, the second element
- * contains the collection of elements where the predicate returned FALSE.
- */
- function partition(Closure $p);
-
- /**
- * Gets the index/key of a given element. The comparison of two elements is strict,
- * that means not only the value but also the type must match.
- * For objects this means reference equality.
- *
- * @param mixed $element The element to search for.
- * @return mixed The key/index of the element or FALSE if the element was not found.
- */
- function indexOf($element);
-}
\ No newline at end of file
diff --git a/lib/Doctrine/Common/CommonException.php b/lib/Doctrine/Common/CommonException.php
deleted file mode 100644
index f3e2bcef6..000000000
--- a/lib/Doctrine/Common/CommonException.php
+++ /dev/null
@@ -1,11 +0,0 @@
-.
- */
-
-namespace Doctrine\Common;
-
-/**
- * EventArgs is the base class for classes containing event data.
- *
- * This class contains no event data. It is used by events that do not pass state
- * information to an event handler when an event is raised. The single empty EventArgs
- * instance can be obtained through {@link getEmptyInstance}.
- *
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @link www.doctrine-project.org
- * @since 2.0
- * @version $Revision: 3938 $
- * @author Guilherme Blanco
- * @author Jonathan Wage
- * @author Roman Borschel
- */
-class EventArgs
-{
- /**
- * @var EventArgs Single instance of EventArgs
- * @static
- */
- private static $_emptyEventArgsInstance;
-
- /**
- * Gets the single, empty and immutable EventArgs instance.
- *
- * This instance will be used when events are dispatched without any parameter,
- * like this: EventManager::dispatchEvent('eventname');
- *
- * The benefit from this is that only one empty instance is instantiated and shared
- * (otherwise there would be instances for every dispatched in the abovementioned form)
- *
- * @see EventManager::dispatchEvent
- * @link http://msdn.microsoft.com/en-us/library/system.eventargs.aspx
- * @static
- * @return EventArgs
- */
- public static function getEmptyInstance()
- {
- if ( ! self::$_emptyEventArgsInstance) {
- self::$_emptyEventArgsInstance = new EventArgs;
- }
-
- return self::$_emptyEventArgsInstance;
- }
-}
diff --git a/lib/Doctrine/Common/EventManager.php b/lib/Doctrine/Common/EventManager.php
deleted file mode 100644
index fa98cf2d1..000000000
--- a/lib/Doctrine/Common/EventManager.php
+++ /dev/null
@@ -1,138 +0,0 @@
-.
- */
-
-namespace Doctrine\Common;
-
-use Doctrine\Common\Events\Event;
-
-/**
- * The EventManager is the central point of Doctrine's event listener system.
- * Listeners are registered on the manager and events are dispatched through the
- * manager.
- *
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @link www.doctrine-project.org
- * @since 2.0
- * @version $Revision: 3938 $
- * @author Guilherme Blanco
- * @author Jonathan Wage
- * @author Roman Borschel
- */
-class EventManager
-{
- /**
- * Map of registered listeners.
- * =>
- *
- * @var array
- */
- private $_listeners = array();
-
- /**
- * Dispatches an event to all registered listeners.
- *
- * @param string $eventName The name of the event to dispatch. The name of the event is
- * the name of the method that is invoked on listeners.
- * @param EventArgs $eventArgs The event arguments to pass to the event handlers/listeners.
- * If not supplied, the single empty EventArgs instance is used.
- * @return boolean
- */
- public function dispatchEvent($eventName, EventArgs $eventArgs = null)
- {
- if (isset($this->_listeners[$eventName])) {
- $eventArgs = $eventArgs === null ? EventArgs::getEmptyInstance() : $eventArgs;
-
- foreach ($this->_listeners[$eventName] as $listener) {
- $listener->$eventName($eventArgs);
- }
- }
- }
-
- /**
- * Gets the listeners of a specific event or all listeners.
- *
- * @param string $event The name of the event.
- * @return array The event listeners for the specified event, or all event listeners.
- */
- public function getListeners($event = null)
- {
- return $event ? $this->_listeners[$event] : $this->_listeners;
- }
-
- /**
- * Checks whether an event has any registered listeners.
- *
- * @param string $event
- * @return boolean TRUE if the specified event has any listeners, FALSE otherwise.
- */
- public function hasListeners($event)
- {
- return isset($this->_listeners[$event]) && $this->_listeners[$event];
- }
-
- /**
- * Adds an event listener that listens on the specified events.
- *
- * @param string|array $events The event(s) to listen on.
- * @param object $listener The listener object.
- */
- public function addEventListener($events, $listener)
- {
- // Picks the hash code related to that listener
- $hash = spl_object_hash($listener);
-
- foreach ((array) $events as $event) {
- // Overrides listener if a previous one was associated already
- // Prevents duplicate listeners on same event (same instance only)
- $this->_listeners[$event][$hash] = $listener;
- }
- }
-
- /**
- * Removes an event listener from the specified events.
- *
- * @param string|array $events
- * @param object $listener
- */
- public function removeEventListener($events, $listener)
- {
- // Picks the hash code related to that listener
- $hash = spl_object_hash($listener);
-
- foreach ((array) $events as $event) {
- // Check if actually have this listener associated
- if (isset($this->_listeners[$event][$hash])) {
- unset($this->_listeners[$event][$hash]);
- }
- }
- }
-
- /**
- * Adds an EventSubscriber. The subscriber is asked for all the events he is
- * interested in and added as a listener for these events.
- *
- * @param Doctrine\Common\EventSubscriber $subscriber The subscriber.
- */
- public function addEventSubscriber(EventSubscriber $subscriber)
- {
- $this->addEventListener($subscriber->getSubscribedEvents(), $subscriber);
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/Common/EventSubscriber.php b/lib/Doctrine/Common/EventSubscriber.php
deleted file mode 100644
index 8e55973bd..000000000
--- a/lib/Doctrine/Common/EventSubscriber.php
+++ /dev/null
@@ -1,45 +0,0 @@
-.
- */
-
-namespace Doctrine\Common;
-
-/**
- * An EventSubscriber knows himself what events he is interested in.
- * If an EventSubscriber is added to an EventManager, the manager invokes
- * {@link getSubscribedEvents} and registers the subscriber as a listener for all
- * returned events.
- *
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @link www.doctrine-project.org
- * @since 2.0
- * @author Guilherme Blanco
- * @author Jonathan Wage
- * @author Roman Borschel
- */
-interface EventSubscriber
-{
- /**
- * Returns an array of events this subscriber wants to listen to.
- *
- * @return array
- */
- public function getSubscribedEvents();
-}
diff --git a/lib/Doctrine/Common/Lexer.php b/lib/Doctrine/Common/Lexer.php
deleted file mode 100644
index 3949e11aa..000000000
--- a/lib/Doctrine/Common/Lexer.php
+++ /dev/null
@@ -1,255 +0,0 @@
-.
- */
-
-namespace Doctrine\Common;
-
-/**
- * Base class for writing simple lexers, i.e. for creating small DSLs.
- *
- * @since 2.0
- * @author Guilherme Blanco
- * @author Jonathan Wage
- * @author Roman Borschel
- * @todo Rename: AbstractLexer
- */
-abstract class Lexer
-{
- /**
- * @var array Array of scanned tokens
- */
- private $_tokens = array();
-
- /**
- * @var integer Current lexer position in input string
- */
- private $_position = 0;
-
- /**
- * @var integer Current peek of current lexer position
- */
- private $_peek = 0;
-
- /**
- * @var array The next token in the input.
- */
- public $lookahead;
-
- /**
- * @var array The last matched/seen token.
- */
- public $token;
-
- /**
- * Sets the input data to be tokenized.
- *
- * The Lexer is immediately reset and the new input tokenized.
- * Any unprocessed tokens from any previous input are lost.
- *
- * @param string $input The input to be tokenized.
- */
- public function setInput($input)
- {
- $this->_tokens = array();
- $this->reset();
- $this->_scan($input);
- }
-
- /**
- * Resets the lexer.
- */
- public function reset()
- {
- $this->lookahead = null;
- $this->token = null;
- $this->_peek = 0;
- $this->_position = 0;
- }
-
- /**
- * Resets the peek pointer to 0.
- */
- public function resetPeek()
- {
- $this->_peek = 0;
- }
-
- /**
- * Resets the lexer position on the input to the given position.
- *
- * @param integer $position Position to place the lexical scanner
- */
- public function resetPosition($position = 0)
- {
- $this->_position = $position;
- }
-
- /**
- * Checks whether a given token matches the current lookahead.
- *
- * @param integer|string $token
- * @return boolean
- */
- public function isNextToken($token)
- {
- return $this->lookahead['type'] === $token;
- }
-
- /**
- * Moves to the next token in the input string.
- *
- * A token is an associative array containing three items:
- * - 'value' : the string value of the token in the input string
- * - 'type' : the type of the token (identifier, numeric, string, input
- * parameter, none)
- * - 'position' : the position of the token in the input string
- *
- * @return array|null the next token; null if there is no more tokens left
- */
- public function moveNext()
- {
- $this->_peek = 0;
- $this->token = $this->lookahead;
- $this->lookahead = (isset($this->_tokens[$this->_position]))
- ? $this->_tokens[$this->_position++] : null;
-
- return $this->lookahead !== null;
- }
-
- /**
- * Tells the lexer to skip input tokens until it sees a token with the given value.
- *
- * @param $type The token type to skip until.
- */
- public function skipUntil($type)
- {
- while ($this->lookahead !== null && $this->lookahead['type'] !== $type) {
- $this->moveNext();
- }
- }
-
- /**
- * Checks if given value is identical to the given token
- *
- * @param mixed $value
- * @param integer $token
- * @return boolean
- */
- public function isA($value, $token)
- {
- return $this->_getType($value) === $token;
- }
-
- /**
- * Moves the lookahead token forward.
- *
- * @return array | null The next token or NULL if there are no more tokens ahead.
- */
- public function peek()
- {
- if (isset($this->_tokens[$this->_position + $this->_peek])) {
- return $this->_tokens[$this->_position + $this->_peek++];
- } else {
- return null;
- }
- }
-
- /**
- * Peeks at the next token, returns it and immediately resets the peek.
- *
- * @return array|null The next token or NULL if there are no more tokens ahead.
- */
- public function glimpse()
- {
- $peek = $this->peek();
- $this->_peek = 0;
- return $peek;
- }
-
- /**
- * Scans the input string for tokens.
- *
- * @param string $input a query string
- */
- protected function _scan($input)
- {
- static $regex;
-
- if ( ! isset($regex)) {
- $regex = '/(' . implode(')|(', $this->getCatchablePatterns()) . ')|'
- . implode('|', $this->getNonCatchablePatterns()) . '/i';
- }
-
- $flags = PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_OFFSET_CAPTURE;
- $matches = preg_split($regex, $input, -1, $flags);
-
- foreach ($matches as $match) {
- // Must remain before 'value' assignment since it can change content
- $type = $this->_getType($match[0]);
-
- $this->_tokens[] = array(
- 'value' => $match[0],
- 'type' => $type,
- 'position' => $match[1],
- );
- }
- }
-
- /**
- * Gets the literal for a given token.
- *
- * @param integer $token
- * @return string
- */
- public function getLiteral($token)
- {
- $className = get_class($this);
- $reflClass = new \ReflectionClass($className);
- $constants = $reflClass->getConstants();
-
- foreach ($constants as $name => $value) {
- if ($value === $token) {
- return $className . '::' . $name;
- }
- }
-
- return $token;
- }
-
- /**
- * Lexical catchable patterns.
- *
- * @return array
- */
- abstract protected function getCatchablePatterns();
-
- /**
- * Lexical non-catchable patterns.
- *
- * @return array
- */
- abstract protected function getNonCatchablePatterns();
-
- /**
- * Retrieve token type. Also processes the token value if necessary.
- *
- * @param string $value
- * @return integer
- */
- abstract protected function _getType(&$value);
-}
\ No newline at end of file
diff --git a/lib/Doctrine/Common/NotifyPropertyChanged.php b/lib/Doctrine/Common/NotifyPropertyChanged.php
deleted file mode 100644
index 93e504aec..000000000
--- a/lib/Doctrine/Common/NotifyPropertyChanged.php
+++ /dev/null
@@ -1,45 +0,0 @@
-.
- */
-
-namespace Doctrine\Common;
-
-/**
- * Contract for classes that provide the service of notifying listeners of
- * changes to their properties.
- *
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @link www.doctrine-project.org
- * @since 2.0
- * @version $Revision: 3938 $
- * @author Guilherme Blanco
- * @author Jonathan Wage
- * @author Roman Borschel
- */
-interface NotifyPropertyChanged
-{
- /**
- * Adds a listener that wants to be notified about property changes.
- *
- * @param PropertyChangedListener $listener
- */
- function addPropertyChangedListener(PropertyChangedListener $listener);
-}
-
diff --git a/lib/Doctrine/Common/PropertyChangedListener.php b/lib/Doctrine/Common/PropertyChangedListener.php
deleted file mode 100644
index 87c5b413d..000000000
--- a/lib/Doctrine/Common/PropertyChangedListener.php
+++ /dev/null
@@ -1,48 +0,0 @@
-.
- */
-
-namespace Doctrine\Common;
-
-/**
- * Contract for classes that are potential listeners of a NotifyPropertyChanged
- * implementor.
- *
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @link www.doctrine-project.org
- * @since 2.0
- * @version $Revision: 3938 $
- * @author Guilherme Blanco
- * @author Jonathan Wage
- * @author Roman Borschel
- */
-interface PropertyChangedListener
-{
- /**
- * Notifies the listener of a property change.
- *
- * @param object $sender The object on which the property changed.
- * @param string $propertyName The name of the property that changed.
- * @param mixed $oldValue The old value of the property that changed.
- * @param mixed $newValue The new value of the property that changed.
- */
- function propertyChanged($sender, $propertyName, $oldValue, $newValue);
-}
-
diff --git a/lib/Doctrine/Common/Util/Debug.php b/lib/Doctrine/Common/Util/Debug.php
deleted file mode 100644
index 9f3df2b29..000000000
--- a/lib/Doctrine/Common/Util/Debug.php
+++ /dev/null
@@ -1,131 +0,0 @@
-.
- */
-
-namespace Doctrine\Common\Util;
-
-/**
- * Static class containing most used debug methods.
- *
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @link www.doctrine-project.org
- * @since 2.0
- * @version $Revision: 3938 $
- * @author Guilherme Blanco
- * @author Jonathan Wage
- * @author Roman Borschel
- * @author Giorgio Sironi
- */
-final class Debug
-{
- /**
- * Private constructor (prevents from instantiation)
- *
- */
- private function __construct() {}
-
- /**
- * Prints a dump of the public, protected and private properties of $var.
- *
- * @static
- * @link http://xdebug.org/
- * @param mixed $var
- * @param integer $maxDepth Maximum nesting level for object properties
- */
- public static function dump($var, $maxDepth = 2)
- {
- ini_set('html_errors', 'On');
-
- if (extension_loaded('xdebug')) {
- ini_set('xdebug.var_display_max_depth', $maxDepth);
- }
-
- $var = self::export($var, $maxDepth++);
-
- ob_start();
- var_dump($var);
- $dump = ob_get_contents();
- ob_end_clean();
-
- echo strip_tags(html_entity_decode($dump));
-
- ini_set('html_errors', 'Off');
- }
-
- public static function export($var, $maxDepth)
- {
- $return = null;
- $isObj = is_object($var);
-
- if ($isObj && in_array('Doctrine\Common\Collections\Collection', class_implements($var))) {
- $var = $var->toArray();
- }
-
- if ($maxDepth) {
- if (is_array($var)) {
- $return = array();
-
- foreach ($var as $k => $v) {
- $return[$k] = self::export($v, $maxDepth - 1);
- }
- } else if ($isObj) {
- if ($var instanceof \DateTime) {
- $return = $var->format('c');
- } else {
- $reflClass = new \ReflectionClass(get_class($var));
- $return = new \stdclass();
- $return->{'__CLASS__'} = get_class($var);
-
- if ($var instanceof \Doctrine\ORM\Proxy\Proxy && ! $var->__isInitialized__) {
- $reflProperty = $reflClass->getProperty('_identifier');
- $reflProperty->setAccessible(true);
-
- foreach ($reflProperty->getValue($var) as $name => $value) {
- $return->$name = self::export($value, $maxDepth - 1);
- }
- } else {
- $excludeProperties = array();
-
- if ($var instanceof \Doctrine\ORM\Proxy\Proxy) {
- $excludeProperties = array('_entityPersister', '__isInitialized__', '_identifier');
- }
-
- foreach ($reflClass->getProperties() as $reflProperty) {
- $name = $reflProperty->getName();
-
- if ( ! in_array($name, $excludeProperties)) {
- $reflProperty->setAccessible(true);
-
- $return->$name = self::export($reflProperty->getValue($var), $maxDepth - 1);
- }
- }
- }
- }
- } else {
- $return = $var;
- }
- } else {
- $return = is_object($var) ? get_class($var)
- : (is_array($var) ? 'Array(' . count($var) . ')' : $var);
- }
-
- return $return;
- }
-}
diff --git a/lib/Doctrine/Common/Util/Inflector.php b/lib/Doctrine/Common/Util/Inflector.php
deleted file mode 100644
index 78e570968..000000000
--- a/lib/Doctrine/Common/Util/Inflector.php
+++ /dev/null
@@ -1,72 +0,0 @@
-.
- */
-
-namespace Doctrine\Common\Util;
-
-/**
- * Doctrine inflector has static methods for inflecting text
- *
- * The methods in these classes are from several different sources collected
- * across several different php projects and several different authors. The
- * original author names and emails are not known
- *
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @link www.doctrine-project.org
- * @since 1.0
- * @version $Revision: 3189 $
- * @author Konsta Vesterinen
- * @author Jonathan H. Wage
- */
-class Inflector
-{
- /**
- * Convert word in to the format for a Doctrine table name. Converts 'ModelName' to 'model_name'
- *
- * @param string $word Word to tableize
- * @return string $word Tableized word
- */
- public static function tableize($word)
- {
- return strtolower(preg_replace('~(?<=\\w)([A-Z])~', '_$1', $word));
- }
-
- /**
- * Convert a word in to the format for a Doctrine class name. Converts 'table_name' to 'TableName'
- *
- * @param string $word Word to classify
- * @return string $word Classified word
- */
- public static function classify($word)
- {
- return str_replace(" ", "", ucwords(strtr($word, "_-", " ")));
- }
-
- /**
- * Camelize a word. This uses the classify() method and turns the first character to lowercase
- *
- * @param string $word
- * @return string $word
- */
- public static function camelize($word)
- {
- return lcfirst(self::classify($word));
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Configuration.php b/lib/Doctrine/DBAL/Configuration.php
deleted file mode 100644
index 76ce1c4f0..000000000
--- a/lib/Doctrine/DBAL/Configuration.php
+++ /dev/null
@@ -1,64 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL;
-
-use Doctrine\DBAL\Logging\SQLLogger;
-
-/**
- * Configuration container for the Doctrine DBAL.
- *
- * @since 2.0
- * @author Guilherme Blanco
- * @author Jonathan Wage
- * @author Roman Borschel
- * @internal When adding a new configuration option just write a getter/setter
- * pair and add the option to the _attributes array with a proper default value.
- */
-class Configuration
-{
- /**
- * The attributes that are contained in the configuration.
- * Values are default values.
- *
- * @var array
- */
- protected $_attributes = array();
-
- /**
- * Sets the SQL logger to use. Defaults to NULL which means SQL logging is disabled.
- *
- * @param SQLLogger $logger
- */
- public function setSQLLogger(SQLLogger $logger)
- {
- $this->_attributes['sqlLogger'] = $logger;
- }
-
- /**
- * Gets the SQL logger that is used.
- *
- * @return SQLLogger
- */
- public function getSQLLogger()
- {
- return isset($this->_attributes['sqlLogger']) ?
- $this->_attributes['sqlLogger'] : null;
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Connection.php b/lib/Doctrine/DBAL/Connection.php
deleted file mode 100644
index 3a2c1b9f9..000000000
--- a/lib/Doctrine/DBAL/Connection.php
+++ /dev/null
@@ -1,935 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL;
-
-use PDO, Closure, Exception,
- Doctrine\DBAL\Types\Type,
- Doctrine\DBAL\Driver\Connection as DriverConnection,
- Doctrine\Common\EventManager,
- Doctrine\DBAL\DBALException;
-
-/**
- * A wrapper around a Doctrine\DBAL\Driver\Connection that adds features like
- * events, transaction isolation levels, configuration, emulated transaction nesting,
- * lazy connecting and more.
- *
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @link www.doctrine-project.org
- * @since 2.0
- * @version $Revision: 3938 $
- * @author Guilherme Blanco
- * @author Jonathan Wage
- * @author Roman Borschel
- * @author Konsta Vesterinen
- * @author Lukas Smith (MDB2 library)
- */
-class Connection implements DriverConnection
-{
- /**
- * Constant for transaction isolation level READ UNCOMMITTED.
- */
- const TRANSACTION_READ_UNCOMMITTED = 1;
-
- /**
- * Constant for transaction isolation level READ COMMITTED.
- */
- const TRANSACTION_READ_COMMITTED = 2;
-
- /**
- * Constant for transaction isolation level REPEATABLE READ.
- */
- const TRANSACTION_REPEATABLE_READ = 3;
-
- /**
- * Constant for transaction isolation level SERIALIZABLE.
- */
- const TRANSACTION_SERIALIZABLE = 4;
-
- /**
- * The wrapped driver connection.
- *
- * @var Doctrine\DBAL\Driver\Connection
- */
- protected $_conn;
-
- /**
- * @var Doctrine\DBAL\Configuration
- */
- protected $_config;
-
- /**
- * @var Doctrine\Common\EventManager
- */
- protected $_eventManager;
-
- /**
- * Whether or not a connection has been established.
- *
- * @var boolean
- */
- private $_isConnected = false;
-
- /**
- * The transaction nesting level.
- *
- * @var integer
- */
- private $_transactionNestingLevel = 0;
-
- /**
- * The currently active transaction isolation level.
- *
- * @var integer
- */
- private $_transactionIsolationLevel;
-
- /**
- * The parameters used during creation of the Connection instance.
- *
- * @var array
- */
- private $_params = array();
-
- /**
- * The DatabasePlatform object that provides information about the
- * database platform used by the connection.
- *
- * @var Doctrine\DBAL\Platforms\AbstractPlatform
- */
- protected $_platform;
-
- /**
- * The schema manager.
- *
- * @var Doctrine\DBAL\Schema\SchemaManager
- */
- protected $_schemaManager;
-
- /**
- * The used DBAL driver.
- *
- * @var Doctrine\DBAL\Driver
- */
- protected $_driver;
-
- /**
- * Flag that indicates whether the current transaction is marked for rollback only.
- *
- * @var boolean
- */
- private $_isRollbackOnly = false;
-
- /**
- * Initializes a new instance of the Connection class.
- *
- * @param array $params The connection parameters.
- * @param Driver $driver
- * @param Configuration $config
- * @param EventManager $eventManager
- */
- public function __construct(array $params, Driver $driver, Configuration $config = null,
- EventManager $eventManager = null)
- {
- $this->_driver = $driver;
- $this->_params = $params;
-
- if (isset($params['pdo'])) {
- $this->_conn = $params['pdo'];
- $this->_isConnected = true;
- }
-
- // Create default config and event manager if none given
- if ( ! $config) {
- $config = new Configuration();
- }
-
- if ( ! $eventManager) {
- $eventManager = new EventManager();
- }
-
- $this->_config = $config;
- $this->_eventManager = $eventManager;
- if ( ! isset($params['platform'])) {
- $this->_platform = $driver->getDatabasePlatform();
- } else if ($params['platform'] instanceof Platforms\AbstractPlatform) {
- $this->_platform = $params['platform'];
- } else {
- throw DBALException::invalidPlatformSpecified();
- }
- $this->_transactionIsolationLevel = $this->_platform->getDefaultTransactionIsolationLevel();
- }
-
- /**
- * Gets the parameters used during instantiation.
- *
- * @return array $params
- */
- public function getParams()
- {
- return $this->_params;
- }
-
- /**
- * Gets the name of the database this Connection is connected to.
- *
- * @return string $database
- */
- public function getDatabase()
- {
- return $this->_driver->getDatabase($this);
- }
-
- /**
- * Gets the hostname of the currently connected database.
- *
- * @return string
- */
- public function getHost()
- {
- return isset($this->_params['host']) ? $this->_params['host'] : null;
- }
-
- /**
- * Gets the port of the currently connected database.
- *
- * @return mixed
- */
- public function getPort()
- {
- return isset($this->_params['port']) ? $this->_params['port'] : null;
- }
-
- /**
- * Gets the username used by this connection.
- *
- * @return string
- */
- public function getUsername()
- {
- return isset($this->_params['user']) ? $this->_params['user'] : null;
- }
-
- /**
- * Gets the password used by this connection.
- *
- * @return string
- */
- public function getPassword()
- {
- return isset($this->_params['password']) ? $this->_params['password'] : null;
- }
-
- /**
- * Gets the DBAL driver instance.
- *
- * @return Doctrine\DBAL\Driver
- */
- public function getDriver()
- {
- return $this->_driver;
- }
-
- /**
- * Gets the Configuration used by the Connection.
- *
- * @return Doctrine\DBAL\Configuration
- */
- public function getConfiguration()
- {
- return $this->_config;
- }
-
- /**
- * Gets the EventManager used by the Connection.
- *
- * @return Doctrine\Common\EventManager
- */
- public function getEventManager()
- {
- return $this->_eventManager;
- }
-
- /**
- * Gets the DatabasePlatform for the connection.
- *
- * @return Doctrine\DBAL\Platforms\AbstractPlatform
- */
- public function getDatabasePlatform()
- {
- return $this->_platform;
- }
-
- /**
- * Establishes the connection with the database.
- *
- * @return boolean TRUE if the connection was successfully established, FALSE if
- * the connection is already open.
- */
- public function connect()
- {
- if ($this->_isConnected) return false;
-
- $driverOptions = isset($this->_params['driverOptions']) ?
- $this->_params['driverOptions'] : array();
- $user = isset($this->_params['user']) ? $this->_params['user'] : null;
- $password = isset($this->_params['password']) ?
- $this->_params['password'] : null;
-
- $this->_conn = $this->_driver->connect($this->_params, $user, $password, $driverOptions);
- $this->_isConnected = true;
-
- if ($this->_eventManager->hasListeners(Events::postConnect)) {
- $eventArgs = new Event\ConnectionEventArgs($this);
- $this->_eventManager->dispatchEvent(Events::postConnect, $eventArgs);
- }
-
- return true;
- }
-
- /**
- * Prepares and executes an SQL query and returns the first row of the result
- * as an associative array.
- *
- * @param string $statement The SQL query.
- * @param array $params The query parameters.
- * @return array
- */
- public function fetchAssoc($statement, array $params = array())
- {
- return $this->executeQuery($statement, $params)->fetch(PDO::FETCH_ASSOC);
- }
-
- /**
- * Prepares and executes an SQL query and returns the first row of the result
- * as a numerically indexed array.
- *
- * @param string $statement sql query to be executed
- * @param array $params prepared statement params
- * @return array
- */
- public function fetchArray($statement, array $params = array())
- {
- return $this->executeQuery($statement, $params)->fetch(PDO::FETCH_NUM);
- }
-
- /**
- * Prepares and executes an SQL query and returns the value of a single column
- * of the first row of the result.
- *
- * @param string $statement sql query to be executed
- * @param array $params prepared statement params
- * @param int $colnum 0-indexed column number to retrieve
- * @return mixed
- */
- public function fetchColumn($statement, array $params = array(), $colnum = 0)
- {
- return $this->executeQuery($statement, $params)->fetchColumn($colnum);
- }
-
- /**
- * Whether an actual connection to the database is established.
- *
- * @return boolean
- */
- public function isConnected()
- {
- return $this->_isConnected;
- }
-
- /**
- * Checks whether a transaction is currently active.
- *
- * @return boolean TRUE if a transaction is currently active, FALSE otherwise.
- */
- public function isTransactionActive()
- {
- return $this->_transactionNestingLevel > 0;
- }
-
- /**
- * Executes an SQL DELETE statement on a table.
- *
- * @param string $table The name of the table on which to delete.
- * @param array $identifier The deletion criteria. An associateve array containing column-value pairs.
- * @return integer The number of affected rows.
- */
- public function delete($tableName, array $identifier)
- {
- $this->connect();
-
- $criteria = array();
-
- foreach (array_keys($identifier) as $columnName) {
- $criteria[] = $columnName . ' = ?';
- }
-
- $query = 'DELETE FROM ' . $tableName . ' WHERE ' . implode(' AND ', $criteria);
-
- return $this->executeUpdate($query, array_values($identifier));
- }
-
- /**
- * Closes the connection.
- *
- * @return void
- */
- public function close()
- {
- unset($this->_conn);
-
- $this->_isConnected = false;
- }
-
- /**
- * Sets the transaction isolation level.
- *
- * @param integer $level The level to set.
- */
- public function setTransactionIsolation($level)
- {
- $this->_transactionIsolationLevel = $level;
-
- return $this->executeUpdate($this->_platform->getSetTransactionIsolationSQL($level));
- }
-
- /**
- * Gets the currently active transaction isolation level.
- *
- * @return integer The current transaction isolation level.
- */
- public function getTransactionIsolation()
- {
- return $this->_transactionIsolationLevel;
- }
-
- /**
- * Executes an SQL UPDATE statement on a table.
- *
- * @param string $table The name of the table to update.
- * @param array $identifier The update criteria. An associative array containing column-value pairs.
- * @return integer The number of affected rows.
- */
- public function update($tableName, array $data, array $identifier)
- {
- $this->connect();
- $set = array();
- foreach ($data as $columnName => $value) {
- $set[] = $columnName . ' = ?';
- }
-
- $params = array_merge(array_values($data), array_values($identifier));
-
- $sql = 'UPDATE ' . $tableName . ' SET ' . implode(', ', $set)
- . ' WHERE ' . implode(' = ? AND ', array_keys($identifier))
- . ' = ?';
-
- return $this->executeUpdate($sql, $params);
- }
-
- /**
- * Inserts a table row with specified data.
- *
- * @param string $table The name of the table to insert data into.
- * @param array $data An associative array containing column-value pairs.
- * @return integer The number of affected rows.
- */
- public function insert($tableName, array $data)
- {
- $this->connect();
-
- // column names are specified as array keys
- $cols = array();
- $placeholders = array();
-
- foreach ($data as $columnName => $value) {
- $cols[] = $columnName;
- $placeholders[] = '?';
- }
-
- $query = 'INSERT INTO ' . $tableName
- . ' (' . implode(', ', $cols) . ')'
- . ' VALUES (' . implode(', ', $placeholders) . ')';
-
- return $this->executeUpdate($query, array_values($data));
- }
-
- /**
- * Sets the given charset on the current connection.
- *
- * @param string $charset The charset to set.
- */
- public function setCharset($charset)
- {
- $this->executeUpdate($this->_platform->getSetCharsetSQL($charset));
- }
-
- /**
- * Quote a string so it can be safely used as a table or column name, even if
- * it is a reserved name.
- *
- * Delimiting style depends on the underlying database platform that is being used.
- *
- * NOTE: Just because you CAN use quoted identifiers does not mean
- * you SHOULD use them. In general, they end up causing way more
- * problems than they solve.
- *
- * @param string $str The name to be quoted.
- * @return string The quoted name.
- */
- public function quoteIdentifier($str)
- {
- return $this->_platform->quoteIdentifier($str);
- }
-
- /**
- * Quotes a given input parameter.
- *
- * @param mixed $input Parameter to be quoted.
- * @param string $type Type of the parameter.
- * @return string The quoted parameter.
- */
- public function quote($input, $type = null)
- {
- $this->connect();
-
- return $this->_conn->quote($input, $type);
- }
-
- /**
- * Prepares and executes an SQL query and returns the result as an associative array.
- *
- * @param string $sql The SQL query.
- * @param array $params The query parameters.
- * @return array
- */
- public function fetchAll($sql, array $params = array())
- {
- return $this->executeQuery($sql, $params)->fetchAll(PDO::FETCH_ASSOC);
- }
-
- /**
- * Prepares an SQL statement.
- *
- * @param string $statement The SQL statement to prepare.
- * @return Doctrine\DBAL\Driver\Statement The prepared statement.
- */
- public function prepare($statement)
- {
- $this->connect();
-
- return new Statement($statement, $this);
- }
-
- /**
- * Executes an, optionally parameterized, SQL query.
- *
- * If the query is parameterized, a prepared statement is used.
- * If an SQLLogger is configured, the execution is logged.
- *
- * @param string $query The SQL query to execute.
- * @param array $params The parameters to bind to the query, if any.
- * @return Doctrine\DBAL\Driver\Statement The executed statement.
- * @internal PERF: Directly prepares a driver statement, not a wrapper.
- */
- public function executeQuery($query, array $params = array(), $types = array())
- {
- $this->connect();
-
- if ($this->_config->getSQLLogger() !== null) {
- $this->_config->getSQLLogger()->logSQL($query, $params);
- }
-
- if ($params) {
- $stmt = $this->_conn->prepare($query);
- if ($types) {
- $this->_bindTypedValues($stmt, $params, $types);
- $stmt->execute();
- } else {
- $stmt->execute($params);
- }
- } else {
- $stmt = $this->_conn->query($query);
- }
-
- return $stmt;
- }
-
- /**
- * Executes an, optionally parameterized, SQL query and returns the result,
- * applying a given projection/transformation function on each row of the result.
- *
- * @param string $query The SQL query to execute.
- * @param array $params The parameters, if any.
- * @param Closure $mapper The transformation function that is applied on each row.
- * The function receives a single paramater, an array, that
- * represents a row of the result set.
- * @return mixed The projected result of the query.
- */
- public function project($query, array $params, Closure $function)
- {
- $result = array();
- $stmt = $this->executeQuery($query, $params ?: array());
-
- while ($row = $stmt->fetch()) {
- $result[] = $function($row);
- }
-
- $stmt->closeCursor();
-
- return $result;
- }
-
- /**
- * Executes an SQL statement, returning a result set as a Statement object.
- *
- * @param string $statement
- * @param integer $fetchType
- * @return Doctrine\DBAL\Driver\Statement
- */
- public function query()
- {
- return call_user_func_array(array($this->_conn, 'query'), func_get_args());
- }
-
- /**
- * Executes an SQL INSERT/UPDATE/DELETE query with the given parameters
- * and returns the number of affected rows.
- *
- * This method supports PDO binding types as well as DBAL mapping types.
- *
- * @param string $query The SQL query.
- * @param array $params The query parameters.
- * @param array $types The parameter types.
- * @return integer The number of affected rows.
- * @internal PERF: Directly prepares a driver statement, not a wrapper.
- */
- public function executeUpdate($query, array $params = array(), array $types = array())
- {
- $this->connect();
-
- if ($this->_config->getSQLLogger() !== null) {
- $this->_config->getSQLLogger()->logSQL($query, $params);
- }
-
- if ($params) {
- $stmt = $this->_conn->prepare($query);
- if ($types) {
- $this->_bindTypedValues($stmt, $params, $types);
- $stmt->execute();
- } else {
- $stmt->execute($params);
- }
- $result = $stmt->rowCount();
- } else {
- $result = $this->_conn->exec($query);
- }
-
- return $result;
- }
-
- /**
- * Execute an SQL statement and return the number of affected rows.
- *
- * @param string $statement
- * @return integer The number of affected rows.
- */
- public function exec($statement)
- {
- $this->connect();
- return $this->_conn->exec($statement);
- }
-
- /**
- * Returns the current transaction nesting level.
- *
- * @return integer The nesting level. A value of 0 means there's no active transaction.
- */
- public function getTransactionNestingLevel()
- {
- return $this->_transactionNestingLevel;
- }
-
- /**
- * Fetch the SQLSTATE associated with the last database operation.
- *
- * @return integer The last error code.
- */
- public function errorCode()
- {
- $this->connect();
- return $this->_conn->errorCode();
- }
-
- /**
- * Fetch extended error information associated with the last database operation.
- *
- * @return array The last error information.
- */
- public function errorInfo()
- {
- $this->connect();
- return $this->_conn->errorInfo();
- }
-
- /**
- * Returns the ID of the last inserted row, or the last value from a sequence object,
- * depending on the underlying driver.
- *
- * Note: This method may not return a meaningful or consistent result across different drivers,
- * because the underlying database may not even support the notion of AUTO_INCREMENT/IDENTITY
- * columns or sequences.
- *
- * @param string $seqName Name of the sequence object from which the ID should be returned.
- * @return string A string representation of the last inserted ID.
- */
- public function lastInsertId($seqName = null)
- {
- $this->connect();
- return $this->_conn->lastInsertId($seqName);
- }
-
- /**
- * Executes a function in a transaction.
- *
- * The function gets passed this Connection instance as an (optional) parameter.
- *
- * If an exception occurs during execution of the function or transaction commit,
- * the transaction is rolled back and the exception re-thrown.
- *
- * @param Closure $func The function to execute transactionally.
- */
- public function transactional(Closure $func)
- {
- $this->beginTransaction();
- try {
- $func($this);
- $this->commit();
- } catch (Exception $e) {
- $this->rollback();
- throw $e;
- }
- }
-
- /**
- * Starts a transaction by suspending auto-commit mode.
- *
- * @return void
- */
- public function beginTransaction()
- {
- $this->connect();
-
- if ($this->_transactionNestingLevel == 0) {
- $this->_conn->beginTransaction();
- }
-
- ++$this->_transactionNestingLevel;
- }
-
- /**
- * Commits the current transaction.
- *
- * @return void
- * @throws ConnectionException If the commit failed due to no active transaction or
- * because the transaction was marked for rollback only.
- */
- public function commit()
- {
- if ($this->_transactionNestingLevel == 0) {
- throw ConnectionException::noActiveTransaction();
- }
- if ($this->_isRollbackOnly) {
- throw ConnectionException::commitFailedRollbackOnly();
- }
-
- $this->connect();
-
- if ($this->_transactionNestingLevel == 1) {
- $this->_conn->commit();
- }
-
- --$this->_transactionNestingLevel;
- }
-
- /**
- * Cancel any database changes done during the current transaction.
- *
- * this method can be listened with onPreTransactionRollback and onTransactionRollback
- * eventlistener methods
- *
- * @throws ConnectionException If the rollback operation failed.
- */
- public function rollback()
- {
- if ($this->_transactionNestingLevel == 0) {
- throw ConnectionException::noActiveTransaction();
- }
-
- $this->connect();
-
- if ($this->_transactionNestingLevel == 1) {
- $this->_transactionNestingLevel = 0;
- $this->_conn->rollback();
- $this->_isRollbackOnly = false;
- } else {
- $this->_isRollbackOnly = true;
- --$this->_transactionNestingLevel;
- }
- }
-
- /**
- * Gets the wrapped driver connection.
- *
- * @return Doctrine\DBAL\Driver\Connection
- */
- public function getWrappedConnection()
- {
- $this->connect();
-
- return $this->_conn;
- }
-
- /**
- * Gets the SchemaManager that can be used to inspect or change the
- * database schema through the connection.
- *
- * @return Doctrine\DBAL\Schema\SchemaManager
- */
- public function getSchemaManager()
- {
- if ( ! $this->_schemaManager) {
- $this->_schemaManager = $this->_driver->getSchemaManager($this);
- }
-
- return $this->_schemaManager;
- }
-
- /**
- * Marks the current transaction so that the only possible
- * outcome for the transaction to be rolled back.
- *
- * @throws ConnectionException If no transaction is active.
- */
- public function setRollbackOnly()
- {
- if ($this->_transactionNestingLevel == 0) {
- throw ConnectionException::noActiveTransaction();
- }
- $this->_isRollbackOnly = true;
- }
-
- /**
- * Check whether the current transaction is marked for rollback only.
- *
- * @return boolean
- * @throws ConnectionException If no transaction is active.
- */
- public function isRollbackOnly()
- {
- if ($this->_transactionNestingLevel == 0) {
- throw ConnectionException::noActiveTransaction();
- }
- return $this->_isRollbackOnly;
- }
-
- /**
- * Converts a given value to its database representation according to the conversion
- * rules of a specific DBAL mapping type.
- *
- * @param mixed $value The value to convert.
- * @param string $type The name of the DBAL mapping type.
- * @return mixed The converted value.
- */
- public function convertToDatabaseValue($value, $type)
- {
- return Type::getType($type)->convertToDatabaseValue($value, $this->_platform);
- }
-
- /**
- * Converts a given value to its PHP representation according to the conversion
- * rules of a specific DBAL mapping type.
- *
- * @param mixed $value The value to convert.
- * @param string $type The name of the DBAL mapping type.
- * @return mixed The converted type.
- */
- public function convertToPHPValue($value, $type)
- {
- return Type::getType($type)->convertToPHPValue($value, $this->_platform);
- }
-
- /**
- * Binds a set of parameters, some or all of which are typed with a PDO binding type
- * or DBAL mapping type, to a given statement.
- *
- * @param $stmt The statement to bind the values to.
- * @param array $params The map/list of named/positional parameters.
- * @param array $types The parameter types (PDO binding types or DBAL mapping types).
- * @internal Duck-typing used on the $stmt parameter to support driver statements as well as
- * raw PDOStatement instances.
- */
- private function _bindTypedValues($stmt, array $params, array $types)
- {
- // Check whether parameters are positional or named. Mixing is not allowed, just like in PDO.
- if (is_int(key($params))) {
- // Positional parameters
- $typeOffset = isset($types[0]) ? -1 : 0;
- $bindIndex = 1;
- foreach ($params as $position => $value) {
- $typeIndex = $bindIndex + $typeOffset;
- if (isset($types[$typeIndex])) {
- $type = $types[$typeIndex];
- if (is_string($type)) {
- $type = Type::getType($type);
- }
- if ($type instanceof Type) {
- $value = $type->convertToDatabaseValue($value, $this->_platform);
- $bindingType = $type->getBindingType();
- } else {
- $bindingType = $type; // PDO::PARAM_* constants
- }
- $stmt->bindValue($bindIndex, $value, $bindingType);
- } else {
- $stmt->bindValue($bindIndex, $value);
- }
- ++$bindIndex;
- }
- } else {
- // Named parameters
- foreach ($params as $name => $value) {
- if (isset($types[$name])) {
- $type = $types[$name];
- if (is_string($type)) {
- $type = Type::getType($type);
- }
- if ($type instanceof Type) {
- $value = $type->convertToDatabaseValue($value, $this->_platform);
- $bindingType = $type->getBindingType();
- } else {
- $bindingType = $type; // PDO::PARAM_* constants
- }
- $stmt->bindValue($name, $value, $bindingType);
- } else {
- $stmt->bindValue($name, $value);
- }
- }
- }
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/ConnectionException.php b/lib/Doctrine/DBAL/ConnectionException.php
deleted file mode 100644
index 9ed596327..000000000
--- a/lib/Doctrine/DBAL/ConnectionException.php
+++ /dev/null
@@ -1,44 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL;
-
-/**
- * Doctrine\DBAL\ConnectionException
- *
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @link www.doctrine-project.org
- * @since 2.0
- * @version $Revision: 4628 $
- * @author Jonathan H. Wage .
- */
-
-namespace Doctrine\DBAL;
-
-/**
- * Driver interface.
- * Interface that all DBAL drivers must implement.
- *
- * @since 2.0
- */
-interface Driver
-{
- /**
- * Attempts to create a connection with the database.
- *
- * @param array $params All connection parameters passed by the user.
- * @param string $username The username to use when connecting.
- * @param string $password The password to use when connecting.
- * @param array $driverOptions The driver options to use when connecting.
- * @return Doctrine\DBAL\Driver\Connection The database connection.
- */
- public function connect(array $params, $username = null, $password = null, array $driverOptions = array());
-
- /**
- * Gets the DatabasePlatform instance that provides all the metadata about
- * the platform this driver connects to.
- *
- * @return Doctrine\DBAL\Platforms\AbstractPlatform The database platform.
- */
- public function getDatabasePlatform();
-
- /**
- * Gets the SchemaManager that can be used to inspect and change the underlying
- * database schema of the platform this driver connects to.
- *
- * @param Doctrine\DBAL\Connection $conn
- * @return Doctrine\DBAL\SchemaManager
- */
- public function getSchemaManager(Connection $conn);
-
- /**
- * Gets the name of the driver.
- *
- * @return string The name of the driver.
- */
- public function getName();
-
- /**
- * Get the name of the database connected to for this driver.
- *
- * @param Doctrine\DBAL\Connection $conn
- * @return string $database
- */
- public function getDatabase(Connection $conn);
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Driver/Connection.php b/lib/Doctrine/DBAL/Driver/Connection.php
deleted file mode 100644
index 4cc5776a6..000000000
--- a/lib/Doctrine/DBAL/Driver/Connection.php
+++ /dev/null
@@ -1,42 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Driver;
-
-/**
- * Connection interface.
- * Driver connections must implement this interface.
- *
- * This resembles (a subset of) the PDO interface.
- *
- * @since 2.0
- */
-interface Connection
-{
- function prepare($prepareString);
- function query();
- function quote($input, $type=\PDO::PARAM_STR);
- function exec($statement);
- function lastInsertId($name = null);
- function beginTransaction();
- function commit();
- function rollBack();
- function errorCode();
- function errorInfo();
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Driver/IBMDB2/DB2Connection.php b/lib/Doctrine/DBAL/Driver/IBMDB2/DB2Connection.php
deleted file mode 100644
index 5d706de7b..000000000
--- a/lib/Doctrine/DBAL/Driver/IBMDB2/DB2Connection.php
+++ /dev/null
@@ -1,115 +0,0 @@
-.
-*/
-
-namespace Doctrine\DBAL\Driver\IBMDB2;
-
-class DB2Connection implements \Doctrine\DBAL\Driver\Connection
-{
- private $_conn = null;
-
- public function __construct(array $params, $username, $password, $driverOptions = array())
- {
- $isPersistant = (isset($params['persistent']) && $params['persistent'] == true);
-
- if ($isPersistant) {
- $this->_conn = db2_pconnect($params['dbname'], $username, $password, $driverOptions);
- } else {
- $this->_conn = db2_connect($params['dbname'], $username, $password, $driverOptions);
- }
- if (!$this->_conn) {
- throw new DB2Exception(db2_conn_errormsg());
- }
- }
-
- function prepare($sql)
- {
- $stmt = @db2_prepare($this->_conn, $sql);
- if (!$stmt) {
- throw new DB2Exception(db2_stmt_errormsg());
- }
- return new DB2Statement($stmt);
- }
-
- function query()
- {
- $args = func_get_args();
- $sql = $args[0];
- $stmt = $this->prepare($sql);
- $stmt->execute();
- return $stmt;
- }
-
- function quote($input, $type=\PDO::PARAM_STR)
- {
- $input = db2_escape_string($input);
- if ($type == \PDO::PARAM_INT ) {
- return $input;
- } else {
- return "'".$input."'";
- }
- }
-
- function exec($statement)
- {
- $stmt = $this->prepare($statement);
- $stmt->execute();
- return $stmt->rowCount();
- }
-
- function lastInsertId($name = null)
- {
- return db2_last_insert_id($this->_conn);
- }
-
- function beginTransaction()
- {
- db2_autocommit($this->_conn, DB2_AUTOCOMMIT_OFF);
- }
-
- function commit()
- {
- if (!db2_commit($this->_conn)) {
- throw new DB2Exception(db2_conn_errormsg($this->_conn));
- }
- db2_autocommit($this->_conn, DB2_AUTOCOMMIT_ON);
- }
-
- function rollBack()
- {
- if (!db2_rollback($this->_conn)) {
- throw new DB2Exception(db2_conn_errormsg($this->_conn));
- }
- db2_autocommit($this->_conn, DB2_AUTOCOMMIT_ON);
- }
-
- function errorCode()
- {
- return db2_conn_error($this->_conn);
- }
-
- function errorInfo()
- {
- return array(
- 0 => db2_conn_errormsg($this->_conn),
- 1 => $this->errorCode(),
- );
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Driver/IBMDB2/DB2Driver.php b/lib/Doctrine/DBAL/Driver/IBMDB2/DB2Driver.php
deleted file mode 100644
index b32dcbd47..000000000
--- a/lib/Doctrine/DBAL/Driver/IBMDB2/DB2Driver.php
+++ /dev/null
@@ -1,108 +0,0 @@
-.
-*/
-
-namespace Doctrine\DBAL\Driver\IBMDB2;
-
-use Doctrine\DBAL\Driver,
- Doctrine\DBAL\Connection;
-
-/**
- * IBM DB2 Driver
- *
- * @since 2.0
- * @author Benjamin Eberlei
- */
-class DB2Driver implements Driver
-{
- /**
- * Attempts to create a connection with the database.
- *
- * @param array $params All connection parameters passed by the user.
- * @param string $username The username to use when connecting.
- * @param string $password The password to use when connecting.
- * @param array $driverOptions The driver options to use when connecting.
- * @return Doctrine\DBAL\Driver\Connection The database connection.
- */
- public function connect(array $params, $username = null, $password = null, array $driverOptions = array())
- {
- if ( !isset($params['schema']) ) {
-
- }
-
- if ($params['host'] !== 'localhost' && $params['host'] != '127.0.0.1') {
- // if the host isn't localhost, use extended connection params
- $params['dbname'] = 'DRIVER={IBM DB2 ODBC DRIVER}' .
- ';DATABASE=' . $params['dbname'] .
- ';HOSTNAME=' . $params['host'] .
- ';PORT=' . $params['port'] .
- ';PROTOCOL=' . $params['protocol'] .
- ';UID=' . $username .
- ';PWD=' . $password .';';
- $username = null;
- $password = null;
- }
-
- return new DB2Connection($params, $username, $password, $driverOptions);
- }
-
- /**
- * Gets the DatabasePlatform instance that provides all the metadata about
- * the platform this driver connects to.
- *
- * @return Doctrine\DBAL\Platforms\AbstractPlatform The database platform.
- */
- public function getDatabasePlatform()
- {
- return new \Doctrine\DBAL\Platforms\DB2Platform;
- }
-
- /**
- * Gets the SchemaManager that can be used to inspect and change the underlying
- * database schema of the platform this driver connects to.
- *
- * @param Doctrine\DBAL\Connection $conn
- * @return Doctrine\DBAL\SchemaManager
- */
- public function getSchemaManager(Connection $conn)
- {
- return new \Doctrine\DBAL\Schema\DB2SchemaManager($conn);
- }
-
- /**
- * Gets the name of the driver.
- *
- * @return string The name of the driver.
- */
- public function getName()
- {
- return 'ibm_db2';
- }
-
- /**
- * Get the name of the database connected to for this driver.
- *
- * @param Doctrine\DBAL\Connection $conn
- * @return string $database
- */
- public function getDatabase(\Doctrine\DBAL\Connection $conn)
- {
- $params = $conn->getParams();
- return $params['dbname'];
- }
-}
diff --git a/lib/Doctrine/DBAL/Driver/IBMDB2/DB2Exception.php b/lib/Doctrine/DBAL/Driver/IBMDB2/DB2Exception.php
deleted file mode 100644
index b2a8de63a..000000000
--- a/lib/Doctrine/DBAL/Driver/IBMDB2/DB2Exception.php
+++ /dev/null
@@ -1,27 +0,0 @@
-.
-*/
-
-namespace Doctrine\DBAL\Driver\IBMDB2;
-
-class DB2Exception extends \Exception
-{
-
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Driver/IBMDB2/DB2Statement.php b/lib/Doctrine/DBAL/Driver/IBMDB2/DB2Statement.php
deleted file mode 100644
index 41bff920e..000000000
--- a/lib/Doctrine/DBAL/Driver/IBMDB2/DB2Statement.php
+++ /dev/null
@@ -1,297 +0,0 @@
-.
-*/
-
-namespace Doctrine\DBAL\Driver\IBMDB2;
-
-class DB2Statement implements \Doctrine\DBAL\Driver\Statement
-{
- private $_stmt = null;
-
- private $_bindParam = array();
-
- /**
- * DB2_BINARY, DB2_CHAR, DB2_DOUBLE, or DB2_LONG
- * @var
- */
- static private $_typeMap = array(
- \PDO::PARAM_INT => DB2_LONG,
- \PDO::PARAM_STR => DB2_CHAR,
- );
-
- public function __construct($stmt)
- {
- $this->_stmt = $stmt;
- }
-
- /**
- * Binds a value to a corresponding named or positional
- * placeholder in the SQL statement that was used 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 PDO::PARAM_* constants.
- *
- * @return boolean Returns TRUE on success or FALSE on failure.
- */
- function bindValue($param, $value, $type = null)
- {
- return $this->bindParam($param, $value, $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 PDOStatement->bindValue(),
- * the variable is bound as a reference and will only be evaluated at the time
- * that PDOStatement->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 PDO::PARAM_* constants. To return
- * an INOUT parameter from a stored procedure, use the bitwise OR operator to set the
- * PDO::PARAM_INPUT_OUTPUT bits for the data_type parameter.
- * @return boolean Returns TRUE on success or FALSE on failure.
- */
- function bindParam($column, &$variable, $type = null)
- {
- $this->_bindParam[$column] =& $variable;
-
- if ($type && isset(self::$_typeMap[$type])) {
- $type = self::$_typeMap[$type];
- } else {
- $type = DB2_CHAR;
- }
-
- if (!db2_bind_param($this->_stmt, $column, "variable", DB2_PARAM_IN, $type)) {
- throw new DB2Exception(db2_stmt_errormsg());
- }
- return true;
- }
-
- /**
- * Closes the cursor, enabling the statement to be executed again.
- *
- * @return boolean Returns TRUE on success or FALSE on failure.
- */
- function closeCursor()
- {
- if (!$this->_stmt) {
- return false;
- }
-
- $this->_bindParam = array();
- db2_free_result($this->_stmt);
- $ret = db2_free_stmt($this->_stmt);
- $this->_stmt = false;
- return $ret;
- }
-
- /**
- * columnCount
- * Returns the number of columns in the result set
- *
- * @return integer Returns the number of columns in the result set represented
- * by the PDOStatement object. If there is no result set,
- * this method should return 0.
- */
- function columnCount()
- {
- if (!$this->_stmt) {
- return false;
- }
- return db2_num_fields($this->_stmt);
- }
-
- /**
- * errorCode
- * Fetch the SQLSTATE associated with the last operation on the statement handle
- *
- * @see Doctrine_Adapter_Interface::errorCode()
- * @return string error code string
- */
- function errorCode()
- {
- return db2_stmt_error();
- }
-
- /**
- * errorInfo
- * Fetch extended error information associated with the last operation on the statement handle
- *
- * @see Doctrine_Adapter_Interface::errorInfo()
- * @return array error info array
- */
- function errorInfo()
- {
- return array(
- 0 => db2_stmt_errormsg(),
- 1 => db2_stmt_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.
- */
- function execute($params = null)
- {
- if (!$this->_stmt) {
- return false;
- }
-
- /*$retval = true;
- if ($params !== null) {
- $retval = @db2_execute($this->_stmt, $params);
- } else {
- $retval = @db2_execute($this->_stmt);
- }*/
- if ($params === null) {
- ksort($this->_bindParam);
- $params = array_values($this->_bindParam);
- }
- $retval = @db2_execute($this->_stmt, $params);
-
- if ($retval === false) {
- throw new DB2Exception(db2_stmt_errormsg());
- }
- return $retval;
- }
-
- /**
- * fetch
- *
- * @see Query::HYDRATE_* constants
- * @param integer $fetchStyle Controls how the next row will be returned to the caller.
- * This value must be one of the Query::HYDRATE_* constants,
- * defaulting to Query::HYDRATE_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 Query::HYDRATE_ORI_* constants, defaulting to
- * Query::HYDRATE_ORI_NEXT. To request a scrollable cursor for your
- * PDOStatement object,
- * you must set the PDO::ATTR_CURSOR attribute to Doctrine::CURSOR_SCROLL when you
- * prepare the SQL statement with Doctrine_Adapter_Interface->prepare().
- *
- * @param integer $cursorOffset For a PDOStatement object representing a scrollable cursor for which the
- * $cursorOrientation parameter is set to Query::HYDRATE_ORI_ABS, this value specifies
- * the absolute number of the row in the result set that shall be fetched.
- *
- * For a PDOStatement object representing a scrollable cursor for
- * which the $cursorOrientation parameter is set to Query::HYDRATE_ORI_REL, this value
- * specifies the row to fetch relative to the cursor position before
- * PDOStatement->fetch() was called.
- *
- * @return mixed
- */
- function fetch($fetchStyle = \PDO::FETCH_BOTH)
- {
- switch ($fetchStyle) {
- case \PDO::FETCH_BOTH:
- return db2_fetch_both($this->_stmt);
- case \PDO::FETCH_ASSOC:
- return db2_fetch_assoc($this->_stmt);
- case \PDO::FETCH_NUM:
- return db2_fetch_array($this->_stmt);
- default:
- throw new DB2Exception("Given Fetch-Style " . $fetchStyle . " is not supported.");
- }
- }
-
- /**
- * 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 Query::HYDRATE_* constants,
- * defaulting to Query::HYDRATE_BOTH
- *
- * @param integer $columnIndex Returns the indicated 0-indexed column when the value of $fetchStyle is
- * Query::HYDRATE_COLUMN. Defaults to 0.
- *
- * @return array
- */
- function fetchAll($fetchStyle = \PDO::FETCH_BOTH)
- {
- $rows = array();
- while ($row = $this->fetch($fetchStyle)) {
- $rows[] = $row;
- }
- return $rows;
- }
-
- /**
- * 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, PDOStatement->fetchColumn()
- * fetches the first column.
- *
- * @return string returns a single column in the next row of a result set.
- */
- function fetchColumn($columnIndex = 0)
- {
- $row = $this->fetch(\PDO::FETCH_NUM);
- if ($row && isset($row[$columnIndex])) {
- return $row[$columnIndex];
- }
- return false;
- }
-
- /**
- * 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.
- */
- function rowCount()
- {
- return (@db2_num_rows($this->_stmt))?:0;
- }
-}
diff --git a/lib/Doctrine/DBAL/Driver/OCI8/Driver.php b/lib/Doctrine/DBAL/Driver/OCI8/Driver.php
deleted file mode 100644
index c62020ba7..000000000
--- a/lib/Doctrine/DBAL/Driver/OCI8/Driver.php
+++ /dev/null
@@ -1,93 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Driver\OCI8;
-
-use Doctrine\DBAL\Platforms;
-
-/**
- * A Doctrine DBAL driver for the Oracle OCI8 PHP extensions.
- *
- * @author Roman Borschel
- * @since 2.0
- */
-class Driver implements \Doctrine\DBAL\Driver
-{
- public function connect(array $params, $username = null, $password = null, array $driverOptions = array())
- {
- return new OCI8Connection(
- $username,
- $password,
- $this->_constructDsn($params)
- );
- }
-
- /**
- * Constructs the Oracle DSN.
- *
- * @return string The DSN.
- */
- private function _constructDsn(array $params)
- {
- $dsn = '';
- if (isset($params['host'])) {
- $dsn .= '(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)' .
- '(HOST=' . $params['host'] . ')';
-
- if (isset($params['port'])) {
- $dsn .= '(PORT=' . $params['port'] . ')';
- } else {
- $dsn .= '(PORT=1521)';
- }
-
- $dsn .= '))(CONNECT_DATA=(SID=' . $params['dbname'] . ')))';
- } else {
- $dsn .= $params['dbname'];
- }
-
- if (isset($params['charset'])) {
- $dsn .= ';charset=' . $params['charset'];
- }
-
- return $dsn;
- }
-
- public function getDatabasePlatform()
- {
- return new \Doctrine\DBAL\Platforms\OraclePlatform();
- }
-
- public function getSchemaManager(\Doctrine\DBAL\Connection $conn)
- {
- return new \Doctrine\DBAL\Schema\OracleSchemaManager($conn);
- }
-
- public function getName()
- {
- return 'oci8';
- }
-
- public function getDatabase(\Doctrine\DBAL\Connection $conn)
- {
- $params = $conn->getParams();
- return $params['user'];
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Driver/OCI8/OCI8Connection.php b/lib/Doctrine/DBAL/Driver/OCI8/OCI8Connection.php
deleted file mode 100644
index 987bf6c0c..000000000
--- a/lib/Doctrine/DBAL/Driver/OCI8/OCI8Connection.php
+++ /dev/null
@@ -1,108 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Driver\OCI8;
-
-/**
- * OCI8 implementation of the Connection interface.
- *
- * @since 2.0
- */
-class OCI8Connection implements \Doctrine\DBAL\Driver\Connection
-{
- private $_dbh;
-
- public function __construct($username, $password, $db)
- {
- $this->_dbh = @oci_connect($username, $password, $db);
- if (!$this->_dbh) {
- throw new OCI8Exception($this->errorInfo());
- }
- }
-
- public function prepare($prepareString)
- {
- return new OCI8Statement($this->_dbh, $prepareString);
- }
-
- public function query()
- {
- $args = func_get_args();
- $sql = $args[0];
- //$fetchMode = $args[1];
- $stmt = $this->prepare($sql);
- $stmt->execute();
- return $stmt;
- }
-
- public function quote($input, $type=\PDO::PARAM_STR)
- {
- return is_numeric($input) ? $input : "'$input'";
- }
-
- public function exec($statement)
- {
- $stmt = $this->prepare($statement);
- $stmt->execute();
- return $stmt->rowCount();
- }
-
- public function lastInsertId($name = null)
- {
- //TODO: throw exception or support sequences?
- }
-
- public function beginTransaction()
- {
- return true;
- }
-
- public function commit()
- {
- if (!oci_commit($this->_dbh)) {
- throw OCI8Exception::fromErrorInfo($this->errorInfo());
- }
- return true;
- }
-
- public function rollBack()
- {
- if (!oci_rollback($this->_dbh)) {
- throw OCI8Exception::fromErrorInfo($this->errorInfo());
- }
- return true;
- }
-
- public function errorCode()
- {
- $error = oci_error($this->_dbh);
- if ($error !== false) {
- $error = $error['code'];
- }
- return $error;
- }
-
- public function errorInfo()
- {
- return oci_error($this->_dbh);
- }
-
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Driver/OCI8/OCI8Exception.php b/lib/Doctrine/DBAL/Driver/OCI8/OCI8Exception.php
deleted file mode 100644
index 66fe615a1..000000000
--- a/lib/Doctrine/DBAL/Driver/OCI8/OCI8Exception.php
+++ /dev/null
@@ -1,30 +0,0 @@
-.
-*/
-
-namespace Doctrine\DBAL\Driver\OCI8;
-
-class OCI8Exception extends \Exception
-{
- static public function fromErrorInfo($error)
- {
- return new self($error['message'], $error['code']);
- }
-}
diff --git a/lib/Doctrine/DBAL/Driver/OCI8/OCI8Statement.php b/lib/Doctrine/DBAL/Driver/OCI8/OCI8Statement.php
deleted file mode 100644
index 1f1b0567c..000000000
--- a/lib/Doctrine/DBAL/Driver/OCI8/OCI8Statement.php
+++ /dev/null
@@ -1,200 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Driver\OCI8;
-
-use \PDO;
-
-/**
- * The OCI8 implementation of the Statement interface.
- *
- * @since 2.0
- * @author Roman Borschel
- */
-class OCI8Statement implements \Doctrine\DBAL\Driver\Statement
-{
- /** Statement handle. */
- private $_sth;
- private $_paramCounter = 0;
- private static $_PARAM = ':param';
- private static $fetchStyleMap = array(
- PDO::FETCH_BOTH => OCI_BOTH,
- PDO::FETCH_ASSOC => OCI_ASSOC,
- PDO::FETCH_NUM => OCI_NUM
- );
- private $_paramMap = array();
-
- /**
- * Creates a new OCI8Statement that uses the given connection handle and SQL statement.
- *
- * @param resource $dbh The connection handle.
- * @param string $statement The SQL statement.
- */
- public function __construct($dbh, $statement)
- {
- $this->_sth = oci_parse($dbh, $this->_convertPositionalToNamedPlaceholders($statement));
- }
-
- /**
- * Oracle does not support positional parameters, hence this method converts all
- * positional parameters into artificially named parameters. Note that this conversion
- * is not perfect. All question marks (?) in the original statement are treated as
- * placeholders and converted to a named parameter.
- *
- * @param string $statement The SQL statement to convert.
- * @todo review and test for lost spaces. we experienced missing spaces with oci8 in some sql statements.
- */
- private function _convertPositionalToNamedPlaceholders($statement)
- {
- $count = 1;
- while (($pos = strpos($statement, '?')) !== false) {
- $this->_paramMap[$count] = ":param$count";
- $statement = substr_replace($statement, ":param$count", $pos, 1);
- ++$count;
- }
-
- return $statement;
- }
-
- /**
- * {@inheritdoc}
- */
- public function bindValue($param, $value, $type = null)
- {
- return $this->bindParam($param, $value, $type);
- }
-
- /**
- * {@inheritdoc}
- */
- public function bindParam($column, &$variable, $type = null)
- {
- $column = isset($this->_paramMap[$column]) ? $this->_paramMap[$column] : $column;
-
- return oci_bind_by_name($this->_sth, $column, $variable);
- }
-
- /**
- * Closes the cursor, enabling the statement to be executed again.
- *
- * @return boolean Returns TRUE on success or FALSE on failure.
- */
- public function closeCursor()
- {
- return oci_free_statement($this->_sth);
- }
-
- /**
- * {@inheritdoc}
- */
- public function columnCount()
- {
- return oci_num_fields($this->_sth);
- }
-
- /**
- * {@inheritdoc}
- */
- public function errorCode()
- {
- $error = oci_error($this->_sth);
- if ($error !== false) {
- $error = $error['code'];
- }
- return $error;
- }
-
- /**
- * {@inheritdoc}
- */
- public function errorInfo()
- {
- return oci_error($this->_sth);
- }
-
- /**
- * {@inheritdoc}
- */
- public function execute($params = null)
- {
- if ($params) {
- $hasZeroIndex = isset($params[0]);
- foreach ($params as $key => $val) {
- if ($hasZeroIndex && is_numeric($key)) {
- $this->bindValue($key + 1, $val);
- } else {
- $this->bindValue($key, $val);
- }
- }
- }
-
- $ret = @oci_execute($this->_sth, OCI_DEFAULT);
- if ( ! $ret) {
- throw OCI8Exception::fromErrorInfo($this->errorInfo());
- }
- return $ret;
- }
-
- /**
- * {@inheritdoc}
- */
- public function fetch($fetchStyle = PDO::FETCH_BOTH)
- {
- if ( ! isset(self::$fetchStyleMap[$fetchStyle])) {
- throw new \InvalidArgumentException("Invalid fetch style: " . $fetchStyle);
- }
-
- return oci_fetch_array($this->_sth, self::$fetchStyleMap[$fetchStyle] | OCI_RETURN_NULLS | OCI_RETURN_LOBS);
- }
-
- /**
- * {@inheritdoc}
- */
- public function fetchAll($fetchStyle = PDO::FETCH_BOTH)
- {
- if ( ! isset(self::$fetchStyleMap[$fetchStyle])) {
- throw new \InvalidArgumentException("Invalid fetch style: " . $fetchStyle);
- }
-
- $result = array();
- oci_fetch_all($this->_sth, $result, 0, -1,
- self::$fetchStyleMap[$fetchStyle] | OCI_RETURN_NULLS | OCI_FETCHSTATEMENT_BY_ROW | OCI_RETURN_LOBS);
-
- return $result;
- }
-
- /**
- * {@inheritdoc}
- */
- public function fetchColumn($columnIndex = 0)
- {
- $row = oci_fetch_row($this->_sth);
- return $row[$columnIndex];
- }
-
- /**
- * {@inheritdoc}
- */
- public function rowCount()
- {
- return oci_num_rows($this->_sth);
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Driver/PDOConnection.php b/lib/Doctrine/DBAL/Driver/PDOConnection.php
deleted file mode 100644
index f0068077e..000000000
--- a/lib/Doctrine/DBAL/Driver/PDOConnection.php
+++ /dev/null
@@ -1,40 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Driver;
-
-use \PDO;
-
-/**
- * PDO implementation of the Connection interface.
- * Used by all PDO-based drivers.
- *
- * @since 2.0
- */
-class PDOConnection extends PDO implements Connection
-{
- public function __construct($dsn, $user = null, $password = null, array $options = null)
- {
- parent::__construct($dsn, $user, $password, $options);
- $this->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('Doctrine\DBAL\Driver\PDOStatement', array()));
- $this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Driver/PDOIbm/Driver.php b/lib/Doctrine/DBAL/Driver/PDOIbm/Driver.php
deleted file mode 100644
index 844f2ab3f..000000000
--- a/lib/Doctrine/DBAL/Driver/PDOIbm/Driver.php
+++ /dev/null
@@ -1,126 +0,0 @@
-.
-*/
-
-namespace Doctrine\DBAL\Driver\PDOIbm;
-
-use Doctrine\DBAL\Connection;
-
-/**
- * Driver for the PDO IBM extension
- *
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @link www.doctrine-project.com
- * @since 1.0
- * @version $Revision$
- * @author Benjamin Eberlei
- * @author Guilherme Blanco
- * @author Jonathan Wage
- * @author Roman Borschel
- */
-class Driver implements \Doctrine\DBAL\Driver
-{
- /**
- * Attempts to establish a connection with the underlying driver.
- *
- * @param array $params
- * @param string $username
- * @param string $password
- * @param array $driverOptions
- * @return Doctrine\DBAL\Driver\Connection
- */
- public function connect(array $params, $username = null, $password = null, array $driverOptions = array())
- {
- $conn = new \Doctrine\DBAL\Driver\PDOConnection(
- $this->_constructPdoDsn($params),
- $username,
- $password,
- $driverOptions
- );
- return $conn;
- }
-
- /**
- * Constructs the MySql PDO DSN.
- *
- * @return string The DSN.
- */
- private function _constructPdoDsn(array $params)
- {
- $dsn = 'ibm:';
- if (isset($params['host'])) {
- $dsn .= 'HOSTNAME=' . $params['host'] . ';';
- }
- if (isset($params['port'])) {
- $dsn .= 'PORT=' . $params['port'] . ';';
- }
- $dsn .= 'PROTOCOL=TCPIP;';
- if (isset($params['dbname'])) {
- $dsn .= 'DATABASE=' . $params['dbname'] . ';';
- }
-
- return $dsn;
- }
-
- /**
- * Gets the DatabasePlatform instance that provides all the metadata about
- * the platform this driver connects to.
- *
- * @return Doctrine\DBAL\Platforms\AbstractPlatform The database platform.
- */
- public function getDatabasePlatform()
- {
- return new \Doctrine\DBAL\Platforms\DB2Platform;
- }
-
- /**
- * Gets the SchemaManager that can be used to inspect and change the underlying
- * database schema of the platform this driver connects to.
- *
- * @param Doctrine\DBAL\Connection $conn
- * @return Doctrine\DBAL\SchemaManager
- */
- public function getSchemaManager(Connection $conn)
- {
- return new \Doctrine\DBAL\Schema\DB2SchemaManager($conn);
- }
-
- /**
- * Gets the name of the driver.
- *
- * @return string The name of the driver.
- */
- public function getName()
- {
- return 'pdo_ibm';
- }
-
- /**
- * Get the name of the database connected to for this driver.
- *
- * @param Doctrine\DBAL\Connection $conn
- * @return string $database
- */
- public function getDatabase(\Doctrine\DBAL\Connection $conn)
- {
- $params = $conn->getParams();
- return $params['dbname'];
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Driver/PDOMsSql/Connection.php b/lib/Doctrine/DBAL/Driver/PDOMsSql/Connection.php
deleted file mode 100644
index b9ff38899..000000000
--- a/lib/Doctrine/DBAL/Driver/PDOMsSql/Connection.php
+++ /dev/null
@@ -1,65 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Driver\PDOMsSql;
-
-use PDO, Doctrine\DBAL\Driver\Connection as DriverConnection;
-
-/**
- * MsSql Connection implementation.
- *
- * @since 2.0
- */
-class Connection extends PDO implements DriverConnection
-{
- /**
- * {@inheritdoc}
- */
- public function rollback()
- {
- $this->exec('ROLLBACK TRANSACTION');
- }
-
- /**
- * {@inheritdoc}
- */
- public function commit()
- {
- $this->exec('COMMIT TRANSACTION');
- }
-
- /**
- * {@inheritdoc}
- */
- public function beginTransaction()
- {
- $this->exec('BEGIN TRANSACTION');
- }
-
- /**
- * {@inheritdoc}
- */
- public function lastInsertId($name = null)
- {
- $stmt = $this->query('SELECT SCOPE_IDENTITY()');
- $id = $stmt->fetchColumn();
- $stmt->closeCursor();
- return $id;
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Driver/PDOMsSql/Driver.php b/lib/Doctrine/DBAL/Driver/PDOMsSql/Driver.php
deleted file mode 100644
index 347a52e23..000000000
--- a/lib/Doctrine/DBAL/Driver/PDOMsSql/Driver.php
+++ /dev/null
@@ -1,84 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Driver\PDOMsSql;
-
-/**
- * The PDO-based MsSql driver.
- *
- * @since 2.0
- */
-class Driver implements \Doctrine\DBAL\Driver
-{
- public function connect(array $params, $username = null, $password = null, array $driverOptions = array())
- {
- return new Connection(
- $this->_constructPdoDsn($params),
- $username,
- $password,
- $driverOptions
- );
- }
-
- /**
- * Constructs the MsSql PDO DSN.
- *
- * @return string The DSN.
- */
- private function _constructPdoDsn(array $params)
- {
- // TODO: This might need to be revisted once we have access to a mssql server
- $dsn = 'mssql:';
- if (isset($params['host'])) {
- $dsn .= 'host=' . $params['host'] . ';';
- }
- if (isset($params['port'])) {
- $dsn .= 'port=' . $params['port'] . ';';
- }
- if (isset($params['dbname'])) {
- $dsn .= 'dbname=' . $params['dbname'] . ';';
- }
-
- return $dsn;
- }
-
-
- public function getDatabasePlatform()
- {
- return new \Doctrine\DBAL\Platforms\MsSqlPlatform();
- }
-
- public function getSchemaManager(\Doctrine\DBAL\Connection $conn)
- {
- return new \Doctrine\DBAL\Schema\MsSqlSchemaManager($conn);
- }
-
- public function getName()
- {
- return 'pdo_mssql';
- }
-
- public function getDatabase(\Doctrine\DBAL\Connection $conn)
- {
- $params = $conn->getParams();
- return $params['dbname'];
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Driver/PDOMySql/Driver.php b/lib/Doctrine/DBAL/Driver/PDOMySql/Driver.php
deleted file mode 100644
index 71a7f9f27..000000000
--- a/lib/Doctrine/DBAL/Driver/PDOMySql/Driver.php
+++ /dev/null
@@ -1,95 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Driver\PDOMySql;
-
-use Doctrine\DBAL\Connection;
-
-/**
- * PDO MySql driver.
- *
- * @since 2.0
- */
-class Driver implements \Doctrine\DBAL\Driver
-{
- /**
- * Attempts to establish a connection with the underlying driver.
- *
- * @param array $params
- * @param string $username
- * @param string $password
- * @param array $driverOptions
- * @return Doctrine\DBAL\Driver\Connection
- */
- public function connect(array $params, $username = null, $password = null, array $driverOptions = array())
- {
- $conn = new \Doctrine\DBAL\Driver\PDOConnection(
- $this->_constructPdoDsn($params),
- $username,
- $password,
- $driverOptions
- );
- return $conn;
- }
-
- /**
- * Constructs the MySql PDO DSN.
- *
- * @return string The DSN.
- */
- private function _constructPdoDsn(array $params)
- {
- $dsn = 'mysql:';
- if (isset($params['host'])) {
- $dsn .= 'host=' . $params['host'] . ';';
- }
- if (isset($params['port'])) {
- $dsn .= 'port=' . $params['port'] . ';';
- }
- if (isset($params['dbname'])) {
- $dsn .= 'dbname=' . $params['dbname'] . ';';
- }
- if (isset($params['unix_socket'])) {
- $dsn .= 'unix_socket=' . $params['unix_socket'] . ';';
- }
-
- return $dsn;
- }
-
- public function getDatabasePlatform()
- {
- return new \Doctrine\DBAL\Platforms\MySqlPlatform();
- }
-
- public function getSchemaManager(\Doctrine\DBAL\Connection $conn)
- {
- return new \Doctrine\DBAL\Schema\MySqlSchemaManager($conn);
- }
-
- public function getName()
- {
- return 'pdo_mysql';
- }
-
- public function getDatabase(\Doctrine\DBAL\Connection $conn)
- {
- $params = $conn->getParams();
- return $params['dbname'];
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Driver/PDOOracle/Driver.php b/lib/Doctrine/DBAL/Driver/PDOOracle/Driver.php
deleted file mode 100644
index 61102ebeb..000000000
--- a/lib/Doctrine/DBAL/Driver/PDOOracle/Driver.php
+++ /dev/null
@@ -1,88 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Driver\PDOOracle;
-
-use Doctrine\DBAL\Platforms;
-
-class Driver implements \Doctrine\DBAL\Driver
-{
- public function connect(array $params, $username = null, $password = null, array $driverOptions = array())
- {
- return new \Doctrine\DBAL\Driver\PDOConnection(
- $this->_constructPdoDsn($params),
- $username,
- $password,
- $driverOptions
- );
- }
-
- /**
- * Constructs the Oracle PDO DSN.
- *
- * @return string The DSN.
- */
- private function _constructPdoDsn(array $params)
- {
- $dsn = 'oci:';
- if (isset($params['host'])) {
- $dsn .= 'dbname=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)' .
- '(HOST=' . $params['host'] . ')';
-
- if (isset($params['port'])) {
- $dsn .= '(PORT=' . $params['port'] . ')';
- } else {
- $dsn .= '(PORT=1521)';
- }
-
- $dsn .= '))(CONNECT_DATA=(SID=' . $params['dbname'] . ')))';
- } else {
- $dsn .= 'dbname=' . $params['dbname'];
- }
-
- if (isset($params['charset'])) {
- $dsn .= ';charset=' . $params['charset'];
- }
-
- return $dsn;
- }
-
- public function getDatabasePlatform()
- {
- return new \Doctrine\DBAL\Platforms\OraclePlatform();
- }
-
- public function getSchemaManager(\Doctrine\DBAL\Connection $conn)
- {
- return new \Doctrine\DBAL\Schema\OracleSchemaManager($conn);
- }
-
- public function getName()
- {
- return 'pdo_oracle';
- }
-
- public function getDatabase(\Doctrine\DBAL\Connection $conn)
- {
- $params = $conn->getParams();
- return $params['user'];
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Driver/PDOPgSql/Driver.php b/lib/Doctrine/DBAL/Driver/PDOPgSql/Driver.php
deleted file mode 100644
index 06c2a8987..000000000
--- a/lib/Doctrine/DBAL/Driver/PDOPgSql/Driver.php
+++ /dev/null
@@ -1,70 +0,0 @@
-_constructPdoDsn($params),
- $username,
- $password,
- $driverOptions
- );
- }
-
- /**
- * Constructs the Postgres PDO DSN.
- *
- * @return string The DSN.
- */
- private function _constructPdoDsn(array $params)
- {
- $dsn = 'pgsql:';
- if (isset($params['host'])) {
- $dsn .= 'host=' . $params['host'] . ' ';
- }
- if (isset($params['port'])) {
- $dsn .= 'port=' . $params['port'] . ' ';
- }
- if (isset($params['dbname'])) {
- $dsn .= 'dbname=' . $params['dbname'] . ' ';
- }
-
- return $dsn;
- }
-
- public function getDatabasePlatform()
- {
- return new \Doctrine\DBAL\Platforms\PostgreSqlPlatform();
- }
-
- public function getSchemaManager(\Doctrine\DBAL\Connection $conn)
- {
- return new \Doctrine\DBAL\Schema\PostgreSqlSchemaManager($conn);
- }
-
- public function getName()
- {
- return 'pdo_pgsql';
- }
-
- public function getDatabase(\Doctrine\DBAL\Connection $conn)
- {
- $params = $conn->getParams();
- return $params['dbname'];
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Driver/PDOSqlite/Driver.php b/lib/Doctrine/DBAL/Driver/PDOSqlite/Driver.php
deleted file mode 100644
index 1721d5dc7..000000000
--- a/lib/Doctrine/DBAL/Driver/PDOSqlite/Driver.php
+++ /dev/null
@@ -1,116 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Driver\PDOSqlite;
-
-/**
- * The PDO Sqlite driver.
- *
- * @since 2.0
- */
-class Driver implements \Doctrine\DBAL\Driver
-{
- /**
- * @var array
- */
- protected $_userDefinedFunctions = array(
- 'sqrt' => array('callback' => array('Doctrine\DBAL\Platforms\SqlitePlatform', 'udfSqrt'), 'numArgs' => 1),
- 'mod' => array('callback' => array('Doctrine\DBAL\Platforms\SqlitePlatform', 'udfMod'), 'numArgs' => 2),
- 'locate' => array('callback' => array('Doctrine\DBAL\Platforms\SqlitePlatform', 'udfLocate'), 'numArgs' => -1),
- );
-
- /**
- * Tries to establish a database connection to SQLite.
- *
- * @param array $params
- * @param string $username
- * @param string $password
- * @param array $driverOptions
- * @return Connection
- */
- public function connect(array $params, $username = null, $password = null, array $driverOptions = array())
- {
- if (isset($driverOptions['userDefinedFunctions'])) {
- $this->_userDefinedFunctions = array_merge(
- $this->_userDefinedFunctions, $driverOptions['userDefinedFunctions']);
- unset($driverOptions['userDefinedFunctions']);
- }
-
- $pdo = new \Doctrine\DBAL\Driver\PDOConnection(
- $this->_constructPdoDsn($params),
- $username,
- $password,
- $driverOptions
- );
-
- foreach ($this->_userDefinedFunctions AS $fn => $data) {
- $pdo->sqliteCreateFunction($fn, $data['callback'], $data['numArgs']);
- }
-
- return $pdo;
- }
-
- /**
- * Constructs the Sqlite PDO DSN.
- *
- * @return string The DSN.
- * @override
- */
- protected function _constructPdoDsn(array $params)
- {
- $dsn = 'sqlite:';
- if (isset($params['path'])) {
- $dsn .= $params['path'];
- } else if (isset($params['memory'])) {
- $dsn .= ':memory:';
- }
-
- return $dsn;
- }
-
- /**
- * Gets the database platform that is relevant for this driver.
- */
- public function getDatabasePlatform()
- {
- return new \Doctrine\DBAL\Platforms\SqlitePlatform();
- }
-
- /**
- * Gets the schema manager that is relevant for this driver.
- *
- * @param Doctrine\DBAL\Connection $conn
- * @return Doctrine\DBAL\Schema\SqliteSchemaManager
- */
- public function getSchemaManager(\Doctrine\DBAL\Connection $conn)
- {
- return new \Doctrine\DBAL\Schema\SqliteSchemaManager($conn);
- }
-
- public function getName()
- {
- return 'pdo_sqlite';
- }
-
- public function getDatabase(\Doctrine\DBAL\Connection $conn)
- {
- $params = $conn->getParams();
- return isset($params['path']) ? $params['path'] : null;
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Driver/PDOStatement.php b/lib/Doctrine/DBAL/Driver/PDOStatement.php
deleted file mode 100644
index 50b1e211a..000000000
--- a/lib/Doctrine/DBAL/Driver/PDOStatement.php
+++ /dev/null
@@ -1,33 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Driver;
-
-/**
- * The PDO implementation of the Statement interface.
- * Used by all PDO-based drivers.
- *
- * @since 2.0
- */
-class PDOStatement extends \PDOStatement implements Statement
-{
- private function __construct() {}
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Driver/Statement.php b/lib/Doctrine/DBAL/Driver/Statement.php
deleted file mode 100644
index 6cb8b6402..000000000
--- a/lib/Doctrine/DBAL/Driver/Statement.php
+++ /dev/null
@@ -1,200 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Driver;
-
-use \PDO;
-
-/**
- * Statement interface.
- * Drivers must implement this interface.
- *
- * This resembles (a subset of) the PDOStatement interface.
- *
- * @author Konsta Vesterinen
- * @author Roman Borschel
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @link www.doctrine-project.org
- * @since 2.0
- * @version $Revision$
- */
-interface Statement
-{
- /**
- * Binds a value to a corresponding named or positional
- * placeholder in the SQL statement that was used 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 PDO::PARAM_* constants.
- *
- * @return boolean Returns TRUE on success or FALSE on failure.
- */
- 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 PDOStatement->bindValue(),
- * the variable is bound as a reference and will only be evaluated at the time
- * that PDOStatement->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 PDO::PARAM_* constants. To return
- * an INOUT parameter from a stored procedure, use the bitwise OR operator to set the
- * PDO::PARAM_INPUT_OUTPUT bits for the data_type parameter.
- * @return boolean Returns TRUE on success or FALSE on failure.
- */
- function bindParam($column, &$variable, $type = null);
-
- /**
- * Closes the cursor, enabling the statement to be executed again.
- *
- * @return boolean Returns TRUE on success or FALSE on failure.
- */
- function closeCursor();
-
- /**
- * columnCount
- * Returns the number of columns in the result set
- *
- * @return integer Returns the number of columns in the result set represented
- * by the PDOStatement object. If there is no result set,
- * this method should return 0.
- */
- function columnCount();
-
- /**
- * errorCode
- * Fetch the SQLSTATE associated with the last operation on the statement handle
- *
- * @see Doctrine_Adapter_Interface::errorCode()
- * @return string error code string
- */
- function errorCode();
-
- /**
- * errorInfo
- * Fetch extended error information associated with the last operation on the statement handle
- *
- * @see Doctrine_Adapter_Interface::errorInfo()
- * @return array error info array
- */
- 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.
- */
- function execute($params = null);
-
- /**
- * fetch
- *
- * @see Query::HYDRATE_* constants
- * @param integer $fetchStyle Controls how the next row will be returned to the caller.
- * This value must be one of the Query::HYDRATE_* constants,
- * defaulting to Query::HYDRATE_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 Query::HYDRATE_ORI_* constants, defaulting to
- * Query::HYDRATE_ORI_NEXT. To request a scrollable cursor for your
- * PDOStatement object,
- * you must set the PDO::ATTR_CURSOR attribute to Doctrine::CURSOR_SCROLL when you
- * prepare the SQL statement with Doctrine_Adapter_Interface->prepare().
- *
- * @param integer $cursorOffset For a PDOStatement object representing a scrollable cursor for which the
- * $cursorOrientation parameter is set to Query::HYDRATE_ORI_ABS, this value specifies
- * the absolute number of the row in the result set that shall be fetched.
- *
- * For a PDOStatement object representing a scrollable cursor for
- * which the $cursorOrientation parameter is set to Query::HYDRATE_ORI_REL, this value
- * specifies the row to fetch relative to the cursor position before
- * PDOStatement->fetch() was called.
- *
- * @return mixed
- */
- function fetch($fetchStyle = PDO::FETCH_BOTH);
-
- /**
- * 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 Query::HYDRATE_* constants,
- * defaulting to Query::HYDRATE_BOTH
- *
- * @param integer $columnIndex Returns the indicated 0-indexed column when the value of $fetchStyle is
- * Query::HYDRATE_COLUMN. Defaults to 0.
- *
- * @return array
- */
- function fetchAll($fetchStyle = PDO::FETCH_BOTH);
-
- /**
- * 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, PDOStatement->fetchColumn()
- * fetches the first column.
- *
- * @return string returns a single column in the next row of a result set.
- */
- function fetchColumn($columnIndex = 0);
-
- /**
- * 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.
- */
- function rowCount();
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/DriverManager.php b/lib/Doctrine/DBAL/DriverManager.php
deleted file mode 100644
index db91f1d37..000000000
--- a/lib/Doctrine/DBAL/DriverManager.php
+++ /dev/null
@@ -1,160 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL;
-
-use Doctrine\Common\EventManager;
-
-/**
- * Factory for creating Doctrine\DBAL\Connection instances.
- *
- * @author Roman Borschel
- * @since 2.0
- */
-final class DriverManager
-{
- /**
- * List of supported drivers and their mappings to the driver classes.
- *
- * @var array
- * @todo REMOVE. Users should directly supply class names instead.
- */
- private static $_driverMap = array(
- 'pdo_mysql' => 'Doctrine\DBAL\Driver\PDOMySql\Driver',
- 'pdo_sqlite' => 'Doctrine\DBAL\Driver\PDOSqlite\Driver',
- 'pdo_pgsql' => 'Doctrine\DBAL\Driver\PDOPgSql\Driver',
- 'pdo_oci' => 'Doctrine\DBAL\Driver\PDOOracle\Driver',
- 'pdo_mssql' => 'Doctrine\DBAL\Driver\PDOMsSql\Driver',
- 'oci8' => 'Doctrine\DBAL\Driver\OCI8\Driver',
- 'ibm_db2' => 'Doctrine\DBAL\Driver\IBMDB2\DB2Driver',
- 'pdo_ibm' => 'Doctrine\DBAL\Driver\PDOIbm\Driver',
- );
-
- /** Private constructor. This class cannot be instantiated. */
- private function __construct() { }
-
- /**
- * Creates a connection object based on the specified parameters.
- * This method returns a Doctrine\DBAL\Connection which wraps the underlying
- * driver connection.
- *
- * $params must contain at least one of the following.
- *
- * Either 'driver' with one of the following values:
- * pdo_mysql
- * pdo_sqlite
- * pdo_pgsql
- * pdo_oracle
- * pdo_mssql
- *
- * OR 'driverClass' that contains the full class name (with namespace) of the
- * driver class to instantiate.
- *
- * Other (optional) parameters:
- *
- * user (string):
- * The username to use when connecting.
- *
- * password (string):
- * The password to use when connecting.
- *
- * driverOptions (array):
- * Any additional driver-specific options for the driver. These are just passed
- * through to the driver.
- *
- * pdo:
- * You can pass an existing PDO instance through this parameter. The PDO
- * instance will be wrapped in a Doctrine\DBAL\Connection.
- *
- * wrapperClass:
- * You may specify a custom wrapper class through the 'wrapperClass'
- * parameter but this class MUST inherit from Doctrine\DBAL\Connection.
- *
- * @param array $params The parameters.
- * @param Doctrine\DBAL\Configuration The configuration to use.
- * @param Doctrine\Common\EventManager The event manager to use.
- * @return Doctrine\DBAL\Connection
- */
- public static function getConnection(
- array $params,
- Configuration $config = null,
- EventManager $eventManager = null)
- {
- // create default config and event manager, if not set
- if ( ! $config) {
- $config = new Configuration();
- }
- if ( ! $eventManager) {
- $eventManager = new EventManager();
- }
-
- // check for existing pdo object
- if (isset($params['pdo']) && ! $params['pdo'] instanceof \PDO) {
- throw DBALException::invalidPdoInstance();
- } else if (isset($params['pdo'])) {
- $params['driver'] = 'pdo_' . $params['pdo']->getAttribute(\PDO::ATTR_DRIVER_NAME);
- } else {
- self::_checkParams($params);
- }
- if (isset($params['driverClass'])) {
- $className = $params['driverClass'];
- } else {
- $className = self::$_driverMap[$params['driver']];
- }
-
- $driver = new $className();
-
- $wrapperClass = 'Doctrine\DBAL\Connection';
- if (isset($params['wrapperClass'])) {
- if (is_subclass_of($params['wrapperClass'], $wrapperClass)) {
- $wrapperClass = $params['wrapperClass'];
- } else {
- throw DBALException::invalidWrapperClass($params['wrapperClass']);
- }
- }
-
- return new $wrapperClass($params, $driver, $config, $eventManager);
- }
-
- /**
- * Checks the list of parameters.
- *
- * @param array $params
- */
- private static function _checkParams(array $params)
- {
- // check existance of mandatory parameters
-
- // driver
- if ( ! isset($params['driver']) && ! isset($params['driverClass'])) {
- throw DBALException::driverRequired();
- }
-
- // check validity of parameters
-
- // driver
- if ( isset($params['driver']) && ! isset(self::$_driverMap[$params['driver']])) {
- throw DBALException::unknownDriver($params['driver'], array_keys(self::$_driverMap));
- }
-
- if (isset($params['driverClass']) && ! in_array('Doctrine\DBAL\Driver', class_implements($params['driverClass'], true))) {
- throw DBALException::invalidDriverClass($params['driverClass']);
- }
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Event/ConnectionEventArgs.php b/lib/Doctrine/DBAL/Event/ConnectionEventArgs.php
deleted file mode 100644
index ce80ecd4d..000000000
--- a/lib/Doctrine/DBAL/Event/ConnectionEventArgs.php
+++ /dev/null
@@ -1,79 +0,0 @@
-.
-*/
-
-namespace Doctrine\DBAL\Event;
-
-use Doctrine\Common\EventArgs,
- Doctrine\DBAL\Connection;
-
-/**
- * Event Arguments used when a Driver connection is established inside Doctrine\DBAL\Connection.
- *
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @link www.doctrine-project.com
- * @since 1.0
- * @version $Revision$
- * @author Benjamin Eberlei
- */
-class ConnectionEventArgs extends EventArgs
-{
- /**
- * @var Connection
- */
- private $_connection = null;
-
- public function __construct(Connection $connection)
- {
- $this->_connection = $connection;
- }
-
- /**
- * @return Doctrine\DBAL\Connection
- */
- public function getConnection()
- {
- return $this->_connection;
- }
-
- /**
- * @return Doctrine\DBAL\Driver
- */
- public function getDriver()
- {
- return $this->_connection->getDriver();
- }
-
- /**
- * @return Doctrine\DBAL\Platforms\AbstractPlatform
- */
- public function getDatabasePlatform()
- {
- return $this->_connection->getDatabasePlatform();
- }
-
- /**
- * @return Doctrine\DBAL\Schema\AbstractSchemaManager
- */
- public function getSchemaManager()
- {
- return $this->_connection->getSchemaManager();
- }
-}
diff --git a/lib/Doctrine/DBAL/Event/Listeners/MysqlSessionInit.php b/lib/Doctrine/DBAL/Event/Listeners/MysqlSessionInit.php
deleted file mode 100644
index 9d0ff684e..000000000
--- a/lib/Doctrine/DBAL/Event/Listeners/MysqlSessionInit.php
+++ /dev/null
@@ -1,75 +0,0 @@
-.
-*/
-
-namespace Doctrine\DBAL\Event\Listeners;
-
-use Doctrine\DBAL\Event\ConnectionEventArgs;
-use Doctrine\DBAL\Events;
-use Doctrine\Common\EventSubscriber;
-
-/**
- * MySQL Session Init Event Subscriber which allows to set the Client Encoding of the Connection
- *
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @link www.doctrine-project.com
- * @since 1.0
- * @version $Revision$
- * @author Benjamin Eberlei
- */
-class MysqlSessionInit implements EventSubscriber
-{
- /**
- * @var string
- */
- private $_charset;
-
- /**
- * @var string
- */
- private $_collation;
-
- /**
- * Configure Charset and Collation options of MySQL Client for each Connection
- *
- * @param string $charset
- * @param string $collation
- */
- public function __construct($charset = 'utf8', $collation = false)
- {
- $this->_charset = $charset;
- $this->_collation = $collation;
- }
-
- /**
- * @param ConnectionEventArgs $args
- * @return void
- */
- public function postConnect(ConnectionEventArgs $args)
- {
- $collation = ($this->_collation) ? " COLLATE ".$this->_collation : "";
- $args->getConnection()->executeUpdate("SET NAMES ".$this->_charset . $collation);
- }
-
- public function getSubscribedEvents()
- {
- return array(Events::postConnect);
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Event/Listeners/OracleSessionInit.php b/lib/Doctrine/DBAL/Event/Listeners/OracleSessionInit.php
deleted file mode 100644
index 1e39918cb..000000000
--- a/lib/Doctrine/DBAL/Event/Listeners/OracleSessionInit.php
+++ /dev/null
@@ -1,82 +0,0 @@
-.
-*/
-
-namespace Doctrine\DBAL\Event\Listeners;
-
-use Doctrine\DBAL\Event\ConnectionEventArgs;
-use Doctrine\DBAL\Events;
-use Doctrine\Common\EventSubscriber;
-
-/**
- * Should be used when Oracle Server default enviroment does not match the Doctrine requirements.
- *
- * The following enviroment variables are required for the Doctrine default date format:
- *
- * NLS_TIME_FORMAT="HH24:MI:SS"
- * NLS_DATE_FORMAT="YYYY-MM-DD"
- * NLS_TIMESTAMP_FORMAT="YYYY-MM-DD HH24:MI:SS"
- * NLS_TIMESTAMP_TZ_FORMAT="YYYY-MM-DD HH24:MI:SS TZH:TZM"
- *
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @link www.doctrine-project.com
- * @since 1.0
- * @version $Revision$
- * @author Benjamin Eberlei
- */
-class OracleSessionInit implements EventSubscriber
-{
- protected $_defaultSessionVars = array(
- 'NLS_TIME_FORMAT' => "HH24:MI:SS",
- 'NLS_DATE_FORMAT' => "YYYY-MM-DD",
- 'NLS_TIMESTAMP_FORMAT' => "YYYY-MM-DD HH24:MI:SS",
- 'NLS_TIMESTAMP_TZ_FORMAT' => "YYYY-MM-DD HH24:MI:SS TZH:TZM",
- );
-
- /**
- * @param array $oracleSessionVars
- */
- public function __construct(array $oracleSessionVars = array())
- {
- $this->_defaultSessionVars = array_merge($this->_defaultSessionVars, $oracleSessionVars);
- }
-
- /**
- * @param ConnectionEventArgs $args
- * @return void
- */
- public function postConnect(ConnectionEventArgs $args)
- {
- if (count($this->_defaultSessionVars)) {
- array_change_key_case($this->_defaultSessionVars, \CASE_UPPER);
- $vars = array();
- foreach ($this->_defaultSessionVars AS $option => $value) {
- $vars[] = $option." = '".$value."'";
- }
- $sql = "ALTER SESSION SET ".implode(" ", $vars);
- $args->getConnection()->executeUpdate($sql);
- }
- }
-
- public function getSubscribedEvents()
- {
- return array(Events::postConnect);
- }
-}
diff --git a/lib/Doctrine/DBAL/Events.php b/lib/Doctrine/DBAL/Events.php
deleted file mode 100644
index e5f8e8ca3..000000000
--- a/lib/Doctrine/DBAL/Events.php
+++ /dev/null
@@ -1,43 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL;
-
-/**
- * Container for all DBAL events.
- *
- * This class cannot be instantiated.
- *
- * @author Roman Borschel
- * @since 2.0
- */
-final class Events
-{
- private function __construct() {}
-
- const preExec = 'preExec';
- const postExec = 'postExec';
- const preExecute = 'preExecute';
- const postExecute = 'postExecute';
-
- const postConnect = 'postConnect';
-}
-
diff --git a/lib/Doctrine/DBAL/LockMode.php b/lib/Doctrine/DBAL/LockMode.php
deleted file mode 100644
index 949072166..000000000
--- a/lib/Doctrine/DBAL/LockMode.php
+++ /dev/null
@@ -1,42 +0,0 @@
-.
-*/
-
-namespace Doctrine\DBAL;
-
-/**
- * Contains all ORM LockModes
- *
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @link www.doctrine-project.com
- * @since 1.0
- * @version $Revision$
- * @author Benjamin Eberlei
- * @author Roman Borschel
- */
-class LockMode
-{
- const NONE = 0;
- const OPTIMISTIC = 1;
- const PESSIMISTIC_READ = 2;
- const PESSIMISTIC_WRITE = 4;
-
- final private function __construct() { }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Logging/DebugStack.php b/lib/Doctrine/DBAL/Logging/DebugStack.php
deleted file mode 100644
index 5ed20db55..000000000
--- a/lib/Doctrine/DBAL/Logging/DebugStack.php
+++ /dev/null
@@ -1,54 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Logging;
-
-/**
- * Includes executed SQLs in a Debug Stack
- *
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @link www.doctrine-project.org
- * @since 2.0
- * @version $Revision$
- * @author Benjamin Eberlei
- * @author Guilherme Blanco
- * @author Jonathan Wage
- * @author Roman Borschel
- */
-class DebugStack implements SQLLogger
-{
- /** @var array $queries Executed SQL queries. */
- public $queries = array();
-
- /** @var boolean $enabled If Debug Stack is enabled (log queries) or not. */
- public $enabled = true;
-
- /**
- * {@inheritdoc}
- */
- public function logSQL($sql, array $params = null)
- {
- if ($this->enabled) {
- $this->queries[] = array('sql' => $sql, 'params' => $params);
- }
- }
-}
-
diff --git a/lib/Doctrine/DBAL/Logging/EchoSQLLogger.php b/lib/Doctrine/DBAL/Logging/EchoSQLLogger.php
deleted file mode 100644
index 9541547d9..000000000
--- a/lib/Doctrine/DBAL/Logging/EchoSQLLogger.php
+++ /dev/null
@@ -1,49 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Logging;
-
-/**
- * A SQL logger that logs to the standard output using echo/var_dump.
- *
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @link www.doctrine-project.org
- * @since 2.0
- * @version $Revision$
- * @author Benjamin Eberlei
- * @author Guilherme Blanco
- * @author Jonathan Wage
- * @author Roman Borschel
- */
-class EchoSQLLogger implements SQLLogger
-{
- /**
- * {@inheritdoc}
- */
- public function logSQL($sql, array $params = null)
- {
- echo $sql . PHP_EOL;
-
- if ($params) {
- var_dump($params);
- }
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Logging/SQLLogger.php b/lib/Doctrine/DBAL/Logging/SQLLogger.php
deleted file mode 100644
index a8b01a3bd..000000000
--- a/lib/Doctrine/DBAL/Logging/SQLLogger.php
+++ /dev/null
@@ -1,45 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Logging;
-
-/**
- * Interface for SQL loggers.
- *
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @link www.doctrine-project.org
- * @since 2.0
- * @version $Revision$
- * @author Benjamin Eberlei
- * @author Guilherme Blanco
- * @author Jonathan Wage
- * @author Roman Borschel
- */
-interface SQLLogger
-{
- /**
- * Logs a SQL statement somewhere.
- *
- * @param string $sql The SQL to be executed.
- * @param array $params The SQL parameters.
- */
- function logSQL($sql, array $params = null);
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Platforms/AbstractPlatform.php b/lib/Doctrine/DBAL/Platforms/AbstractPlatform.php
deleted file mode 100644
index 2bcb7d0ed..000000000
--- a/lib/Doctrine/DBAL/Platforms/AbstractPlatform.php
+++ /dev/null
@@ -1,1904 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Platforms;
-
-use Doctrine\DBAL\DBALException,
- Doctrine\DBAL\Connection,
- Doctrine\DBAL\Types,
- Doctrine\DBAL\Schema\Table,
- Doctrine\DBAL\Schema\Index,
- Doctrine\DBAL\Schema\ForeignKeyConstraint,
- Doctrine\DBAL\Schema\TableDiff;
-
-/**
- * Base class for all DatabasePlatforms. The DatabasePlatforms are the central
- * point of abstraction of platform-specific behaviors, features and SQL dialects.
- * They are a passive source of information.
- *
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @link www.doctrine-project.org
- * @since 2.0
- * @version $Revision: 3938 $
- * @author Guilherme Blanco
- * @author Jonathan Wage
- * @author Roman Borschel
- * @author Lukas Smith (PEAR MDB2 library)
- * @todo Remove any unnecessary methods.
- */
-abstract class AbstractPlatform
-{
- /**
- * @var int
- */
- const CREATE_INDEXES = 1;
-
- /**
- * @var int
- */
- const CREATE_FOREIGNKEYS = 2;
-
- /**
- * @var int
- */
- const TRIM_UNSPECIFIED = 0;
-
- /**
- * @var int
- */
- const TRIM_LEADING = 1;
-
- /**
- * @var int
- */
- const TRIM_TRAILING = 2;
-
- /**
- * @var int
- */
- const TRIM_BOTH = 3;
-
- /**
- * Constructor.
- */
- public function __construct() {}
-
- /**
- * Gets the character used for identifier quoting.
- *
- * @return string
- */
- public function getIdentifierQuoteCharacter()
- {
- return '"';
- }
-
- /**
- * Gets the string portion that starts an SQL comment.
- *
- * @return string
- */
- public function getSqlCommentStartString()
- {
- return "--";
- }
-
- /**
- * Gets the string portion that ends an SQL comment.
- *
- * @return string
- */
- public function getSqlCommentEndString()
- {
- return "\n";
- }
-
- /**
- * Gets the maximum length of a varchar field.
- *
- * @return integer
- */
- public function getVarcharMaxLength()
- {
- return 255;
- }
-
- /**
- * Gets all SQL wildcard characters of the platform.
- *
- * @return array
- */
- public function getWildcards()
- {
- return array('%', '_');
- }
-
- /**
- * Returns the regular expression operator.
- *
- * @return string
- */
- public function getRegexpExpression()
- {
- throw DBALException::notSupported(__METHOD__);
- }
-
- /**
- * Returns the average value of a column
- *
- * @param string $column the column to use
- * @return string generated sql including an AVG aggregate function
- */
- public function getAvgExpression($column)
- {
- return 'AVG(' . $column . ')';
- }
-
- /**
- * Returns the number of rows (without a NULL value) of a column
- *
- * If a '*' is used instead of a column the number of selected rows
- * is returned.
- *
- * @param string|integer $column the column to use
- * @return string generated sql including a COUNT aggregate function
- */
- public function getCountExpression($column)
- {
- return 'COUNT(' . $column . ')';
- }
-
- /**
- * Returns the highest value of a column
- *
- * @param string $column the column to use
- * @return string generated sql including a MAX aggregate function
- */
- public function getMaxExpression($column)
- {
- return 'MAX(' . $column . ')';
- }
-
- /**
- * Returns the lowest value of a column
- *
- * @param string $column the column to use
- * @return string
- */
- public function getMinExpression($column)
- {
- return 'MIN(' . $column . ')';
- }
-
- /**
- * Returns the total sum of a column
- *
- * @param string $column the column to use
- * @return string
- */
- public function getSumExpression($column)
- {
- return 'SUM(' . $column . ')';
- }
-
- // scalar functions
-
- /**
- * Returns the md5 sum of a field.
- *
- * Note: Not SQL92, but common functionality
- *
- * @return string
- */
- public function getMd5Expression($column)
- {
- return 'MD5(' . $column . ')';
- }
-
- /**
- * Returns the length of a text field.
- *
- * @param string $expression1
- * @param string $expression2
- * @return string
- */
- public function getLengthExpression($column)
- {
- return 'LENGTH(' . $column . ')';
- }
-
- /**
- * Rounds a numeric field to the number of decimals specified.
- *
- * @param string $expression1
- * @param string $expression2
- * @return string
- */
- public function getRoundExpression($column, $decimals = 0)
- {
- return 'ROUND(' . $column . ', ' . $decimals . ')';
- }
-
- /**
- * Returns the remainder of the division operation
- * $expression1 / $expression2.
- *
- * @param string $expression1
- * @param string $expression2
- * @return string
- */
- public function getModExpression($expression1, $expression2)
- {
- return 'MOD(' . $expression1 . ', ' . $expression2 . ')';
- }
-
- /**
- * Trim a string, leading/trailing/both and with a given char which defaults to space.
- *
- * @param string $str
- * @param int $pos
- * @param string $char has to be quoted already
- * @return string
- */
- public function getTrimExpression($str, $pos = self::TRIM_UNSPECIFIED, $char = false)
- {
- $posStr = '';
- $trimChar = ($char != false) ? $char . ' FROM ' : '';
-
- if ($pos == self::TRIM_LEADING) {
- $posStr = 'LEADING '.$trimChar;
- } else if($pos == self::TRIM_TRAILING) {
- $posStr = 'TRAILING '.$trimChar;
- } else if($pos == self::TRIM_BOTH) {
- $posStr = 'BOTH '.$trimChar;
- }
-
- return 'TRIM(' . $posStr . $str . ')';
- }
-
- /**
- * rtrim
- * returns the string $str with proceeding space characters removed
- *
- * @param string $str literal string or column name
- * @return string
- */
- public function getRtrimExpression($str)
- {
- return 'RTRIM(' . $str . ')';
- }
-
- /**
- * ltrim
- * returns the string $str with leading space characters removed
- *
- * @param string $str literal string or column name
- * @return string
- */
- public function getLtrimExpression($str)
- {
- return 'LTRIM(' . $str . ')';
- }
-
- /**
- * upper
- * Returns the string $str with all characters changed to
- * uppercase according to the current character set mapping.
- *
- * @param string $str literal string or column name
- * @return string
- */
- public function getUpperExpression($str)
- {
- return 'UPPER(' . $str . ')';
- }
-
- /**
- * lower
- * Returns the string $str with all characters changed to
- * lowercase according to the current character set mapping.
- *
- * @param string $str literal string or column name
- * @return string
- */
- public function getLowerExpression($str)
- {
- return 'LOWER(' . $str . ')';
- }
-
- /**
- * returns the position of the first occurrence of substring $substr in string $str
- *
- * @param string $substr literal string to find
- * @param string $str literal string
- * @param int $pos position to start at, beginning of string by default
- * @return integer
- */
- public function getLocateExpression($str, $substr, $startPos = false)
- {
- throw DBALException::notSupported(__METHOD__);
- }
-
- /**
- * Returns the current system date.
- *
- * @return string
- */
- public function getNowExpression()
- {
- return 'NOW()';
- }
-
- /**
- * return string to call a function to get a substring inside an SQL statement
- *
- * Note: Not SQL92, but common functionality.
- *
- * SQLite only supports the 2 parameter variant of this function
- *
- * @param string $value an sql string literal or column name/alias
- * @param integer $from where to start the substring portion
- * @param integer $len the substring portion length
- * @return string
- */
- public function getSubstringExpression($value, $from, $len = null)
- {
- if ($len === null)
- return 'SUBSTRING(' . $value . ' FROM ' . $from . ')';
- else {
- return 'SUBSTRING(' . $value . ' FROM ' . $from . ' FOR ' . $len . ')';
- }
- }
-
- /**
- * Returns a series of strings concatinated
- *
- * concat() accepts an arbitrary number of parameters. Each parameter
- * must contain an expression
- *
- * @param string $arg1, $arg2 ... $argN strings that will be concatinated.
- * @return string
- */
- public function getConcatExpression()
- {
- return join(' || ' , func_get_args());
- }
-
- /**
- * Returns the SQL for a logical not.
- *
- * Example:
- *
- * $q = new Doctrine_Query();
- * $e = $q->expr;
- * $q->select('*')->from('table')
- * ->where($e->eq('id', $e->not('null'));
- *
- *
- * @return string a logical expression
- */
- public function getNotExpression($expression)
- {
- return 'NOT(' . $expression . ')';
- }
-
- /**
- * Returns the SQL to check if a value is one in a set of
- * given values.
- *
- * in() accepts an arbitrary number of parameters. The first parameter
- * must always specify the value that should be matched against. Successive
- * must contain a logical expression or an array with logical expressions.
- * These expressions will be matched against the first parameter.
- *
- * @param string $column the value that should be matched against
- * @param string|array(string) values that will be matched against $column
- * @return string logical expression
- */
- public function getInExpression($column, $values)
- {
- if ( ! is_array($values)) {
- $values = array($values);
- }
- $values = $this->getIdentifiers($values);
-
- if (count($values) == 0) {
- throw \InvalidArgumentException('Values must not be empty.');
- }
- return $column . ' IN (' . implode(', ', $values) . ')';
- }
-
- /**
- * Returns SQL that checks if a expression is null.
- *
- * @param string $expression the expression that should be compared to null
- * @return string logical expression
- */
- public function getIsNullExpression($expression)
- {
- return $expression . ' IS NULL';
- }
-
- /**
- * Returns SQL that checks if a expression is not null.
- *
- * @param string $expression the expression that should be compared to null
- * @return string logical expression
- */
- public function getIsNotNullExpression($expression)
- {
- return $expression . ' IS NOT NULL';
- }
-
- /**
- * Returns SQL that checks if an expression evaluates to a value between
- * two values.
- *
- * The parameter $expression is checked if it is between $value1 and $value2.
- *
- * Note: There is a slight difference in the way BETWEEN works on some databases.
- * http://www.w3schools.com/sql/sql_between.asp. If you want complete database
- * independence you should avoid using between().
- *
- * @param string $expression the value to compare to
- * @param string $value1 the lower value to compare with
- * @param string $value2 the higher value to compare with
- * @return string logical expression
- */
- public function getBetweenExpression($expression, $value1, $value2)
- {
- return $expression . ' BETWEEN ' .$value1 . ' AND ' . $value2;
- }
-
- public function getAcosExpression($value)
- {
- return 'ACOS(' . $value . ')';
- }
-
- public function getSinExpression($value)
- {
- return 'SIN(' . $value . ')';
- }
-
- public function getPiExpression()
- {
- return 'PI()';
- }
-
- public function getCosExpression($value)
- {
- return 'COS(' . $value . ')';
- }
-
- public function getForUpdateSQL()
- {
- return 'FOR UPDATE';
- }
-
- /**
- * Honors that some SQL vendors such as MsSql use table hints for locking instead of the ANSI SQL FOR UPDATE specification.
- *
- * @param string $fromClause
- * @param int $lockMode
- * @return string
- */
- public function appendLockHint($fromClause, $lockMode)
- {
- return $fromClause;
- }
-
- /**
- * Get the sql snippet to append to any SELECT statement which locks rows in shared read lock.
- *
- * This defaults to the ASNI SQL "FOR UPDATE", which is an exclusive lock (Write). Some database
- * vendors allow to lighten this constraint up to be a real read lock.
- *
- * @return string
- */
- public function getReadLockSQL()
- {
- return $this->getForUpdateSQL();
- }
-
- /**
- * Get the SQL snippet to append to any SELECT statement which obtains an exclusive lock on the rows.
- *
- * The semantics of this lock mode should equal the SELECT .. FOR UPDATE of the ASNI SQL standard.
- *
- * @return string
- */
- public function getWriteLockSQL()
- {
- return $this->getForUpdateSQL();
- }
-
- public function getDropDatabaseSQL($database)
- {
- return 'DROP DATABASE ' . $database;
- }
-
- /**
- * Drop a Table
- *
- * @param Table|string $table
- * @return string
- */
- public function getDropTableSQL($table)
- {
- if ($table instanceof \Doctrine\DBAL\Schema\Table) {
- $table = $table->getName();
- }
-
- return 'DROP TABLE ' . $table;
- }
-
- /**
- * Drop index from a table
- *
- * @param Index|string $name
- * @param string|Table $table
- * @return string
- */
- public function getDropIndexSQL($index, $table=null)
- {
- if($index instanceof \Doctrine\DBAL\Schema\Index) {
- $index = $index->getName();
- } else if(!is_string($index)) {
- throw new \InvalidArgumentException('AbstractPlatform::getDropIndexSQL() expects $index parameter to be string or \Doctrine\DBAL\Schema\Index.');
- }
-
- return 'DROP INDEX ' . $index;
- }
-
- /**
- * Get drop constraint sql
- *
- * @param \Doctrine\DBAL\Schema\Constraint $constraint
- * @param string|Table $table
- * @return string
- */
- public function getDropConstraintSQL($constraint, $table)
- {
- if ($constraint instanceof \Doctrine\DBAL\Schema\Constraint) {
- $constraint = $constraint->getName();
- }
-
- if ($table instanceof \Doctrine\DBAL\Schema\Table) {
- $table = $table->getName();
- }
-
- return 'ALTER TABLE ' . $table . ' DROP CONSTRAINT ' . $constraint;
- }
-
- /**
- * @param ForeignKeyConstraint|string $foreignKey
- * @param Table|string $table
- * @return string
- */
- public function getDropForeignKeySQL($foreignKey, $table)
- {
- if ($foreignKey instanceof \Doctrine\DBAL\Schema\ForeignKeyConstraint) {
- $foreignKey = $foreignKey->getName();
- }
-
- if ($table instanceof \Doctrine\DBAL\Schema\Table) {
- $table = $table->getName();
- }
-
- return 'ALTER TABLE ' . $table . ' DROP FOREIGN KEY ' . $foreignKey;
- }
-
- /**
- * Gets the SQL statement(s) to create a table with the specified name, columns and constraints
- * on this platform.
- *
- * @param string $table The name of the table.
- * @param int $createFlags
- * @return array The sequence of SQL statements.
- */
- public function getCreateTableSQL(Table $table, $createFlags=self::CREATE_INDEXES)
- {
- if ( ! is_int($createFlags)) {
- throw new \InvalidArgumentException("Second argument of AbstractPlatform::getCreateTableSQL() has to be integer.");
- }
-
- if (count($table->getColumns()) == 0) {
- throw DBALException::noColumnsSpecifiedForTable($table->getName());
- }
-
- $tableName = $table->getName();
- $options = $table->getOptions();
- $options['uniqueConstraints'] = array();
- $options['indexes'] = array();
- $options['primary'] = array();
-
- if (($createFlags&self::CREATE_INDEXES) > 0) {
- foreach ($table->getIndexes() AS $index) {
- /* @var $index Index */
- if ($index->isPrimary()) {
- $options['primary'] = $index->getColumns();
- } else {
- $options['indexes'][$index->getName()] = $index;
- }
- }
- }
-
- $columns = array();
- foreach ($table->getColumns() AS $column) {
- /* @var \Doctrine\DBAL\Schema\Column $column */
- $columnData = array();
- $columnData['name'] = $column->getName();
- $columnData['type'] = $column->getType();
- $columnData['length'] = $column->getLength();
- $columnData['notnull'] = $column->getNotNull();
- $columnData['unique'] = ($column->hasPlatformOption("unique"))?$column->getPlatformOption('unique'):false;
- $columnData['version'] = ($column->hasPlatformOption("version"))?$column->getPlatformOption('version'):false;
- if(strtolower($columnData['type']) == "string" && $columnData['length'] === null) {
- $columnData['length'] = 255;
- }
- $columnData['precision'] = $column->getPrecision();
- $columnData['scale'] = $column->getScale();
- $columnData['default'] = $column->getDefault();
- $columnData['columnDefinition'] = $column->getColumnDefinition();
-
- if(in_array($column->getName(), $options['primary'])) {
- $columnData['primary'] = true;
-
- if($table->isIdGeneratorIdentity()) {
- $columnData['autoincrement'] = true;
- }
- }
-
- $columns[$columnData['name']] = $columnData;
- }
-
- if (($createFlags&self::CREATE_FOREIGNKEYS) > 0) {
- $options['foreignKeys'] = array();
- foreach ($table->getForeignKeys() AS $fkConstraint) {
- $options['foreignKeys'][] = $fkConstraint;
- }
- }
-
- return $this->_getCreateTableSQL($tableName, $columns, $options);
- }
-
- /**
- * @param string $tableName
- * @param array $columns
- * @param array $options
- * @return array
- */
- protected function _getCreateTableSQL($tableName, array $columns, array $options = array())
- {
- $columnListSql = $this->getColumnDeclarationListSQL($columns);
-
- if (isset($options['uniqueConstraints']) && ! empty($options['uniqueConstraints'])) {
- foreach ($options['uniqueConstraints'] as $name => $definition) {
- $columnListSql .= ', ' . $this->getUniqueConstraintDeclarationSQL($name, $definition);
- }
- }
-
- if (isset($options['primary']) && ! empty($options['primary'])) {
- $columnListSql .= ', PRIMARY KEY(' . implode(', ', array_unique(array_values($options['primary']))) . ')';
- }
-
- if (isset($options['indexes']) && ! empty($options['indexes'])) {
- foreach($options['indexes'] as $index => $definition) {
- $columnListSql .= ', ' . $this->getIndexDeclarationSQL($index, $definition);
- }
- }
-
- $query = 'CREATE TABLE ' . $tableName . ' (' . $columnListSql;
-
- $check = $this->getCheckDeclarationSQL($columns);
- if ( ! empty($check)) {
- $query .= ', ' . $check;
- }
- $query .= ')';
-
- $sql[] = $query;
-
- if (isset($options['foreignKeys'])) {
- foreach ((array) $options['foreignKeys'] AS $definition) {
- $sql[] = $this->getCreateForeignKeySQL($definition, $tableName);
- }
- }
-
- return $sql;
- }
-
- public function getCreateTemporaryTableSnippetSQL()
- {
- return "CREATE TEMPORARY TABLE";
- }
-
- /**
- * Gets the SQL to create a sequence on this platform.
- *
- * @param \Doctrine\DBAL\Schema\Sequence $sequence
- * @throws DBALException
- */
- public function getCreateSequenceSQL(\Doctrine\DBAL\Schema\Sequence $sequence)
- {
- throw DBALException::notSupported(__METHOD__);
- }
-
- /**
- * Gets the SQL to create a constraint on a table on this platform.
- *
- * @param Constraint $constraint
- * @param string|Table $table
- * @return string
- */
- public function getCreateConstraintSQL(\Doctrine\DBAL\Schema\Constraint $constraint, $table)
- {
- if ($table instanceof \Doctrine\DBAL\Schema\Table) {
- $table = $table->getName();
- }
-
- $query = 'ALTER TABLE ' . $table . ' ADD CONSTRAINT ' . $constraint->getName();
-
- $columns = array();
- foreach ($constraint->getColumns() as $column) {
- $columns[] = $column;
- }
- $columnList = '('. implode(', ', $columns) . ')';
-
- $referencesClause = '';
- if ($constraint instanceof \Doctrine\DBAL\Schema\Index) {
- if($constraint->isPrimary()) {
- $query .= ' PRIMARY KEY';
- } elseif ($constraint->isUnique()) {
- $query .= ' UNIQUE';
- } else {
- throw new \InvalidArgumentException(
- 'Can only create primary or unique constraints, no common indexes with getCreateConstraintSQL().'
- );
- }
- } else if ($constraint instanceof \Doctrine\DBAL\Schema\ForeignKeyConstraint) {
- $query .= ' FOREIGN KEY';
-
- $foreignColumns = array();
- foreach ($constraint->getForeignColumns() AS $column) {
- $foreignColumns[] = $column;
- }
-
- $referencesClause = ' REFERENCES '.$constraint->getForeignTableName(). ' ('.implode(', ', $foreignColumns).')';
- }
- $query .= ' '.$columnList.$referencesClause;
-
- return $query;
- }
-
- /**
- * Gets the SQL to create an index on a table on this platform.
- *
- * @param Index $index
- * @param string|Table $table name of the table on which the index is to be created
- * @return string
- */
- public function getCreateIndexSQL(Index $index, $table)
- {
- if ($table instanceof Table) {
- $table = $table->getName();
- }
- $name = $index->getName();
- $columns = $index->getColumns();
-
- if (count($columns) == 0) {
- throw new \InvalidArgumentException("Incomplete definition. 'columns' required.");
- }
-
- $type = '';
- if ($index->isUnique()) {
- $type = 'UNIQUE ';
- }
-
- $query = 'CREATE ' . $type . 'INDEX ' . $name . ' ON ' . $table;
-
- $query .= ' (' . $this->getIndexFieldDeclarationListSQL($columns) . ')';
-
- return $query;
- }
-
- /**
- * Quotes a string so that it can be safely used as a table or column name,
- * even if it is a reserved word of the platform.
- *
- * NOTE: Just because you CAN use quoted identifiers doesn't mean
- * you SHOULD use them. In general, they end up causing way more
- * problems than they solve.
- *
- * @param string $str identifier name to be quoted
- * @return string quoted identifier string
- */
- public function quoteIdentifier($str)
- {
- $c = $this->getIdentifierQuoteCharacter();
-
- return $c . $str . $c;
- }
-
- /**
- * Create a new foreign key
- *
- * @param ForeignKeyConstraint $foreignKey ForeignKey instance
- * @param string|Table $table name of the table on which the foreign key is to be created
- * @return string
- */
- public function getCreateForeignKeySQL(ForeignKeyConstraint $foreignKey, $table)
- {
- if ($table instanceof \Doctrine\DBAL\Schema\Table) {
- $table = $table->getName();
- }
-
- $query = 'ALTER TABLE ' . $table . ' ADD ' . $this->getForeignKeyDeclarationSQL($foreignKey);
-
- return $query;
- }
-
- /**
- * Gets the sql statements for altering an existing table.
- *
- * The method returns an array of sql statements, since some platforms need several statements.
- *
- * @param TableDiff $diff
- * @return array
- */
- public function getAlterTableSQL(TableDiff $diff)
- {
- throw DBALException::notSupported(__METHOD__);
- }
-
- /**
- * Common code for alter table statement generation that updates the changed Index and Foreign Key definitions.
- *
- * @param TableDiff $diff
- * @return array
- */
- protected function _getAlterTableIndexForeignKeySQL(TableDiff $diff)
- {
- if ($diff->newName !== false) {
- $tableName = $diff->newName;
- } else {
- $tableName = $diff->name;
- }
-
- $sql = array();
- if ($this->supportsForeignKeyConstraints()) {
- foreach ($diff->removedForeignKeys AS $foreignKey) {
- $sql[] = $this->getDropForeignKeySQL($foreignKey, $tableName);
- }
- foreach ($diff->addedForeignKeys AS $foreignKey) {
- $sql[] = $this->getCreateForeignKeySQL($foreignKey, $tableName);
- }
- foreach ($diff->changedForeignKeys AS $foreignKey) {
- $sql[] = $this->getDropForeignKeySQL($foreignKey, $tableName);
- $sql[] = $this->getCreateForeignKeySQL($foreignKey, $tableName);
- }
- }
-
- foreach ($diff->addedIndexes AS $index) {
- $sql[] = $this->getCreateIndexSQL($index, $tableName);
- }
- foreach ($diff->removedIndexes AS $index) {
- $sql[] = $this->getDropIndexSQL($index, $tableName);
- }
- foreach ($diff->changedIndexes AS $index) {
- $sql[] = $this->getDropIndexSQL($index, $tableName);
- $sql[] = $this->getCreateIndexSQL($index, $tableName);
- }
-
- return $sql;
- }
-
- /**
- * Get declaration of a number of fields in bulk
- *
- * @param array $fields a multidimensional associative array.
- * The first dimension determines the field name, while the second
- * dimension is keyed with the name of the properties
- * of the field being declared as array indexes. Currently, the types
- * of supported field properties are as follows:
- *
- * length
- * Integer value that determines the maximum length of the text
- * field. If this argument is missing the field should be
- * declared to have the longest length allowed by the DBMS.
- *
- * default
- * Text value to be used as default for this field.
- *
- * notnull
- * Boolean flag that indicates whether this field is constrained
- * to not be set to null.
- * charset
- * Text value with the default CHARACTER SET for this field.
- * collation
- * Text value with the default COLLATION for this field.
- * unique
- * unique constraint
- *
- * @return string
- */
- public function getColumnDeclarationListSQL(array $fields)
- {
- $queryFields = array();
- foreach ($fields as $fieldName => $field) {
- $query = $this->getColumnDeclarationSQL($fieldName, $field);
- $queryFields[] = $query;
- }
- return implode(', ', $queryFields);
- }
-
- /**
- * Obtain DBMS specific SQL code portion needed to declare a generic type
- * field to be used in statements like CREATE TABLE.
- *
- * @param string $name name the field to be declared.
- * @param array $field associative array with the name of the properties
- * of the field being declared as array indexes. Currently, the types
- * of supported field properties are as follows:
- *
- * length
- * Integer value that determines the maximum length of the text
- * field. If this argument is missing the field should be
- * declared to have the longest length allowed by the DBMS.
- *
- * default
- * Text value to be used as default for this field.
- *
- * notnull
- * Boolean flag that indicates whether this field is constrained
- * to not be set to null.
- * charset
- * Text value with the default CHARACTER SET for this field.
- * collation
- * Text value with the default COLLATION for this field.
- * unique
- * unique constraint
- * check
- * column check constraint
- * columnDefinition
- * a string that defines the complete column
- *
- * @return string DBMS specific SQL code portion that should be used to declare the column.
- */
- public function getColumnDeclarationSQL($name, array $field)
- {
- if (isset($field['columnDefinition'])) {
- $columnDef = $this->getCustomTypeDeclarationSQL($field);
- } else {
- $default = $this->getDefaultValueDeclarationSQL($field);
-
- $charset = (isset($field['charset']) && $field['charset']) ?
- ' ' . $this->getColumnCharsetDeclarationSQL($field['charset']) : '';
-
- $collation = (isset($field['collation']) && $field['collation']) ?
- ' ' . $this->getColumnCollationDeclarationSQL($field['collation']) : '';
-
- $notnull = (isset($field['notnull']) && $field['notnull']) ? ' NOT NULL' : '';
-
- $unique = (isset($field['unique']) && $field['unique']) ?
- ' ' . $this->getUniqueFieldDeclarationSQL() : '';
-
- $check = (isset($field['check']) && $field['check']) ?
- ' ' . $field['check'] : '';
-
- $typeDecl = $field['type']->getSqlDeclaration($field, $this);
- $columnDef = $typeDecl . $charset . $default . $notnull . $unique . $check . $collation;
- }
-
- return $name . ' ' . $columnDef;
- }
-
- /**
- * Gets the SQL snippet that declares a floating point column of arbitrary precision.
- *
- * @param array $columnDef
- * @return string
- */
- public function getDecimalTypeDeclarationSQL(array $columnDef)
- {
- $columnDef['precision'] = ( ! isset($columnDef['precision']) || empty($columnDef['precision']))
- ? 10 : $columnDef['precision'];
- $columnDef['scale'] = ( ! isset($columnDef['scale']) || empty($columnDef['scale']))
- ? 0 : $columnDef['scale'];
-
- return 'NUMERIC(' . $columnDef['precision'] . ', ' . $columnDef['scale'] . ')';
- }
-
- /**
- * Gets the SQL snippet that declares a boolean column.
- *
- * @param array $columnDef
- * @return string
- */
- abstract public function getBooleanTypeDeclarationSQL(array $columnDef);
-
- /**
- * Gets the SQL snippet that declares a 4 byte integer column.
- *
- * @param array $columnDef
- * @return string
- */
- abstract public function getIntegerTypeDeclarationSQL(array $columnDef);
-
- /**
- * Gets the SQL snippet that declares an 8 byte integer column.
- *
- * @param array $columnDef
- * @return string
- */
- abstract public function getBigIntTypeDeclarationSQL(array $columnDef);
-
- /**
- * Gets the SQL snippet that declares a 2 byte integer column.
- *
- * @param array $columnDef
- * @return string
- */
- abstract public function getSmallIntTypeDeclarationSQL(array $columnDef);
-
- /**
- * Gets the SQL snippet that declares common properties of an integer column.
- *
- * @param array $columnDef
- * @return string
- */
- abstract protected function _getCommonIntegerTypeDeclarationSQL(array $columnDef);
-
- /**
- * Obtain DBMS specific SQL code portion needed to set a default value
- * declaration to be used in statements like CREATE TABLE.
- *
- * @param array $field field definition array
- * @return string DBMS specific SQL code portion needed to set a default value
- */
- public function getDefaultValueDeclarationSQL($field)
- {
- $default = empty($field['notnull']) ? ' DEFAULT NULL' : '';
-
- if (isset($field['default'])) {
- $default = " DEFAULT '".$field['default']."'";
- if (isset($field['type'])) {
- if (in_array((string)$field['type'], array("Integer", "BigInteger", "SmallInteger"))) {
- $default = " DEFAULT ".$field['default'];
- } else if ((string)$field['type'] == 'DateTime' && $field['default'] == $this->getCurrentTimestampSQL()) {
- $default = " DEFAULT ".$this->getCurrentTimestampSQL();
- }
- }
- }
- return $default;
- }
-
- /**
- * Obtain DBMS specific SQL code portion needed to set a CHECK constraint
- * declaration to be used in statements like CREATE TABLE.
- *
- * @param array $definition check definition
- * @return string DBMS specific SQL code portion needed to set a CHECK constraint
- */
- public function getCheckDeclarationSQL(array $definition)
- {
- $constraints = array();
- foreach ($definition as $field => $def) {
- if (is_string($def)) {
- $constraints[] = 'CHECK (' . $def . ')';
- } else {
- if (isset($def['min'])) {
- $constraints[] = 'CHECK (' . $field . ' >= ' . $def['min'] . ')';
- }
-
- if (isset($def['max'])) {
- $constraints[] = 'CHECK (' . $field . ' <= ' . $def['max'] . ')';
- }
- }
- }
-
- return implode(', ', $constraints);
- }
-
- /**
- * Obtain DBMS specific SQL code portion needed to set a unique
- * constraint declaration to be used in statements like CREATE TABLE.
- *
- * @param string $name name of the unique constraint
- * @param Index $index index definition
- * @return string DBMS specific SQL code portion needed
- * to set a constraint
- */
- public function getUniqueConstraintDeclarationSQL($name, Index $index)
- {
- if (count($index->getColumns()) == 0) {
- throw \InvalidArgumentException("Incomplete definition. 'columns' required.");
- }
-
- return 'CONSTRAINT ' . $name . ' UNIQUE ('
- . $this->getIndexFieldDeclarationListSQL($index->getColumns())
- . ')';
- }
-
- /**
- * Obtain DBMS specific SQL code portion needed to set an index
- * declaration to be used in statements like CREATE TABLE.
- *
- * @param string $name name of the index
- * @param Index $index index definition
- * @return string DBMS specific SQL code portion needed to set an index
- */
- public function getIndexDeclarationSQL($name, Index $index)
- {
- $type = '';
-
- if($index->isUnique()) {
- $type = 'UNIQUE ';
- }
-
- if (count($index->getColumns()) == 0) {
- throw \InvalidArgumentException("Incomplete definition. 'columns' required.");
- }
-
- return $type . 'INDEX ' . $name . ' ('
- . $this->getIndexFieldDeclarationListSQL($index->getColumns())
- . ')';
- }
-
- /**
- * getCustomTypeDeclarationSql
- * Obtail SQL code portion needed to create a custom column,
- * e.g. when a field has the "columnDefinition" keyword.
- * Only "AUTOINCREMENT" and "PRIMARY KEY" are added if appropriate.
- *
- * @return string
- */
- public function getCustomTypeDeclarationSQL(array $columnDef)
- {
- return $columnDef['columnDefinition'];
- }
-
- /**
- * getIndexFieldDeclarationList
- * Obtain DBMS specific SQL code portion needed to set an index
- * declaration to be used in statements like CREATE TABLE.
- *
- * @return string
- */
- public function getIndexFieldDeclarationListSQL(array $fields)
- {
- $ret = array();
- foreach ($fields as $field => $definition) {
- if (is_array($definition)) {
- $ret[] = $field;
- } else {
- $ret[] = $definition;
- }
- }
- return implode(', ', $ret);
- }
-
- /**
- * A method to return the required SQL string that fits between CREATE ... TABLE
- * to create the table as a temporary table.
- *
- * Should be overridden in driver classes to return the correct string for the
- * specific database type.
- *
- * The default is to return the string "TEMPORARY" - this will result in a
- * SQL error for any database that does not support temporary tables, or that
- * requires a different SQL command from "CREATE TEMPORARY TABLE".
- *
- * @return string The string required to be placed between "CREATE" and "TABLE"
- * to generate a temporary table, if possible.
- */
- public function getTemporaryTableSQL()
- {
- return 'TEMPORARY';
- }
-
- /**
- * Some vendors require temporary table names to be qualified specially.
- *
- * @param string $tableName
- * @return string
- */
- public function getTemporaryTableName($tableName)
- {
- return $tableName;
- }
-
- /**
- * Get sql query to show a list of database.
- *
- * @return string
- */
- public function getShowDatabasesSQL()
- {
- throw DBALException::notSupported(__METHOD__);
- }
-
- /**
- * Obtain DBMS specific SQL code portion needed to set the FOREIGN KEY constraint
- * of a field declaration to be used in statements like CREATE TABLE.
- *
- * @param array $definition an associative array with the following structure:
- * name optional constraint name
- *
- * local the local field(s)
- *
- * foreign the foreign reference field(s)
- *
- * foreignTable the name of the foreign table
- *
- * onDelete referential delete action
- *
- * onUpdate referential update action
- *
- * deferred deferred constraint checking
- *
- * The onDelete and onUpdate keys accept the following values:
- *
- * CASCADE: Delete or update the row from the parent table and automatically delete or
- * update the matching rows in the child table. Both ON DELETE CASCADE and ON UPDATE CASCADE are supported.
- * Between two tables, you should not define several ON UPDATE CASCADE clauses that act on the same column
- * in the parent table or in the child table.
- *
- * SET NULL: Delete or update the row from the parent table and set the foreign key column or columns in the
- * child table to NULL. This is valid only if the foreign key columns do not have the NOT NULL qualifier
- * specified. Both ON DELETE SET NULL and ON UPDATE SET NULL clauses are supported.
- *
- * NO ACTION: In standard SQL, NO ACTION means no action in the sense that an attempt to delete or update a primary
- * key value is not allowed to proceed if there is a related foreign key value in the referenced table.
- *
- * RESTRICT: Rejects the delete or update operation for the parent table. NO ACTION and RESTRICT are the same as
- * omitting the ON DELETE or ON UPDATE clause.
- *
- * SET DEFAULT
- *
- * @return string DBMS specific SQL code portion needed to set the FOREIGN KEY constraint
- * of a field declaration.
- */
- public function getForeignKeyDeclarationSQL(ForeignKeyConstraint $foreignKey)
- {
- $sql = $this->getForeignKeyBaseDeclarationSQL($foreignKey);
- $sql .= $this->getAdvancedForeignKeyOptionsSQL($foreignKey);
-
- return $sql;
- }
-
- /**
- * Return the FOREIGN KEY query section dealing with non-standard options
- * as MATCH, INITIALLY DEFERRED, ON UPDATE, ...
- *
- * @param ForeignKeyConstraint $foreignKey foreign key definition
- * @return string
- */
- public function getAdvancedForeignKeyOptionsSQL(ForeignKeyConstraint $foreignKey)
- {
- $query = '';
- if ($this->supportsForeignKeyOnUpdate() && $foreignKey->hasOption('onUpdate')) {
- $query .= ' ON UPDATE ' . $this->getForeignKeyReferentialActionSQL($foreignKey->getOption('onUpdate'));
- }
- if ($foreignKey->hasOption('onDelete')) {
- $query .= ' ON DELETE ' . $this->getForeignKeyReferentialActionSQL($foreignKey->getOption('onDelete'));
- }
- return $query;
- }
-
- /**
- * returns given referential action in uppercase if valid, otherwise throws
- * an exception
- *
- * @throws Doctrine_Exception_Exception if unknown referential action given
- * @param string $action foreign key referential action
- * @param string foreign key referential action in uppercase
- */
- public function getForeignKeyReferentialActionSQL($action)
- {
- $upper = strtoupper($action);
- switch ($upper) {
- case 'CASCADE':
- case 'SET NULL':
- case 'NO ACTION':
- case 'RESTRICT':
- case 'SET DEFAULT':
- return $upper;
- break;
- default:
- throw \InvalidArgumentException('Invalid foreign key action: ' . $upper);
- }
- }
-
- /**
- * Obtain DBMS specific SQL code portion needed to set the FOREIGN KEY constraint
- * of a field declaration to be used in statements like CREATE TABLE.
- *
- * @param ForeignKeyConstraint $foreignKey
- * @return string
- */
- public function getForeignKeyBaseDeclarationSQL(ForeignKeyConstraint $foreignKey)
- {
- $sql = '';
- if (strlen($foreignKey->getName())) {
- $sql .= 'CONSTRAINT ' . $foreignKey->getName() . ' ';
- }
- $sql .= 'FOREIGN KEY (';
-
- if (count($foreignKey->getLocalColumns()) == 0) {
- throw new \InvalidArgumentException("Incomplete definition. 'local' required.");
- }
- if (count($foreignKey->getForeignColumns()) == 0) {
- throw new \InvalidArgumentException("Incomplete definition. 'foreign' required.");
- }
- if (strlen($foreignKey->getForeignTableName()) == 0) {
- throw new \InvalidArgumentException("Incomplete definition. 'foreignTable' required.");
- }
-
- $sql .= implode(', ', $foreignKey->getLocalColumns())
- . ') REFERENCES '
- . $foreignKey->getForeignTableName() . '('
- . implode(', ', $foreignKey->getForeignColumns()) . ')';
-
- return $sql;
- }
-
- /**
- * Obtain DBMS specific SQL code portion needed to set the UNIQUE constraint
- * of a field declaration to be used in statements like CREATE TABLE.
- *
- * @return string DBMS specific SQL code portion needed to set the UNIQUE constraint
- * of a field declaration.
- */
- public function getUniqueFieldDeclarationSQL()
- {
- return 'UNIQUE';
- }
-
- /**
- * Obtain DBMS specific SQL code portion needed to set the CHARACTER SET
- * of a field declaration to be used in statements like CREATE TABLE.
- *
- * @param string $charset name of the charset
- * @return string DBMS specific SQL code portion needed to set the CHARACTER SET
- * of a field declaration.
- */
- public function getColumnCharsetDeclarationSQL($charset)
- {
- return '';
- }
-
- /**
- * Obtain DBMS specific SQL code portion needed to set the COLLATION
- * of a field declaration to be used in statements like CREATE TABLE.
- *
- * @param string $collation name of the collation
- * @return string DBMS specific SQL code portion needed to set the COLLATION
- * of a field declaration.
- */
- public function getColumnCollationDeclarationSQL($collation)
- {
- return '';
- }
-
- /**
- * Whether the platform prefers sequences for ID generation.
- * Subclasses should override this method to return TRUE if they prefer sequences.
- *
- * @return boolean
- */
- public function prefersSequences()
- {
- return false;
- }
-
- /**
- * Whether the platform prefers identity columns (eg. autoincrement) for ID generation.
- * Subclasses should override this method to return TRUE if they prefer identity columns.
- *
- * @return boolean
- */
- public function prefersIdentityColumns()
- {
- return false;
- }
-
- /**
- * Some platforms need the boolean values to be converted.
- *
- * The default conversion in this implementation converts to integers (false => 0, true => 1).
- *
- * @param mixed $item
- */
- public function convertBooleans($item)
- {
- if (is_array($item)) {
- foreach ($item as $k => $value) {
- if (is_bool($value)) {
- $item[$k] = (int) $value;
- }
- }
- } else if (is_bool($item)) {
- $item = (int) $item;
- }
- return $item;
- }
-
- /**
- * Gets the SQL statement specific for the platform to set the charset.
- *
- * This function is MySQL specific and required by
- * {@see \Doctrine\DBAL\Connection::setCharset($charset)}
- *
- * @param string $charset
- * @return string
- */
- public function getSetCharsetSQL($charset)
- {
- return "SET NAMES '".$charset."'";
- }
-
- /**
- * Gets the SQL specific for the platform to get the current date.
- *
- * @return string
- */
- public function getCurrentDateSQL()
- {
- return 'CURRENT_DATE';
- }
-
- /**
- * Gets the SQL specific for the platform to get the current time.
- *
- * @return string
- */
- public function getCurrentTimeSQL()
- {
- return 'CURRENT_TIME';
- }
-
- /**
- * Gets the SQL specific for the platform to get the current timestamp
- *
- * @return string
- */
- public function getCurrentTimestampSQL()
- {
- return 'CURRENT_TIMESTAMP';
- }
-
- /**
- * Get sql for transaction isolation level Connection constant
- *
- * @param integer $level
- */
- protected function _getTransactionIsolationLevelSQL($level)
- {
- switch ($level) {
- case Connection::TRANSACTION_READ_UNCOMMITTED:
- return 'READ UNCOMMITTED';
- case Connection::TRANSACTION_READ_COMMITTED:
- return 'READ COMMITTED';
- case Connection::TRANSACTION_REPEATABLE_READ:
- return 'REPEATABLE READ';
- case Connection::TRANSACTION_SERIALIZABLE:
- return 'SERIALIZABLE';
- default:
- throw new \InvalidArgumentException('Invalid isolation level:' . $level);
- }
- }
-
- public function getListDatabasesSQL()
- {
- throw DBALException::notSupported(__METHOD__);
- }
-
- public function getListSequencesSQL($database)
- {
- throw DBALException::notSupported(__METHOD__);
- }
-
- public function getListTableConstraintsSQL($table)
- {
- throw DBALException::notSupported(__METHOD__);
- }
-
- public function getListTableColumnsSQL($table)
- {
- throw DBALException::notSupported(__METHOD__);
- }
-
- public function getListTablesSQL()
- {
- throw DBALException::notSupported(__METHOD__);
- }
-
- public function getListUsersSQL()
- {
- throw DBALException::notSupported(__METHOD__);
- }
-
- /**
- * Get the SQL to list all views of a database or user.
- *
- * @param string $database
- * @return string
- */
- public function getListViewsSQL($database)
- {
- throw DBALException::notSupported(__METHOD__);
- }
-
- public function getListTableIndexesSQL($table)
- {
- throw DBALException::notSupported(__METHOD__);
- }
-
- public function getListTableForeignKeysSQL($table)
- {
- throw DBALException::notSupported(__METHOD__);
- }
-
- public function getCreateViewSQL($name, $sql)
- {
- throw DBALException::notSupported(__METHOD__);
- }
-
- public function getDropViewSQL($name)
- {
- throw DBALException::notSupported(__METHOD__);
- }
-
- public function getDropSequenceSQL($sequence)
- {
- throw DBALException::notSupported(__METHOD__);
- }
-
- public function getSequenceNextValSQL($sequenceName)
- {
- throw DBALException::notSupported(__METHOD__);
- }
-
- public function getCreateDatabaseSQL($database)
- {
- throw DBALException::notSupported(__METHOD__);
- }
-
- /**
- * Get sql to set the transaction isolation level
- *
- * @param integer $level
- */
- public function getSetTransactionIsolationSQL($level)
- {
- throw DBALException::notSupported(__METHOD__);
- }
-
- /**
- * Obtain DBMS specific SQL to be used to create datetime fields in
- * statements like CREATE TABLE
- *
- * @param array $fieldDeclaration
- * @return string
- */
- public function getDateTimeTypeDeclarationSQL(array $fieldDeclaration)
- {
- throw DBALException::notSupported(__METHOD__);
- }
-
- /**
- * Obtain DBMS specific SQL to be used to create date fields in statements
- * like CREATE TABLE.
- *
- * @param array $fieldDeclaration
- * @return string
- */
- public function getDateTypeDeclarationSQL(array $fieldDeclaration)
- {
- throw DBALException::notSupported(__METHOD__);
- }
-
- /**
- * Obtain DBMS specific SQL to be used to create time fields in statements
- * like CREATE TABLE.
- *
- * @param array $fieldDeclaration
- * @return string
- */
- public function getTimeTypeDeclarationSQL(array $fieldDeclaration)
- {
- throw DBALException::notSupported(__METHOD__);
- }
-
- /**
- * Gets the default transaction isolation level of the platform.
- *
- * @return integer The default isolation level.
- * @see Doctrine\DBAL\Connection\TRANSACTION_* constants.
- */
- public function getDefaultTransactionIsolationLevel()
- {
- return Connection::TRANSACTION_READ_COMMITTED;
- }
-
- /* supports*() metods */
-
- /**
- * Whether the platform supports sequences.
- *
- * @return boolean
- */
- public function supportsSequences()
- {
- return false;
- }
-
- /**
- * Whether the platform supports identity columns.
- * Identity columns are columns that recieve an auto-generated value from the
- * database on insert of a row.
- *
- * @return boolean
- */
- public function supportsIdentityColumns()
- {
- return false;
- }
-
- /**
- * Whether the platform supports indexes.
- *
- * @return boolean
- */
- public function supportsIndexes()
- {
- return true;
- }
-
- public function supportsAlterTable()
- {
- return true;
- }
-
- /**
- * Whether the platform supports transactions.
- *
- * @return boolean
- */
- public function supportsTransactions()
- {
- return true;
- }
-
- /**
- * Whether the platform supports savepoints.
- *
- * @return boolean
- */
- public function supportsSavepoints()
- {
- return true;
- }
-
- /**
- * Whether the platform supports primary key constraints.
- *
- * @return boolean
- */
- public function supportsPrimaryConstraints()
- {
- return true;
- }
-
- /**
- * Does the platform supports foreign key constraints?
- *
- * @return boolean
- */
- public function supportsForeignKeyConstraints()
- {
- return true;
- }
-
- /**
- * Does this platform supports onUpdate in foreign key constraints?
- *
- * @return bool
- */
- public function supportsForeignKeyOnUpdate()
- {
- return ($this->supportsForeignKeyConstraints() && true);
- }
-
- /**
- * Whether the platform supports database schemas.
- *
- * @return boolean
- */
- public function supportsSchemas()
- {
- return false;
- }
-
- /**
- * Some databases don't allow to create and drop databases at all or only with certain tools.
- *
- * @return bool
- */
- public function supportsCreateDropDatabase()
- {
- return true;
- }
-
- /**
- * @return bool
- */
- public function createsExplicitIndexForForeignKeys()
- {
- return false;
- }
-
- /**
- * Whether the platform supports getting the affected rows of a recent
- * update/delete type query.
- *
- * @return boolean
- */
- public function supportsGettingAffectedRows()
- {
- return true;
- }
-
- public function getIdentityColumnNullInsertSQL()
- {
- return "";
- }
-
- /**
- * Gets the format string, as accepted by the date() function, that describes
- * the format of a stored datetime value of this platform.
- *
- * @return string The format string.
- *
- * @todo We need to get the specific format for each dbms and override this
- * function for each platform
- */
- public function getDateTimeFormatString()
- {
- return 'Y-m-d H:i:s';
- }
-
- /**
- * Gets the format string, as accepted by the date() function, that describes
- * the format of a stored date value of this platform.
- *
- * @return string The format string.
- */
- public function getDateFormatString()
- {
- return 'Y-m-d';
- }
-
- /**
- * Gets the format string, as accepted by the date() function, that describes
- * the format of a stored time value of this platform.
- *
- * @return string The format string.
- */
- public function getTimeFormatString()
- {
- return 'H:i:s';
- }
-
- public function modifyLimitQuery($query, $limit, $offset = null)
- {
- if ( ! is_null($limit)) {
- $query .= ' LIMIT ' . $limit;
- }
-
- if ( ! is_null($offset)) {
- $query .= ' OFFSET ' . $offset;
- }
-
- return $query;
- }
-
- /**
- * Gets the SQL snippet used to declare a VARCHAR column type.
- *
- * @param array $field
- */
- abstract public function getVarcharTypeDeclarationSQL(array $field);
-
- /**
- * Gets the SQL snippet used to declare a CLOB column type.
- *
- * @param array $field
- */
- abstract public function getClobTypeDeclarationSQL(array $field);
-
- /**
- * Gets the name of the platform.
- *
- * @return string
- */
- abstract public function getName();
-
- /**
- * Gets the character casing of a column in an SQL result set of this platform.
- *
- * @param string $column The column name for which to get the correct character casing.
- * @return string The column name in the character casing used in SQL result sets.
- */
- public function getSQLResultCasing($column)
- {
- return $column;
- }
-
- /**
- * Makes any fixes to a name of a schema element (table, sequence, ...) that are required
- * by restrictions of the platform, like a maximum length.
- *
- * @param string $schemaName
- * @return string
- */
- public function fixSchemaElementName($schemaElementName)
- {
- return $schemaElementName;
- }
-
- /**
- * Maximum length of any given databse identifier, like tables or column names.
- *
- * @return int
- */
- public function getMaxIdentifierLength()
- {
- return 63;
- }
-
- /**
- * Get the insert sql for an empty insert statement
- *
- * @param string $tableName
- * @param string $identifierColumnName
- * @return string $sql
- */
- public function getEmptyIdentityInsertSQL($tableName, $identifierColumnName)
- {
- return 'INSERT INTO ' . $tableName . ' (' . $identifierColumnName . ') VALUES (null)';
- }
-
- /**
- * Generate a Truncate Table SQL statement for a given table.
- *
- * Cascade is not supported on many platforms but would optionally cascade the truncate by
- * following the foreign keys.
- *
- * @param string $tableName
- * @param bool $cascade
- * @return string
- */
- public function getTruncateTableSQL($tableName, $cascade = false)
- {
- return 'TRUNCATE '.$tableName;
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Platforms/DB2Platform.php b/lib/Doctrine/DBAL/Platforms/DB2Platform.php
deleted file mode 100644
index 6b5072f2a..000000000
--- a/lib/Doctrine/DBAL/Platforms/DB2Platform.php
+++ /dev/null
@@ -1,521 +0,0 @@
-.
-*/
-
-namespace Doctrine\DBAL\Platforms;
-
-use Doctrine\DBAL\DBALException;
-use Doctrine\DBAL\Schema\Index;
-use Doctrine\DBAL\Schema\TableDiff;
-
-class DB2Platform extends AbstractPlatform
-{
- /**
- * Gets the SQL snippet used to declare a VARCHAR column type.
- *
- * @param array $field
- */
- public function getVarcharTypeDeclarationSQL(array $field)
- {
- if ( ! isset($field['length'])) {
- if (array_key_exists('default', $field)) {
- $field['length'] = $this->getVarcharMaxLength();
- } else {
- $field['length'] = false;
- }
- }
-
- $length = ($field['length'] <= $this->getVarcharMaxLength()) ? $field['length'] : false;
- $fixed = (isset($field['fixed'])) ? $field['fixed'] : false;
-
- return $fixed ? ($length ? 'CHAR(' . $length . ')' : 'CHAR(255)')
- : ($length ? 'VARCHAR(' . $length . ')' : 'VARCHAR(255)');
- }
-
- /**
- * Gets the SQL snippet used to declare a CLOB column type.
- *
- * @param array $field
- */
- public function getClobTypeDeclarationSQL(array $field)
- {
- // todo clob(n) with $field['length'];
- return 'CLOB(1M)';
- }
-
- /**
- * Gets the name of the platform.
- *
- * @return string
- */
- public function getName()
- {
- return 'db2';
- }
-
-
- /**
- * Gets the SQL snippet that declares a boolean column.
- *
- * @param array $columnDef
- * @return string
- */
- public function getBooleanTypeDeclarationSQL(array $columnDef)
- {
- return 'SMALLINT';
- }
-
- /**
- * Gets the SQL snippet that declares a 4 byte integer column.
- *
- * @param array $columnDef
- * @return string
- */
- public function getIntegerTypeDeclarationSQL(array $columnDef)
- {
- return 'INTEGER' . $this->_getCommonIntegerTypeDeclarationSQL($columnDef);
- }
-
- /**
- * Gets the SQL snippet that declares an 8 byte integer column.
- *
- * @param array $columnDef
- * @return string
- */
- public function getBigIntTypeDeclarationSQL(array $columnDef)
- {
- return 'BIGINT' . $this->_getCommonIntegerTypeDeclarationSQL($columnDef);
- }
-
- /**
- * Gets the SQL snippet that declares a 2 byte integer column.
- *
- * @param array $columnDef
- * @return string
- */
- public function getSmallIntTypeDeclarationSQL(array $columnDef)
- {
- return 'SMALLINT' . $this->_getCommonIntegerTypeDeclarationSQL($columnDef);
- }
-
- /**
- * Gets the SQL snippet that declares common properties of an integer column.
- *
- * @param array $columnDef
- * @return string
- */
- protected function _getCommonIntegerTypeDeclarationSQL(array $columnDef)
- {
- $autoinc = '';
- if ( ! empty($columnDef['autoincrement'])) {
- $autoinc = ' GENERATED BY DEFAULT AS IDENTITY';
- }
- return $autoinc;
- }
-
- /**
- * Obtain DBMS specific SQL to be used to create datetime fields in
- * statements like CREATE TABLE
- *
- * @param array $fieldDeclaration
- * @return string
- */
- public function getDateTimeTypeDeclarationSQL(array $fieldDeclaration)
- {
- if (isset($fieldDeclaration['version']) && $fieldDeclaration['version'] == true) {
- return "TIMESTAMP(0) WITH DEFAULT";
- }
-
- return 'TIMESTAMP(0)';
- }
-
- /**
- * Obtain DBMS specific SQL to be used to create date fields in statements
- * like CREATE TABLE.
- *
- * @param array $fieldDeclaration
- * @return string
- */
- public function getDateTypeDeclarationSQL(array $fieldDeclaration)
- {
- return 'DATE';
- }
-
- /**
- * Obtain DBMS specific SQL to be used to create time fields in statements
- * like CREATE TABLE.
- *
- * @param array $fieldDeclaration
- * @return string
- */
- public function getTimeTypeDeclarationSQL(array $fieldDeclaration)
- {
- return 'TIME';
- }
-
- public function getListDatabasesSQL()
- {
- throw DBALException::notSupported(__METHOD__);
- }
-
- public function getListSequencesSQL($database)
- {
- throw DBALException::notSupported(__METHOD__);
- }
-
- public function getListTableConstraintsSQL($table)
- {
- throw DBALException::notSupported(__METHOD__);
- }
-
- /**
- * This code fragment is originally from the Zend_Db_Adapter_Db2 class.
- *
- * @license New BSD License
- * @param string $table
- * @return string
- */
- public function getListTableColumnsSQL($table)
- {
- return "SELECT DISTINCT c.tabschema, c.tabname, c.colname, c.colno,
- c.typename, c.default, c.nulls, c.length, c.scale,
- c.identity, tc.type AS tabconsttype, k.colseq
- FROM syscat.columns c
- LEFT JOIN (syscat.keycoluse k JOIN syscat.tabconst tc
- ON (k.tabschema = tc.tabschema
- AND k.tabname = tc.tabname
- AND tc.type = 'P'))
- ON (c.tabschema = k.tabschema
- AND c.tabname = k.tabname
- AND c.colname = k.colname)
- WHERE UPPER(c.tabname) = UPPER('" . $table . "') ORDER BY c.colno";
- }
-
- public function getListTablesSQL()
- {
- return "SELECT NAME FROM SYSIBM.SYSTABLES WHERE TYPE = 'T'";
- }
-
- public function getListUsersSQL()
- {
- throw DBALException::notSupported(__METHOD__);
- }
-
- /**
- * Get the SQL to list all views of a database or user.
- *
- * @param string $database
- * @return string
- */
- public function getListViewsSQL($database)
- {
- return "SELECT NAME, TEXT FROM SYSIBM.SYSVIEWS";
- }
-
- public function getListTableIndexesSQL($table)
- {
- return "SELECT NAME, COLNAMES, UNIQUERULE FROM SYSIBM.SYSINDEXES WHERE TBNAME = UPPER('" . $table . "')";
- }
-
- public function getListTableForeignKeysSQL($table)
- {
- return "SELECT TBNAME, RELNAME, REFTBNAME, DELETERULE, UPDATERULE, FKCOLNAMES, PKCOLNAMES ".
- "FROM SYSIBM.SYSRELS WHERE TBNAME = UPPER('".$table."')";
- }
-
- public function getCreateViewSQL($name, $sql)
- {
- return "CREATE VIEW ".$name." AS ".$sql;
- }
-
- public function getDropViewSQL($name)
- {
- return "DROP VIEW ".$name;
- }
-
- public function getDropSequenceSQL($sequence)
- {
- throw DBALException::notSupported(__METHOD__);
- }
-
- public function getSequenceNextValSQL($sequenceName)
- {
- throw DBALException::notSupported(__METHOD__);
- }
-
- public function getCreateDatabaseSQL($database)
- {
- return "CREATE DATABASE ".$database;
- }
-
- public function getDropDatabaseSQL($database)
- {
- return "DROP DATABASE ".$database.";";
- }
-
- public function supportsCreateDropDatabase()
- {
- return false;
- }
-
- /**
- * Gets the SQL specific for the platform to get the current date.
- *
- * @return string
- */
- public function getCurrentDateSQL()
- {
- return 'VALUES CURRENT DATE';
- }
-
- /**
- * Gets the SQL specific for the platform to get the current time.
- *
- * @return string
- */
- public function getCurrentTimeSQL()
- {
- return 'VALUES CURRENT TIME';
- }
-
- /**
- * Gets the SQL specific for the platform to get the current timestamp
- *
- * @return string
- */
-
- public function getCurrentTimestampSQL()
- {
- return "VALUES CURRENT TIMESTAMP";
- }
-
- /**
- * Obtain DBMS specific SQL code portion needed to set an index
- * declaration to be used in statements like CREATE TABLE.
- *
- * @param string $name name of the index
- * @param Index $index index definition
- * @return string DBMS specific SQL code portion needed to set an index
- */
- public function getIndexDeclarationSQL($name, Index $index)
- {
- return $this->getUniqueConstraintDeclarationSQL($name, $index);
- }
-
- /**
- * @param string $tableName
- * @param array $columns
- * @param array $options
- * @return array
- */
- protected function _getCreateTableSQL($tableName, array $columns, array $options = array())
- {
- $indexes = array();
- if (isset($options['indexes'])) {
- $indexes = $options['indexes'];
- }
- $options['indexes'] = array();
-
- $sqls = parent::_getCreateTableSQL($tableName, $columns, $options);
-
- foreach ($indexes as $index => $definition) {
- $sqls[] = $this->getCreateIndexSQL($definition, $tableName);
- }
- return $sqls;
- }
-
- /**
- * Gets the SQL to alter an existing table.
- *
- * @param TableDiff $diff
- * @return array
- */
- public function getAlterTableSQL(TableDiff $diff)
- {
- $sql = array();
-
- $queryParts = array();
- foreach ($diff->addedColumns AS $fieldName => $column) {
- $queryParts[] = 'ADD COLUMN ' . $this->getColumnDeclarationSQL($column->getName(), $column->toArray());
- }
-
- foreach ($diff->removedColumns AS $column) {
- $queryParts[] = 'DROP COLUMN ' . $column->getName();
- }
-
- foreach ($diff->changedColumns AS $columnDiff) {
- /* @var $columnDiff Doctrine\DBAL\Schema\ColumnDiff */
- $column = $columnDiff->column;
- $queryParts[] = 'ALTER ' . ($columnDiff->oldColumnName) . ' '
- . $this->getColumnDeclarationSQL($column->getName(), $column->toArray());
- }
-
- foreach ($diff->renamedColumns AS $oldColumnName => $column) {
- $queryParts[] = 'RENAME ' . $oldColumnName . ' TO ' . $column->getName();
- }
-
- if (count($queryParts) > 0) {
- $sql[] = 'ALTER TABLE ' . $diff->name . ' ' . implode(" ", $queryParts);
- }
-
- $sql = array_merge($sql, $this->_getAlterTableIndexForeignKeySQL($diff));
-
- if ($diff->newName !== false) {
- $sql[] = 'RENAME TABLE TO ' . $diff->newName;
- }
-
- return $sql;
- }
-
- public function getDefaultValueDeclarationSQL($field)
- {
- if (isset($field['notnull']) && $field['notnull'] && !isset($field['default'])) {
- if (in_array((string)$field['type'], array("Integer", "BigInteger", "SmallInteger"))) {
- $field['default'] = 0;
- } else if((string)$field['type'] == "DateTime") {
- $field['default'] = "00-00-00 00:00:00";
- } else if ((string)$field['type'] == "Date") {
- $field['default'] = "00-00-00";
- } else if((string)$field['type'] == "Time") {
- $field['default'] = "00:00:00";
- } else {
- $field['default'] = '';
- }
- }
-
- unset($field['default']); // @todo this needs fixing
- if (isset($field['version']) && $field['version']) {
- if ((string)$field['type'] != "DateTime") {
- $field['default'] = "1";
- }
- }
-
- return parent::getDefaultValueDeclarationSQL($field);
- }
-
- /**
- * Get the insert sql for an empty insert statement
- *
- * @param string $tableName
- * @param string $identifierColumnName
- * @return string $sql
- */
- public function getEmptyIdentityInsertSQL($tableName, $identifierColumnName)
- {
- return 'INSERT INTO ' . $tableName . ' (' . $identifierColumnName . ') VALUES (DEFAULT)';
- }
-
- public function getCreateTemporaryTableSnippetSQL()
- {
- return "DECLARE GLOBAL TEMPORARY TABLE";
- }
-
- /**
- * DB2 automatically moves temporary tables into the SESSION. schema.
- *
- * @param string $tableName
- * @return string
- */
- public function getTemporaryTableName($tableName)
- {
- return "SESSION." . $tableName;
- }
-
- public function modifyLimitQuery($query, $limit, $offset = null)
- {
- if ($limit === null && $offset === null) {
- return $query;
- }
-
- $limit = (int)$limit;
- $offset = (int)(($offset)?:0);
-
- // Todo OVER() needs ORDER BY data!
- $sql = 'SELECT db22.* FROM (SELECT ROW_NUMBER() OVER() AS DC_ROWNUM, db21.* '.
- 'FROM (' . $query . ') db21) db22 WHERE db22.DC_ROWNUM BETWEEN ' . ($offset+1) .' AND ' . ($offset+$limit);
- return $sql;
- }
-
- /**
- * returns the position of the first occurrence of substring $substr in string $str
- *
- * @param string $substr literal string to find
- * @param string $str literal string
- * @param int $pos position to start at, beginning of string by default
- * @return integer
- */
- public function getLocateExpression($str, $substr, $startPos = false)
- {
- if ($startPos == false) {
- return 'LOCATE(' . $substr . ', ' . $str . ')';
- } else {
- return 'LOCATE(' . $substr . ', ' . $str . ', '.$startPos.')';
- }
- }
-
- /**
- * return string to call a function to get a substring inside an SQL statement
- *
- * Note: Not SQL92, but common functionality.
- *
- * SQLite only supports the 2 parameter variant of this function
- *
- * @param string $value an sql string literal or column name/alias
- * @param integer $from where to start the substring portion
- * @param integer $len the substring portion length
- * @return string
- */
- public function getSubstringExpression($value, $from, $len = null)
- {
- if ($len === null)
- return 'SUBSTR(' . $value . ', ' . $from . ')';
- else {
- return 'SUBSTR(' . $value . ', ' . $from . ', ' . $len . ')';
- }
- }
-
- public function supportsIdentityColumns()
- {
- return true;
- }
-
- public function prefersIdentityColumns()
- {
- return true;
- }
-
- /**
- * Gets the character casing of a column in an SQL result set of this platform.
- *
- * DB2 returns all column names in SQL result sets in uppercase.
- *
- * @param string $column The column name for which to get the correct character casing.
- * @return string The column name in the character casing used in SQL result sets.
- */
- public function getSQLResultCasing($column)
- {
- return strtoupper($column);
- }
-
- public function getForUpdateSQL()
- {
- return ' WITH RR USE AND KEEP UPDATE LOCKS';
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Platforms/MsSqlPlatform.php b/lib/Doctrine/DBAL/Platforms/MsSqlPlatform.php
deleted file mode 100644
index 4421c170c..000000000
--- a/lib/Doctrine/DBAL/Platforms/MsSqlPlatform.php
+++ /dev/null
@@ -1,514 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Platforms;
-
-use Doctrine\DBAL\Schema\TableDiff;
-use Doctrine\DBAL\DBALException;
-
-/**
- * The MsSqlPlatform provides the behavior, features and SQL dialect of the
- * MySQL database platform.
- *
- * @since 2.0
- * @author Roman Borschel
- * @author Jonathan H. Wage
- * @author Benjamin Eberlei
- * @todo Rename: MsSQLPlatform
- */
-class MsSqlPlatform extends AbstractPlatform
-{
- /**
- * Adds an adapter-specific LIMIT clause to the SELECT statement.
- * [ borrowed from Zend Framework ]
- *
- * @param string $query
- * @param mixed $limit
- * @param mixed $offset
- * @link http://lists.bestpractical.com/pipermail/rt-devel/2005-June/007339.html
- * @return string
- * @override
- */
- public function writeLimitClause($query, $limit = false, $offset = false)
- {
- if ($limit > 0) {
- $count = intval($limit);
-
- $offset = intval($offset);
- if ($offset < 0) {
- throw DBALException::limitOffsetInvalid($offset);
- }
-
- $orderby = stristr($query, 'ORDER BY');
- if ($orderby !== false) {
- $sort = (stripos($orderby, 'desc') !== false) ? 'desc' : 'asc';
- $order = str_ireplace('ORDER BY', '', $orderby);
- $order = trim(preg_replace('/ASC|DESC/i', '', $order));
- }
-
- $query = preg_replace('/^SELECT\s/i', 'SELECT TOP ' . ($count+$offset) . ' ', $query);
-
- $query = 'SELECT * FROM (SELECT TOP ' . $count . ' * FROM (' . $query . ') AS inner_tbl';
- if ($orderby !== false) {
- $query .= ' ORDER BY ' . $order . ' ';
- $query .= (stripos($sort, 'asc') !== false) ? 'DESC' : 'ASC';
- }
- $query .= ') AS outer_tbl';
- if ($orderby !== false) {
- $query .= ' ORDER BY ' . $order . ' ' . $sort;
- }
-
- return $query;
-
- }
-
- return $query;
- }
-
- /**
- * Gets the sql statements for altering an existing table.
- *
- * The method returns an array of sql statements, since some platforms need several statements.
- *
- * @param TableDiff $diff
- * @return array
- */
- public function getAlterTableSQL(TableDiff $diff)
- {
- $queryParts = array();
- if ($diff->newName !== false) {
- $queryParts[] = 'RENAME TO ' . $diff->newName;
- }
-
- foreach ($diff->addedColumns AS $fieldName => $column) {
- $queryParts[] = 'ADD ' . $this->getColumnDeclarationSQL($column->getName(), $column->toArray());
- }
-
- foreach ($diff->removedColumns AS $column) {
- $queryParts[] = 'DROP ' . $column->getName();
- }
-
- foreach ($diff->changedColumns AS $columnDiff) {
- /* @var $columnDiff Doctrine\DBAL\Schema\ColumnDiff */
- $column = $columnDiff->column;
- $queryParts[] = 'CHANGE ' . ($columnDiff->oldColumnName) . ' '
- . $this->getColumnDeclarationSQL($column->getName(), $column->toArray());
- }
-
- foreach ($diff->renamedColumns AS $oldColumnName => $column) {
- $queryParts[] = 'CHANGE ' . $oldColumnName . ' '
- . $this->getColumnDeclarationSQL($column->getName(), $column->toArray());
- }
-
- $sql = array();
- if (count($queryParts) > 0) {
- $sql[] = 'ALTER TABLE ' . $diff->name . ' ' . implode(", ", $queryParts);
- }
- $sql = array_merge($sql, $this->_getAlterTableIndexForeignKeySQL($diff));
- return $sql;
- }
-
- /**
- * Returns the regular expression operator.
- *
- * @return string
- * @override
- */
- public function getRegexpExpression()
- {
- return 'RLIKE';
- }
-
- /**
- * Return string to call a variable with the current timestamp inside an SQL statement
- * There are three special variables for current date and time:
- * - CURRENT_TIMESTAMP (date and time, TIMESTAMP type)
- * - CURRENT_DATE (date, DATE type)
- * - CURRENT_TIME (time, TIME type)
- *
- * @return string to call a variable with the current timestamp
- * @override
- */
- public function getNowExpression($type = 'timestamp')
- {
- switch ($type) {
- case 'time':
- case 'date':
- case 'timestamp':
- default:
- return 'GETDATE()';
- }
- }
-
- /**
- * return string to call a function to get a substring inside an SQL statement
- *
- * @return string to call a function to get a substring
- * @override
- */
- public function getSubstringExpression($value, $position, $length = null)
- {
- if ( ! is_null($length)) {
- return 'SUBSTRING(' . $value . ', ' . $position . ', ' . $length . ')';
- }
- return 'SUBSTRING(' . $value . ', ' . $position . ', LEN(' . $value . ') - ' . $position . ' + 1)';
- }
-
- /**
- * Returns string to concatenate two or more string parameters
- *
- * @param string $arg1
- * @param string $arg2
- * @param string $values...
- * @return string to concatenate two strings
- * @override
- */
- public function getConcatExpression()
- {
- $args = func_get_args();
- return '(' . implode(' + ', $args) . ')';
- }
-
- /**
- * Returns global unique identifier
- *
- * @return string to get global unique identifier
- * @override
- */
- public function getGuidExpression()
- {
- return 'NEWID()';
- }
-
- /**
- * Whether the platform prefers identity columns for ID generation.
- * MsSql prefers "autoincrement" identity columns since sequences can only
- * be emulated with a table.
- *
- * @return boolean
- * @override
- */
- public function prefersIdentityColumns()
- {
- return true;
- }
-
- /**
- * Whether the platform supports identity columns.
- * MsSql supports this through AUTO_INCREMENT columns.
- *
- * @return boolean
- * @override
- */
- public function supportsIdentityColumns()
- {
- return true;
- }
-
- /**
- * Whether the platform supports savepoints. MsSql does not.
- *
- * @return boolean
- * @override
- */
- public function supportsSavepoints()
- {
- return false;
- }
-
- public function getShowDatabasesSQL()
- {
- return 'SHOW DATABASES';
- }
-
- public function getListTablesSQL()
- {
- return 'SHOW TABLES';
- }
-
- /**
- * create a new database
- *
- * @param string $name name of the database that should be created
- * @return string
- * @override
- */
- public function getCreateDatabaseSQL($name)
- {
- return 'CREATE DATABASE ' . $name;
- }
-
- /**
- * drop an existing database
- *
- * @param string $name name of the database that should be dropped
- * @return string
- * @override
- */
- public function getDropDatabaseSQL($name)
- {
- return 'DROP DATABASE ' . $name;
- }
-
- public function getSetTransactionIsolationSQL($level)
- {
- return 'SET TRANSACTION ISOLATION LEVEL ' . $this->_getTransactionIsolationLevelSQL($level);
- }
-
- /**
- * @override
- */
- public function getIntegerTypeDeclarationSQL(array $field)
- {
- return 'INT' . $this->_getCommonIntegerTypeDeclarationSQL($field);
- }
-
- /**
- * @override
- */
- public function getBigIntTypeDeclarationSQL(array $field)
- {
- return 'BIGINT' . $this->_getCommonIntegerTypeDeclarationSQL($field);
- }
-
- /**
- * @override
- */
- public function getSmallIntTypeDeclarationSQL(array $field)
- {
- return 'SMALLINT' . $this->_getCommonIntegerTypeDeclarationSQL($field);
- }
-
- public function getVarcharTypeDeclarationSQL(array $field)
- {
- if ( ! isset($field['length'])) {
- if (array_key_exists('default', $field)) {
- $field['length'] = $this->getVarcharMaxLength();
- } else {
- $field['length'] = false;
- }
- }
-
- $length = ($field['length'] <= $this->getVarcharMaxLength()) ? $field['length'] : false;
- $fixed = (isset($field['fixed'])) ? $field['fixed'] : false;
-
- return $fixed ? ($length ? 'CHAR(' . $length . ')' : 'CHAR(255)')
- : ($length ? 'VARCHAR(' . $length . ')' : 'TEXT');
- }
-
- /** @override */
- public function getClobTypeDeclarationSQL(array $field)
- {
- return 'TEXT';
- }
-
- /**
- * @override
- */
- protected function _getCommonIntegerTypeDeclarationSQL(array $columnDef)
- {
- $autoinc = '';
- if ( ! empty($columnDef['autoincrement'])) {
- $autoinc = ' AUTO_INCREMENT';
- }
- $unsigned = (isset($columnDef['unsigned']) && $columnDef['unsigned']) ? ' UNSIGNED' : '';
-
- return $unsigned . $autoinc;
- }
-
- /**
- * @override
- */
- public function getDateTimeTypeDeclarationSQL(array $fieldDeclaration)
- {
- return 'CHAR(' . strlen('YYYY-MM-DD HH:MM:SS') . ')';
- }
-
- /**
- * @override
- */
- public function getDateTypeDeclarationSQL(array $fieldDeclaration)
- {
- return 'CHAR(' . strlen('YYYY-MM-DD') . ')';
- }
-
- /**
- * @override
- */
- public function getTimeTypeDeclarationSQL(array $fieldDeclaration)
- {
- return 'CHAR(' . strlen('HH:MM:SS') . ')';
- }
-
- /**
- * @override
- */
- public function getBooleanTypeDeclarationSQL(array $field)
- {
- return 'BIT';
- }
-
- /**
- * Get the platform name for this instance
- *
- * @return string
- */
- public function getName()
- {
- return 'mssql';
- }
-
- /**
- * Adds an adapter-specific LIMIT clause to the SELECT statement.
- *
- * @param string $query
- * @param mixed $limit
- * @param mixed $offset
- * @link http://lists.bestpractical.com/pipermail/rt-devel/2005-June/007339.html
- * @return string
- */
- public function modifyLimitQuery($query, $limit, $offset = null)
- {
- if ($limit > 0) {
- $count = intval($limit);
- $offset = intval($offset);
-
- if ($offset < 0) {
- throw new Doctrine_Connection_Exception("LIMIT argument offset=$offset is not valid");
- }
-
- $orderby = stristr($query, 'ORDER BY');
-
- if ($orderby !== false) {
- // Ticket #1835: Fix for ORDER BY alias
- // Ticket #2050: Fix for multiple ORDER BY clause
- $order = str_ireplace('ORDER BY', '', $orderby);
- $orders = explode(',', $order);
-
- for ($i = 0; $i < count($orders); $i++) {
- $sorts[$i] = (stripos($orders[$i], ' DESC') !== false) ? 'DESC' : 'ASC';
- $orders[$i] = trim(preg_replace('/\s+(ASC|DESC)$/i', '', $orders[$i]));
-
- // find alias in query string
- $helperString = stristr($query, $orders[$i]);
-
- $fromClausePos = strpos($helperString, ' FROM ');
- $fieldsString = substr($helperString, 0, $fromClausePos + 1);
-
- $fieldArray = explode(',', $fieldsString);
- $fieldArray = array_shift($fieldArray);
- $aux2 = preg_split('/ as /i', $fieldArray);
-
- $aliases[$i] = trim(end($aux2));
- }
- }
-
- // Ticket #1259: Fix for limit-subquery in MSSQL
- $selectRegExp = 'SELECT\s+';
- $selectReplace = 'SELECT ';
-
- if (preg_match('/^SELECT(\s+)DISTINCT/i', $query)) {
- $selectRegExp .= 'DISTINCT\s+';
- $selectReplace .= 'DISTINCT ';
- }
-
- $query = preg_replace('/^'.$selectRegExp.'/i', $selectReplace . 'TOP ' . ($count + $offset) . ' ', $query);
- $query = 'SELECT * FROM (SELECT TOP ' . $count . ' * FROM (' . $query . ') AS ' . 'inner_tbl';
-
- if ($orderby !== false) {
- $query .= ' ORDER BY ';
-
- for ($i = 0, $l = count($orders); $i < $l; $i++) {
- if ($i > 0) { // not first order clause
- $query .= ', ';
- }
-
- $query .= 'inner_tbl' . '.' . $aliases[$i] . ' ';
- $query .= (stripos($sorts[$i], 'ASC') !== false) ? 'DESC' : 'ASC';
- }
- }
-
- $query .= ') AS ' . 'outer_tbl';
-
- if ($orderby !== false) {
- $query .= ' ORDER BY ';
-
- for ($i = 0, $l = count($orders); $i < $l; $i++) {
- if ($i > 0) { // not first order clause
- $query .= ', ';
- }
-
- $query .= 'outer_tbl' . '.' . $aliases[$i] . ' ' . $sorts[$i];
- }
- }
- }
-
- return $query;
- }
-
- /**
- * Get the insert sql for an empty insert statement
- *
- * @param string $tableName
- * @param string $identifierColumnName
- * @return string $sql
- */
- public function getEmptyIdentityInsertSQL($quotedTableName, $quotedIdentifierColumnName)
- {
- return 'INSERT INTO ' . $quotedTableName . ' DEFAULT VALUES';
- }
-
- /**
- * @inheritdoc
- */
- public function getTruncateTableSQL($tableName, $cascade = false)
- {
- return 'TRUNCATE TABLE '.$tableName;
- }
-
- /**
- * MsSql uses Table Hints for locking strategies instead of the ANSI SQL FOR UPDATE like hints.
- *
- * @return string
- */
- public function getForUpdateSQL()
- {
- return '';
- }
-
- /**
- * @license LGPL
- * @author Hibernate
- * @param string $fromClause
- * @param int $lockMode
- * @return string
- */
- public function appendLockHint($fromClause, $lockMode)
- {
- if ($lockMode == \Doctrine\DBAL\LockMode::PESSIMISTIC_WRITE) {
- return $fromClause . " WITH (UPDLOCK, ROWLOCK)";
- } else if ( $lockMode == \Doctrine\DBAL\LockMode::PESSIMISTIC_READ ) {
- return $fromClause . " WITH (HOLDLOCK, ROWLOCK)";
- } else {
- return $fromClause;
- }
- }
-}
diff --git a/lib/Doctrine/DBAL/Platforms/MySqlPlatform.php b/lib/Doctrine/DBAL/Platforms/MySqlPlatform.php
deleted file mode 100644
index 358a3df70..000000000
--- a/lib/Doctrine/DBAL/Platforms/MySqlPlatform.php
+++ /dev/null
@@ -1,591 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Platforms;
-
-use Doctrine\DBAL\DBALException,
- Doctrine\DBAL\Schema\TableDiff;
-
-/**
- * The MySqlPlatform provides the behavior, features and SQL dialect of the
- * MySQL database platform. This platform represents a MySQL 5.0 or greater platform that
- * uses the InnoDB storage engine.
- *
- * @since 2.0
- * @author Roman Borschel
- * @author Benjamin Eberlei
- * @todo Rename: MySQLPlatform
- */
-class MySqlPlatform extends AbstractPlatform
-{
- /**
- * Gets the character used for identifier quoting.
- *
- * @return string
- * @override
- */
- public function getIdentifierQuoteCharacter()
- {
- return '`';
- }
-
- /**
- * Returns the regular expression operator.
- *
- * @return string
- * @override
- */
- public function getRegexpExpression()
- {
- return 'RLIKE';
- }
-
- /**
- * Returns global unique identifier
- *
- * @return string to get global unique identifier
- * @override
- */
- public function getGuidExpression()
- {
- return 'UUID()';
- }
-
- /**
- * returns the position of the first occurrence of substring $substr in string $str
- *
- * @param string $substr literal string to find
- * @param string $str literal string
- * @param int $pos position to start at, beginning of string by default
- * @return integer
- */
- public function getLocateExpression($str, $substr, $startPos = false)
- {
- if ($startPos == false) {
- return 'LOCATE(' . $substr . ', ' . $str . ')';
- } else {
- return 'LOCATE(' . $substr . ', ' . $str . ', '.$startPos.')';
- }
- }
-
- /**
- * Returns a series of strings concatinated
- *
- * concat() accepts an arbitrary number of parameters. Each parameter
- * must contain an expression or an array with expressions.
- *
- * @param string|array(string) strings that will be concatinated.
- * @override
- */
- public function getConcatExpression()
- {
- $args = func_get_args();
- return 'CONCAT(' . join(', ', (array) $args) . ')';
- }
-
- public function getListDatabasesSQL()
- {
- return 'SHOW DATABASES';
- }
-
- public function getListTableConstraintsSQL($table)
- {
- return 'SHOW INDEX FROM ' . $table;
- }
-
- public function getListTableIndexesSQL($table)
- {
- return 'SHOW INDEX FROM ' . $table;
- }
-
- public function getListViewsSQL($database)
- {
- return "SELECT * FROM information_schema.VIEWS WHERE TABLE_SCHEMA = '".$database."'";
- }
-
- public function getListTableForeignKeysSQL($table, $database = null)
- {
- $sql = "SELECT DISTINCT k.`CONSTRAINT_NAME`, k.`COLUMN_NAME`, k.`REFERENCED_TABLE_NAME`, ".
- "k.`REFERENCED_COLUMN_NAME` /*!50116 , c.update_rule, c.delete_rule */ ".
- "FROM information_schema.key_column_usage k /*!50116 ".
- "INNER JOIN information_schema.referential_constraints c ON k.`CONSTRAINT_NAME` = c.constraint_name AND ".
- " c.constraint_name = k.constraint_name AND ".
- " c.table_name = '$table' */ WHERE k.table_name = '$table'";
-
- if ( ! is_null($database)) {
- $sql .= " AND table_schema = '$database'";
- }
-
- $sql .= " AND `REFERENCED_COLUMN_NAME` is not NULL";
-
- return $sql;
- }
-
- public function getCreateViewSQL($name, $sql)
- {
- return 'CREATE VIEW ' . $name . ' AS ' . $sql;
- }
-
- public function getDropViewSQL($name)
- {
- return 'DROP VIEW '. $name;
- }
-
- /**
- * Gets the SQL snippet used to declare a VARCHAR column on the MySql platform.
- *
- * @params array $field
- */
- public function getVarcharTypeDeclarationSQL(array $field)
- {
- if ( ! isset($field['length'])) {
- if (array_key_exists('default', $field)) {
- $field['length'] = $this->getVarcharMaxLength();
- } else {
- $field['length'] = false;
- }
- }
-
- $length = ($field['length'] <= $this->getVarcharMaxLength()) ? $field['length'] : false;
- $fixed = (isset($field['fixed'])) ? $field['fixed'] : false;
-
- return $fixed ? ($length ? 'CHAR(' . $length . ')' : 'CHAR(255)')
- : ($length ? 'VARCHAR(' . $length . ')' : 'VARCHAR(255)');
- }
-
- /** @override */
- public function getClobTypeDeclarationSQL(array $field)
- {
- if ( ! empty($field['length'])) {
- $length = $field['length'];
- if ($length <= 255) {
- return 'TINYTEXT';
- } else if ($length <= 65532) {
- return 'TEXT';
- } else if ($length <= 16777215) {
- return 'MEDIUMTEXT';
- }
- }
- return 'LONGTEXT';
- }
-
- /**
- * @override
- */
- public function getDateTimeTypeDeclarationSQL(array $fieldDeclaration)
- {
- if (isset($fieldDeclaration['version']) && $fieldDeclaration['version'] == true) {
- return 'TIMESTAMP';
- } else {
- return 'DATETIME';
- }
- }
-
- /**
- * @override
- */
- public function getDateTypeDeclarationSQL(array $fieldDeclaration)
- {
- return 'DATE';
- }
-
- /**
- * @override
- */
- public function getTimeTypeDeclarationSQL(array $fieldDeclaration)
- {
- return 'TIME';
- }
-
- /**
- * @override
- */
- public function getBooleanTypeDeclarationSQL(array $field)
- {
- return 'TINYINT(1)';
- }
-
- /**
- * Obtain DBMS specific SQL code portion needed to set the COLLATION
- * of a field declaration to be used in statements like CREATE TABLE.
- *
- * @param string $collation name of the collation
- * @return string DBMS specific SQL code portion needed to set the COLLATION
- * of a field declaration.
- */
- public function getCollationFieldDeclaration($collation)
- {
- return 'COLLATE ' . $collation;
- }
-
- /**
- * Whether the platform prefers identity columns for ID generation.
- * MySql prefers "autoincrement" identity columns since sequences can only
- * be emulated with a table.
- *
- * @return boolean
- * @override
- */
- public function prefersIdentityColumns()
- {
- return true;
- }
-
- /**
- * Whether the platform supports identity columns.
- * MySql supports this through AUTO_INCREMENT columns.
- *
- * @return boolean
- * @override
- */
- public function supportsIdentityColumns()
- {
- return true;
- }
-
- /**
- * Whether the platform supports savepoints. MySql does not.
- *
- * @return boolean
- * @override
- */
- public function supportsSavepoints()
- {
- return false;
- }
-
- public function getShowDatabasesSQL()
- {
- return 'SHOW DATABASES';
- }
-
- public function getListTablesSQL()
- {
- return 'SHOW FULL TABLES WHERE Table_type = "BASE TABLE"';
- }
-
- public function getListTableColumnsSQL($table)
- {
- return 'DESCRIBE ' . $table;
- }
-
- /**
- * create a new database
- *
- * @param string $name name of the database that should be created
- * @return string
- * @override
- */
- public function getCreateDatabaseSQL($name)
- {
- return 'CREATE DATABASE ' . $name;
- }
-
- /**
- * drop an existing database
- *
- * @param string $name name of the database that should be dropped
- * @return string
- * @override
- */
- public function getDropDatabaseSQL($name)
- {
- return 'DROP DATABASE ' . $name;
- }
-
- /**
- * create a new table
- *
- * @param string $tableName Name of the database that should be created
- * @param array $columns Associative array that contains the definition of each field of the new table
- * The indexes of the array entries are the names of the fields of the table an
- * the array entry values are associative arrays like those that are meant to be
- * passed with the field definitions to get[Type]Declaration() functions.
- * array(
- * 'id' => array(
- * 'type' => 'integer',
- * 'unsigned' => 1
- * 'notnull' => 1
- * 'default' => 0
- * ),
- * 'name' => array(
- * 'type' => 'text',
- * 'length' => 12
- * ),
- * 'password' => array(
- * 'type' => 'text',
- * 'length' => 12
- * )
- * );
- * @param array $options An associative array of table options:
- * array(
- * 'comment' => 'Foo',
- * 'charset' => 'utf8',
- * 'collate' => 'utf8_unicode_ci',
- * 'type' => 'innodb',
- * );
- *
- * @return void
- * @override
- */
- protected function _getCreateTableSQL($tableName, array $columns, array $options = array())
- {
- $queryFields = $this->getColumnDeclarationListSQL($columns);
-
- if (isset($options['uniqueConstraints']) && ! empty($options['uniqueConstraints'])) {
- foreach ($options['uniqueConstraints'] as $index => $definition) {
- $queryFields .= ', ' . $this->getUniqueConstraintDeclarationSQL($index, $definition);
- }
- }
-
- // add all indexes
- if (isset($options['indexes']) && ! empty($options['indexes'])) {
- foreach($options['indexes'] as $index => $definition) {
- $queryFields .= ', ' . $this->getIndexDeclarationSQL($index, $definition);
- }
- }
-
- // attach all primary keys
- if (isset($options['primary']) && ! empty($options['primary'])) {
- $keyColumns = array_unique(array_values($options['primary']));
- $queryFields .= ', PRIMARY KEY(' . implode(', ', $keyColumns) . ')';
- }
-
- $query = 'CREATE ';
- if (!empty($options['temporary'])) {
- $query .= 'TEMPORARY ';
- }
- $query.= 'TABLE ' . $tableName . ' (' . $queryFields . ')';
-
- $optionStrings = array();
-
- if (isset($options['comment'])) {
- $optionStrings['comment'] = 'COMMENT = ' . $this->quote($options['comment'], 'text');
- }
- if (isset($options['charset'])) {
- $optionStrings['charset'] = 'DEFAULT CHARACTER SET ' . $options['charset'];
- if (isset($options['collate'])) {
- $optionStrings['charset'] .= ' COLLATE ' . $options['collate'];
- }
- }
-
- // get the type of the table
- if (isset($options['engine'])) {
- $optionStrings[] = 'ENGINE = ' . $engine;
- } else {
- // default to innodb
- $optionStrings[] = 'ENGINE = InnoDB';
- }
-
- if ( ! empty($optionStrings)) {
- $query.= ' '.implode(' ', $optionStrings);
- }
- $sql[] = $query;
-
- if (isset($options['foreignKeys'])) {
- foreach ((array) $options['foreignKeys'] as $definition) {
- $sql[] = $this->getCreateForeignKeySQL($definition, $tableName);
- }
- }
-
- return $sql;
- }
-
- /**
- * Gets the SQL to alter an existing table.
- *
- * @param TableDiff $diff
- * @return array
- */
- public function getAlterTableSQL(TableDiff $diff)
- {
- $queryParts = array();
- if ($diff->newName !== false) {
- $queryParts[] = 'RENAME TO ' . $diff->newName;
- }
-
- foreach ($diff->addedColumns AS $fieldName => $column) {
- $queryParts[] = 'ADD ' . $this->getColumnDeclarationSQL($column->getName(), $column->toArray());
- }
-
- foreach ($diff->removedColumns AS $column) {
- $queryParts[] = 'DROP ' . $column->getName();
- }
-
- foreach ($diff->changedColumns AS $columnDiff) {
- /* @var $columnDiff Doctrine\DBAL\Schema\ColumnDiff */
- $column = $columnDiff->column;
- $queryParts[] = 'CHANGE ' . ($columnDiff->oldColumnName) . ' '
- . $this->getColumnDeclarationSQL($column->getName(), $column->toArray());
- }
-
- foreach ($diff->renamedColumns AS $oldColumnName => $column) {
- $queryParts[] = 'CHANGE ' . $oldColumnName . ' '
- . $this->getColumnDeclarationSQL($column->getName(), $column->toArray());
- }
-
- $sql = array();
- if (count($queryParts) > 0) {
- $sql[] = 'ALTER TABLE ' . $diff->name . ' ' . implode(", ", $queryParts);
- }
- $sql = array_merge($sql, $this->_getAlterTableIndexForeignKeySQL($diff));
- return $sql;
- }
-
- /**
- * Obtain DBMS specific SQL code portion needed to declare an integer type
- * field to be used in statements like CREATE TABLE.
- *
- * @param string $name name the field to be declared.
- * @param string $field associative array with the name of the properties
- * of the field being declared as array indexes.
- * Currently, the types of supported field
- * properties are as follows:
- *
- * unsigned
- * Boolean flag that indicates whether the field
- * should be declared as unsigned integer if
- * possible.
- *
- * default
- * Integer value to be used as default for this
- * field.
- *
- * notnull
- * Boolean flag that indicates whether this field is
- * constrained to not be set to null.
- * @return string DBMS specific SQL code portion that should be used to
- * declare the specified field.
- * @override
- */
- public function getIntegerTypeDeclarationSQL(array $field)
- {
- return 'INT' . $this->_getCommonIntegerTypeDeclarationSQL($field);
- }
-
- /** @override */
- public function getBigIntTypeDeclarationSQL(array $field)
- {
- return 'BIGINT' . $this->_getCommonIntegerTypeDeclarationSQL($field);
- }
-
- /** @override */
- public function getSmallIntTypeDeclarationSQL(array $field)
- {
- return 'SMALLINT' . $this->_getCommonIntegerTypeDeclarationSQL($field);
- }
-
- /** @override */
- protected function _getCommonIntegerTypeDeclarationSQL(array $columnDef)
- {
- $autoinc = '';
- if ( ! empty($columnDef['autoincrement'])) {
- $autoinc = ' AUTO_INCREMENT';
- }
- $unsigned = (isset($columnDef['unsigned']) && $columnDef['unsigned']) ? ' UNSIGNED' : '';
-
- return $unsigned . $autoinc;
- }
-
- /**
- * Return the FOREIGN KEY query section dealing with non-standard options
- * as MATCH, INITIALLY DEFERRED, ON UPDATE, ...
- *
- * @param ForeignKeyConstraint $foreignKey
- * @return string
- * @override
- */
- public function getAdvancedForeignKeyOptionsSQL(\Doctrine\DBAL\Schema\ForeignKeyConstraint $foreignKey)
- {
- $query = '';
- if ($foreignKey->hasOption('match')) {
- $query .= ' MATCH ' . $foreignKey->getOption('match');
- }
- $query .= parent::getAdvancedForeignKeyOptionsSQL($foreignKey);
- return $query;
- }
-
- /**
- * Gets the SQL to drop an index of a table.
- *
- * @param Index $index name of the index to be dropped
- * @param string|Table $table name of table that should be used in method
- * @override
- */
- public function getDropIndexSQL($index, $table=null)
- {
- if($index instanceof \Doctrine\DBAL\Schema\Index) {
- $index = $index->getName();
- } else if(!is_string($index)) {
- throw new \InvalidArgumentException('MysqlPlatform::getDropIndexSQL() expects $index parameter to be string or \Doctrine\DBAL\Schema\Index.');
- }
-
- if($table instanceof \Doctrine\DBAL\Schema\Table) {
- $table = $table->getName();
- } else if(!is_string($table)) {
- throw new \InvalidArgumentException('MysqlPlatform::getDropIndexSQL() expects $table parameter to be string or \Doctrine\DBAL\Schema\Table.');
- }
-
- return 'DROP INDEX ' . $index . ' ON ' . $table;
- }
-
- /**
- * Gets the SQL to drop a table.
- *
- * @param string $table The name of table to drop.
- * @override
- */
- public function getDropTableSQL($table)
- {
- if ($table instanceof \Doctrine\DBAL\Schema\Table) {
- $table = $table->getName();
- } else if(!is_string($table)) {
- throw new \InvalidArgumentException('MysqlPlatform::getDropTableSQL() expects $table parameter to be string or \Doctrine\DBAL\Schema\Table.');
- }
-
- return 'DROP TABLE ' . $table;
- }
-
- public function getSetTransactionIsolationSQL($level)
- {
- return 'SET SESSION TRANSACTION ISOLATION LEVEL ' . $this->_getTransactionIsolationLevelSQL($level);
- }
-
- /**
- * Get the platform name for this instance.
- *
- * @return string
- */
- public function getName()
- {
- return 'mysql';
- }
-
- public function createsExplicitIndexForForeignKeys()
- {
- return true;
- }
-
- public function getReadLockSQL()
- {
- return 'LOCK IN SHARE MODE';
- }
-}
diff --git a/lib/Doctrine/DBAL/Platforms/OraclePlatform.php b/lib/Doctrine/DBAL/Platforms/OraclePlatform.php
deleted file mode 100644
index b391045c8..000000000
--- a/lib/Doctrine/DBAL/Platforms/OraclePlatform.php
+++ /dev/null
@@ -1,653 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Platforms;
-
-use Doctrine\DBAL\Schema\TableDiff;
-
-/**
- * OraclePlatform.
- *
- * @since 2.0
- * @author Roman Borschel
- * @author Lukas Smith (PEAR MDB2 library)
- * @author Benjamin Eberlei
- */
-class OraclePlatform extends AbstractPlatform
-{
- /**
- * return string to call a function to get a substring inside an SQL statement
- *
- * Note: Not SQL92, but common functionality.
- *
- * @param string $value an sql string literal or column name/alias
- * @param integer $position where to start the substring portion
- * @param integer $length the substring portion length
- * @return string SQL substring function with given parameters
- * @override
- */
- public function getSubstringExpression($value, $position, $length = null)
- {
- if ($length !== null) {
- return "SUBSTR($value, $position, $length)";
- }
-
- return "SUBSTR($value, $position)";
- }
-
- /**
- * Return string to call a variable with the current timestamp inside an SQL statement
- * There are three special variables for current date and time:
- * - CURRENT_TIMESTAMP (date and time, TIMESTAMP type)
- * - CURRENT_DATE (date, DATE type)
- * - CURRENT_TIME (time, TIME type)
- *
- * @return string to call a variable with the current timestamp
- * @override
- */
- public function getNowExpression($type = 'timestamp')
- {
- switch ($type) {
- case 'date':
- case 'time':
- case 'timestamp':
- default:
- return 'TO_CHAR(CURRENT_TIMESTAMP, \'YYYY-MM-DD HH24:MI:SS\')';
- }
- }
-
- /**
- * returns the position of the first occurrence of substring $substr in string $str
- *
- * @param string $substr literal string to find
- * @param string $str literal string
- * @param int $pos position to start at, beginning of string by default
- * @return integer
- */
- public function getLocateExpression($str, $substr, $startPos = false)
- {
- if ($startPos == false) {
- return 'INSTR('.$str.', '.$substr.')';
- } else {
- return 'INSTR('.$str.', '.$substr.', '.$startPos.')';
- }
- }
-
- /**
- * Returns global unique identifier
- *
- * @return string to get global unique identifier
- * @override
- */
- public function getGuidExpression()
- {
- return 'SYS_GUID()';
- }
-
- /**
- * Gets the SQL used to create a sequence that starts with a given value
- * and increments by the given allocation size.
- *
- * Need to specifiy minvalue, since start with is hidden in the system and MINVALUE <= START WITH.
- * Therefore we can use MINVALUE to be able to get a hint what START WITH was for later introspection
- * in {@see listSequences()}
- *
- * @param \Doctrine\DBAL\Schema\Sequence $sequence
- * @return string
- */
- public function getCreateSequenceSQL(\Doctrine\DBAL\Schema\Sequence $sequence)
- {
- return 'CREATE SEQUENCE ' . $sequence->getName() .
- ' START WITH ' . $sequence->getInitialValue() .
- ' MINVALUE ' . $sequence->getInitialValue() .
- ' INCREMENT BY ' . $sequence->getAllocationSize();
- }
-
- /**
- * {@inheritdoc}
- *
- * @param string $sequenceName
- * @override
- */
- public function getSequenceNextValSQL($sequenceName)
- {
- return 'SELECT ' . $sequenceName . '.nextval FROM DUAL';
- }
-
- /**
- * {@inheritdoc}
- *
- * @param integer $level
- * @override
- */
- public function getSetTransactionIsolationSQL($level)
- {
- return 'SET TRANSACTION ISOLATION LEVEL ' . $this->_getTransactionIsolationLevelSQL($level);
- }
-
- protected function _getTransactionIsolationLevelSQL($level)
- {
- switch ($level) {
- case \Doctrine\DBAL\Connection::TRANSACTION_READ_UNCOMMITTED:
- return 'READ UNCOMMITTED';
- case \Doctrine\DBAL\Connection::TRANSACTION_READ_COMMITTED:
- return 'READ COMMITTED';
- case \Doctrine\DBAL\Connection::TRANSACTION_REPEATABLE_READ:
- case \Doctrine\DBAL\Connection::TRANSACTION_SERIALIZABLE:
- return 'SERIALIZABLE';
- default:
- return parent::_getTransactionIsolationLevelSQL($level);
- }
- }
-
- /**
- * @override
- */
- public function getBooleanTypeDeclarationSQL(array $field)
- {
- return 'NUMBER(1)';
- }
-
- /**
- * @override
- */
- public function getIntegerTypeDeclarationSQL(array $field)
- {
- return 'NUMBER(10)';
- }
-
- /**
- * @override
- */
- public function getBigIntTypeDeclarationSQL(array $field)
- {
- return 'NUMBER(20)';
- }
-
- /**
- * @override
- */
- public function getSmallIntTypeDeclarationSQL(array $field)
- {
- return 'NUMBER(5)';
- }
-
- /**
- * @override
- */
- public function getDateTimeTypeDeclarationSQL(array $fieldDeclaration)
- {
- return 'TIMESTAMP(0) WITH TIME ZONE';
- }
-
- /**
- * @override
- */
- public function getDateTypeDeclarationSQL(array $fieldDeclaration)
- {
- return 'DATE';
- }
-
- /**
- * @override
- */
- public function getTimeTypeDeclarationSQL(array $fieldDeclaration)
- {
- return 'DATE';
- }
-
- /**
- * @override
- */
- protected function _getCommonIntegerTypeDeclarationSQL(array $columnDef)
- {
- return '';
- }
-
- /**
- * Gets the SQL snippet used to declare a VARCHAR column on the Oracle platform.
- *
- * @params array $field
- * @override
- */
- public function getVarcharTypeDeclarationSQL(array $field)
- {
- if ( ! isset($field['length'])) {
- if (array_key_exists('default', $field)) {
- $field['length'] = $this->getVarcharMaxLength();
- } else {
- $field['length'] = false;
- }
- }
-
- $length = ($field['length'] <= $this->getVarcharMaxLength()) ? $field['length'] : false;
- $fixed = (isset($field['fixed'])) ? $field['fixed'] : false;
-
- return $fixed ? ($length ? 'CHAR(' . $length . ')' : 'CHAR(2000)')
- : ($length ? 'VARCHAR2(' . $length . ')' : 'VARCHAR2(4000)');
- }
-
- /** @override */
- public function getClobTypeDeclarationSQL(array $field)
- {
- return 'CLOB';
- }
-
- public function getListDatabasesSQL()
- {
- return 'SELECT username FROM all_users';
- }
-
- public function getListSequencesSQL($database)
- {
- return "SELECT sequence_name, min_value, increment_by FROM sys.all_sequences ".
- "WHERE SEQUENCE_OWNER = '".strtoupper($database)."'";
- }
-
- /**
- *
- * @param string $table
- * @param array $columns
- * @param array $options
- * @return array
- */
- protected function _getCreateTableSQL($table, array $columns, array $options = array())
- {
- $indexes = isset($options['indexes']) ? $options['indexes'] : array();
- $options['indexes'] = array();
- $sql = parent::_getCreateTableSQL($table, $columns, $options);
-
- foreach ($columns as $name => $column) {
- if (isset($column['sequence'])) {
- $sql[] = $this->getCreateSequenceSQL($column['sequence'], 1);
- }
-
- if (isset($column['autoincrement']) && $column['autoincrement'] ||
- (isset($column['autoinc']) && $column['autoinc'])) {
- $sql = array_merge($sql, $this->getCreateAutoincrementSql($name, $table));
- }
- }
-
- if (isset($indexes) && ! empty($indexes)) {
- foreach ($indexes as $indexName => $index) {
- $sql[] = $this->getCreateIndexSQL($index, $table);
- }
- }
-
- return $sql;
- }
-
- /**
- * @license New BSD License
- * @link http://ezcomponents.org/docs/api/trunk/DatabaseSchema/ezcDbSchemaOracleReader.html
- * @param string $table
- * @return string
- */
- public function getListTableIndexesSQL($table)
- {
- $table = strtoupper($table);
-
- return "SELECT uind.index_name AS name, " .
- " uind.index_type AS type, " .
- " decode( uind.uniqueness, 'NONUNIQUE', 0, 'UNIQUE', 1 ) AS is_unique, " .
- " uind_col.column_name AS column_name, " .
- " uind_col.column_position AS column_pos, " .
- " (SELECT ucon.constraint_type FROM user_constraints ucon WHERE ucon.constraint_name = uind.index_name) AS is_primary ".
- "FROM user_indexes uind, user_ind_columns uind_col " .
- "WHERE uind.index_name = uind_col.index_name AND uind_col.table_name = '$table' ORDER BY uind_col.column_position ASC";
- }
-
- public function getListTablesSQL()
- {
- return 'SELECT * FROM sys.user_tables';
- }
-
- public function getListViewsSQL($database)
- {
- return 'SELECT view_name, text FROM sys.user_views';
- }
-
- public function getCreateViewSQL($name, $sql)
- {
- return 'CREATE VIEW ' . $name . ' AS ' . $sql;
- }
-
- public function getDropViewSQL($name)
- {
- return 'DROP VIEW '. $name;
- }
-
- public function getCreateAutoincrementSql($name, $table, $start = 1)
- {
- $table = strtoupper($table);
- $sql = array();
-
- $indexName = $table . '_AI_PK';
- $definition = array(
- 'primary' => true,
- 'columns' => array($name => true),
- );
-
- $idx = new \Doctrine\DBAL\Schema\Index($indexName, array($name), true, true);
-
- $sql[] = 'DECLARE
- constraints_Count NUMBER;
-BEGIN
- SELECT COUNT(CONSTRAINT_NAME) INTO constraints_Count FROM USER_CONSTRAINTS WHERE TABLE_NAME = \''.$table.'\' AND CONSTRAINT_TYPE = \'P\';
- IF constraints_Count = 0 OR constraints_Count = \'\' THEN
- EXECUTE IMMEDIATE \''.$this->getCreateConstraintSQL($idx, $table).'\';
- END IF;
-END;';
-
- $sequenceName = $table . '_SEQ';
- $sequence = new \Doctrine\DBAL\Schema\Sequence($sequenceName, $start);
- $sql[] = $this->getCreateSequenceSQL($sequence);
-
- $triggerName = $table . '_AI_PK';
- $sql[] = 'CREATE TRIGGER ' . $triggerName . '
- BEFORE INSERT
- ON ' . $table . '
- FOR EACH ROW
-DECLARE
- last_Sequence NUMBER;
- last_InsertID NUMBER;
-BEGIN
- SELECT ' . $sequenceName . '.NEXTVAL INTO :NEW.' . $name . ' FROM DUAL;
- IF (:NEW.' . $name . ' IS NULL OR :NEW.'.$name.' = 0) THEN
- SELECT ' . $sequenceName . '.NEXTVAL INTO :NEW.' . $name . ' FROM DUAL;
- ELSE
- SELECT NVL(Last_Number, 0) INTO last_Sequence
- FROM User_Sequences
- WHERE Sequence_Name = \'' . $sequenceName . '\';
- SELECT :NEW.' . $name . ' INTO last_InsertID FROM DUAL;
- WHILE (last_InsertID > last_Sequence) LOOP
- SELECT ' . $sequenceName . '.NEXTVAL INTO last_Sequence FROM DUAL;
- END LOOP;
- END IF;
-END;';
- return $sql;
- }
-
- public function getDropAutoincrementSql($table)
- {
- $table = strtoupper($table);
- $trigger = $table . '_AI_PK';
-
- if ($trigger) {
- $sql[] = 'DROP TRIGGER ' . $trigger;
- $sql[] = $this->getDropSequenceSQL($table.'_SEQ');
-
- $indexName = $table . '_AI_PK';
- $sql[] = $this->getDropConstraintSQL($indexName, $table);
- }
-
- return $sql;
- }
-
- public function getListTableForeignKeysSQL($table)
- {
- $table = strtoupper($table);
-
- return "SELECT alc.constraint_name,
- alc.DELETE_RULE,
- alc.search_condition,
- cols.column_name \"local_column\",
- cols.position,
- r_alc.table_name \"references_table\",
- r_cols.column_name \"foreign_column\"
- FROM all_cons_columns cols
-LEFT JOIN all_constraints alc
- ON alc.constraint_name = cols.constraint_name
- AND alc.owner = cols.owner
-LEFT JOIN all_constraints r_alc
- ON alc.r_constraint_name = r_alc.constraint_name
- AND alc.r_owner = r_alc.owner
-LEFT JOIN all_cons_columns r_cols
- ON r_alc.constraint_name = r_cols.constraint_name
- AND r_alc.owner = r_cols.owner
- AND cols.position = r_cols.position
- WHERE alc.constraint_name = cols.constraint_name
- AND alc.constraint_type = 'R'
- AND alc.table_name = '".$table."'";
- }
-
- public function getListTableConstraintsSQL($table)
- {
- $table = strtoupper($table);
- return 'SELECT * FROM user_constraints WHERE table_name = \'' . $table . '\'';
- }
-
- public function getListTableColumnsSQL($table)
- {
- $table = strtoupper($table);
- return "SELECT * FROM all_tab_columns WHERE table_name = '" . $table . "' ORDER BY column_name";
- }
-
- /**
- *
- * @param \Doctrine\DBAL\Schema\Sequence $sequence
- * @return string
- */
- public function getDropSequenceSQL($sequence)
- {
- if ($sequence instanceof \Doctrine\DBAL\Schema\Sequence) {
- $sequence = $sequence->getName();
- }
-
- return 'DROP SEQUENCE ' . $sequence;
- }
-
- /**
- * @param ForeignKeyConstraint|string $foreignKey
- * @param Table|string $table
- * @return string
- */
- public function getDropForeignKeySQL($foreignKey, $table)
- {
- if ($foreignKey instanceof \Doctrine\DBAL\Schema\ForeignKeyConstraint) {
- $foreignKey = $foreignKey->getName();
- }
-
- if ($table instanceof \Doctrine\DBAL\Schema\Table) {
- $table = $table->getName();
- }
-
- return 'ALTER TABLE ' . $table . ' DROP CONSTRAINT ' . $foreignKey;
- }
-
- public function getDropDatabaseSQL($database)
- {
- return 'DROP USER ' . $database . ' CASCADE';
- }
-
- /**
- * Gets the sql statements for altering an existing table.
- *
- * The method returns an array of sql statements, since some platforms need several statements.
- *
- * @param string $diff->name name of the table that is intended to be changed.
- * @param array $changes associative array that contains the details of each type *
- * @param boolean $check indicates whether the function should just check if the DBMS driver
- * can perform the requested table alterations if the value is true or
- * actually perform them otherwise.
- * @return array
- */
- public function getAlterTableSQL(TableDiff $diff)
- {
- $sql = array();
-
- $fields = array();
- foreach ($diff->addedColumns AS $column) {
- $fields[] = $this->getColumnDeclarationSQL($column->getName(), $column->toArray());
- }
- if (count($fields)) {
- $sql[] = 'ALTER TABLE ' . $diff->name . ' ADD (' . implode(', ', $fields) . ')';
- }
-
- $fields = array();
- foreach ($diff->changedColumns AS $columnDiff) {
- $column = $columnDiff->column;
- $fields[] = $column->getName(). ' ' . $this->getColumnDeclarationSQL('', $column->toArray());
- }
- if (count($fields)) {
- $sql[] = 'ALTER TABLE ' . $diff->name . ' MODIFY (' . implode(', ', $fields) . ')';
- }
-
- foreach ($diff->renamedColumns AS $oldColumnName => $column) {
- $sql[] = 'ALTER TABLE ' . $diff->name . ' RENAME COLUMN ' . $oldColumnName .' TO ' . $column->getName();
- }
-
- $fields = array();
- foreach ($diff->removedColumns AS $column) {
- $fields[] = $column->getName();
- }
- if (count($fields)) {
- $sql[] = 'ALTER TABLE ' . $diff->name . ' DROP COLUMN ' . implode(', ', $fields);
- }
-
- if ($diff->newName !== false) {
- $sql[] = 'ALTER TABLE ' . $diff->name . ' RENAME TO ' . $diff->newName;
- }
-
- $sql = array_merge($sql, $this->_getAlterTableIndexForeignKeySQL($diff));
-
- return $sql;
- }
-
- /**
- * Whether the platform prefers sequences for ID generation.
- *
- * @return boolean
- */
- public function prefersSequences()
- {
- return true;
- }
-
- /**
- * Get the platform name for this instance
- *
- * @return string
- */
- public function getName()
- {
- return 'oracle';
- }
-
- /**
- * Adds an driver-specific LIMIT clause to the query
- *
- * @param string $query query to modify
- * @param integer $limit limit the number of rows
- * @param integer $offset start reading from given offset
- * @return string the modified query
- */
- public function modifyLimitQuery($query, $limit, $offset = null)
- {
- $limit = (int) $limit;
- $offset = (int) $offset;
- if (preg_match('/^\s*SELECT/i', $query)) {
- if ( ! preg_match('/\sFROM\s/i', $query)) {
- $query .= " FROM dual";
- }
- if ($limit > 0) {
- $max = $offset + $limit;
- $column = '*';
- if ($offset > 0) {
- $min = $offset + 1;
- $query = 'SELECT b.'.$column.' FROM ('.
- 'SELECT a.*, ROWNUM AS doctrine_rownum FROM ('
- . $query . ') a '.
- ') b '.
- 'WHERE doctrine_rownum BETWEEN ' . $min . ' AND ' . $max;
- } else {
- $query = 'SELECT a.'.$column.' FROM (' . $query .') a WHERE ROWNUM <= ' . $max;
- }
- }
- }
- return $query;
- }
-
- /**
- * Gets the character casing of a column in an SQL result set of this platform.
- *
- * Oracle returns all column names in SQL result sets in uppercase.
- *
- * @param string $column The column name for which to get the correct character casing.
- * @return string The column name in the character casing used in SQL result sets.
- */
- public function getSQLResultCasing($column)
- {
- return strtoupper($column);
- }
-
- public function getCreateTemporaryTableSnippetSQL()
- {
- return "CREATE GLOBAL TEMPORARY TABLE";
- }
-
- public function getDateTimeFormatString()
- {
- return 'Y-m-d H:i:sP';
- }
-
- public function fixSchemaElementName($schemaElementName)
- {
- if (strlen($schemaElementName) > 30) {
- // Trim it
- return substr($schemaElementName, 0, 30);
- }
- return $schemaElementName;
- }
-
- /**
- * Maximum length of any given databse identifier, like tables or column names.
- *
- * @return int
- */
- public function getMaxIdentifierLength()
- {
- return 30;
- }
-
- /**
- * Whether the platform supports sequences.
- *
- * @return boolean
- */
- public function supportsSequences()
- {
- return true;
- }
-
- public function supportsForeignKeyOnUpdate()
- {
- return false;
- }
-
- /**
- * @inheritdoc
- */
- public function getTruncateTableSQL($tableName, $cascade = false)
- {
- return 'TRUNCATE TABLE '.$tableName;
- }
-}
diff --git a/lib/Doctrine/DBAL/Platforms/PostgreSqlPlatform.php b/lib/Doctrine/DBAL/Platforms/PostgreSqlPlatform.php
deleted file mode 100644
index f57c8e85a..000000000
--- a/lib/Doctrine/DBAL/Platforms/PostgreSqlPlatform.php
+++ /dev/null
@@ -1,645 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Platforms;
-
-use Doctrine\DBAL\Schema\TableDiff,
- Doctrine\DBAL\Schema\Table;
-
-/**
- * PostgreSqlPlatform.
- *
- * @since 2.0
- * @author Roman Borschel
- * @author Lukas Smith (PEAR MDB2 library)
- * @author Benjamin Eberlei
- * @todo Rename: PostgreSQLPlatform
- */
-class PostgreSqlPlatform extends AbstractPlatform
-{
- /**
- * Returns part of a string.
- *
- * Note: Not SQL92, but common functionality.
- *
- * @param string $value the target $value the string or the string column.
- * @param int $from extract from this characeter.
- * @param int $len extract this amount of characters.
- * @return string sql that extracts part of a string.
- * @override
- */
- public function getSubstringExpression($value, $from, $len = null)
- {
- if ($len === null) {
- return 'SUBSTR(' . $value . ', ' . $from . ')';
- } else {
- return 'SUBSTR(' . $value . ', ' . $from . ', ' . $len . ')';
- }
- }
-
- /**
- * Returns the SQL string to return the current system date and time.
- *
- * @return string
- */
- public function getNowExpression()
- {
- return 'LOCALTIMESTAMP(0)';
- }
-
- /**
- * regexp
- *
- * @return string the regular expression operator
- * @override
- */
- public function getRegexpExpression()
- {
- return 'SIMILAR TO';
- }
-
- /**
- * returns the position of the first occurrence of substring $substr in string $str
- *
- * @param string $substr literal string to find
- * @param string $str literal string
- * @param int $pos position to start at, beginning of string by default
- * @return integer
- */
- public function getLocateExpression($str, $substr, $startPos = false)
- {
- if ($startPos !== false) {
- $str = $this->getSubstringExpression($str, $startPos);
- return 'CASE WHEN (POSITION('.$substr.' IN '.$str.') = 0) THEN 0 ELSE (POSITION('.$substr.' IN '.$str.') + '.($startPos-1).') END';
- } else {
- return 'POSITION('.$substr.' IN '.$str.')';
- }
- }
-
- /**
- * parses a literal boolean value and returns
- * proper sql equivalent
- *
- * @param string $value boolean value to be parsed
- * @return string parsed boolean value
- */
- /*public function parseBoolean($value)
- {
- return $value;
- }*/
-
- /**
- * Whether the platform supports sequences.
- * Postgres has native support for sequences.
- *
- * @return boolean
- */
- public function supportsSequences()
- {
- return true;
- }
-
- /**
- * Whether the platform supports database schemas.
- *
- * @return boolean
- */
- public function supportsSchemas()
- {
- return true;
- }
-
- /**
- * Whether the platform supports identity columns.
- * Postgres supports these through the SERIAL keyword.
- *
- * @return boolean
- */
- public function supportsIdentityColumns()
- {
- return true;
- }
-
- /**
- * Whether the platform prefers sequences for ID generation.
- *
- * @return boolean
- */
- public function prefersSequences()
- {
- return true;
- }
-
- public function getListDatabasesSQL()
- {
- return 'SELECT datname FROM pg_database';
- }
-
- public function getListSequencesSQL($database)
- {
- return "SELECT
- relname
- FROM
- pg_class
- WHERE relkind = 'S' AND relnamespace IN
- (SELECT oid FROM pg_namespace
- WHERE nspname NOT LIKE 'pg_%' AND nspname != 'information_schema')";
- }
-
- public function getListTablesSQL()
- {
- return "SELECT
- c.relname AS table_name
- FROM pg_class c, pg_user u
- WHERE c.relowner = u.usesysid
- AND c.relkind = 'r'
- AND NOT EXISTS (SELECT 1 FROM pg_views WHERE viewname = c.relname)
- AND c.relname !~ '^(pg_|sql_)'
- UNION
- SELECT c.relname AS table_name
- FROM pg_class c
- WHERE c.relkind = 'r'
- AND NOT EXISTS (SELECT 1 FROM pg_views WHERE viewname = c.relname)
- AND NOT EXISTS (SELECT 1 FROM pg_user WHERE usesysid = c.relowner)
- AND c.relname !~ '^pg_'";
- }
-
- public function getListViewsSQL($database)
- {
- return 'SELECT viewname, definition FROM pg_views';
- }
-
- public function getListTableForeignKeysSQL($table, $database = null)
- {
- return "SELECT r.conname, pg_catalog.pg_get_constraintdef(r.oid, true) as condef
- FROM pg_catalog.pg_constraint r
- WHERE r.conrelid =
- (
- SELECT c.oid
- FROM pg_catalog.pg_class c
- LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
- WHERE c.relname = '" . $table . "' AND pg_catalog.pg_table_is_visible(c.oid)
- )
- AND r.contype = 'f'";
- }
-
- public function getCreateViewSQL($name, $sql)
- {
- return 'CREATE VIEW ' . $name . ' AS ' . $sql;
- }
-
- public function getDropViewSQL($name)
- {
- return 'DROP VIEW '. $name;
- }
-
- public function getListTableConstraintsSQL($table)
- {
- return "SELECT
- relname
- FROM
- pg_class
- WHERE oid IN (
- SELECT indexrelid
- FROM pg_index, pg_class
- WHERE pg_class.relname = '$table'
- AND pg_class.oid = pg_index.indrelid
- AND (indisunique = 't' OR indisprimary = 't')
- )";
- }
-
- /**
- * @license New BSD License
- * @link http://ezcomponents.org/docs/api/trunk/DatabaseSchema/ezcDbSchemaPgsqlReader.html
- * @param string $table
- * @return string
- */
- public function getListTableIndexesSQL($table)
- {
- return "SELECT relname, pg_index.indisunique, pg_index.indisprimary,
- pg_index.indkey, pg_index.indrelid
- FROM pg_class, pg_index
- WHERE oid IN (
- SELECT indexrelid
- FROM pg_index, pg_class
- WHERE pg_class.relname='$table' AND pg_class.oid=pg_index.indrelid
- ) AND pg_index.indexrelid = oid";
- }
-
- public function getListTableColumnsSQL($table)
- {
- return "SELECT
- a.attnum,
- a.attname AS field,
- t.typname AS type,
- format_type(a.atttypid, a.atttypmod) AS complete_type,
- a.attnotnull AS isnotnull,
- (SELECT 't'
- FROM pg_index
- WHERE c.oid = pg_index.indrelid
- AND pg_index.indkey[0] = a.attnum
- AND pg_index.indisprimary = 't'
- ) AS pri,
- (SELECT pg_attrdef.adsrc
- FROM pg_attrdef
- WHERE c.oid = pg_attrdef.adrelid
- AND pg_attrdef.adnum=a.attnum
- ) AS default
- FROM pg_attribute a, pg_class c, pg_type t
- WHERE c.relname = '$table'
- AND a.attnum > 0
- AND a.attrelid = c.oid
- AND a.atttypid = t.oid
- ORDER BY a.attnum";
- }
-
- /**
- * create a new database
- *
- * @param string $name name of the database that should be created
- * @throws PDOException
- * @return void
- * @override
- */
- public function getCreateDatabaseSQL($name)
- {
- return 'CREATE DATABASE ' . $name;
- }
-
- /**
- * drop an existing database
- *
- * @param string $name name of the database that should be dropped
- * @throws PDOException
- * @access public
- */
- public function getDropDatabaseSQL($name)
- {
- return 'DROP DATABASE ' . $name;
- }
-
- /**
- * Return the FOREIGN KEY query section dealing with non-standard options
- * as MATCH, INITIALLY DEFERRED, ON UPDATE, ...
- *
- * @param \Doctrine\DBAL\Schema\ForeignKeyConstraint $foreignKey foreign key definition
- * @return string
- * @override
- */
- public function getAdvancedForeignKeyOptionsSQL(\Doctrine\DBAL\Schema\ForeignKeyConstraint $foreignKey)
- {
- $query = '';
- if ($foreignKey->hasOption('match')) {
- $query .= ' MATCH ' . $foreignKey->getOption('match');
- }
- $query .= parent::getAdvancedForeignKeyOptionsSQL($foreignKey);
- if ($foreignKey->hasOption('deferrable') && $foreignKey->getOption('deferrable') !== false) {
- $query .= ' DEFERRABLE';
- } else {
- $query .= ' NOT DEFERRABLE';
- }
- if ($foreignKey->hasOption('feferred') && $foreignKey->getOption('feferred') !== false) {
- $query .= ' INITIALLY DEFERRED';
- } else {
- $query .= ' INITIALLY IMMEDIATE';
- }
- return $query;
- }
-
- /**
- * generates the sql for altering an existing table on postgresql
- *
- * @param string $name name of the table that is intended to be changed.
- * @param array $changes associative array that contains the details of each type *
- * @param boolean $check indicates whether the function should just check if the DBMS driver
- * can perform the requested table alterations if the value is true or
- * actually perform them otherwise.
- * @see Doctrine_Export::alterTable()
- * @return array
- * @override
- */
- public function getAlterTableSQL(TableDiff $diff)
- {
- $sql = array();
-
- foreach ($diff->addedColumns as $column) {
- $query = 'ADD ' . $this->getColumnDeclarationSQL($column->getName(), $column->toArray());
- $sql[] = 'ALTER TABLE ' . $diff->name . ' ' . $query;
- }
-
- foreach ($diff->removedColumns as $column) {
- $query = 'DROP ' . $column->getName();
- $sql[] = 'ALTER TABLE ' . $diff->name . ' ' . $query;
- }
-
- foreach ($diff->changedColumns AS $columnDiff) {
- $oldColumnName = $columnDiff->oldColumnName;
- $column = $columnDiff->column;
-
- if ($columnDiff->hasChanged('type')) {
- $type = $column->getType();
-
- // here was a server version check before, but DBAL API does not support this anymore.
- $query = 'ALTER ' . $oldColumnName . ' TYPE ' . $type->getSqlDeclaration($column->toArray(), $this);
- $sql[] = 'ALTER TABLE ' . $diff->name . ' ' . $query;
- }
- if ($columnDiff->hasChanged('default')) {
- $query = 'ALTER ' . $oldColumnName . ' SET ' . $this->getDefaultValueDeclarationSQL($column->toArray());
- $sql[] = 'ALTER TABLE ' . $diff->name . ' ' . $query;
- }
- if ($columnDiff->hasChanged('notnull')) {
- $query = 'ALTER ' . $oldColumnName . ' ' . ($column->getNotNull() ? 'SET' : 'DROP') . ' NOT NULL';
- $sql[] = 'ALTER TABLE ' . $diff->name . ' ' . $query;
- }
- }
-
- foreach ($diff->renamedColumns as $oldColumnName => $column) {
- $sql[] = 'ALTER TABLE ' . $diff->name . ' RENAME COLUMN ' . $oldColumnName . ' TO ' . $column->getName();
- }
-
- if ($diff->newName !== false) {
- $sql[] = 'ALTER TABLE ' . $diff->name . ' RENAME TO ' . $diff->newName;
- }
-
- $sql = array_merge($sql, $this->_getAlterTableIndexForeignKeySQL($diff));
-
- return $sql;
- }
-
- /**
- * Gets the SQL to create a sequence on this platform.
- *
- * @param \Doctrine\DBAL\Schema\Sequence $sequence
- * @return string
- */
- public function getCreateSequenceSQL(\Doctrine\DBAL\Schema\Sequence $sequence)
- {
- return 'CREATE SEQUENCE ' . $sequence->getName() .
- ' INCREMENT BY ' . $sequence->getAllocationSize() .
- ' MINVALUE ' . $sequence->getInitialValue() .
- ' START ' . $sequence->getInitialValue();
- }
-
- /**
- * Drop existing sequence
- * @param \Doctrine\DBAL\Schema\Sequence $sequence
- * @return string
- */
- public function getDropSequenceSQL($sequence)
- {
- if ($sequence instanceof \Doctrine\DBAL\Schema\Sequence) {
- $sequence = $sequence->getName();
- }
- return 'DROP SEQUENCE ' . $sequence;
- }
-
- /**
- * @param ForeignKeyConstraint|string $foreignKey
- * @param Table|string $table
- * @return string
- */
- public function getDropForeignKeySQL($foreignKey, $table)
- {
- return $this->getDropConstraintSQL($foreignKey, $table);
- }
-
- /**
- * Gets the SQL used to create a table.
- *
- * @param unknown_type $tableName
- * @param array $columns
- * @param array $options
- * @return unknown
- */
- protected function _getCreateTableSQL($tableName, array $columns, array $options = array())
- {
- $queryFields = $this->getColumnDeclarationListSQL($columns);
-
- if (isset($options['primary']) && ! empty($options['primary'])) {
- $keyColumns = array_unique(array_values($options['primary']));
- $queryFields .= ', PRIMARY KEY(' . implode(', ', $keyColumns) . ')';
- }
-
- $query = 'CREATE TABLE ' . $tableName . ' (' . $queryFields . ')';
-
- $sql[] = $query;
-
- if (isset($options['indexes']) && ! empty($options['indexes'])) {
- foreach ($options['indexes'] AS $index) {
- $sql[] = $this->getCreateIndexSQL($index, $tableName);
- }
- }
-
- if (isset($options['foreignKeys'])) {
- foreach ((array) $options['foreignKeys'] as $definition) {
- $sql[] = $this->getCreateForeignKeySQL($definition, $tableName);
- }
- }
-
- return $sql;
- }
-
- /**
- * Postgres wants boolean values converted to the strings 'true'/'false'.
- *
- * @param array $item
- * @override
- */
- public function convertBooleans($item)
- {
- if (is_array($item)) {
- foreach ($item as $key => $value) {
- if (is_bool($value) || is_numeric($item)) {
- $item[$key] = ($value) ? 'true' : 'false';
- }
- }
- } else {
- if (is_bool($item) || is_numeric($item)) {
- $item = ($item) ? 'true' : 'false';
- }
- }
- return $item;
- }
-
- public function getSequenceNextValSQL($sequenceName)
- {
- return "SELECT NEXTVAL('" . $sequenceName . "')";
- }
-
- public function getSetTransactionIsolationSQL($level)
- {
- return 'SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL '
- . $this->_getTransactionIsolationLevelSQL($level);
- }
-
- /**
- * @override
- */
- public function getBooleanTypeDeclarationSQL(array $field)
- {
- return 'BOOLEAN';
- }
-
- /**
- * @override
- */
- public function getIntegerTypeDeclarationSQL(array $field)
- {
- if ( ! empty($field['autoincrement'])) {
- return 'SERIAL';
- }
-
- return 'INT';
- }
-
- /**
- * @override
- */
- public function getBigIntTypeDeclarationSQL(array $field)
- {
- if ( ! empty($field['autoincrement'])) {
- return 'BIGSERIAL';
- }
- return 'BIGINT';
- }
-
- /**
- * @override
- */
- public function getSmallIntTypeDeclarationSQL(array $field)
- {
- return 'SMALLINT';
- }
-
- /**
- * @override
- */
- public function getDateTimeTypeDeclarationSQL(array $fieldDeclaration)
- {
- return 'TIMESTAMP(0) WITH TIME ZONE';
- }
-
- /**
- * @override
- */
- public function getDateTypeDeclarationSQL(array $fieldDeclaration)
- {
- return 'DATE';
- }
-
- /**
- * @override
- */
- public function getTimeTypeDeclarationSQL(array $fieldDeclaration)
- {
- return 'TIME';
- }
-
- /**
- * @override
- */
- protected function _getCommonIntegerTypeDeclarationSQL(array $columnDef)
- {
- return '';
- }
-
- /**
- * Gets the SQL snippet used to declare a VARCHAR column on the MySql platform.
- *
- * @params array $field
- * @override
- */
- public function getVarcharTypeDeclarationSQL(array $field)
- {
- if ( ! isset($field['length'])) {
- if (array_key_exists('default', $field)) {
- $field['length'] = $this->getVarcharMaxLength();
- } else {
- $field['length'] = false;
- }
- }
-
- $length = ($field['length'] <= $this->getVarcharMaxLength()) ? $field['length'] : false;
- $fixed = (isset($field['fixed'])) ? $field['fixed'] : false;
-
- return $fixed ? ($length ? 'CHAR(' . $length . ')' : 'CHAR(255)')
- : ($length ? 'VARCHAR(' . $length . ')' : 'TEXT');
- }
-
- /** @override */
- public function getClobTypeDeclarationSQL(array $field)
- {
- return 'TEXT';
- }
-
- /**
- * Get the platform name for this instance
- *
- * @return string
- */
- public function getName()
- {
- return 'postgresql';
- }
-
- /**
- * Gets the character casing of a column in an SQL result set.
- *
- * PostgreSQL returns all column names in SQL result sets in lowercase.
- *
- * @param string $column The column name for which to get the correct character casing.
- * @return string The column name in the character casing used in SQL result sets.
- */
- public function getSQLResultCasing($column)
- {
- return strtolower($column);
- }
-
- public function getDateTimeFormatString()
- {
- return 'Y-m-d H:i:sO';
- }
-
- /**
- * Get the insert sql for an empty insert statement
- *
- * @param string $tableName
- * @param string $identifierColumnName
- * @return string $sql
- */
- public function getEmptyIdentityInsertSQL($quotedTableName, $quotedIdentifierColumnName)
- {
- return 'INSERT INTO ' . $quotedTableName . ' (' . $quotedIdentifierColumnName . ') VALUES (DEFAULT)';
- }
-
- /**
- * @inheritdoc
- */
- public function getTruncateTableSQL($tableName, $cascade = false)
- {
- return 'TRUNCATE '.$tableName.' '.($cascade)?'CASCADE':'';
- }
-
- public function getReadLockSQL()
- {
- return 'FOR SHARE';
- }
-}
diff --git a/lib/Doctrine/DBAL/Platforms/SqlitePlatform.php b/lib/Doctrine/DBAL/Platforms/SqlitePlatform.php
deleted file mode 100644
index 8b209fa60..000000000
--- a/lib/Doctrine/DBAL/Platforms/SqlitePlatform.php
+++ /dev/null
@@ -1,436 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Platforms;
-
-use Doctrine\DBAL\DBALException;
-
-/**
- * The SqlitePlatform class describes the specifics and dialects of the SQLite
- * database platform.
- *
- * @since 2.0
- * @author Roman Borschel
- * @author Benjamin Eberlei
- * @todo Rename: SQLitePlatform
- */
-class SqlitePlatform extends AbstractPlatform
-{
- /**
- * returns the regular expression operator
- *
- * @return string
- * @override
- */
- public function getRegexpExpression()
- {
- return 'RLIKE';
- }
-
- /**
- * Return string to call a variable with the current timestamp inside an SQL statement
- * There are three special variables for current date and time.
- *
- * @return string sqlite function as string
- * @override
- */
- public function getNowExpression($type = 'timestamp')
- {
- switch ($type) {
- case 'time':
- return 'time(\'now\')';
- case 'date':
- return 'date(\'now\')';
- case 'timestamp':
- default:
- return 'datetime(\'now\')';
- }
- }
-
- /**
- * Trim a string, leading/trailing/both and with a given char which defaults to space.
- *
- * @param string $str
- * @param int $pos
- * @param string $char
- * @return string
- */
- public function getTrimExpression($str, $pos = self::TRIM_UNSPECIFIED, $char = false)
- {
- $trimFn = '';
- $trimChar = ($char != false) ? (', ' . $char) : '';
-
- if ($pos == self::TRIM_LEADING) {
- $trimFn = 'LTRIM';
- } else if($pos == self::TRIM_TRAILING) {
- $trimFn = 'RTRIM';
- } else {
- $trimFn = 'TRIM';
- }
-
- return $trimFn . '(' . $str . $trimChar . ')';
- }
-
- /**
- * return string to call a function to get a substring inside an SQL statement
- *
- * Note: Not SQL92, but common functionality.
- *
- * SQLite only supports the 2 parameter variant of this function
- *
- * @param string $value an sql string literal or column name/alias
- * @param integer $position where to start the substring portion
- * @param integer $length the substring portion length
- * @return string SQL substring function with given parameters
- * @override
- */
- public function getSubstringExpression($value, $position, $length = null)
- {
- if ($length !== null) {
- return 'SUBSTR(' . $value . ', ' . $position . ', ' . $length . ')';
- }
- return 'SUBSTR(' . $value . ', ' . $position . ', LENGTH(' . $value . '))';
- }
-
- /**
- * returns the position of the first occurrence of substring $substr in string $str
- *
- * @param string $substr literal string to find
- * @param string $str literal string
- * @param int $pos position to start at, beginning of string by default
- * @return integer
- */
- public function getLocateExpression($str, $substr, $startPos = false)
- {
- if ($startPos == false) {
- return 'LOCATE('.$str.', '.$substr.')';
- } else {
- return 'LOCATE('.$str.', '.$substr.', '.$startPos.')';
- }
- }
-
- protected function _getTransactionIsolationLevelSQL($level)
- {
- switch ($level) {
- case \Doctrine\DBAL\Connection::TRANSACTION_READ_UNCOMMITTED:
- return 0;
- case \Doctrine\DBAL\Connection::TRANSACTION_READ_COMMITTED:
- case \Doctrine\DBAL\Connection::TRANSACTION_REPEATABLE_READ:
- case \Doctrine\DBAL\Connection::TRANSACTION_SERIALIZABLE:
- return 1;
- default:
- return parent::_getTransactionIsolationLevelSQL($level);
- }
- }
-
- public function getSetTransactionIsolationSQL($level)
- {
- return 'PRAGMA read_uncommitted = ' . $this->_getTransactionIsolationLevelSQL($level);
- }
-
- /**
- * @override
- */
- public function prefersIdentityColumns()
- {
- return true;
- }
-
- /**
- * @override
- */
- public function getBooleanTypeDeclarationSQL(array $field)
- {
- return 'BOOLEAN';
- }
-
- /**
- * @override
- */
- public function getIntegerTypeDeclarationSQL(array $field)
- {
- return $this->_getCommonIntegerTypeDeclarationSQL($field);
- }
-
- /**
- * @override
- */
- public function getBigIntTypeDeclarationSQL(array $field)
- {
- return $this->_getCommonIntegerTypeDeclarationSQL($field);
- }
-
- /**
- * @override
- */
- public function getTinyIntTypeDeclarationSql(array $field)
- {
- return $this->_getCommonIntegerTypeDeclarationSQL($field);
- }
-
- /**
- * @override
- */
- public function getSmallIntTypeDeclarationSQL(array $field)
- {
- return $this->_getCommonIntegerTypeDeclarationSQL($field);
- }
-
- /**
- * @override
- */
- public function getMediumIntTypeDeclarationSql(array $field)
- {
- return $this->_getCommonIntegerTypeDeclarationSQL($field);
- }
-
- /**
- * @override
- */
- public function getDateTimeTypeDeclarationSQL(array $fieldDeclaration)
- {
- return 'DATETIME';
- }
-
- /**
- * @override
- */
- public function getDateTypeDeclarationSQL(array $fieldDeclaration)
- {
- return 'DATE';
- }
-
- /**
- * @override
- */
- public function getTimeTypeDeclarationSQL(array $fieldDeclaration)
- {
- return 'TIME';
- }
-
- /**
- * @override
- */
- protected function _getCommonIntegerTypeDeclarationSQL(array $columnDef)
- {
- $autoinc = ! empty($columnDef['autoincrement']) ? ' AUTOINCREMENT' : '';
- $pk = ! empty($columnDef['primary']) && ! empty($autoinc) ? ' PRIMARY KEY' : '';
-
- return 'INTEGER' . $pk . $autoinc;
- }
-
- /**
- * create a new table
- *
- * @param string $name Name of the database that should be created
- * @param array $fields Associative array that contains the definition of each field of the new table
- * The indexes of the array entries are the names of the fields of the table an
- * the array entry values are associative arrays like those that are meant to be
- * passed with the field definitions to get[Type]Declaration() functions.
- * array(
- * 'id' => array(
- * 'type' => 'integer',
- * 'unsigned' => 1
- * 'notnull' => 1
- * 'default' => 0
- * ),
- * 'name' => array(
- * 'type' => 'text',
- * 'length' => 12
- * ),
- * 'password' => array(
- * 'type' => 'text',
- * 'length' => 12
- * )
- * );
- * @param array $options An associative array of table options:
- *
- * @return void
- * @override
- */
- protected function _getCreateTableSQL($name, array $columns, array $options = array())
- {
- $queryFields = $this->getColumnDeclarationListSQL($columns);
-
- $autoinc = false;
- foreach($columns as $field) {
- if (isset($field['autoincrement']) && $field['autoincrement']) {
- $autoinc = true;
- break;
- }
- }
-
- if ( ! $autoinc && isset($options['primary']) && ! empty($options['primary'])) {
- $keyColumns = array_unique(array_values($options['primary']));
- $keyColumns = array_map(array($this, 'quoteIdentifier'), $keyColumns);
- $queryFields.= ', PRIMARY KEY('.implode(', ', $keyColumns).')';
- }
-
- $query[] = 'CREATE TABLE ' . $name . ' (' . $queryFields . ')';
-
- if (isset($options['indexes']) && ! empty($options['indexes'])) {
- foreach ($options['indexes'] as $index => $indexDef) {
- $query[] = $this->getCreateIndexSQL($indexDef, $name);
- }
- }
- if (isset($options['unique']) && ! empty($options['unique'])) {
- foreach ($options['unique'] as $index => $indexDef) {
- $query[] = $this->getCreateIndexSQL($indexDef, $name);
- }
- }
- return $query;
- }
-
- /**
- * {@inheritdoc}
- */
- public function getVarcharTypeDeclarationSQL(array $field)
- {
- if ( ! isset($field['length'])) {
- if (array_key_exists('default', $field)) {
- $field['length'] = $this->getVarcharMaxLength();
- } else {
- $field['length'] = false;
- }
- }
- $length = ($field['length'] <= $this->getVarcharMaxLength()) ? $field['length'] : false;
- $fixed = (isset($field['fixed'])) ? $field['fixed'] : false;
-
- return $fixed ? ($length ? 'CHAR(' . $length . ')' : 'CHAR(255)')
- : ($length ? 'VARCHAR(' . $length . ')' : 'TEXT');
- }
-
- public function getClobTypeDeclarationSQL(array $field)
- {
- return 'CLOB';
- }
-
- public function getListTableConstraintsSQL($table)
- {
- return "SELECT sql FROM sqlite_master WHERE type='index' AND tbl_name = '$table' AND sql NOT NULL ORDER BY name";
- }
-
- public function getListTableColumnsSQL($table)
- {
- return "PRAGMA table_info($table)";
- }
-
- public function getListTableIndexesSQL($table)
- {
- return "PRAGMA index_list($table)";
- }
-
- public function getListTablesSQL()
- {
- return "SELECT name FROM sqlite_master WHERE type = 'table' AND name != 'sqlite_sequence' "
- . "UNION ALL SELECT name FROM sqlite_temp_master "
- . "WHERE type = 'table' ORDER BY name";
- }
-
- public function getListViewsSQL($database)
- {
- return "SELECT name, sql FROM sqlite_master WHERE type='view' AND sql NOT NULL";
- }
-
- public function getCreateViewSQL($name, $sql)
- {
- return 'CREATE VIEW ' . $name . ' AS ' . $sql;
- }
-
- public function getDropViewSQL($name)
- {
- return 'DROP VIEW '. $name;
- }
-
- /**
- * SQLite does support foreign key constraints, but only in CREATE TABLE statements...
- * This really limits their usefulness and requires SQLite specific handling, so
- * we simply say that SQLite does NOT support foreign keys for now...
- *
- * @return boolean FALSE
- * @override
- */
- public function supportsForeignKeyConstraints()
- {
- return false;
- }
-
- public function supportsAlterTable()
- {
- return false;
- }
-
- /**
- * Get the platform name for this instance
- *
- * @return string
- */
- public function getName()
- {
- return 'sqlite';
- }
-
- /**
- * @inheritdoc
- */
- public function getTruncateTableSQL($tableName, $cascade = false)
- {
- return 'DELETE FROM '.$tableName;
- }
-
- /**
- * User-defined function for Sqlite that is used with PDO::sqliteCreateFunction()
- *
- * @param int|float $value
- * @return float
- */
- static public function udfSqrt($value)
- {
- return sqrt($value);
- }
-
- /**
- * User-defined function for Sqlite that implements MOD(a, b)
- */
- static public function udfMod($a, $b)
- {
- return ($a % $b);
- }
-
- /**
- * @param string $str
- * @param string $substr
- * @param int $offset
- */
- static public function udfLocate($str, $substr, $offset = 0)
- {
- $pos = strpos($str, $substr, $offset);
- if ($pos !== false) {
- return $pos+1;
- }
- return 0;
- }
-
- public function getForUpdateSql()
- {
- return '';
- }
-}
diff --git a/lib/Doctrine/DBAL/README.markdown b/lib/Doctrine/DBAL/README.markdown
deleted file mode 100644
index e69de29bb..000000000
diff --git a/lib/Doctrine/DBAL/Schema/AbstractAsset.php b/lib/Doctrine/DBAL/Schema/AbstractAsset.php
deleted file mode 100644
index ae79014a0..000000000
--- a/lib/Doctrine/DBAL/Schema/AbstractAsset.php
+++ /dev/null
@@ -1,86 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Schema;
-
-/**
- * The abstract asset allows to reset the name of all assets without publishing this to the public userland.
- *
- * This encapsulation hack is necessary to keep a consistent state of the database schema. Say we have a list of tables
- * array($tableName => Table($tableName)); if you want to rename the table, you have to make sure
- *
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @link www.doctrine-project.org
- * @since 2.0
- * @version $Revision$
- * @author Benjamin Eberlei
- */
-abstract class AbstractAsset
-{
- /**
- * @var string
- */
- protected $_name;
-
- /**
- * Set name of this asset
- *
- * @param string $name
- */
- protected function _setName($name)
- {
- $this->_name = $name;
- }
-
- /**
- * Return name of this schema asset.
- *
- * @return string
- */
- public function getName()
- {
- return $this->_name;
- }
-
- /**
- * Generate an identifier from a list of column names obeying a certain string length.
- *
- * This is especially important for Oracle, since it does not allow identifiers larger than 30 chars,
- * however building idents automatically for foreign keys, composite keys or such can easily create
- * very long names.
- *
- * @param array $columnNames
- * @param string $postfix
- * @param int $maxSize
- * @return string
- */
- protected function _generateIdentifierName($columnNames, $postfix='', $maxSize=30)
- {
- $columnCount = count($columnNames);
- $postfixLen = strlen($postfix);
- $parts = array_map(function($columnName) use($columnCount, $postfixLen, $maxSize) {
- return substr($columnName, -floor(($maxSize-$postfixLen)/$columnCount - 1));
- }, $columnNames);
- $parts[] = $postfix;
-
- return trim(implode("_", $parts), '_');
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Schema/AbstractSchemaManager.php b/lib/Doctrine/DBAL/Schema/AbstractSchemaManager.php
deleted file mode 100644
index 7a5cea0a7..000000000
--- a/lib/Doctrine/DBAL/Schema/AbstractSchemaManager.php
+++ /dev/null
@@ -1,774 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Schema;
-
-use Doctrine\DBAL\Types;
-use Doctrine\DBAL\DBALException;
-use Doctrine\DBAL\Platforms\AbstractPlatform;
-
-/**
- * Base class for schema managers. Schema managers are used to inspect and/or
- * modify the database schema/structure.
- *
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @author Konsta Vesterinen
- * @author Lukas Smith (PEAR MDB2 library)
- * @author Roman Borschel
- * @author Jonathan H. Wage
- * @author Benjamin Eberlei
- * @version $Revision$
- * @since 2.0
- */
-abstract class AbstractSchemaManager
-{
- /**
- * Holds instance of the Doctrine connection for this schema manager
- *
- * @var \Doctrine\DBAL\Connection
- */
- protected $_conn;
-
- /**
- * Holds instance of the database platform used for this schema manager
- *
- * @var \Doctrine\DBAL\Platforms\AbstractPlatform
- */
- protected $_platform;
-
- /**
- * Constructor. Accepts the Connection instance to manage the schema for
- *
- * @param \Doctrine\DBAL\Connection $conn
- */
- public function __construct(\Doctrine\DBAL\Connection $conn)
- {
- $this->_conn = $conn;
- $this->_platform = $this->_conn->getDatabasePlatform();
- }
-
- /**
- * Return associated platform.
- *
- * @return \Doctrine\DBAL\Platform\AbstractPlatform
- */
- public function getDatabasePlatform()
- {
- return $this->_platform;
- }
-
- /**
- * Try any method on the schema manager. Normally a method throws an
- * exception when your DBMS doesn't support it or if an error occurs.
- * This method allows you to try and method on your SchemaManager
- * instance and will return false if it does not work or is not supported.
- *
- *
- * $result = $sm->tryMethod('dropView', 'view_name');
- *
- *
- * @return mixed
- */
- public function tryMethod()
- {
- $args = func_get_args();
- $method = $args[0];
- unset($args[0]);
- $args = array_values($args);
-
- try {
- return call_user_func_array(array($this, $method), $args);
- } catch (\Exception $e) {
- return false;
- }
- }
-
- /**
- * List the available databases for this connection
- *
- * @return array $databases
- */
- public function listDatabases()
- {
- $sql = $this->_platform->getListDatabasesSQL();
-
- $databases = $this->_conn->fetchAll($sql);
-
- return $this->_getPortableDatabasesList($databases);
- }
-
- /**
- * List the available sequences for this connection
- *
- * @return Sequence[]
- */
- public function listSequences($database = null)
- {
- if (is_null($database)) {
- $database = $this->_conn->getDatabase();
- }
- $sql = $this->_platform->getListSequencesSQL($database);
-
- $sequences = $this->_conn->fetchAll($sql);
-
- return $this->_getPortableSequencesList($sequences);
- }
-
- /**
- * List the columns for a given table.
- *
- * In contrast to other libraries and to the old version of Doctrine,
- * this column definition does try to contain the 'primary' field for
- * the reason that it is not portable accross different RDBMS. Use
- * {@see listTableIndexes($tableName)} to retrieve the primary key
- * of a table. We're a RDBMS specifies more details these are held
- * in the platformDetails array.
- *
- * @param string $table The name of the table.
- * @return Column[]
- */
- public function listTableColumns($table)
- {
- $sql = $this->_platform->getListTableColumnsSQL($table);
-
- $tableColumns = $this->_conn->fetchAll($sql);
-
- return $this->_getPortableTableColumnList($tableColumns);
- }
-
- /**
- * List the indexes for a given table returning an array of Index instances.
- *
- * Keys of the portable indexes list are all lower-cased.
- *
- * @param string $table The name of the table
- * @return Index[] $tableIndexes
- */
- public function listTableIndexes($table)
- {
- $sql = $this->_platform->getListTableIndexesSQL($table);
-
- $tableIndexes = $this->_conn->fetchAll($sql);
-
- return $this->_getPortableTableIndexesList($tableIndexes, $table);
- }
-
- /**
- * Return a list of all tables in the current database
- *
- * @return array
- */
- public function listTableNames()
- {
- $sql = $this->_platform->getListTablesSQL();
-
- $tables = $this->_conn->fetchAll($sql);
-
- return $this->_getPortableTablesList($tables);
- }
-
- /**
- * List the tables for this connection
- *
- * @return Table[]
- */
- public function listTables()
- {
- $tableNames = $this->listTableNames();
-
- $tables = array();
- foreach ($tableNames AS $tableName) {
- $tables[] = $this->listTableDetails($tableName);
- }
-
- return $tables;
- }
-
- /**
- * @param string $tableName
- * @return Table
- */
- public function listTableDetails($tableName)
- {
- $columns = $this->listTableColumns($tableName);
- $foreignKeys = array();
- if ($this->_platform->supportsForeignKeyConstraints()) {
- $foreignKeys = $this->listTableForeignKeys($tableName);
- }
- $indexes = $this->listTableIndexes($tableName);
-
- $idGeneratorType = Table::ID_NONE;
- foreach ($columns AS $column) {
- if ($column->hasPlatformOption('autoincrement') && $column->getPlatformOption('autoincrement')) {
- $idGeneratorType = Table::ID_IDENTITY;
- }
- }
-
- return new Table($tableName, $columns, $indexes, $foreignKeys, $idGeneratorType, array());
- }
-
- /**
- * List the views this connection has
- *
- * @return View[]
- */
- public function listViews()
- {
- $database = $this->_conn->getDatabase();
- $sql = $this->_platform->getListViewsSQL($database);
- $views = $this->_conn->fetchAll($sql);
-
- return $this->_getPortableViewsList($views);
- }
-
- /**
- * List the foreign keys for the given table
- *
- * @param string $table The name of the table
- * @return ForeignKeyConstraint[]
- */
- public function listTableForeignKeys($table, $database = null)
- {
- if (is_null($database)) {
- $database = $this->_conn->getDatabase();
- }
- $sql = $this->_platform->getListTableForeignKeysSQL($table, $database);
- $tableForeignKeys = $this->_conn->fetchAll($sql);
-
- return $this->_getPortableTableForeignKeysList($tableForeignKeys);
- }
-
- /* drop*() Methods */
-
- /**
- * Drops a database.
- *
- * NOTE: You can not drop the database this SchemaManager is currently connected to.
- *
- * @param string $database The name of the database to drop
- */
- public function dropDatabase($database)
- {
- $this->_execSql($this->_platform->getDropDatabaseSQL($database));
- }
-
- /**
- * Drop the given table
- *
- * @param string $table The name of the table to drop
- */
- public function dropTable($table)
- {
- $this->_execSql($this->_platform->getDropTableSQL($table));
- }
-
- /**
- * Drop the index from the given table
- *
- * @param Index|string $index The name of the index
- * @param string|Table $table The name of the table
- */
- public function dropIndex($index, $table)
- {
- if($index instanceof Index) {
- $index = $index->getName();
- }
-
- $this->_execSql($this->_platform->getDropIndexSQL($index, $table));
- }
-
- /**
- * Drop the constraint from the given table
- *
- * @param Constraint $constraint
- * @param string $table The name of the table
- */
- public function dropConstraint(Constraint $constraint, $table)
- {
- $this->_execSql($this->_platform->getDropConstraintSQL($constraint, $table));
- }
-
- /**
- * Drops a foreign key from a table.
- *
- * @param ForeignKeyConstraint|string $table The name of the table with the foreign key.
- * @param Table|string $name The name of the foreign key.
- * @return boolean $result
- */
- public function dropForeignKey($foreignKey, $table)
- {
- $this->_execSql($this->_platform->getDropForeignKeySQL($foreignKey, $table));
- }
-
- /**
- * Drops a sequence with a given name.
- *
- * @param string $name The name of the sequence to drop.
- */
- public function dropSequence($name)
- {
- $this->_execSql($this->_platform->getDropSequenceSQL($name));
- }
-
- /**
- * Drop a view
- *
- * @param string $name The name of the view
- * @return boolean $result
- */
- public function dropView($name)
- {
- $this->_execSql($this->_platform->getDropViewSQL($name));
- }
-
- /* create*() Methods */
-
- /**
- * Creates a new database.
- *
- * @param string $database The name of the database to create.
- */
- public function createDatabase($database)
- {
- $this->_execSql($this->_platform->getCreateDatabaseSQL($database));
- }
-
- /**
- * Create a new table.
- *
- * @param Table $table
- * @param int $createFlags
- */
- public function createTable(Table $table)
- {
- $createFlags = AbstractPlatform::CREATE_INDEXES|AbstractPlatform::CREATE_FOREIGNKEYS;
- $this->_execSql($this->_platform->getCreateTableSQL($table, $createFlags));
- }
-
- /**
- * Create a new sequence
- *
- * @param Sequence $sequence
- * @throws Doctrine\DBAL\ConnectionException if something fails at database level
- */
- public function createSequence($sequence)
- {
- $this->_execSql($this->_platform->getCreateSequenceSQL($sequence));
- }
-
- /**
- * Create a constraint on a table
- *
- * @param Constraint $constraint
- * @param string|Table $table
- */
- public function createConstraint(Constraint $constraint, $table)
- {
- $this->_execSql($this->_platform->getCreateConstraintSQL($constraint, $table));
- }
-
- /**
- * Create a new index on a table
- *
- * @param Index $index
- * @param string $table name of the table on which the index is to be created
- */
- public function createIndex(Index $index, $table)
- {
- $this->_execSql($this->_platform->getCreateIndexSQL($index, $table));
- }
-
- /**
- * Create a new foreign key
- *
- * @param ForeignKeyConstraint $foreignKey ForeignKey instance
- * @param string|Table $table name of the table on which the foreign key is to be created
- */
- public function createForeignKey(ForeignKeyConstraint $foreignKey, $table)
- {
- $this->_execSql($this->_platform->getCreateForeignKeySQL($foreignKey, $table));
- }
-
- /**
- * Create a new view
- *
- * @param View $view
- */
- public function createView(View $view)
- {
- $this->_execSql($this->_platform->getCreateViewSQL($view->getName(), $view->getSql()));
- }
-
- /* dropAndCreate*() Methods */
-
- /**
- * Drop and create a constraint
- *
- * @param Constraint $constraint
- * @param string $table
- * @see dropConstraint()
- * @see createConstraint()
- */
- public function dropAndCreateConstraint(Constraint $constraint, $table)
- {
- $this->tryMethod('dropConstraint', $constraint, $table);
- $this->createConstraint($constraint, $table);
- }
-
- /**
- * Drop and create a new index on a table
- *
- * @param string|Table $table name of the table on which the index is to be created
- * @param Index $index
- */
- public function dropAndCreateIndex(Index $index, $table)
- {
- $this->tryMethod('dropIndex', $index->getName(), $table);
- $this->createIndex($index, $table);
- }
-
- /**
- * Drop and create a new foreign key
- *
- * @param ForeignKeyConstraint $foreignKey associative array that defines properties of the foreign key to be created.
- * @param string|Table $table name of the table on which the foreign key is to be created
- */
- public function dropAndCreateForeignKey(ForeignKeyConstraint $foreignKey, $table)
- {
- $this->tryMethod('dropForeignKey', $foreignKey, $table);
- $this->createForeignKey($foreignKey, $table);
- }
-
- /**
- * Drop and create a new sequence
- *
- * @param Sequence $sequence
- * @throws Doctrine\DBAL\ConnectionException if something fails at database level
- */
- public function dropAndCreateSequence(Sequence $sequence)
- {
- $this->tryMethod('createSequence', $seqName, $start, $allocationSize);
- $this->createSequence($seqName, $start, $allocationSize);
- }
-
- /**
- * Drop and create a new table.
- *
- * @param Table $table
- */
- public function dropAndCreateTable(Table $table)
- {
- $this->tryMethod('dropTable', $table->getName());
- $this->createTable($table);
- }
-
- /**
- * Drop and creates a new database.
- *
- * @param string $database The name of the database to create.
- */
- public function dropAndCreateDatabase($database)
- {
- $this->tryMethod('dropDatabase', $database);
- $this->createDatabase($database);
- }
-
- /**
- * Drop and create a new view
- *
- * @param View $view
- */
- public function dropAndCreateView(View $view)
- {
- $this->tryMethod('dropView', $view->getName());
- $this->createView($view);
- }
-
- /* alterTable() Methods */
-
- /**
- * Alter an existing tables schema
- *
- * @param TableDiff $tableDiff
- */
- public function alterTable(TableDiff $tableDiff)
- {
- $queries = $this->_platform->getAlterTableSQL($tableDiff);
- if (is_array($queries) && count($queries)) {
- foreach ($queries AS $ddlQuery) {
- $this->_execSql($ddlQuery);
- }
- }
- }
-
- /**
- * Rename a given table to another name
- *
- * @param string $name The current name of the table
- * @param string $newName The new name of the table
- */
- public function renameTable($name, $newName)
- {
- $tableDiff = new TableDiff($name);
- $tableDiff->newName = $newName;
- $this->alterTable($tableDiff);
- }
-
- /**
- * Methods for filtering return values of list*() methods to convert
- * the native DBMS data definition to a portable Doctrine definition
- */
-
- protected function _getPortableDatabasesList($databases)
- {
- $list = array();
- foreach ($databases as $key => $value) {
- if ($value = $this->_getPortableDatabaseDefinition($value)) {
- $list[] = $value;
- }
- }
- return $list;
- }
-
- protected function _getPortableDatabaseDefinition($database)
- {
- return $database;
- }
-
- protected function _getPortableFunctionsList($functions)
- {
- $list = array();
- foreach ($functions as $key => $value) {
- if ($value = $this->_getPortableFunctionDefinition($value)) {
- $list[] = $value;
- }
- }
- return $list;
- }
-
- protected function _getPortableFunctionDefinition($function)
- {
- return $function;
- }
-
- protected function _getPortableTriggersList($triggers)
- {
- $list = array();
- foreach ($triggers as $key => $value) {
- if ($value = $this->_getPortableTriggerDefinition($value)) {
- $list[] = $value;
- }
- }
- return $list;
- }
-
- protected function _getPortableTriggerDefinition($trigger)
- {
- return $trigger;
- }
-
- protected function _getPortableSequencesList($sequences)
- {
- $list = array();
- foreach ($sequences as $key => $value) {
- if ($value = $this->_getPortableSequenceDefinition($value)) {
- $list[] = $value;
- }
- }
- return $list;
- }
-
- /**
- * @param array $sequence
- * @return Sequence
- */
- protected function _getPortableSequenceDefinition($sequence)
- {
- throw DBALException::notSupported('Sequences');
- }
-
- /**
- * Independent of the database the keys of the column list result are lowercased.
- *
- * The name of the created column instance however is kept in its case.
- *
- * @param array $tableColumns
- * @return array
- */
- protected function _getPortableTableColumnList($tableColumns)
- {
- $list = array();
- foreach ($tableColumns as $key => $column) {
- if ($column = $this->_getPortableTableColumnDefinition($column)) {
- $name = strtolower($column->getName());
- $list[$name] = $column;
- }
- }
- return $list;
- }
-
- /**
- * Get Table Column Definition
- *
- * @param array $tableColumn
- * @return Column
- */
- abstract protected function _getPortableTableColumnDefinition($tableColumn);
-
- /**
- * Aggregate and group the index results according to the required data result.
- *
- * @param array $tableIndexRows
- * @param string $tableName
- * @return array
- */
- protected function _getPortableTableIndexesList($tableIndexRows, $tableName=null)
- {
- $result = array();
- foreach($tableIndexRows AS $tableIndex) {
- $indexName = $keyName = $tableIndex['key_name'];
- if($tableIndex['primary']) {
- $keyName = 'primary';
- }
- $keyName = strtolower($keyName);
-
- if(!isset($result[$keyName])) {
- $result[$keyName] = array(
- 'name' => $indexName,
- 'columns' => array($tableIndex['column_name']),
- 'unique' => $tableIndex['non_unique'] ? false : true,
- 'primary' => $tableIndex['primary'],
- );
- } else {
- $result[$keyName]['columns'][] = $tableIndex['column_name'];
- }
- }
-
- $indexes = array();
- foreach($result AS $indexKey => $data) {
- $indexes[$indexKey] = new Index($data['name'], $data['columns'], $data['unique'], $data['primary']);
- }
-
- return $indexes;
- }
-
- protected function _getPortableTablesList($tables)
- {
- $list = array();
- foreach ($tables as $key => $value) {
- if ($value = $this->_getPortableTableDefinition($value)) {
- $list[] = $value;
- }
- }
- return $list;
- }
-
- protected function _getPortableTableDefinition($table)
- {
- return $table;
- }
-
- protected function _getPortableUsersList($users)
- {
- $list = array();
- foreach ($users as $key => $value) {
- if ($value = $this->_getPortableUserDefinition($value)) {
- $list[] = $value;
- }
- }
- return $list;
- }
-
- protected function _getPortableUserDefinition($user)
- {
- return $user;
- }
-
- protected function _getPortableViewsList($views)
- {
- $list = array();
- foreach ($views as $key => $value) {
- if ($view = $this->_getPortableViewDefinition($value)) {
- $viewName = strtolower($view->getName());
- $list[$viewName] = $view;
- }
- }
- return $list;
- }
-
- protected function _getPortableViewDefinition($view)
- {
- return false;
- }
-
- protected function _getPortableTableForeignKeysList($tableForeignKeys)
- {
- $list = array();
- foreach ($tableForeignKeys as $key => $value) {
- if ($value = $this->_getPortableTableForeignKeyDefinition($value)) {
- $list[] = $value;
- }
- }
- return $list;
- }
-
- protected function _getPortableTableForeignKeyDefinition($tableForeignKey)
- {
- return $tableForeignKey;
- }
-
- protected function _execSql($sql)
- {
- foreach ((array) $sql as $query) {
- $this->_conn->executeUpdate($query);
- }
- }
-
- /**
- * Create a schema instance for the current database.
- *
- * @return Schema
- */
- public function createSchema()
- {
- $sequences = array();
- if($this->_platform->supportsSequences()) {
- $sequences = $this->listSequences();
- }
- $tables = $this->listTables();
-
- return new Schema($tables, $sequences, $this->createSchemaConfig());
- }
-
- /**
- * Create the configuration for this schema.
- *
- * @return SchemaConfig
- */
- public function createSchemaConfig()
- {
- $schemaConfig = new SchemaConfig();
- $schemaConfig->setExplicitForeignKeyIndexes($this->_platform->createsExplicitIndexForForeignKeys());
- $schemaConfig->setMaxIdentifierLength($this->_platform->getMaxIdentifierLength());
-
- return $schemaConfig;
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Schema/Column.php b/lib/Doctrine/DBAL/Schema/Column.php
deleted file mode 100644
index 3b446880e..000000000
--- a/lib/Doctrine/DBAL/Schema/Column.php
+++ /dev/null
@@ -1,331 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Schema;
-
-use \Doctrine\DBAL\Types\Type;
-use Doctrine\DBAL\Schema\Visitor\Visitor;
-
-/**
- * Object representation of a database column
- *
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @link www.doctrine-project.org
- * @since 2.0
- * @version $Revision$
- * @author Benjamin Eberlei
- */
-class Column extends AbstractAsset
-{
- /**
- * @var \Doctrine\DBAL\Types\Type
- */
- protected $_type;
-
- /**
- * @var int
- */
- protected $_length = 255;
-
- /**
- * @var int
- */
- protected $_precision = 0;
-
- /**
- * @var int
- */
- protected $_scale = 0;
-
- /**
- * @var bool
- */
- protected $_unsigned = false;
-
- /**
- * @var bool
- */
- protected $_fixed = false;
-
- /**
- * @var bool
- */
- protected $_notnull = true;
-
- /**
- * @var string
- */
- protected $_default = null;
-
- /**
- * @var array
- */
- protected $_platformOptions = array();
-
- /**
- * @var string
- */
- protected $_columnDefinition = null;
-
- /**
- * Create a new Column
- *
- * @param string $columnName
- * @param Doctrine\DBAL\Types\Type $type
- * @param int $length
- * @param bool $notNull
- * @param mixed $default
- * @param bool $unsigned
- * @param bool $fixed
- * @param int $precision
- * @param int $scale
- * @param array $platformOptions
- */
- public function __construct($columnName, Type $type, array $options=array())
- {
- $this->_setName($columnName);
- $this->setType($type);
- $this->setOptions($options);
- }
-
- /**
- * @param array $options
- * @return Column
- */
- public function setOptions(array $options)
- {
- foreach ($options AS $name => $value) {
- $method = "set".$name;
- if (method_exists($this, $method)) {
- $this->$method($value);
- }
- }
- return $this;
- }
-
- /**
- * @param Type $type
- * @return Column
- */
- public function setType(Type $type)
- {
- $this->_type = $type;
- return $this;
- }
-
- /**
- * @param int $length
- * @return Column
- */
- public function setLength($length)
- {
- if($length !== null) {
- $this->_length = (int)$length;
- } else {
- $this->_length = null;
- }
- return $this;
- }
-
- /**
- * @param int $precision
- * @return Column
- */
- public function setPrecision($precision)
- {
- $this->_precision = (int)$precision;
- return $this;
- }
-
- /**
- * @param int $scale
- * @return Column
- */
- public function setScale($scale)
- {
- $this->_scale = $scale;
- return $this;
- }
-
- /**
- *
- * @param bool $unsigned
- * @return Column
- */
- public function setUnsigned($unsigned)
- {
- $this->_unsigned = (bool)$unsigned;
- return $this;
- }
-
- /**
- *
- * @param bool $fixed
- * @return Column
- */
- public function setFixed($fixed)
- {
- $this->_fixed = (bool)$fixed;
- return $this;
- }
-
- /**
- * @param bool $notnull
- * @return Column
- */
- public function setNotnull($notnull)
- {
- $this->_notnull = (bool)$notnull;
- return $this;
- }
-
- /**
- *
- * @param mixed $default
- * @return Column
- */
- public function setDefault($default)
- {
- $this->_default = $default;
- return $this;
- }
-
- /**
- *
- * @param array $platformOptions
- * @return Column
- */
- public function setPlatformOptions(array $platformOptions)
- {
- $this->_platformOptions = $platformOptions;
- return $this;
- }
-
- /**
- *
- * @param string $name
- * @param mixed $value
- * @return Column
- */
- public function setPlatformOption($name, $value)
- {
- $this->_platformOptions[$name] = $value;
- return $this;
- }
-
- /**
- *
- * @param string
- * @return Column
- */
- public function setColumnDefinition($value)
- {
- $this->_columnDefinition = $value;
- return $this;
- }
-
- public function getType()
- {
- return $this->_type;
- }
-
- public function getLength()
- {
- return $this->_length;
- }
-
- public function getPrecision()
- {
- return $this->_precision;
- }
-
- public function getScale()
- {
- return $this->_scale;
- }
-
- public function getUnsigned()
- {
- return $this->_unsigned;
- }
-
- public function getFixed()
- {
- return $this->_fixed;
- }
-
- public function getNotnull()
- {
- return $this->_notnull;
- }
-
- public function getDefault()
- {
- return $this->_default;
- }
-
- public function getPlatformOptions()
- {
- return $this->_platformOptions;
- }
-
- public function hasPlatformOption($name)
- {
- return isset($this->_platformOptions[$name]);
- }
-
- public function getPlatformOption($name)
- {
- return $this->_platformOptions[$name];
- }
-
- public function getColumnDefinition()
- {
- return $this->_columnDefinition;
- }
-
- /**
- * @param Visitor $visitor
- */
- public function visit(\Doctrine\DBAL\Schema\Visitor $visitor)
- {
- $visitor->accept($this);
- }
-
- /**
- * @return array
- */
- public function toArray()
- {
- return array_merge(array(
- 'name' => $this->_name,
- 'type' => $this->_type,
- 'default' => $this->_default,
- 'notnull' => $this->_notnull,
- 'length' => $this->_length,
- 'precision' => $this->_precision,
- 'scale' => $this->_scale,
- 'fixed' => $this->_fixed,
- 'unsigned' => $this->_unsigned,
- 'columnDefinition' => $this->_columnDefinition,
- ), $this->_platformOptions);
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Schema/ColumnDiff.php b/lib/Doctrine/DBAL/Schema/ColumnDiff.php
deleted file mode 100644
index 4cf896901..000000000
--- a/lib/Doctrine/DBAL/Schema/ColumnDiff.php
+++ /dev/null
@@ -1,58 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Schema;
-
-/**
- * Represent the change of a column
- *
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @link www.doctrine-project.org
- * @since 2.0
- * @version $Revision$
- * @author Benjamin Eberlei
- */
-class ColumnDiff
-{
- public $oldColumnName;
-
- /**
- * @var Column
- */
- public $column;
-
- /**
- * @var array
- */
- public $changedProperties = array();
-
- public function __construct($oldColumnName, Column $column, array $changedProperties = array())
- {
- $this->oldColumnName = $oldColumnName;
- $this->column = $column;
- $this->changedProperties = $changedProperties;
- }
-
- public function hasChanged($propertyName)
- {
- return in_array($propertyName, $this->changedProperties);
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Schema/Comparator.php b/lib/Doctrine/DBAL/Schema/Comparator.php
deleted file mode 100644
index b3d493f52..000000000
--- a/lib/Doctrine/DBAL/Schema/Comparator.php
+++ /dev/null
@@ -1,395 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Schema;
-
-/**
- * Compare to Schemas and return an instance of SchemaDiff
- *
- * @copyright Copyright (C) 2005-2009 eZ Systems AS. All rights reserved.
- * @license http://ez.no/licenses/new_bsd New BSD License
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @link www.doctrine-project.org
- * @since 2.0
- * @version $Revision$
- * @author Benjamin Eberlei
- */
-class Comparator
-{
- /**
- * @var array
- */
- private $_checkColumnPlatformOptions = array();
-
- /**
- * @param string $optionName
- */
- public function addColumnPlatformOptionCheck($optionName)
- {
- $this->_checkColumnPlatformOptions[] = $optionName;
- }
-
- /**
- * @param Schema $fromSchema
- * @param Schema $toSchema
- * @return SchemaDiff
- */
- static public function compareSchemas( Schema $fromSchema, Schema $toSchema )
- {
- $c = new self();
- return $c->compare($fromSchema, $toSchema);
- }
-
- /**
- * Returns a SchemaDiff object containing the differences between the schemas $fromSchema and $toSchema.
- *
- * The returned diferences are returned in such a way that they contain the
- * operations to change the schema stored in $fromSchema to the schema that is
- * stored in $toSchema.
- *
- * @param Schema $fromSchema
- * @param Schema $toSchema
- *
- * @return SchemaDiff
- */
- public function compare(Schema $fromSchema, Schema $toSchema)
- {
- if ($fromSchema->hasExplicitForeignKeyIndexes() && !$toSchema->hasExplicitForeignKeyIndexes()) {
- $toSchema->visit(new \Doctrine\DBAL\Schema\Visitor\FixSchema(true));
- }
-
- $diff = new SchemaDiff();
-
- $foreignKeysToTable = array();
-
- foreach ( $toSchema->getTables() AS $tableName => $table ) {
- if ( !$fromSchema->hasTable($tableName) ) {
- $diff->newTables[$tableName] = $table;
- } else {
- $tableDifferences = $this->diffTable( $fromSchema->getTable($tableName), $table );
- if ( $tableDifferences !== false ) {
- $diff->changedTables[$tableName] = $tableDifferences;
- }
- }
- }
-
- /* Check if there are tables removed */
- foreach ( $fromSchema->getTables() AS $tableName => $table ) {
- if ( !$toSchema->hasTable($tableName) ) {
- $diff->removedTables[$tableName] = $table;
- }
-
- // also remember all foreign keys that point to a specific table
- foreach ($table->getForeignKeys() AS $foreignKey) {
- $foreignTable = strtolower($foreignKey->getForeignTableName());
- if (!isset($foreignKeysToTable[$foreignTable])) {
- $foreignKeysToTable[$foreignTable] = array();
- }
- $foreignKeysToTable[$foreignTable][] = $foreignKey;
- }
- }
-
- foreach ($diff->removedTables AS $tableName => $table) {
- if (isset($foreignKeysToTable[$tableName])) {
- $diff->orphanedForeignKeys = array_merge($diff->orphanedForeignKeys, $foreignKeysToTable[$tableName]);
- }
- }
-
- foreach ( $toSchema->getSequences() AS $sequenceName => $sequence) {
- if (!$fromSchema->hasSequence($sequenceName)) {
- $diff->newSequences[] = $sequence;
- } else {
- if ($this->diffSequence($sequence, $fromSchema->getSequence($sequenceName))) {
- $diff->changedSequences[] = $fromSchema->getSequence($sequenceName);
- }
- }
- }
-
- foreach ($fromSchema->getSequences() AS $sequenceName => $sequence) {
- if (!$toSchema->hasSequence($sequenceName)) {
- $diff->removedSequences[] = $sequence;
- }
- }
-
- return $diff;
- }
-
- /**
- *
- * @param Sequence $sequence1
- * @param Sequence $sequence2
- */
- public function diffSequence(Sequence $sequence1, Sequence $sequence2)
- {
- if($sequence1->getAllocationSize() != $sequence2->getAllocationSize()) {
- return true;
- }
-
- if($sequence1->getInitialValue() != $sequence2->getInitialValue()) {
- return true;
- }
-
- return false;
- }
-
- /**
- * Returns the difference between the tables $table1 and $table2.
- *
- * If there are no differences this method returns the boolean false.
- *
- * @param Table $table1
- * @param Table $table2
- *
- * @return bool|TableDiff
- */
- public function diffTable(Table $table1, Table $table2)
- {
- $changes = 0;
- $tableDifferences = new TableDiff($table1->getName());
-
- $table1Columns = $table1->getColumns();
- $table2Columns = $table2->getColumns();
-
- /* See if all the fields in table 1 exist in table 2 */
- foreach ( $table2Columns as $columnName => $column ) {
- if ( !$table1->hasColumn($columnName) ) {
- $tableDifferences->addedColumns[$columnName] = $column;
- $changes++;
- }
- }
- /* See if there are any removed fields in table 2 */
- foreach ( $table1Columns as $columnName => $column ) {
- if ( !$table2->hasColumn($columnName) ) {
- $tableDifferences->removedColumns[$columnName] = $column;
- $changes++;
- }
- }
- foreach ( $table1Columns as $columnName => $column ) {
- if ( $table2->hasColumn($columnName) ) {
- $changedProperties = $this->diffColumn( $column, $table2->getColumn($columnName) );
- if (count($changedProperties) ) {
- $columnDiff = new ColumnDiff($column->getName(), $table2->getColumn($columnName), $changedProperties);
- $tableDifferences->changedColumns[$column->getName()] = $columnDiff;
- $changes++;
- }
- }
- }
-
- // Try to find columns that only changed their name, rename operations maybe cheaper than add/drop
- foreach ($tableDifferences->addedColumns AS $addedColumnName => $addedColumn) {
- foreach ($tableDifferences->removedColumns AS $removedColumnName => $removedColumn) {
- if (count($this->diffColumn($addedColumn, $removedColumn)) == 0) {
- $tableDifferences->renamedColumns[$removedColumn->getName()] = $addedColumn;
- unset($tableDifferences->addedColumns[$addedColumnName]);
- unset($tableDifferences->removedColumns[$removedColumnName]);
- }
- }
- }
-
- $table1Indexes = $table1->getIndexes();
- $table2Indexes = $table2->getIndexes();
-
- foreach ($table2Indexes AS $index2Name => $index2Definition) {
- foreach ($table1Indexes AS $index1Name => $index1Definition) {
- if ($this->diffIndex($index1Definition, $index2Definition) === false) {
- unset($table1Indexes[$index1Name]);
- unset($table2Indexes[$index2Name]);
- } else {
- if ($index1Name == $index2Name) {
- $tableDifferences->changedIndexes[$index2Name] = $table2Indexes[$index2Name];
- unset($table1Indexes[$index1Name]);
- unset($table2Indexes[$index2Name]);
- $changes++;
- }
- }
- }
- }
-
- foreach ($table1Indexes AS $index1Name => $index1Definition) {
- $tableDifferences->removedIndexes[$index1Name] = $index1Definition;
- $changes++;
- }
-
- foreach ($table2Indexes AS $index2Name => $index2Definition) {
- $tableDifferences->addedIndexes[$index2Name] = $index2Definition;
- $changes++;
- }
-
- $fromFkeys = $table1->getForeignKeys();
- $toFkeys = $table2->getForeignKeys();
-
- foreach ($fromFkeys AS $key1 => $constraint1) {
- foreach ($toFkeys AS $key2 => $constraint2) {
- if($this->diffForeignKey($constraint1, $constraint2) === false) {
- unset($fromFkeys[$key1]);
- unset($toFkeys[$key2]);
- } else {
- if (strtolower($constraint1->getName()) == strtolower($constraint2->getName())) {
- $tableDifferences->changedForeignKeys[] = $constraint2;
- $changes++;
- unset($fromFkeys[$key1]);
- unset($toFkeys[$key2]);
- }
- }
- }
- }
-
- foreach ($fromFkeys AS $key1 => $constraint1) {
- $tableDifferences->removedForeignKeys[] = $constraint1;
- $changes++;
- }
-
- foreach ($toFkeys AS $key2 => $constraint2) {
- $tableDifferences->addedForeignKeys[] = $constraint2;
- $changes++;
- }
-
- return $changes ? $tableDifferences : false;
- }
-
- /**
- * @param ForeignKeyConstraint $key1
- * @param ForeignKeyConstraint $key2
- * @return bool
- */
- public function diffForeignKey(ForeignKeyConstraint $key1, ForeignKeyConstraint $key2)
- {
- if (array_map('strtolower', $key1->getLocalColumns()) != array_map('strtolower', $key2->getLocalColumns())) {
- return true;
- }
-
- if (array_map('strtolower', $key1->getForeignColumns()) != array_map('strtolower', $key2->getForeignColumns())) {
- return true;
- }
-
- if ($key1->onUpdate() != $key2->onUpdate()) {
- return true;
- }
-
- if ($key1->onDelete() != $key2->onDelete()) {
- return true;
- }
-
- return false;
- }
-
- /**
- * Returns the difference between the fields $field1 and $field2.
- *
- * If there are differences this method returns $field2, otherwise the
- * boolean false.
- *
- * @param Column $column1
- * @param Column $column2
- *
- * @return array
- */
- public function diffColumn(Column $column1, Column $column2)
- {
- $changedProperties = array();
- if ( $column1->getType() != $column2->getType() ) {
- $changedProperties[] = 'type';
- }
-
- if ($column1->getNotnull() != $column2->getNotnull()) {
- $changedProperties[] = 'notnull';
- }
-
- if ($column1->getDefault() != $column2->getDefault()) {
- $changedProperties[] = 'default';
- }
-
- if ($column1->getUnsigned() != $column2->getUnsigned()) {
- $changedProperties[] = 'unsigned';
- }
-
- if ($column1->getType() instanceof \Doctrine\DBAL\Types\StringType) {
- if ($column1->getLength() != $column2->getLength()) {
- $changedProperties[] = 'length';
- }
-
- if ($column1->getFixed() != $column2->getFixed()) {
- $changedProperties[] = 'fixed';
- }
- }
-
- if ($column1->getType() instanceof \Doctrine\DBAL\Types\DecimalType) {
- if ($column1->getPrecision() != $column2->getPrecision()) {
- $changedProperties[] = 'precision';
- }
- if ($column1->getScale() != $column2->getScale()) {
- $changedProperties[] = 'scale';
- }
- }
-
- foreach ($this->_checkColumnPlatformOptions AS $optionName) {
- if($column1->hasPlatformOption($optionName) && $column2->hasPlatformOption($optionName)) {
- if ($column1->getPlatformOption($optionName) != $column2->getPlatformOption($optionName)) {
- $changedProperties[] = $optionName;
- }
- } else if ($column1->hasPlatformOption($optionName) != $column2->hasPlatformOption($optionName)) {
- $changedProperties[] = $optionName;
- }
- }
-
- return $changedProperties;
- }
-
- /**
- * Finds the difference between the indexes $index1 and $index2.
- *
- * Compares $index1 with $index2 and returns $index2 if there are any
- * differences or false in case there are no differences.
- *
- * @param Index $index1
- * @param Index $index2
- * @return bool
- */
- public function diffIndex(Index $index1, Index $index2)
- {
- if($index1->isPrimary() != $index2->isPrimary()) {
- return true;
- }
- if($index1->isUnique() != $index2->isUnique()) {
- return true;
- }
-
- // Check for removed index fields in $index2
- $index1Columns = $index1->getColumns();
- for($i = 0; $i < count($index1Columns); $i++) {
- $indexColumn = $index1Columns[$i];
- if (!$index2->hasColumnAtPosition($indexColumn, $i)) {
- return true;
- }
- }
-
- // Check for new index fields in $index2
- $index2Columns = $index2->getColumns();
- for($i = 0; $i < count($index2Columns); $i++) {
- $indexColumn = $index2Columns[$i];
- if (!$index1->hasColumnAtPosition($indexColumn, $i)) {
- return true;
- }
- }
-
- return false;
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Schema/Constraint.php b/lib/Doctrine/DBAL/Schema/Constraint.php
deleted file mode 100644
index 9e760ffab..000000000
--- a/lib/Doctrine/DBAL/Schema/Constraint.php
+++ /dev/null
@@ -1,38 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Schema;
-
-/**
- * Marker interface for contraints
- *
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @link www.doctrine-project.org
- * @since 2.0
- * @version $Revision$
- * @author Benjamin Eberlei
- */
-interface Constraint
-{
- public function getName();
-
- public function getColumns();
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Schema/DB2SchemaManager.php b/lib/Doctrine/DBAL/Schema/DB2SchemaManager.php
deleted file mode 100644
index e5d87148b..000000000
--- a/lib/Doctrine/DBAL/Schema/DB2SchemaManager.php
+++ /dev/null
@@ -1,200 +0,0 @@
-.
-*/
-
-namespace Doctrine\DBAL\Schema;
-
-/**
- * IBM Db2 Schema Manager
- *
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @link www.doctrine-project.com
- * @since 1.0
- * @version $Revision$
- * @author Benjamin Eberlei
- */
-class DB2SchemaManager extends AbstractSchemaManager
-{
- /**
- * Return a list of all tables in the current database
- *
- * Apparently creator is the schema not the user who created it:
- * {@link http://publib.boulder.ibm.com/infocenter/dzichelp/v2r2/index.jsp?topic=/com.ibm.db29.doc.sqlref/db2z_sysibmsystablestable.htm}
- *
- * @return array
- */
- public function listTableNames()
- {
- $sql = $this->_platform->getListTablesSQL();
- $sql .= " AND CREATOR = UPPER('".$this->_conn->getUsername()."')";
-
- $tables = $this->_conn->fetchAll($sql);
-
- return $this->_getPortableTablesList($tables);
- }
-
-
- /**
- * Get Table Column Definition
- *
- * @param array $tableColumn
- * @return Column
- */
- protected function _getPortableTableColumnDefinition($tableColumn)
- {
- $tableColumn = array_change_key_case($tableColumn, \CASE_LOWER);
-
- $length = null;
- $fixed = null;
- $unsigned = false;
- $scale = false;
- $precision = false;
-
- switch (strtolower($tableColumn['typename'])) {
- case 'smallint':
- case 'bigint':
- case 'integer':
- case 'time':
- case 'date':
- $type = strtolower($tableColumn['typename']);
- break;
- case 'varchar':
- $type = 'string';
- $length = $tableColumn['length'];
- $fixed = false;
- break;
- case 'character':
- $type = 'string';
- $length = $tableColumn['length'];
- $fixed = true;
- break;
- case 'clob':
- $type = 'text';
- $length = $tableColumn['length'];
- break;
- case 'decimal':
- case 'double':
- case 'real':
- $type = 'decimal';
- $scale = $tableColumn['scale'];
- $precision = $tableColumn['length'];
- break;
- case 'timestamp':
- $type = 'datetime';
- break;
- default:
- throw new \Doctrine\DBAL\DBALException("Unknown Type: ".$tableColumn['typename']);
- }
-
- $options = array(
- 'length' => $length,
- 'unsigned' => (bool)$unsigned,
- 'fixed' => (bool)$fixed,
- 'default' => ($tableColumn['default'] == "NULL") ? null : $tableColumn['default'],
- 'notnull' => (bool) ($tableColumn['nulls'] == 'N'),
- 'scale' => null,
- 'precision' => null,
- 'platformOptions' => array(),
- );
-
- if ($scale !== null && $precision !== null) {
- $options['scale'] = $scale;
- $options['precision'] = $precision;
- }
-
- return new Column($tableColumn['colname'], \Doctrine\DBAL\Types\Type::getType($type), $options);
- }
-
- protected function _getPortableTablesList($tables)
- {
- $tableNames = array();
- foreach ($tables AS $tableRow) {
- $tableRow = array_change_key_case($tableRow, \CASE_LOWER);
- $tableNames[] = $tableRow['name'];
- }
- return $tableNames;
- }
-
- protected function _getPortableTableIndexesList($tableIndexes, $tableName=null)
- {
- $tableIndexRows = array();
- $indexes = array();
- foreach($tableIndexes AS $indexKey => $data) {
- $data = array_change_key_case($data, \CASE_LOWER);
- $unique = ($data['uniquerule'] == "D") ? false : true;
- $primary = ($data['uniquerule'] == "P");
-
- $indexName = strtolower($data['name']);
- if ($primary) {
- $keyName = 'primary';
- } else {
- $keyName = $indexName;
- }
-
- $indexes[$keyName] = new Index($indexName, explode("+", ltrim($data['colnames'], '+')), $unique, $primary);
- }
-
- return $indexes;
- }
-
- protected function _getPortableTableForeignKeyDefinition($tableForeignKey)
- {
- $tableForeignKey = array_change_key_case($tableForeignKey, CASE_LOWER);
-
- $tableForeignKey['deleterule'] = $this->_getPortableForeignKeyRuleDef($tableForeignKey['deleterule']);
- $tableForeignKey['updaterule'] = $this->_getPortableForeignKeyRuleDef($tableForeignKey['updaterule']);
-
- return new ForeignKeyConstraint(
- array_map('trim', (array)$tableForeignKey['fkcolnames']),
- $tableForeignKey['reftbname'],
- array_map('trim', (array)$tableForeignKey['pkcolnames']),
- $tableForeignKey['relname'],
- array(
- 'onUpdate' => $tableForeignKey['updaterule'],
- 'onDelete' => $tableForeignKey['deleterule'],
- )
- );
- }
-
- protected function _getPortableForeignKeyRuleDef($def)
- {
- if ($def == "C") {
- return "CASCADE";
- } else if ($def == "N") {
- return "SET NULL";
- }
- return null;
- }
-
- protected function _getPortableViewDefinition($view)
- {
- $view = array_change_key_case($view, \CASE_LOWER);
- // sadly this still segfaults on PDO_IBM, see http://pecl.php.net/bugs/bug.php?id=17199
- //$view['text'] = (is_resource($view['text']) ? stream_get_contents($view['text']) : $view['text']);
- if (!is_resource($view['text'])) {
- $pos = strpos($view['text'], ' AS ');
- $sql = substr($view['text'], $pos+4);
- } else {
- $sql = '';
- }
-
- return new View($view['name'], $sql);
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Schema/ForeignKeyConstraint.php b/lib/Doctrine/DBAL/Schema/ForeignKeyConstraint.php
deleted file mode 100644
index 398c72787..000000000
--- a/lib/Doctrine/DBAL/Schema/ForeignKeyConstraint.php
+++ /dev/null
@@ -1,164 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Schema;
-
-use Doctrine\DBAL\Schema\Visitor\Visitor;
-
-class ForeignKeyConstraint extends AbstractAsset implements Constraint
-{
- /**
- * @var Table
- */
- protected $_localTable;
-
- /**
- * @var array
- */
- protected $_localColumnNames;
-
- /**
- * @var string
- */
- protected $_foreignTableName;
-
- /**
- * @var array
- */
- protected $_foreignColumnNames;
-
- /**
- * @var string
- */
- protected $_cascade = '';
-
- /**
- * @var array
- */
- protected $_options;
-
- /**
- *
- * @param array $localColumnNames
- * @param string $foreignTableName
- * @param array $foreignColumnNames
- * @param string $cascade
- * @param string|null $name
- */
- public function __construct(array $localColumnNames, $foreignTableName, array $foreignColumnNames, $name=null, array $options=array())
- {
- $this->_setName($name);
- $this->_localColumnNames = $localColumnNames;
- $this->_foreignTableName = $foreignTableName;
- $this->_foreignColumnNames = $foreignColumnNames;
- $this->_options = $options;
- }
-
- /**
- * @return string
- */
- public function getLocalTableName()
- {
- return $this->_localTable->getName();
- }
-
- /**
- * @param Table $table
- */
- public function setLocalTable(Table $table)
- {
- $this->_localTable = $table;
- }
-
- /**
- * @return array
- */
- public function getLocalColumns()
- {
- return $this->_localColumnNames;
- }
-
- public function getColumns()
- {
- return $this->_localColumnNames;
- }
-
- /**
- * @return string
- */
- public function getForeignTableName()
- {
- return $this->_foreignTableName;
- }
-
- /**
- * @return array
- */
- public function getForeignColumns()
- {
- return $this->_foreignColumnNames;
- }
-
- public function hasOption($name)
- {
- return isset($this->_options[$name]);
- }
-
- public function getOption($name)
- {
- return $this->_options[$name];
- }
-
- /**
- * Foreign Key onUpdate status
- *
- * @return string|null
- */
- public function onUpdate()
- {
- return $this->_onEvent('onUpdate');
- }
-
- /**
- * Foreign Key onDelete status
- *
- * @return string|null
- */
- public function onDelete()
- {
- return $this->_onEvent('onDelete');
- }
-
- /**
- * @param string $event
- * @return string|null
- */
- private function _onEvent($event)
- {
- if (isset($this->_options[$event])) {
- $onEvent = strtoupper($this->_options[$event]);
- if (!in_array($onEvent, array('NO ACTION', 'RESTRICT'))) {
- return $onEvent;
- }
- }
- return false;
- }
-}
diff --git a/lib/Doctrine/DBAL/Schema/Index.php b/lib/Doctrine/DBAL/Schema/Index.php
deleted file mode 100644
index 574ae099a..000000000
--- a/lib/Doctrine/DBAL/Schema/Index.php
+++ /dev/null
@@ -1,109 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Schema;
-
-use Doctrine\DBAL\Schema\Visitor\Visitor;
-
-class Index extends AbstractAsset implements Constraint
-{
- /**
- * @var array
- */
- protected $_columns;
-
- /**
- * @var bool
- */
- protected $_isUnique = false;
-
- /**
- * @var bool
- */
- protected $_isPrimary = false;
-
- /**
- * @param string $indexName
- * @param array $column
- * @param bool $isUnique
- * @param bool $isPrimary
- */
- public function __construct($indexName, array $columns, $isUnique=false, $isPrimary=false)
- {
- $isUnique = ($isPrimary)?true:$isUnique;
-
- $this->_setName($indexName);
- $this->_isUnique = $isUnique;
- $this->_isPrimary = $isPrimary;
-
- foreach($columns AS $column) {
- $this->_addColumn($column);
- }
- }
-
- /**
- * @param string $column
- */
- protected function _addColumn($column)
- {
- if(is_string($column)) {
- $this->_columns[] = $column;
- } else {
- throw new \InvalidArgumentException("Expecting a string as Index Column");
- }
- }
-
- /**
- * @return array
- */
- public function getColumns()
- {
- return $this->_columns;
- }
-
- /**
- * @return bool
- */
- public function isUnique()
- {
- return $this->_isUnique;
- }
-
- /**
- * @return bool
- */
- public function isPrimary()
- {
- return $this->_isPrimary;
- }
-
- /**
- * @param string $columnName
- * @param int $pos
- * @return bool
- */
- public function hasColumnAtPosition($columnName, $pos=0)
- {
- $columnName = strtolower($columnName);
- $indexColumns = \array_map('strtolower', $this->getColumns());
- return \array_search($columnName, $indexColumns) === $pos;
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Schema/MsSqlSchemaManager.php b/lib/Doctrine/DBAL/Schema/MsSqlSchemaManager.php
deleted file mode 100644
index 953f8caa5..000000000
--- a/lib/Doctrine/DBAL/Schema/MsSqlSchemaManager.php
+++ /dev/null
@@ -1,399 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Schema;
-
-/**
- * xxx
- *
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @author Konsta Vesterinen
- * @author Lukas Smith (PEAR MDB2 library)
- * @version $Revision$
- * @since 2.0
- */
-class MsSqlSchemaManager extends AbstractSchemaManager
-{
- /**
- * create a new database
- *
- * @param string $name name of the database that should be created
- * @return void
- */
- public function createDatabase($name)
- {
- $query = "CREATE DATABASE $name";
- if ($this->conn->options['database_device']) {
- $query.= ' ON '.$this->conn->options['database_device'];
- $query.= $this->conn->options['database_size'] ? '=' .
- $this->conn->options['database_size'] : '';
- }
- return $this->conn->standaloneQuery($query, null, true);
- }
-
- /**
- * drop an existing database
- *
- * @param string $name name of the database that should be dropped
- * @return void
- */
- public function dropDatabase($name)
- {
- return $this->conn->standaloneQuery('DROP DATABASE ' . $name, null, true);
- }
-
- /**
- * alter an existing table
- *
- * @param string $name name of the table that is intended to be changed.
- * @param array $changes associative array that contains the details of each type
- * of change that is intended to be performed. The types of
- * changes that are currently supported are defined as follows:
- *
- * name
- *
- * New name for the table.
- *
- * add
- *
- * Associative array with the names of fields to be added as
- * indexes of the array. The value of each entry of the array
- * should be set to another associative array with the properties
- * of the fields to be added. The properties of the fields should
- * be the same as defined by the Metabase parser.
- *
- *
- * remove
- *
- * Associative array with the names of fields to be removed as indexes
- * of the array. Currently the values assigned to each entry are ignored.
- * An empty array should be used for future compatibility.
- *
- * rename
- *
- * Associative array with the names of fields to be renamed as indexes
- * of the array. The value of each entry of the array should be set to
- * another associative array with the entry named name with the new
- * field name and the entry named Declaration that is expected to contain
- * the portion of the field declaration already in DBMS specific SQL code
- * as it is used in the CREATE TABLE statement.
- *
- * change
- *
- * Associative array with the names of the fields to be changed as indexes
- * of the array. Keep in mind that if it is intended to change either the
- * name of a field and any other properties, the change array entries
- * should have the new names of the fields as array indexes.
- *
- * The value of each entry of the array should be set to another associative
- * array with the properties of the fields to that are meant to be changed as
- * array entries. These entries should be assigned to the new values of the
- * respective properties. The properties of the fields should be the same
- * as defined by the Metabase parser.
- *
- * Example
- * array(
- * 'name' => 'userlist',
- * 'add' => array(
- * 'quota' => array(
- * 'type' => 'integer',
- * 'unsigned' => 1
- * )
- * ),
- * 'remove' => array(
- * 'file_limit' => array(),
- * 'time_limit' => array()
- * ),
- * 'change' => array(
- * 'name' => array(
- * 'length' => '20',
- * 'definition' => array(
- * 'type' => 'text',
- * 'length' => 20,
- * ),
- * )
- * ),
- * 'rename' => array(
- * 'sex' => array(
- * 'name' => 'gender',
- * 'definition' => array(
- * 'type' => 'text',
- * 'length' => 1,
- * 'default' => 'M',
- * ),
- * )
- * )
- * )
- *
- * @param boolean $check indicates whether the function should just check if the DBMS driver
- * can perform the requested table alterations if the value is true or
- * actually perform them otherwise.
- * @return void
- */
- public function alterTable($name, array $changes, $check = false)
- {
- foreach ($changes as $changeName => $change) {
- switch ($changeName) {
- case 'add':
- break;
- case 'remove':
- break;
- case 'name':
- case 'rename':
- case 'change':
- default:
- throw SchemaException::alterTableChangeNotSupported($changeName);
- }
- }
-
- $query = '';
- if ( ! empty($changes['add']) && is_array($changes['add'])) {
- foreach ($changes['add'] as $fieldName => $field) {
- if ($query) {
- $query .= ', ';
- }
- $query .= 'ADD ' . $this->getDeclaration($fieldName, $field);
- }
- }
-
- if ( ! empty($changes['remove']) && is_array($changes['remove'])) {
- foreach ($changes['remove'] as $fieldName => $field) {
- if ($query) {
- $query .= ', ';
- }
- $query .= 'DROP COLUMN ' . $fieldName;
- }
- }
-
- if ( ! $query) {
- return false;
- }
-
- return $this->conn->exec('ALTER TABLE ' . $name . ' ' . $query);
- }
-
- /**
- * {@inheritdoc}
- */
- public function createSequence($seqName, $start = 1, $allocationSize = 1)
- {
- $seqcolName = 'seq_col';
- $query = 'CREATE TABLE ' . $seqName . ' (' . $seqcolName .
- ' INT PRIMARY KEY CLUSTERED IDENTITY(' . $start . ', 1) NOT NULL)';
-
- $res = $this->conn->exec($query);
-
- if ($start == 1) {
- return true;
- }
-
- try {
- $query = 'SET IDENTITY_INSERT ' . $sequenceName . ' ON ' .
- 'INSERT INTO ' . $sequenceName . ' (' . $seqcolName . ') VALUES ( ' . $start . ')';
- $res = $this->conn->exec($query);
- } catch (Exception $e) {
- $result = $this->conn->exec('DROP TABLE ' . $sequenceName);
- }
- return true;
- }
-
- /**
- * This function drops an existing sequence
- *
- * @param string $seqName name of the sequence to be dropped
- * @return void
- */
- public function dropSequenceSql($seqName)
- {
- return 'DROP TABLE ' . $seqName;
- }
-
- /**
- * lists all database sequences
- *
- * @param string|null $database
- * @return array
- */
- public function listSequences($database = null)
- {
- $query = "SELECT name FROM sysobjects WHERE xtype = 'U'";
- $tableNames = $this->conn->fetchColumn($query);
-
- return array_map(array($this->conn->formatter, 'fixSequenceName'), $tableNames);
- }
-
- /**
- * lists table constraints
- *
- * @param string $table database table name
- * @return array
- */
- public function listTableColumns($table)
- {
- $sql = 'EXEC sp_columns @table_name = ' . $table;
- $result = $this->conn->fetchAssoc($sql);
- $columns = array();
-
- foreach ($result as $key => $val) {
- $val = array_change_key_case($val, CASE_LOWER);
-
- if (strstr($val['type_name'], ' ')) {
- list($type, $identity) = explode(' ', $val['type_name']);
- } else {
- $type = $val['type_name'];
- $identity = '';
- }
-
- if ($type == 'varchar') {
- $type .= '(' . $val['length'] . ')';
- }
-
- $val['type'] = $type;
- $val['identity'] = $identity;
- $decl = $this->conn->getDatabasePlatform()->getPortableDeclaration($val);
-
- $description = array(
- 'name' => $val['column_name'],
- 'ntype' => $type,
- 'type' => $decl['type'][0],
- 'alltypes' => $decl['type'],
- 'length' => $decl['length'],
- 'fixed' => $decl['fixed'],
- 'unsigned' => $decl['unsigned'],
- 'notnull' => (bool) (trim($val['is_nullable']) === 'NO'),
- 'default' => $val['column_def'],
- 'primary' => (strtolower($identity) == 'identity'),
- );
- $columns[$val['column_name']] = $description;
- }
-
- return $columns;
- }
-
- /**
- * lists table constraints
- *
- * @param string $table database table name
- * @return array
- */
- public function listTableIndexes($table)
- {
-
- }
-
- /**
- * lists tables
- *
- * @param string|null $database
- * @return array
- */
- public function listTables($database = null)
- {
- $sql = "SELECT name FROM sysobjects WHERE type = 'U' AND name <> 'dtproperties' ORDER BY name";
-
- return $this->conn->fetchColumn($sql);
- }
-
- /**
- * lists all triggers
- *
- * @return array
- */
- public function listTriggers($database = null)
- {
- $query = "SELECT name FROM sysobjects WHERE xtype = 'TR'";
-
- $result = $this->conn->fetchColumn($query);
-
- return $result;
- }
-
- /**
- * lists table triggers
- *
- * @param string $table database table name
- * @return array
- */
- public function listTableTriggers($table)
- {
- $table = $this->conn->quote($table, 'text');
- $query = "SELECT name FROM sysobjects WHERE xtype = 'TR' AND object_name(parent_obj) = " . $table;
-
- $result = $this->conn->fetchColumn($query);
-
- return $result;
- }
-
- /**
- * lists table views
- *
- * @param string $table database table name
- * @return array
- */
- public function listTableViews($table)
- {
- $keyName = 'INDEX_NAME';
- $pkName = 'PK_NAME';
- if ($this->conn->getAttribute(Doctrine::ATTR_PORTABILITY) & Doctrine::PORTABILITY_FIX_CASE) {
- if ($this->conn->getAttribute(Doctrine::ATTR_FIELD_CASE) == CASE_LOWER) {
- $keyName = strtolower($keyName);
- $pkName = strtolower($pkName);
- } else {
- $keyName = strtoupper($keyName);
- $pkName = strtoupper($pkName);
- }
- }
- $table = $this->conn->quote($table, 'text');
- $query = 'EXEC sp_statistics @table_name = ' . $table;
- $indexes = $this->conn->fetchColumn($query, $keyName);
-
- $query = 'EXEC sp_pkeys @table_name = ' . $table;
- $pkAll = $this->conn->fetchColumn($query, $pkName);
-
- $result = array();
-
- foreach ($indexes as $index) {
- if ( ! in_array($index, $pkAll) && $index != null) {
- $result[] = $this->conn->formatter->fixIndexName($index);
- }
- }
-
- return $result;
- }
-
- /**
- * lists database views
- *
- * @param string|null $database
- * @return array
- */
- public function listViews($database = null)
- {
- $query = "SELECT name FROM sysobjects WHERE xtype = 'V'";
-
- return $this->conn->fetchColumn($query);
- }
-
- protected function _getPortableTableColumnDefinition($tableColumn)
- {
- return $column;
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Schema/MySqlSchemaManager.php b/lib/Doctrine/DBAL/Schema/MySqlSchemaManager.php
deleted file mode 100644
index f383cf458..000000000
--- a/lib/Doctrine/DBAL/Schema/MySqlSchemaManager.php
+++ /dev/null
@@ -1,272 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Schema;
-
-/**
- * Schema manager for the MySql RDBMS.
- *
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @author Konsta Vesterinen
- * @author Lukas Smith (PEAR MDB2 library)
- * @author Roman Borschel
- * @author Benjamin Eberlei
- * @version $Revision$
- * @since 2.0
- */
-class MySqlSchemaManager extends AbstractSchemaManager
-{
- protected function _getPortableViewDefinition($view)
- {
- return new View($view['TABLE_NAME'], $view['VIEW_DEFINITION']);
- }
-
- protected function _getPortableTableDefinition($table)
- {
- return array_shift($table);
- }
-
- protected function _getPortableUserDefinition($user)
- {
- return array(
- 'user' => $user['User'],
- 'password' => $user['Password'],
- );
- }
-
- protected function _getPortableTableIndexesList($tableIndexes, $tableName=null)
- {
- foreach($tableIndexes AS $k => $v) {
- $v = array_change_key_case($v, CASE_LOWER);
- if($v['key_name'] == 'PRIMARY') {
- $v['primary'] = true;
- } else {
- $v['primary'] = false;
- }
- $tableIndexes[$k] = $v;
- }
-
- return parent::_getPortableTableIndexesList($tableIndexes, $tableName);
- }
-
- protected function _getPortableSequenceDefinition($sequence)
- {
- return end($sequence);
- }
-
- protected function _getPortableDatabaseDefinition($database)
- {
- return $database['Database'];
- }
-
- /**
- * Gets a portable column definition.
- *
- * The database type is mapped to a corresponding Doctrine mapping type.
- *
- * @param $tableColumn
- * @return array
- */
- protected function _getPortableTableColumnDefinition($tableColumn)
- {
- $dbType = strtolower($tableColumn['Type']);
- $dbType = strtok($dbType, '(), ');
- if ($dbType == 'national') {
- $dbType = strtok('(), ');
- }
- if (isset($tableColumn['length'])) {
- $length = $tableColumn['length'];
- $decimal = '';
- } else {
- $length = strtok('(), ');
- $decimal = strtok('(), ') ? strtok('(), '):null;
- }
- $type = array();
- $unsigned = $fixed = null;
-
- if ( ! isset($tableColumn['name'])) {
- $tableColumn['name'] = '';
- }
-
- $scale = null;
- $precision = null;
-
- // Map db type to Doctrine mapping type
- switch ($dbType) {
- case 'tinyint':
- $type = 'boolean';
- $length = null;
- break;
- case 'smallint':
- $type = 'smallint';
- $length = null;
- break;
- case 'mediumint':
- $type = 'integer';
- $length = null;
- break;
- case 'int':
- case 'integer':
- $type = 'integer';
- $length = null;
- break;
- case 'bigint':
- $type = 'bigint';
- $length = null;
- break;
- case 'tinytext':
- case 'mediumtext':
- case 'longtext':
- case 'text':
- $type = 'text';
- $fixed = false;
- break;
- case 'varchar':
- $fixed = false;
- case 'string':
- case 'char':
- $type = 'string';
- if ($length == '1') {
- $type = 'boolean';
- if (preg_match('/^(is|has)/', $tableColumn['name'])) {
- $type = array_reverse($type);
- }
- } else if (strstr($dbType, 'text')) {
- $type = 'text';
- if ($decimal == 'binary') {
- $type = 'blob';
- }
- }
- if ($fixed !== false) {
- $fixed = true;
- }
- break;
- case 'set':
- $fixed = false;
- $type = 'text';
- $type = 'integer'; //FIXME:???
- break;
- case 'date':
- $type = 'date';
- break;
- case 'datetime':
- case 'timestamp':
- $type = 'datetime';
- break;
- case 'time':
- $type = 'time';
- break;
- case 'float':
- case 'double':
- case 'real':
- case 'numeric':
- case 'decimal':
- if(preg_match('([A-Za-z]+\(([0-9]+)\,([0-9]+)\))', $tableColumn['Type'], $match)) {
- $precision = $match[1];
- $scale = $match[2];
- $length = null;
- }
- $type = 'decimal';
- break;
- case 'tinyblob':
- case 'mediumblob':
- case 'longblob':
- case 'blob':
- case 'binary':
- case 'varbinary':
- $type = 'blob';
- $length = null;
- break;
- case 'year':
- $type = 'integer';
- $type = 'date';
- $length = null;
- break;
- case 'geometry':
- case 'geometrycollection':
- case 'point':
- case 'multipoint':
- case 'linestring':
- case 'multilinestring':
- case 'polygon':
- case 'multipolygon':
- $type = 'blob';
- $length = null;
- break;
- default:
- $type = 'string';
- $length = null;
- }
-
- $length = ((int) $length == 0) ? null : (int) $length;
- $def = array(
- 'type' => $type,
- 'length' => $length,
- 'unsigned' => (bool) $unsigned,
- 'fixed' => (bool) $fixed
- );
-
- $options = array(
- 'length' => $length,
- 'unsigned' => (bool)$unsigned,
- 'fixed' => (bool)$fixed,
- 'default' => $tableColumn['Default'],
- 'notnull' => (bool) ($tableColumn['Null'] != 'YES'),
- 'scale' => null,
- 'precision' => null,
- 'platformOptions' => array(
- 'primary' => (strtolower($tableColumn['Key']) == 'pri') ? true : false,
- 'unique' => (strtolower($tableColumn['Key']) == 'uni') ? true :false,
- 'autoincrement' => (bool) (strpos($tableColumn['Extra'], 'auto_increment') !== false),
- ),
- );
-
- if ($scale !== null && $precision !== null) {
- $options['scale'] = $scale;
- $options['precision'] = $precision;
- }
-
- return new Column($tableColumn['Field'], \Doctrine\DBAL\Types\Type::getType($type), $options);
- }
-
- public function _getPortableTableForeignKeyDefinition($tableForeignKey)
- {
- $tableForeignKey = array_change_key_case($tableForeignKey, CASE_LOWER);
-
- if (!isset($tableForeignKey['delete_rule']) || $tableForeignKey['delete_rule'] == "RESTRICT") {
- $tableForeignKey['delete_rule'] = null;
- }
- if (!isset($tableForeignKey['update_rule']) || $tableForeignKey['update_rule'] == "RESTRICT") {
- $tableForeignKey['update_rule'] = null;
- }
-
- return new ForeignKeyConstraint(
- (array)$tableForeignKey['column_name'],
- $tableForeignKey['referenced_table_name'],
- (array)$tableForeignKey['referenced_column_name'],
- $tableForeignKey['constraint_name'],
- array(
- 'onUpdate' => $tableForeignKey['update_rule'],
- 'onDelete' => $tableForeignKey['delete_rule'],
- )
- );
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Schema/OracleSchemaManager.php b/lib/Doctrine/DBAL/Schema/OracleSchemaManager.php
deleted file mode 100644
index 0f15a3294..000000000
--- a/lib/Doctrine/DBAL/Schema/OracleSchemaManager.php
+++ /dev/null
@@ -1,280 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Schema;
-
-/**
- * Oracle Schema Manager
- *
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @author Konsta Vesterinen
- * @author Lukas Smith (PEAR MDB2 library)
- * @author Benjamin Eberlei
- * @version $Revision$
- * @since 2.0
- */
-class OracleSchemaManager extends AbstractSchemaManager
-{
- protected function _getPortableViewDefinition($view)
- {
- $view = \array_change_key_case($view, CASE_LOWER);
-
- return new View($view['view_name'], $view['text']);
- }
-
- protected function _getPortableUserDefinition($user)
- {
- $user = \array_change_key_case($user, CASE_LOWER);
-
- return array(
- 'user' => $user['username'],
- );
- }
-
- protected function _getPortableTableDefinition($table)
- {
- $table = \array_change_key_case($table, CASE_LOWER);
-
- return $table['table_name'];
- }
-
- /**
- * @license New BSD License
- * @link http://ezcomponents.org/docs/api/trunk/DatabaseSchema/ezcDbSchemaPgsqlReader.html
- * @param array $tableIndexes
- * @param string $tableName
- * @return array
- */
- protected function _getPortableTableIndexesList($tableIndexes, $tableName=null)
- {
- $indexBuffer = array();
- foreach ( $tableIndexes as $tableIndex ) {
- $tableIndex = \array_change_key_case($tableIndex, CASE_LOWER);
-
- $keyName = strtolower($tableIndex['name']);
-
- if ( strtolower($tableIndex['is_primary']) == "p" ) {
- $keyName = 'primary';
- $buffer['primary'] = true;
- $buffer['non_unique'] = false;
- } else {
- $buffer['primary'] = false;
- $buffer['non_unique'] = ( $tableIndex['is_unique'] == 0 ) ? true : false;
- }
- $buffer['key_name'] = $keyName;
- $buffer['column_name'] = $tableIndex['column_name'];
- $indexBuffer[] = $buffer;
- }
- return parent::_getPortableTableIndexesList($indexBuffer, $tableName);
- }
-
- protected function _getPortableTableColumnDefinition($tableColumn)
- {
- $tableColumn = \array_change_key_case($tableColumn, CASE_LOWER);
-
- $dbType = strtolower($tableColumn['data_type']);
- if(strpos($dbType, "timestamp(") === 0) {
- $dbType = "timestamp";
- }
-
- $type = array();
- $length = $unsigned = $fixed = null;
- if ( ! empty($tableColumn['data_length'])) {
- $length = $tableColumn['data_length'];
- }
-
- if ( ! isset($tableColumn['column_name'])) {
- $tableColumn['column_name'] = '';
- }
-
- if (stripos($tableColumn['data_default'], 'NULL') !== null) {
- $tableColumn['data_default'] = null;
- }
-
- $precision = null;
- $scale = null;
-
- switch ($dbType) {
- case 'integer':
- case 'number':
- if($tableColumn['data_scale'] > 0) {
- $type = 'decimal';
- $precision = $tableColumn['data_precision'];
- $scale = $tableColumn['data_scale'];
- } else {
- $type = 'integer';
- }
- $length = null;
- break;
- case 'pls_integer':
- case 'binary_integer':
- $type = 'boolean';
- $length = null;
- break;
- case 'varchar':
- case 'varchar2':
- case 'nvarchar2':
- $fixed = false;
- case 'char':
- case 'nchar':
- if ($length == '1' && preg_match('/^(is|has)/', $tableColumn['column_name'])) {
- $type = 'boolean';
- } else {
- $type = 'string';
- }
- if ($fixed !== false) {
- $fixed = true;
- }
- break;
- case 'date':
- case 'timestamp':
- $type = 'datetime';
- $length = null;
- break;
- case 'float':
- $precision = $tableColumn['data_precision'];
- $scale = $tableColumn['data_scale'];
- $type = 'decimal';
- $length = null;
- break;
- case 'long':
- $type = 'string';
- case 'clob':
- case 'nclob':
- $length = null;
- $type = 'text';
- break;
- case 'blob':
- case 'raw':
- case 'long raw':
- case 'bfile':
- $type = 'blob';
- $length = null;
- break;
- case 'rowid':
- case 'urowid':
- default:
- $type = 'string';
- $length = null;
- }
-
- $options = array(
- 'notnull' => (bool) ($tableColumn['nullable'] === 'N'),
- 'fixed' => (bool) $fixed,
- 'unsigned' => (bool) $unsigned,
- 'default' => $tableColumn['data_default'],
- 'length' => $length,
- 'precision' => $precision,
- 'scale' => $scale,
- 'platformDetails' => array(),
- );
-
- return new Column($tableColumn['column_name'], \Doctrine\DBAL\Types\Type::getType($type), $options);
- }
-
- protected function _getPortableTableForeignKeysList($tableForeignKeys)
- {
- $list = array();
- foreach ($tableForeignKeys as $key => $value) {
- $value = \array_change_key_case($value, CASE_LOWER);
- if (!isset($list[$value['constraint_name']])) {
- if ($value['delete_rule'] == "NO ACTION") {
- $value['delete_rule'] = null;
- }
-
- $list[$value['constraint_name']] = array(
- 'name' => $value['constraint_name'],
- 'local' => array(),
- 'foreign' => array(),
- 'foreignTable' => $value['references_table'],
- 'onDelete' => $value['delete_rule'],
- );
- }
- $list[$value['constraint_name']]['local'][$value['position']] = $value['local_column'];
- $list[$value['constraint_name']]['foreign'][$value['position']] = $value['foreign_column'];
- }
-
- $result = array();
- foreach($list AS $constraint) {
- $result[] = new ForeignKeyConstraint(
- array_values($constraint['local']), $constraint['foreignTable'],
- array_values($constraint['foreign']), $constraint['name'],
- array('onDelete' => $constraint['onDelete'])
- );
- }
-
- return $result;
- }
-
- protected function _getPortableSequenceDefinition($sequence)
- {
- $sequence = \array_change_key_case($sequence, CASE_LOWER);
- return new Sequence($sequence['sequence_name'], $sequence['increment_by'], $sequence['min_value']);
- }
-
- protected function _getPortableFunctionDefinition($function)
- {
- $function = \array_change_key_case($function, CASE_LOWER);
- return $function['name'];
- }
-
- protected function _getPortableDatabaseDefinition($database)
- {
- $database = \array_change_key_case($database, CASE_LOWER);
- return $database['username'];
- }
-
- public function createDatabase($database = null)
- {
- if (is_null($database)) {
- $database = $this->_conn->getDatabase();
- }
-
- $params = $this->_conn->getParams();
- $username = $database;
- $password = $params['password'];
-
- $query = 'CREATE USER ' . $username . ' IDENTIFIED BY ' . $password;
- $result = $this->_conn->executeUpdate($query);
-
- $query = 'GRANT CREATE SESSION, CREATE TABLE, UNLIMITED TABLESPACE, CREATE SEQUENCE, CREATE TRIGGER TO ' . $username;
- $result = $this->_conn->executeUpdate($query);
-
- return true;
- }
-
- public function dropAutoincrement($table)
- {
- $sql = $this->_platform->getDropAutoincrementSql($table);
- foreach ($sql as $query) {
- $this->_conn->executeUpdate($query);
- }
-
- return true;
- }
-
- public function dropTable($name)
- {
- $this->dropAutoincrement($name);
-
- return parent::dropTable($name);
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Schema/PostgreSqlSchemaManager.php b/lib/Doctrine/DBAL/Schema/PostgreSqlSchemaManager.php
deleted file mode 100644
index 70e6a6051..000000000
--- a/lib/Doctrine/DBAL/Schema/PostgreSqlSchemaManager.php
+++ /dev/null
@@ -1,332 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Schema;
-
-/**
- * xxx
- *
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @author Konsta Vesterinen
- * @author Lukas Smith (PEAR MDB2 library)
- * @author Benjamin Eberlei
- * @version $Revision$
- * @since 2.0
- */
-class PostgreSqlSchemaManager extends AbstractSchemaManager
-{
- protected function _getPortableTableForeignKeyDefinition($tableForeignKey)
- {
- $onUpdate = null;
- $onDelete = null;
-
- if(preg_match('(ON UPDATE ([a-zA-Z0-9]+))', $tableForeignKey['condef'], $match)) {
- $onUpdate = $match[1];
- }
- if(preg_match('(ON DELETE ([a-zA-Z0-9]+))', $tableForeignKey['condef'], $match)) {
- $onDelete = $match[1];
- }
-
- if(preg_match('/FOREIGN KEY \((.+)\) REFERENCES (.+)\((.+)\)/', $tableForeignKey['condef'], $values)) {
- $localColumns = explode(",", $values[1]);
- $foreignColumns = explode(",", $values[3]);
- $foreignTable = $values[2];
- }
-
- return new ForeignKeyConstraint(
- $localColumns, $foreignTable, $foreignColumns, $tableForeignKey['conname'],
- array('onUpdate' => $onUpdate, 'onDelete' => $onDelete)
- );
- }
-
- public function dropDatabase($database)
- {
- $params = $this->_conn->getParams();
- $params["dbname"] = "postgres";
- $tmpPlatform = $this->_platform;
- $tmpConn = $this->_conn;
-
- $this->_conn = \Doctrine\DBAL\DriverManager::getConnection($params);
- $this->_platform = $this->_conn->getDatabasePlatform();
-
- parent::dropDatabase($database);
-
- $this->_platform = $tmpPlatform;
- $this->_conn = $tmpConn;
- }
-
- public function createDatabase($database)
- {
- $params = $this->_conn->getParams();
- $params["dbname"] = "postgres";
- $tmpPlatform = $this->_platform;
- $tmpConn = $this->_conn;
-
- $this->_conn = \Doctrine\DBAL\DriverManager::getConnection($params);
- $this->_platform = $this->_conn->getDatabasePlatform();
-
- parent::createDatabase($database);
-
- $this->_platform = $tmpPlatform;
- $this->_conn = $tmpConn;
- }
-
- protected function _getPortableTriggerDefinition($trigger)
- {
- return $trigger['trigger_name'];
- }
-
- protected function _getPortableViewDefinition($view)
- {
- return new View($view['viewname'], $view['definition']);
- }
-
- protected function _getPortableUserDefinition($user)
- {
- return array(
- 'user' => $user['usename'],
- 'password' => $user['passwd']
- );
- }
-
- protected function _getPortableTableDefinition($table)
- {
- return $table['table_name'];
- }
-
- /**
- * @license New BSD License
- * @link http://ezcomponents.org/docs/api/trunk/DatabaseSchema/ezcDbSchemaPgsqlReader.html
- * @param array $tableIndexes
- * @param string $tableName
- * @return array
- */
- protected function _getPortableTableIndexesList($tableIndexes, $tableName=null)
- {
- $buffer = array();
- foreach($tableIndexes AS $row) {
- $colNumbers = explode( ' ', $row['indkey'] );
- $colNumbersSql = 'IN (' . join( ' ,', $colNumbers ) . ' )';
- $columnNameSql = "SELECT attnum, attname FROM pg_attribute
- WHERE attrelid={$row['indrelid']} AND attnum $colNumbersSql ORDER BY attnum ASC;";
-
- $stmt = $this->_conn->executeQuery($columnNameSql);
- $indexColumns = $stmt->fetchAll();
-
- // required for getting the order of the columns right.
- foreach ($colNumbers AS $colNum) {
- foreach ( $indexColumns as $colRow ) {
- if ($colNum == $colRow['attnum']) {
- $buffer[] = array(
- 'key_name' => $row['relname'],
- 'column_name' => $colRow['attname'],
- 'non_unique' => !$row['indisunique'],
- 'primary' => $row['indisprimary']
- );
- }
- }
- }
- }
- return parent::_getPortableTableIndexesList($buffer);
- }
-
- protected function _getPortableDatabaseDefinition($database)
- {
- return $database['datname'];
- }
-
- protected function _getPortableSequenceDefinition($sequence)
- {
- $data = $this->_conn->fetchAll('SELECT min_value, increment_by FROM '.$sequence['relname']);
- return new Sequence($sequence['relname'], $data[0]['increment_by'], $data[0]['min_value']);
- }
-
- protected function _getPortableTableColumnDefinition($tableColumn)
- {
- $tableColumn = array_change_key_case($tableColumn, CASE_LOWER);
-
- if (strtolower($tableColumn['type']) === 'varchar') {
- // get length from varchar definition
- $length = preg_replace('~.*\(([0-9]*)\).*~', '$1', $tableColumn['complete_type']);
- $tableColumn['length'] = $length;
- }
-
- $matches = array();
-
- if (preg_match("/^nextval\('(.*)'(::.*)?\)$/", $tableColumn['default'], $matches)) {
- $tableColumn['sequence'] = $matches[1];
- $tableColumn['default'] = null;
- }
-
- if (stripos($tableColumn['default'], 'NULL') !== null) {
- $tableColumn['default'] = null;
- }
-
- $length = (isset($tableColumn['length'])) ? $tableColumn['length'] : null;
- if ($length == '-1' && isset($tableColumn['atttypmod'])) {
- $length = $tableColumn['atttypmod'] - 4;
- }
- if ((int)$length <= 0) {
- $length = null;
- }
- $type = array();
- $fixed = null;
-
- if ( ! isset($tableColumn['name'])) {
- $tableColumn['name'] = '';
- }
-
- $precision = null;
- $scale = null;
-
- $dbType = strtolower($tableColumn['type']);
-
- $autoincrement = false;
- switch ($dbType) {
- case 'smallint':
- case 'int2':
- $type = 'smallint';
- $length = null;
- break;
- case 'serial':
- case 'serial4':
- $autoincrement = true;
- // break missing intentionally
- case 'int':
- case 'int4':
- case 'integer':
- $type = 'integer';
- $length = null;
- break;
- case 'bigserial':
- case 'serial8':
- $autoincrement = true;
- // break missing intentionally
- case 'bigint':
- case 'int8':
- $type = 'bigint';
- $length = null;
- break;
- case 'bool':
- case 'boolean':
- $type = 'boolean';
- $length = null;
- break;
- case 'text':
- $fixed = false;
- $type = 'text';
- break;
- case 'varchar':
- case 'interval':
- case '_varchar':
- $fixed = false;
- case 'tsvector':
- case 'unknown':
- case 'char':
- case 'bpchar':
- $type = 'string';
- if ($length == '1') {
- if (preg_match('/^(is|has)/', $tableColumn['name'])) {
- $type = 'boolean';
- }
- } elseif (strstr($dbType, 'text')) {
- $type = 'text';
- }
- if ($fixed !== false) {
- $fixed = true;
- }
- break;
- case 'date':
- $type = 'date';
- $length = null;
- break;
- case 'datetime':
- case 'timestamp':
- case 'timetz':
- case 'timestamptz':
- $type = 'datetime';
- $length = null;
- break;
- case 'time':
- $type = 'time';
- $length = null;
- break;
- case 'float':
- case 'float4':
- case 'float8':
- case 'double':
- case 'double precision':
- case 'real':
- case 'decimal':
- case 'money':
- case 'numeric':
- if(preg_match('([A-Za-z]+\(([0-9]+)\,([0-9]+)\))', $tableColumn['complete_type'], $match)) {
- $precision = $match[1];
- $scale = $match[2];
- $length = null;
- }
- $type = 'decimal';
- break;
- case 'tinyblob':
- case 'mediumblob':
- case 'longblob':
- case 'blob':
- case 'bytea':
- case 'geometry':
- case 'geometrycollection':
- case 'point':
- case 'multipoint':
- case 'linestring':
- case 'multilinestring':
- case 'polygon':
- case 'multipolygon':
- $type = 'blob';
- $length = null;
- break;
- case 'oid':
- $type = 'blob';
- $length = null;
- break;
- case 'year':
- $type = 'date';
- $length = null;
- break;
- default:
- $type = 'string';
- }
-
- $options = array(
- 'length' => $length,
- 'notnull' => (bool) $tableColumn['isnotnull'],
- 'default' => $tableColumn['default'],
- 'primary' => (bool) ($tableColumn['pri'] == 't'),
- 'precision' => $precision,
- 'scale' => $scale,
- 'fixed' => $fixed,
- 'unsigned' => false,
- 'platformDetails' => array(
- 'autoincrement' => $autoincrement,
- ),
- );
-
- return new Column($tableColumn['field'], \Doctrine\DBAL\Types\Type::getType($type), $options);
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Schema/Schema.php b/lib/Doctrine/DBAL/Schema/Schema.php
deleted file mode 100644
index 89243f817..000000000
--- a/lib/Doctrine/DBAL/Schema/Schema.php
+++ /dev/null
@@ -1,327 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Schema;
-
-use Doctrine\DBAL\Schema\Visitor\CreateSchemaSqlCollector;
-use Doctrine\DBAL\Schema\Visitor\DropSchemaSqlCollector;
-use Doctrine\DBAL\Schema\Visitor\Visitor;
-
-/**
- * Object representation of a database schema
- *
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @link www.doctrine-project.org
- * @since 2.0
- * @version $Revision$
- * @author Benjamin Eberlei
- */
-class Schema extends AbstractAsset
-{
- /**
- * @var array
- */
- protected $_tables = array();
-
- /**
- * @var array
- */
- protected $_sequences = array();
-
- /**
- * @var SchemaConfig
- */
- protected $_schemaConfig = false;
-
- /**
- * @param array $tables
- * @param array $sequences
- * @param array $views
- * @param array $triggers
- * @param SchemaConfig $schemaConfig
- */
- public function __construct(array $tables=array(), array $sequences=array(), SchemaConfig $schemaConfig=null)
- {
- if ($schemaConfig == null) {
- $schemaConfig = new SchemaConfig();
- }
- $this->_schemaConfig = $schemaConfig;
-
- foreach ($tables AS $table) {
- $this->_addTable($table);
- }
- foreach ($sequences AS $sequence) {
- $this->_addSequence($sequence);
- }
- }
-
- /**
- * @return bool
- */
- public function hasExplicitForeignKeyIndexes()
- {
- return $this->_schemaConfig->hasExplicitForeignKeyIndexes();
- }
-
- /**
- * @param Table $table
- */
- protected function _addTable(Table $table)
- {
- $tableName = strtolower($table->getName());
- if(isset($this->_tables[$tableName])) {
- throw SchemaException::tableAlreadyExists($tableName);
- }
-
- $this->_tables[$tableName] = $table;
- $table->setSchemaConfig($this->_schemaConfig);
- }
-
- /**
- * @param Sequence $sequence
- */
- protected function _addSequence(Sequence $sequence)
- {
- $seqName = strtolower($sequence->getName());
- if (isset($this->_sequences[$seqName])) {
- throw SchemaException::sequenceAlreadyExists($seqName);
- }
- $this->_sequences[$seqName] = $sequence;
- }
-
- /**
- * Get all tables of this schema.
- *
- * @return array
- */
- public function getTables()
- {
- return $this->_tables;
- }
-
- /**
- * @param string $tableName
- * @return Table
- */
- public function getTable($tableName)
- {
- $tableName = strtolower($tableName);
- if (!isset($this->_tables[$tableName])) {
- throw SchemaException::tableDoesNotExist($tableName);
- }
-
- return $this->_tables[$tableName];
- }
-
- /**
- * Does this schema have a table with the given name?
- *
- * @param string $tableName
- * @return Schema
- */
- public function hasTable($tableName)
- {
- $tableName = strtolower($tableName);
- return isset($this->_tables[$tableName]);
- }
-
- /**
- * @param string $sequenceName
- * @return bool
- */
- public function hasSequence($sequenceName)
- {
- $sequenceName = strtolower($sequenceName);
- return isset($this->_sequences[$sequenceName]);
- }
-
- /**
- * @throws SchemaException
- * @param string $sequenceName
- * @return Doctrine\DBAL\Schema\Sequence
- */
- public function getSequence($sequenceName)
- {
- $sequenceName = strtolower($sequenceName);
- if(!$this->hasSequence($sequenceName)) {
- throw SchemaException::sequenceDoesNotExist($sequenceName);
- }
- return $this->_sequences[$sequenceName];
- }
-
- /**
- * @return Doctrine\DBAL\Schema\Sequence[]
- */
- public function getSequences()
- {
- return $this->_sequences;
- }
-
- /**
- * Create a new table
- *
- * @param string $tableName
- * @return Table
- */
- public function createTable($tableName)
- {
- $table = new Table($tableName);
- $this->_addTable($table);
- return $table;
- }
-
- /**
- * Rename a table
- *
- * @param string $oldTableName
- * @param string $newTableName
- * @return Schema
- */
- public function renameTable($oldTableName, $newTableName)
- {
- $table = $this->getTable($oldTableName);
- $table->_setName($newTableName);
-
- $this->dropTable($oldTableName);
- $this->_addTable($table);
- return $this;
- }
-
- /**
- * Drop a table from the schema.
- *
- * @param string $tableName
- * @return Schema
- */
- public function dropTable($tableName)
- {
- $tableName = strtolower($tableName);
- $table = $this->getTable($tableName);
- unset($this->_tables[$tableName]);
- return $this;
- }
-
- /**
- * Create a new sequence
- *
- * @param string $sequenceName
- * @param int $allocationSize
- * @param int $initialValue
- * @return Sequence
- */
- public function createSequence($sequenceName, $allocationSize=1, $initialValue=1)
- {
- $seq = new Sequence($sequenceName, $allocationSize, $initialValue);
- $this->_addSequence($seq);
- return $seq;
- }
-
- /**
- * @param string $sequenceName
- * @return Schema
- */
- public function dropSequence($sequenceName)
- {
- $sequenceName = strtolower($sequenceName);
- unset($this->_sequences[$sequenceName]);
- return $this;
- }
-
- /**
- * Return an array of necessary sql queries to create the schema on the given platform.
- *
- * @param AbstractPlatform $platform
- * @return array
- */
- public function toSql(\Doctrine\DBAL\Platforms\AbstractPlatform $platform)
- {
- $sqlCollector = new CreateSchemaSqlCollector($platform);
- $this->visit($sqlCollector);
-
- return $sqlCollector->getQueries();
- }
-
- /**
- * Return an array of necessary sql queries to drop the schema on the given platform.
- *
- * @param AbstractPlatform $platform
- * @return array
- */
- public function toDropSql(\Doctrine\DBAL\Platforms\AbstractPlatform $platform)
- {
- $dropSqlCollector = new DropSchemaSqlCollector($platform);
- $this->visit($dropSqlCollector);
-
- return $dropSqlCollector->getQueries();
- }
-
- /**
- * @param Schema $toSchema
- * @param AbstractPlatform $platform
- */
- public function getMigrateToSql(Schema $toSchema, \Doctrine\DBAL\Platforms\AbstractPlatform $platform)
- {
- $comparator = new Comparator();
- $schemaDiff = $comparator->compare($this, $toSchema);
- return $schemaDiff->toSql($platform);
- }
-
- /**
- * @param Schema $fromSchema
- * @param AbstractPlatform $platform
- */
- public function getMigrateFromSql(Schema $fromSchema, \Doctrine\DBAL\Platforms\AbstractPlatform $platform)
- {
- $comparator = new Comparator();
- $schemaDiff = $comparator->compare($fromSchema, $this);
- return $schemaDiff->toSql($platform);
- }
-
- /**
- * @param Visitor $visitor
- */
- public function visit(Visitor $visitor)
- {
- $visitor->acceptSchema($this);
-
- foreach ($this->_tables AS $table) {
- $table->visit($visitor);
- }
- foreach ($this->_sequences AS $sequence) {
- $sequence->visit($visitor);
- }
- }
-
- /**
- * Cloning a Schema triggers a deep clone of all related assets.
- *
- * @return void
- */
- public function __clone()
- {
- foreach ($this->_tables AS $k => $table) {
- $this->_tables[$k] = clone $table;
- }
- foreach ($this->_sequences AS $k => $sequence) {
- $this->_sequences[$k] = clone $sequence;
- }
- }
-}
diff --git a/lib/Doctrine/DBAL/Schema/SchemaConfig.php b/lib/Doctrine/DBAL/Schema/SchemaConfig.php
deleted file mode 100644
index 291babb4a..000000000
--- a/lib/Doctrine/DBAL/Schema/SchemaConfig.php
+++ /dev/null
@@ -1,76 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Schema;
-
-/**
- * Configuration for a Schema
- *
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @link www.doctrine-project.org
- * @since 2.0
- * @version $Revision$
- * @author Benjamin Eberlei
- */
-class SchemaConfig
-{
- /**
- * @var bool
- */
- protected $_hasExplicitForeignKeyIndexes = false;
-
- /**
- * @var int
- */
- protected $_maxIdentifierLength = 63;
-
- /**
- * @return bool
- */
- public function hasExplicitForeignKeyIndexes()
- {
- return $this->_hasExplicitForeignKeyIndexes;
- }
-
- /**
- * @param bool $flag
- */
- public function setExplicitForeignKeyIndexes($flag)
- {
- $this->_hasExplicitForeignKeyIndexes = (bool)$flag;
- }
-
- /**
- * @param int $length
- */
- public function setMaxIdentifierLength($length)
- {
- $this->_maxIdentifierLength = (int)$length;
- }
-
- /**
- * @return int
- */
- public function getMaxIdentifierLength()
- {
- return $this->_maxIdentifierLength;
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Schema/SchemaDiff.php b/lib/Doctrine/DBAL/Schema/SchemaDiff.php
deleted file mode 100644
index c02775589..000000000
--- a/lib/Doctrine/DBAL/Schema/SchemaDiff.php
+++ /dev/null
@@ -1,176 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Schema;
-
-use \Doctrine\DBAL\Platforms\AbstractPlatform;
-
-/**
- * Schema Diff
- *
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @link www.doctrine-project.org
- * @copyright Copyright (C) 2005-2009 eZ Systems AS. All rights reserved.
- * @license http://ez.no/licenses/new_bsd New BSD License
- * @since 2.0
- * @version $Revision$
- * @author Benjamin Eberlei
- */
-class SchemaDiff
-{
- /**
- * All added tables
- *
- * @var array(string=>ezcDbSchemaTable)
- */
- public $newTables = array();
-
- /**
- * All changed tables
- *
- * @var array(string=>ezcDbSchemaTableDiff)
- */
- public $changedTables = array();
-
- /**
- * All removed tables
- *
- * @var array(string=>Table)
- */
- public $removedTables = array();
-
- /**
- * @var array
- */
- public $newSequences = array();
-
- /**
- * @var array
- */
- public $changedSequences = array();
-
- /**
- * @var array
- */
- public $removedSequences = array();
-
- /**
- * @var array
- */
- public $orphanedForeignKeys = array();
-
- /**
- * Constructs an SchemaDiff object.
- *
- * @param array(string=>Table) $newTables
- * @param array(string=>TableDiff) $changedTables
- * @param array(string=>bool) $removedTables
- */
- public function __construct( $newTables = array(), $changedTables = array(), $removedTables = array() )
- {
- $this->newTables = $newTables;
- $this->changedTables = $changedTables;
- $this->removedTables = $removedTables;
- }
-
- /**
- * The to save sql mode ensures that the following things don't happen:
- *
- * 1. Tables are deleted
- * 2. Sequences are deleted
- * 3. Foreign Keys which reference tables that would otherwise be deleted.
- *
- * This way it is ensured that assets are deleted which might not be relevant to the metadata schema at all.
- *
- * @param AbstractPlatform $platform
- * @return array
- */
- public function toSaveSql(AbstractPlatform $platform)
- {
- return $this->_toSql($platform, true);
- }
-
- /**
- * @param AbstractPlatform $platform
- * @return array
- */
- public function toSql(AbstractPlatform $platform)
- {
- return $this->_toSql($platform, false);
- }
-
- /**
- * @param AbstractPlatform $platform
- * @param bool $saveMode
- * @return array
- */
- protected function _toSql(AbstractPlatform $platform, $saveMode = false)
- {
- $sql = array();
-
- if ($platform->supportsForeignKeyConstraints() && $saveMode == false) {
- foreach ($this->orphanedForeignKeys AS $orphanedForeignKey) {
- $sql[] = $platform->getDropForeignKeySQL($orphanedForeignKey, $orphanedForeignKey->getLocalTableName());
- }
- }
-
- if ($platform->supportsSequences() == true) {
- foreach ($this->changedSequences AS $sequence) {
- $sql[] = $platform->getDropSequenceSQL($sequence);
- $sql[] = $platform->getCreateSequenceSQL($sequence);
- }
-
- if ($saveMode === false) {
- foreach ($this->removedSequences AS $sequence) {
- $sql[] = $platform->getDropSequenceSQL($sequence);
- }
- }
-
- foreach ($this->newSequences AS $sequence) {
- $sql[] = $platform->getCreateSequenceSQL($sequence);
- }
- }
-
- $foreignKeySql = array();
- foreach ($this->newTables AS $table) {
- $sql = array_merge(
- $sql,
- $platform->getCreateTableSQL($table, AbstractPlatform::CREATE_INDEXES)
- );
- foreach ($table->getForeignKeys() AS $foreignKey) {
- $foreignKeySql[] = $platform->getCreateForeignKeySQL($foreignKey, $table);
- }
- }
- $sql = array_merge($sql, $foreignKeySql);
-
- if ($saveMode === false) {
- foreach ($this->removedTables AS $table) {
- $sql[] = $platform->getDropTableSQL($table);
- }
- }
-
- foreach ($this->changedTables AS $tableDiff) {
- $sql = array_merge($sql, $platform->getAlterTableSQL($tableDiff));
- }
-
- return $sql;
- }
-}
diff --git a/lib/Doctrine/DBAL/Schema/SchemaException.php b/lib/Doctrine/DBAL/Schema/SchemaException.php
deleted file mode 100644
index e116f4c85..000000000
--- a/lib/Doctrine/DBAL/Schema/SchemaException.php
+++ /dev/null
@@ -1,126 +0,0 @@
-getName()." requires a named foreign key, ".
- "but the given foreign key from (".implode(", ", $foreignKey->getColumns()).") onto foreign table ".
- "'".$foreignKey->getForeignTableName()."' (".implode(", ", $foreignKey->getForeignColumns()).") is currently ".
- "unnamed."
- );
- }
-
- static public function alterTableChangeNotSupported($changeName) {
- return new self ("Alter table change not supported, given '$changeName'");
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Schema/Sequence.php b/lib/Doctrine/DBAL/Schema/Sequence.php
deleted file mode 100644
index 369f0e834..000000000
--- a/lib/Doctrine/DBAL/Schema/Sequence.php
+++ /dev/null
@@ -1,77 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Schema;
-
-use Doctrine\DBAL\Schema\Visitor\Visitor;
-
-/**
- * Sequence Structure
- *
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @link www.doctrine-project.org
- * @since 2.0
- * @version $Revision$
- * @author Benjamin Eberlei
- */
-class Sequence extends AbstractAsset
-{
- /**
- * @var int
- */
- protected $_allocationSize = 1;
-
- /**
- * @var int
- */
- protected $_initialValue = 1;
-
- /**
- *
- * @param string $name
- * @param int $allocationSize
- * @param int $initialValue
- */
- public function __construct($name, $allocationSize=1, $initialValue=1)
- {
- $this->_setName($name);
- $this->_allocationSize = (is_numeric($allocationSize))?$allocationSize:1;
- $this->_initialValue = (is_numeric($initialValue))?$initialValue:1;
- }
-
- public function getAllocationSize()
- {
- return $this->_allocationSize;
- }
-
- public function getInitialValue()
- {
- return $this->_initialValue;
- }
-
- /**
- * @param Visitor $visitor
- */
- public function visit(Visitor $visitor)
- {
- $visitor->acceptSequence($this);
- }
-}
diff --git a/lib/Doctrine/DBAL/Schema/SqliteSchemaManager.php b/lib/Doctrine/DBAL/Schema/SqliteSchemaManager.php
deleted file mode 100644
index e9953097d..000000000
--- a/lib/Doctrine/DBAL/Schema/SqliteSchemaManager.php
+++ /dev/null
@@ -1,265 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Schema;
-
-/**
- * SqliteSchemaManager
- *
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @author Konsta Vesterinen
- * @author Lukas Smith (PEAR MDB2 library)
- * @author Jonathan H. Wage
- * @version $Revision$
- * @since 2.0
- */
-class SqliteSchemaManager extends AbstractSchemaManager
-{
- /**
- * {@inheritdoc}
- *
- * @override
- */
- public function dropDatabase($database)
- {
- if (file_exists($database)) {
- unlink($database);
- }
- }
-
- /**
- * {@inheritdoc}
- *
- * @override
- */
- public function createDatabase($database)
- {
- $params = $this->_conn->getParams();
- $driver = $params['driver'];
- $options = array(
- 'driver' => $driver,
- 'path' => $database
- );
- $conn = \Doctrine\DBAL\DriverManager::getConnection($options);
- $conn->connect();
- $conn->close();
- }
-
- protected function _getPortableTableDefinition($table)
- {
- return $table['name'];
- }
-
- /**
- * @license New BSD License
- * @link http://ezcomponents.org/docs/api/trunk/DatabaseSchema/ezcDbSchemaPgsqlReader.html
- * @param array $tableIndexes
- * @param string $tableName
- * @return array
- */
- protected function _getPortableTableIndexesList($tableIndexes, $tableName=null)
- {
- $indexBuffer = array();
-
- // fetch primary
- $stmt = $this->_conn->executeQuery( "PRAGMA TABLE_INFO ('$tableName')" );
- $indexArray = $stmt->fetchAll(\PDO::FETCH_ASSOC);
- foreach($indexArray AS $indexColumnRow) {
- if($indexColumnRow['pk'] == "1") {
- $indexBuffer[] = array(
- 'key_name' => 'primary',
- 'primary' => true,
- 'non_unique' => false,
- 'column_name' => $indexColumnRow['name']
- );
- }
- }
-
- // fetch regular indexes
- foreach($tableIndexes AS $tableIndex) {
- $keyName = $tableIndex['name'];
- $idx = array();
- $idx['key_name'] = $keyName;
- $idx['primary'] = false;
- $idx['non_unique'] = $tableIndex['unique']?false:true;
-
- $stmt = $this->_conn->executeQuery( "PRAGMA INDEX_INFO ( '{$keyName}' )" );
- $indexArray = $stmt->fetchAll(\PDO::FETCH_ASSOC);
-
- foreach ( $indexArray as $indexColumnRow ) {
- $idx['column_name'] = $indexColumnRow['name'];
- $indexBuffer[] = $idx;
- }
- }
-
- return parent::_getPortableTableIndexesList($indexBuffer, $tableName);
- }
-
- protected function _getPortableTableIndexDefinition($tableIndex)
- {
- return array(
- 'name' => $tableIndex['name'],
- 'unique' => (bool) $tableIndex['unique']
- );
- }
-
- protected function _getPortableTableColumnDefinition($tableColumn)
- {
- $e = explode('(', $tableColumn['type']);
- $tableColumn['type'] = $e[0];
- if (isset($e[1])) {
- $length = trim($e[1], ')');
- $tableColumn['length'] = $length;
- }
-
- $dbType = strtolower($tableColumn['type']);
-
- $length = isset($tableColumn['length']) ? $tableColumn['length'] : null;
- $unsigned = (boolean) isset($tableColumn['unsigned']) ? $tableColumn['unsigned'] : false;
- $fixed = false;
- $type = null;
- $default = $tableColumn['dflt_value'];
- if ($default == 'NULL') {
- $default = null;
- }
- $notnull = (bool) $tableColumn['notnull'];
-
- if ( ! isset($tableColumn['name'])) {
- $tableColumn['name'] = '';
- }
-
- $precision = null;
- $scale = null;
-
- switch ($dbType) {
- case 'boolean':
- $type = 'boolean';
- break;
- case 'tinyint':
- $type = 'boolean';
- $length = null;
- break;
- case 'smallint':
- $type = 'smallint';
- $length = null;
- break;
- case 'mediumint':
- case 'int':
- case 'integer':
- case 'serial':
- $type = 'integer';
- $length = null;
- break;
- case 'bigint':
- case 'bigserial':
- $type = 'bigint';
- $length = null;
- break;
- case 'clob':
- $fixed = false;
- $type = 'text';
- break;
- case 'tinytext':
- case 'mediumtext':
- case 'longtext':
- case 'text':
- $type = 'text';
- break;
- case 'varchar':
- case 'varchar2':
- case 'nvarchar':
- case 'ntext':
- case 'image':
- case 'nchar':
- $fixed = false;
- case 'char':
- $type = 'string';
- if ($length == '1') {
- $type = 'boolean';
- if (preg_match('/^(is|has)/', $tableColumn['name'])) {
- $type = array_reverse($type);
- }
- } elseif (strstr($dbType, 'text')) {
- $type = 'clob';
- }
- if ($fixed !== false) {
- $fixed = true;
- }
- break;
- case 'date':
- $type = 'date';
- $length = null;
- break;
- case 'datetime':
- case 'timestamp':
- $type = 'datetime';
- $length = null;
- break;
- case 'time':
- $type = 'time';
- $length = null;
- break;
- case 'float':
- case 'double':
- case 'real':
- case 'decimal':
- case 'numeric':
- list($precision, $scale) = array_map('trim', explode(', ', $tableColumn['length']));
- $type = 'decimal';
- $length = null;
- break;
- case 'tinyblob':
- case 'mediumblob':
- case 'longblob':
- case 'blob':
- $type = 'blob';
- $length = null;
- break;
- case 'year':
- $type = 'date';
- $length = null;
- break;
- default:
- $type = 'string';
- $length = null;
- }
-
- $options = array(
- 'length' => $length,
- 'unsigned' => (bool) $unsigned,
- 'fixed' => $fixed,
- 'notnull' => $notnull,
- 'default' => $default,
- 'precision' => $precision,
- 'scale' => $scale,
- 'platformDetails' => array(
- 'autoincrement' => (bool) $tableColumn['pk'],
- ),
- );
-
- return new Column($tableColumn['name'], \Doctrine\DBAL\Types\Type::getType($type), $options);
- }
-
- protected function _getPortableViewDefinition($view)
- {
- return new View($view['name'], $view['sql']);
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Schema/Table.php b/lib/Doctrine/DBAL/Schema/Table.php
deleted file mode 100644
index 7cf31fa8e..000000000
--- a/lib/Doctrine/DBAL/Schema/Table.php
+++ /dev/null
@@ -1,662 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Schema;
-
-use Doctrine\DBAL\Types\Type;
-use Doctrine\DBAL\Schema\Visitor\Visitor;
-use Doctrine\DBAL\DBALException;
-
-/**
- * Object Representation of a table
- *
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @link www.doctrine-project.org
- * @since 2.0
- * @version $Revision$
- * @author Benjamin Eberlei
- */
-class Table extends AbstractAsset
-{
- /**
- * @var int
- */
- const ID_NONE = 0;
-
- /**
- * @var int
- */
- const ID_SEQUENCE = 1;
-
- /**
- * @var int
- */
- const ID_IDENTITY = 2;
-
- /**
- * @var string
- */
- protected $_name = null;
-
- /**
- * @var array
- */
- protected $_columns = array();
-
- /**
- * @var array
- */
- protected $_indexes = array();
-
- /**
- * @var string
- */
- protected $_primaryKeyName = false;
-
- /**
- * @var array
- */
- protected $_fkConstraints = array();
-
- /**
- * @var array
- */
- protected $_options = array();
-
- /**
- * @var bool
- */
- protected $_idGeneratorType = self::ID_NONE;
-
- /**
- * @var SchemaConfig
- */
- protected $_schemaConfig = null;
-
- /**
- *
- * @param string $tableName
- * @param array $columns
- * @param array $indexes
- * @param array $fkConstraints
- * @param int $idGeneratorType
- * @param array $options
- */
- public function __construct($tableName, array $columns=array(), array $indexes=array(), array $fkConstraints=array(), $idGeneratorType=self::ID_NONE, array $options=array())
- {
- if (strlen($tableName) == 0) {
- throw DBALException::invalidTableName($tableName);
- }
-
- $this->_setName($tableName);
- $this->_idGeneratorType = $idGeneratorType;
-
- foreach ($columns AS $column) {
- $this->_addColumn($column);
- }
-
- foreach ($indexes AS $idx) {
- $this->_addIndex($idx);
- }
-
- foreach ($fkConstraints AS $constraint) {
- $this->_addForeignKeyConstraint($constraint);
- }
-
- $this->_options = $options;
- }
-
- /**
- * @param SchemaConfig $schemaConfig
- */
- public function setSchemaConfig(SchemaConfig $schemaConfig)
- {
- $this->_schemaConfig = $schemaConfig;
- }
-
- /**
- * @return int
- */
- protected function _getMaxIdentifierLength()
- {
- if ($this->_schemaConfig instanceof SchemaConfig) {
- return $this->_schemaConfig->getMaxIdentifierLength();
- } else {
- return 63;
- }
- }
-
- /**
- * Set Primary Key
- *
- * @param array $columns
- * @param string $indexName
- * @return Table
- */
- public function setPrimaryKey(array $columns, $indexName = false)
- {
- $primaryKey = $this->_createIndex($columns, $indexName ?: "primary", true, true);
-
- foreach ($columns AS $columnName) {
- $column = $this->getColumn($columnName);
- $column->setNotnull(true);
- }
-
- return $primaryKey;
- }
-
- /**
- * @param string $type
- * @return Table
- */
- public function setIdGeneratorType($type)
- {
- $this->_idGeneratorType = $type;
- return $this;
- }
-
- /**
- * @param array $columnNames
- * @param string $indexName
- * @return Table
- */
- public function addIndex(array $columnNames, $indexName = null)
- {
- if($indexName == null) {
- $indexName = $this->_generateIdentifierName(
- array_merge(array($this->getName()), $columnNames), "idx", $this->_getMaxIdentifierLength()
- );
- }
-
- return $this->_createIndex($columnNames, $indexName, false, false);
- }
-
- /**
- *
- * @param array $columnNames
- * @param string $indexName
- * @return Table
- */
- public function addUniqueIndex(array $columnNames, $indexName = null)
- {
- if ($indexName == null) {
- $indexName = $this->_generateIdentifierName(
- array_merge(array($this->getName()), $columnNames), "uniq", $this->_getMaxIdentifierLength()
- );
- }
-
- return $this->_createIndex($columnNames, $indexName, true, false);
- }
-
- /**
- * Check if an index begins in the order of the given columns.
- *
- * @param array $columnsNames
- * @return bool
- */
- public function columnsAreIndexed(array $columnsNames)
- {
- foreach ($this->getIndexes() AS $index) {
- $indexColumns = $index->getColumns();
- $areIndexed = true;
- for ($i = 0; $i < count($columnsNames); $i++) {
- if ($columnsNames[$i] != $indexColumns[$i]) {
- $areIndexed = false;
- }
- }
-
- if ($areIndexed) {
- return true;
- }
- }
- return false;
- }
-
- /**
- *
- * @param array $columnNames
- * @param string $indexName
- * @param bool $isUnique
- * @param bool $isPrimary
- * @return Table
- */
- private function _createIndex(array $columnNames, $indexName, $isUnique, $isPrimary)
- {
- if (preg_match('(([^a-zA-Z0-9_]+))', $indexName)) {
- throw SchemaException::indexNameInvalid($indexName);
- }
-
- foreach ($columnNames AS $columnName => $indexColOptions) {
- if (is_numeric($columnName) && is_string($indexColOptions)) {
- $columnName = $indexColOptions;
- }
-
- if ( ! $this->hasColumn($columnName)) {
- throw SchemaException::columnDoesNotExist($columnName);
- }
- }
- $this->_addIndex(new Index($indexName, $columnNames, $isUnique, $isPrimary));
- return $this;
- }
-
- /**
- * @param string $columnName
- * @param string $columnType
- * @param array $options
- * @return Column
- */
- public function addColumn($columnName, $typeName, array $options=array())
- {
- $column = new Column($columnName, Type::getType($typeName), $options);
-
- $this->_addColumn($column);
- return $column;
- }
-
- /**
- * Rename Column
- *
- * @param string $oldColumnName
- * @param string $newColumnName
- * @return Table
- */
- public function renameColumn($oldColumnName, $newColumnName)
- {
- $column = $this->getColumn($oldColumnName);
- $this->dropColumn($oldColumnName);
-
- $column->_setName($newColumnName);
- return $this;
- }
-
- /**
- * Change Column Details
- *
- * @param string $columnName
- * @param array $options
- * @return Table
- */
- public function changeColumn($columnName, array $options)
- {
- $column = $this->getColumn($columnName);
- $column->setOptions($options);
- return $this;
- }
-
- /**
- * Drop Column from Table
- *
- * @param string $columnName
- * @return Table
- */
- public function dropColumn($columnName)
- {
- $columnName = strtolower($columnName);
- $column = $this->getColumn($columnName);
- unset($this->_columns[$columnName]);
- return $this;
- }
-
-
- /**
- * Add a foreign key constraint
- *
- * Name is inferred from the local columns
- *
- * @param Table $foreignTable
- * @param array $localColumns
- * @param array $foreignColumns
- * @param array $options
- * @return Table
- */
- public function addForeignKeyConstraint($foreignTable, array $localColumnNames, array $foreignColumnNames, array $options=array())
- {
- $name = $this->_generateIdentifierName(array_merge((array)$this->getName(), $localColumnNames), "fk", $this->_getMaxIdentifierLength());
- return $this->addNamedForeignKeyConstraint($name, $foreignTable, $localColumnNames, $foreignColumnNames, $options);
- }
-
- /**
- * Add a foreign key constraint
- *
- * Name is to be generated by the database itsself.
- *
- * @param Table $foreignTable
- * @param array $localColumns
- * @param array $foreignColumns
- * @param array $options
- * @return Table
- */
- public function addUnnamedForeignKeyConstraint($foreignTable, array $localColumnNames, array $foreignColumnNames, array $options=array())
- {
- return $this->addNamedForeignKeyConstraint(null, $foreignTable, $localColumnNames, $foreignColumnNames, $options);
- }
-
- /**
- * Add a foreign key constraint with a given name
- *
- * @param string $name
- * @param Table $foreignTable
- * @param array $localColumns
- * @param array $foreignColumns
- * @param array $options
- * @return Table
- */
- public function addNamedForeignKeyConstraint($name, $foreignTable, array $localColumnNames, array $foreignColumnNames, array $options=array())
- {
- if ($foreignTable instanceof Table) {
- $foreignTableName = $foreignTable->getName();
-
- foreach ($foreignColumnNames AS $columnName) {
- if ( ! $foreignTable->hasColumn($columnName)) {
- throw SchemaException::columnDoesNotExist($columnName);
- }
- }
- } else {
- $foreignTableName = $foreignTable;
- }
-
- foreach ($localColumnNames AS $columnName) {
- if ( ! $this->hasColumn($columnName)) {
- throw SchemaException::columnDoesNotExist($columnName);
- }
- }
-
- $constraint = new ForeignKeyConstraint(
- $localColumnNames, $foreignTableName, $foreignColumnNames, $name, $options
- );
- $this->_addForeignKeyConstraint($constraint);
-
- return $this;
- }
-
- /**
- * @param string $name
- * @param string $value
- * @return Table
- */
- public function addOption($name, $value)
- {
- $this->_options[$name] = $value;
- return $this;
- }
-
- /**
- * @param Column $column
- */
- protected function _addColumn(Column $column)
- {
- $columnName = $column->getName();
- $columnName = strtolower($columnName);
-
- if (isset($this->_columns[$columnName])) {
- throw SchemaException::columnAlreadyExists($this->getName(), $columnName);
- }
-
- $this->_columns[$columnName] = $column;
- }
-
- /**
- * Add index to table
- *
- * @param Index $index
- * @return Table
- */
- protected function _addIndex(Index $index)
- {
- // check for duplicates
- $c = new Comparator();
- foreach ($this->_indexes AS $existingIndex) {
- if ($c->diffIndex($index, $existingIndex) == false) {
- return $this;
- }
- }
-
- $indexName = $index->getName();
- $indexName = strtolower($indexName);
-
- if (isset($this->_indexes[$indexName]) || ($this->_primaryKeyName != false && $index->isPrimary())) {
- throw SchemaException::indexAlreadyExists($indexName);
- }
-
- if ($index->isPrimary()) {
- $this->_primaryKeyName = $indexName;
- }
-
- $this->_indexes[$indexName] = $index;
- return $this;
- }
-
- /**
- * @param ForeignKeyConstraint $constraint
- */
- protected function _addForeignKeyConstraint(ForeignKeyConstraint $constraint)
- {
- $constraint->setLocalTable($this);
-
- if(strlen($constraint->getName())) {
- $name = $constraint->getName();
- } else {
- $name = $this->_generateIdentifierName(
- array_merge((array)$this->getName(), $constraint->getLocalColumns()), "fk", $this->_getMaxIdentifierLength()
- );
- }
- $name = strtolower($name);
-
- $this->_fkConstraints[$name] = $constraint;
- }
-
- /**
- * Does Table have a foreign key constraint with the given name?
- * *
- * @param string $constraintName
- * @return bool
- */
- public function hasForeignKey($constraintName)
- {
- $constraintName = strtolower($constraintName);
- return isset($this->_fkConstraints[$constraintName]);
- }
-
- /**
- * @param string $constraintName
- * @return ForeignKeyConstraint
- */
- public function getForeignKey($constraintName)
- {
- $constraintName = strtolower($constraintName);
- if(!$this->hasForeignKey($constraintName)) {
- throw SchemaException::foreignKeyDoesNotExist($constraintName);
- }
-
- return $this->_fkConstraints[$constraintName];
- }
-
- /**
- * @return bool
- */
- public function isIdGeneratorIdentity()
- {
- return ($this->_idGeneratorType==self::ID_IDENTITY);
- }
-
- /**
- * @return array
- */
- public function isIdGeneratorSequence()
- {
- return ($this->_idGeneratorType==self::ID_SEQUENCE);
- }
-
- /**
- * @return Column[]
- */
- public function getColumns()
- {
- $columns = $this->_columns;
-
- $pkCols = array();
- $fkCols = array();
-
- if ($this->hasIndex($this->_primaryKeyName)) {
- $pkCols = $this->getPrimaryKey()->getColumns();
- }
- foreach ($this->getForeignKeys() AS $fk) {
- /* @var $fk ForeignKeyConstraint */
- $fkCols = array_merge($fkCols, $fk->getColumns());
- }
- $colNames = array_unique(array_merge($pkCols, $fkCols, array_keys($columns)));
-
- uksort($columns, function($a, $b) use($colNames) {
- return (array_search($a, $colNames) >= array_search($b, $colNames));
- });
- return $columns;
- }
-
-
- /**
- * Does this table have a column with the given name?
- *
- * @param string $columnName
- * @return bool
- */
- public function hasColumn($columnName)
- {
- $columnName = strtolower($columnName);
- return isset($this->_columns[$columnName]);
- }
-
- /**
- * Get a column instance
- *
- * @param string $columnName
- * @return Column
- */
- public function getColumn($columnName)
- {
- $columnName = strtolower($columnName);
- if (!$this->hasColumn($columnName)) {
- throw SchemaException::columnDoesNotExist($columnName);
- }
-
- return $this->_columns[$columnName];
- }
-
- /**
- * @return Index
- */
- public function getPrimaryKey()
- {
- return $this->getIndex($this->_primaryKeyName);
- }
-
- /**
- * @param string $indexName
- * @return bool
- */
- public function hasIndex($indexName)
- {
- $indexName = strtolower($indexName);
- return (isset($this->_indexes[$indexName]));
- }
-
- /**
- * @param string $indexName
- * @return Index
- */
- public function getIndex($indexName)
- {
- $indexName = strtolower($indexName);
- if (!$this->hasIndex($indexName)) {
- throw SchemaException::indexDoesNotExist($indexName);
- }
- return $this->_indexes[$indexName];
- }
-
- /**
- * @return array
- */
- public function getIndexes()
- {
- return $this->_indexes;
- }
-
- /**
- * Get Constraints
- *
- * @return array
- */
- public function getForeignKeys()
- {
- return $this->_fkConstraints;
- }
-
- public function hasOption($name)
- {
- return isset($this->_options[$name]);
- }
-
- public function getOption($name)
- {
- return $this->_options[$name];
- }
-
- public function getOptions()
- {
- return $this->_options;
- }
-
- /**
- * @param Visitor $visitor
- */
- public function visit(Visitor $visitor)
- {
- $visitor->acceptTable($this);
-
- foreach ($this->getColumns() AS $column) {
- $visitor->acceptColumn($this, $column);
- }
-
- foreach ($this->getIndexes() AS $index) {
- $visitor->acceptIndex($this, $index);
- }
-
- foreach ($this->getForeignKeys() AS $constraint) {
- $visitor->acceptForeignKey($this, $constraint);
- }
- }
-
- /**
- * Clone of a Table triggers a deep clone of all affected assets
- */
- public function __clone()
- {
- foreach ($this->_columns AS $k => $column) {
- $this->_columns[$k] = clone $column;
- }
- foreach ($this->_indexes AS $k => $index) {
- $this->_indexes[$k] = clone $index;
- }
- foreach ($this->_fkConstraints AS $k => $fk) {
- $this->_fkConstraints[$k] = clone $fk;
- $this->_fkConstraints[$k]->setLocalTable($this);
- }
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Schema/TableDiff.php b/lib/Doctrine/DBAL/Schema/TableDiff.php
deleted file mode 100644
index 3351a2393..000000000
--- a/lib/Doctrine/DBAL/Schema/TableDiff.php
+++ /dev/null
@@ -1,139 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Schema;
-
-/**
- * Table Diff
- *
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @link www.doctrine-project.org
- * @copyright Copyright (C) 2005-2009 eZ Systems AS. All rights reserved.
- * @license http://ez.no/licenses/new_bsd New BSD License
- * @since 2.0
- * @version $Revision$
- * @author Benjamin Eberlei
- */
-class TableDiff
-{
- /**
- * @var string
- */
- public $name = null;
-
- /**
- * @var string
- */
- public $newName = false;
-
- /**
- * All added fields
- *
- * @var array(string=>Column)
- */
- public $addedColumns;
-
- /**
- * All changed fields
- *
- * @var array(string=>Column)
- */
- public $changedColumns = array();
-
- /**
- * All removed fields
- *
- * @var array(string=>bool)
- */
- public $removedColumns = array();
-
- /**
- * Columns that are only renamed from key to column instance name.
- *
- * @var array(string=>Column)
- */
- public $renamedColumns = array();
-
- /**
- * All added indexes
- *
- * @var array(string=>Index)
- */
- public $addedIndexes = array();
-
- /**
- * All changed indexes
- *
- * @var array(string=>Index)
- */
- public $changedIndexes = array();
-
- /**
- * All removed indexes
- *
- * @var array(string=>bool)
- */
- public $removedIndexes = array();
-
- /**
- * All added foreign key definitions
- *
- * @var array
- */
- public $addedForeignKeys = array();
-
- /**
- * All changed foreign keys
- *
- * @var array
- */
- public $changedForeignKeys = array();
-
- /**
- * All removed foreign keys
- *
- * @var array
- */
- public $removedForeignKeys = array();
-
- /**
- * Constructs an TableDiff object.
- *
- * @param array(string=>Column) $addedColumns
- * @param array(string=>Column) $changedColumns
- * @param array(string=>bool) $removedColumns
- * @param array(string=>Index) $addedIndexes
- * @param array(string=>Index) $changedIndexes
- * @param array(string=>bool) $removedIndexes
- */
- public function __construct($tableName, $addedColumns = array(),
- $changedColumns = array(), $removedColumns = array(), $addedIndexes = array(),
- $changedIndexes = array(), $removedIndexes = array())
- {
- $this->name = $tableName;
- $this->addedColumns = $addedColumns;
- $this->changedColumns = $changedColumns;
- $this->removedColumns = $removedColumns;
- $this->addedIndexes = $addedIndexes;
- $this->changedIndexes = $changedIndexes;
- $this->removedIndexes = $removedIndexes;
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Schema/View.php b/lib/Doctrine/DBAL/Schema/View.php
deleted file mode 100644
index 4a8329de6..000000000
--- a/lib/Doctrine/DBAL/Schema/View.php
+++ /dev/null
@@ -1,53 +0,0 @@
-.
-*/
-
-namespace Doctrine\DBAL\Schema;
-
-/**
- * Representation of a Database View
- *
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @link www.doctrine-project.com
- * @since 1.0
- * @version $Revision$
- * @author Benjamin Eberlei
- */
-class View extends AbstractAsset
-{
- /**
- * @var string
- */
- private $_sql;
-
- public function __construct($name, $sql)
- {
- $this->_setName($name);
- $this->_sql = $sql;
- }
-
- /**
- * @return string
- */
- public function getSql()
- {
- return $this->_sql;
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Schema/Visitor/CreateSchemaSqlCollector.php b/lib/Doctrine/DBAL/Schema/Visitor/CreateSchemaSqlCollector.php
deleted file mode 100644
index e94753f93..000000000
--- a/lib/Doctrine/DBAL/Schema/Visitor/CreateSchemaSqlCollector.php
+++ /dev/null
@@ -1,145 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Schema\Visitor;
-
-use Doctrine\DBAL\Platforms\AbstractPlatform,
- Doctrine\DBAL\Schema\Table,
- Doctrine\DBAL\Schema\Schema,
- Doctrine\DBAL\Schema\Column,
- Doctrine\DBAL\Schema\ForeignKeyConstraint,
- Doctrine\DBAL\Schema\Constraint,
- Doctrine\DBAL\Schema\Sequence,
- Doctrine\DBAL\Schema\Index;
-
-class CreateSchemaSqlCollector implements Visitor
-{
- /**
- * @var array
- */
- private $_createTableQueries = array();
-
- /**
- * @var array
- */
- private $_createSequenceQueries = array();
-
- /**
- * @var array
- */
- private $_createFkConstraintQueries = array();
-
- /**
- *
- * @var \Doctrine\DBAL\Platforms\AbstractPlatform
- */
- private $_platform = null;
-
- /**
- * @param AbstractPlatform $platform
- */
- public function __construct(AbstractPlatform $platform)
- {
- $this->_platform = $platform;
- }
-
- /**
- * @param Schema $schema
- */
- public function acceptSchema(Schema $schema)
- {
-
- }
-
- /**
- * Generate DDL Statements to create the accepted table with all its dependencies.
- *
- * @param Table $table
- */
- public function acceptTable(Table $table)
- {
- $this->_createTableQueries = array_merge($this->_createTableQueries,
- $this->_platform->getCreateTableSQL($table)
- );
- }
-
- public function acceptColumn(Table $table, Column $column)
- {
-
- }
-
- /**
- * @param Table $localTable
- * @param ForeignKeyConstraint $fkConstraint
- */
- public function acceptForeignKey(Table $localTable, ForeignKeyConstraint $fkConstraint)
- {
- // Append the foreign key constraints SQL
- if ($this->_platform->supportsForeignKeyConstraints()) {
- $this->_createFkConstraintQueries = array_merge($this->_createFkConstraintQueries,
- (array) $this->_platform->getCreateForeignKeySQL($fkConstraint, $localTable->getName())
- );
- }
- }
-
- /**
- * @param Table $table
- * @param Index $index
- */
- public function acceptIndex(Table $table, Index $index)
- {
-
- }
-
- /**
- * @param Sequence $sequence
- */
- public function acceptSequence(Sequence $sequence)
- {
- $this->_createSequenceQueries = array_merge(
- $this->_createSequenceQueries, (array)$this->_platform->getCreateSequenceSQL($sequence)
- );
- }
-
- /**
- * @return array
- */
- public function resetQueries()
- {
- $this->_createTableQueries = array();
- $this->_createSequenceQueries = array();
- $this->_createFkConstraintQueries = array();
- }
-
- /**
- * Get all queries collected so far.
- *
- * @return array
- */
- public function getQueries()
- {
- return array_merge(
- $this->_createTableQueries,
- $this->_createSequenceQueries,
- $this->_createFkConstraintQueries
- );
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Schema/Visitor/DropSchemaSqlCollector.php b/lib/Doctrine/DBAL/Schema/Visitor/DropSchemaSqlCollector.php
deleted file mode 100644
index 76090ffe5..000000000
--- a/lib/Doctrine/DBAL/Schema/Visitor/DropSchemaSqlCollector.php
+++ /dev/null
@@ -1,146 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Schema\Visitor;
-
-use Doctrine\DBAL\Platforms\AbstractPlatform,
- Doctrine\DBAL\Schema\Table,
- Doctrine\DBAL\Schema\Schema,
- Doctrine\DBAL\Schema\Column,
- Doctrine\DBAL\Schema\ForeignKeyConstraint,
- Doctrine\DBAL\Schema\Constraint,
- Doctrine\DBAL\Schema\Sequence,
- Doctrine\DBAL\Schema\Index;
-
-/**
- * Gather SQL statements that allow to completly drop the current schema.
- *
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @link www.doctrine-project.org
- * @since 2.0
- * @version $Revision$
- * @author Benjamin Eberlei
- */
-class DropSchemaSqlCollector implements Visitor
-{
- /**
- * @var array
- */
- private $_constraints = array();
-
- /**
- * @var array
- */
- private $_sequences = array();
-
- /**
- * @var array
- */
- private $_tables = array();
-
- /**
- *
- * @var \Doctrine\DBAL\Platforms\AbstractPlatform
- */
- private $_platform = null;
-
- /**
- * @param AbstractPlatform $platform
- */
- public function __construct(AbstractPlatform $platform)
- {
- $this->_platform = $platform;
- }
-
- /**
- * @param Schema $schema
- */
- public function acceptSchema(Schema $schema)
- {
-
- }
-
- /**
- * @param Table $table
- */
- public function acceptTable(Table $table)
- {
- $this->_tables[] = $this->_platform->getDropTableSQL($table->getName());
- }
-
- /**
- * @param Column $column
- */
- public function acceptColumn(Table $table, Column $column)
- {
-
- }
-
- /**
- * @param Table $localTable
- * @param ForeignKeyConstraint $fkConstraint
- */
- public function acceptForeignKey(Table $localTable, ForeignKeyConstraint $fkConstraint)
- {
- if (strlen($fkConstraint->getName()) == 0) {
- throw SchemaException::namedForeignKeyRequired($localTable, $fkConstraint);
- }
-
- $this->_constraints[] = $this->_platform->getDropForeignKeySQL($fkConstraint->getName(), $localTable->getName());
- }
-
- /**
- * @param Table $table
- * @param Index $index
- */
- public function acceptIndex(Table $table, Index $index)
- {
-
- }
-
- /**
- * @param Sequence $sequence
- */
- public function acceptSequence(Sequence $sequence)
- {
- $this->_sequences[] = $this->_platform->getDropSequenceSQL($sequence->getName());
- }
-
- /**
- * @return array
- */
- public function clearQueries()
- {
- $this->_constraints = $this->_sequences = $this->_tables = array();
- }
-
- /**
- * @return array
- */
- public function getQueries()
- {
- return array_merge(
- $this->_constraints,
- $this->_sequences,
- $this->_tables
- );
- }
-}
diff --git a/lib/Doctrine/DBAL/Schema/Visitor/FixSchema.php b/lib/Doctrine/DBAL/Schema/Visitor/FixSchema.php
deleted file mode 100644
index 1a13a6e27..000000000
--- a/lib/Doctrine/DBAL/Schema/Visitor/FixSchema.php
+++ /dev/null
@@ -1,82 +0,0 @@
-_addExplicitIndexForForeignKey = $addExplicitIndexForForeignKey;
- }
-
- /**
- * @param Schema $schema
- */
- public function acceptSchema(Schema $schema)
- {
-
- }
-
- /**
- * @param Table $table
- */
- public function acceptTable(Table $table)
- {
-
- }
-
- /**
- * @param Column $column
- */
- public function acceptColumn(Table $table, Column $column)
- {
-
- }
-
- /**
- * @param Table $localTable
- * @param ForeignKeyConstraint $fkConstraint
- */
- public function acceptForeignKey(Table $localTable, ForeignKeyConstraint $fkConstraint)
- {
- if ($this->_addExplicitIndexForForeignKey) {
- $columns = $fkConstraint->getColumns();
- if ($localTable->columnsAreIndexed($columns)) {
- return;
- }
-
- $localTable->addIndex($columns);
- }
- }
-
- /**
- * @param Table $table
- * @param Index $index
- */
- public function acceptIndex(Table $table, Index $index)
- {
-
- }
-
- /**
- * @param Sequence $sequence
- */
- public function acceptSequence(Sequence $sequence)
- {
-
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Schema/Visitor/Visitor.php b/lib/Doctrine/DBAL/Schema/Visitor/Visitor.php
deleted file mode 100644
index 2dad80deb..000000000
--- a/lib/Doctrine/DBAL/Schema/Visitor/Visitor.php
+++ /dev/null
@@ -1,75 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Schema\Visitor;
-
-use Doctrine\DBAL\Platforms\AbstractPlatform,
- Doctrine\DBAL\Schema\Table,
- Doctrine\DBAL\Schema\Schema,
- Doctrine\DBAL\Schema\Column,
- Doctrine\DBAL\Schema\ForeignKeyConstraint,
- Doctrine\DBAL\Schema\Constraint,
- Doctrine\DBAL\Schema\Sequence,
- Doctrine\DBAL\Schema\Index;
-
-/**
- * Schema Visitor used for Validation or Generation purposes.
- *
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @link www.doctrine-project.org
- * @since 2.0
- * @version $Revision$
- * @author Benjamin Eberlei
- */
-interface Visitor
-{
- /**
- * @param Schema $schema
- */
- public function acceptSchema(Schema $schema);
-
- /**
- * @param Table $table
- */
- public function acceptTable(Table $table);
-
- /**
- * @param Column $column
- */
- public function acceptColumn(Table $table, Column $column);
-
- /**
- * @param Table $localTable
- * @param ForeignKeyConstraint $fkConstraint
- */
- public function acceptForeignKey(Table $localTable, ForeignKeyConstraint $fkConstraint);
-
- /**
- * @param Table $table
- * @param Index $index
- */
- public function acceptIndex(Table $table, Index $index);
-
- /**
- * @param Sequence $sequence
- */
- public function acceptSequence(Sequence $sequence);
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Statement.php b/lib/Doctrine/DBAL/Statement.php
deleted file mode 100644
index 2cfd8071a..000000000
--- a/lib/Doctrine/DBAL/Statement.php
+++ /dev/null
@@ -1,230 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL;
-
-use PDO,
- Doctrine\DBAL\Types\Type,
- Doctrine\DBAL\Driver\Statement as DriverStatement;
-
-/**
- * A thin wrapper around a Doctrine\DBAL\Driver\Statement that adds support
- * for logging, DBAL mapping types, etc.
- *
- * @author Roman Borschel
- * @since 2.0
- */
-class Statement implements DriverStatement
-{
- /**
- * @var string The SQL statement.
- */
- private $_sql;
- /**
- * @var array The bound parameters.
- */
- private $_params = array();
- /**
- * @var Doctrine\DBAL\Driver\Statement The underlying driver statement.
- */
- private $_stmt;
- /**
- * @var Doctrine\DBAL\Platforms\AbstractPlatform The underlying database platform.
- */
- private $_platform;
- /**
- * @var Doctrine\DBAL\Connection The connection this statement is bound to and executed on.
- */
- private $_conn;
-
- /**
- * Creates a new Statement for the given SQL and Connection.
- *
- * @param string $sql The SQL of the statement.
- * @param Doctrine\DBAL\Connection The connection on which the statement should be executed.
- */
- public function __construct($sql, Connection $conn)
- {
- $this->_sql = $sql;
- $this->_stmt = $conn->getWrappedConnection()->prepare($sql);
- $this->_conn = $conn;
- $this->_platform = $conn->getDatabasePlatform();
- }
-
- /**
- * Binds a parameter value to the statement.
- *
- * The value can optionally be bound with a PDO binding type or a DBAL mapping type.
- * If bound with a DBAL mapping type, the binding type is derived from the mapping
- * type and the value undergoes the conversion routines of the mapping type before
- * being bound.
- *
- * @param $name The name or position of the parameter.
- * @param $value The value of the parameter.
- * @param mixed $type Either a PDO binding type or a DBAL mapping type name or instance.
- * @return boolean TRUE on success, FALSE on failure.
- */
- public function bindValue($name, $value, $type = null)
- {
- $this->_params[$name] = $value;
- if ($type !== null) {
- if (is_string($type)) {
- $type = Type::getType($type);
- }
- if ($type instanceof Type) {
- $value = $type->convertToDatabaseValue($value, $this->_platform);
- $bindingType = $type->getBindingType();
- } else {
- $bindingType = $type; // PDO::PARAM_* constants
- }
- return $this->_stmt->bindValue($name, $value, $bindingType);
- } else {
- return $this->_stmt->bindValue($name, $value);
- }
- }
-
- /**
- * Binds a parameter to a value by reference.
- *
- * Binding a parameter by reference does not support DBAL mapping types.
- *
- * @param string $name The name or position of the parameter.
- * @param mixed $value The reference to the variable to bind
- * @param integer $type The PDO binding type.
- * @return boolean TRUE on success, FALSE on failure.
- */
- public function bindParam($name, &$var, $type = PDO::PARAM_STR)
- {
- return $this->_stmt->bindParam($name, $var, $type);
- }
-
- /**
- * Executes the statement with the currently bound parameters.
- *
- * @return boolean TRUE on success, FALSE on failure.
- */
- public function execute($params = null)
- {
- if ($this->_conn->getConfiguration()->getSQLLogger()) {
- $this->_conn->getConfiguration()->getSQLLogger()->logSQL($this->_sql, $this->_params);
- }
- $this->_params = array();
- return $this->_stmt->execute($params);
- }
-
- /**
- * Closes the cursor, freeing the database resources used by this statement.
- *
- * @return boolean TRUE on success, FALSE on failure.
- */
- public function closeCursor()
- {
- return $this->_stmt->closeCursor();
- }
-
- /**
- * Returns the number of columns in the result set.
- *
- * @return integer
- */
- public function columnCount()
- {
- return $this->_stmt->columnCount();
- }
-
- /**
- * Fetches the SQLSTATE associated with the last operation on the statement.
- *
- * @return string
- */
- public function errorCode()
- {
- return $this->_stmt->errorCode();
- }
-
- /**
- * Fetches extended error information associated with the last operation on the statement.
- *
- * @return array
- */
- public function errorInfo()
- {
- return $this->_stmt->errorInfo();
- }
-
- /**
- * Fetches the next row from a result set.
- *
- * @param integer $fetchStyle
- * @return mixed The return value of this function on success depends on the fetch type.
- * In all cases, FALSE is returned on failure.
- */
- public function fetch($fetchStyle = PDO::FETCH_BOTH)
- {
- return $this->_stmt->fetch($fetchStyle);
- }
-
- /**
- * Returns an array containing all of the result set rows.
- *
- * @param integer $fetchStyle
- * @param integer $columnIndex
- * @return array An array containing all of the remaining rows in the result set.
- */
- public function fetchAll($fetchStyle = PDO::FETCH_BOTH, $columnIndex = 0)
- {
- if ($columnIndex != 0) {
- return $this->_stmt->fetchAll($fetchStyle, $columnIndex);
- }
- return $this->_stmt->fetchAll($fetchStyle);
- }
-
- /**
- * Returns a single column from the next row of a result set.
- *
- * @param integer $columnIndex
- * @return mixed A single column from the next row of a result set or FALSE if there are no more rows.
- */
- public function fetchColumn($columnIndex = 0)
- {
- return $this->_stmt->fetchColumn($columnIndex);
- }
-
- /**
- * Returns the number of rows affected by the last execution of this statement.
- *
- * @return integer The number of affected rows.
- */
- public function rowCount()
- {
- return $this->_stmt->rowCount();
- }
-
- /**
- * Gets the wrapped driver statement.
- *
- * @return Doctrine\DBAL\Driver\Statement
- */
- public function getWrappedStatement()
- {
- return $this->_stmt;
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Tools/Console/Command/ImportCommand.php b/lib/Doctrine/DBAL/Tools/Console/Command/ImportCommand.php
deleted file mode 100644
index 8c3dd2b76..000000000
--- a/lib/Doctrine/DBAL/Tools/Console/Command/ImportCommand.php
+++ /dev/null
@@ -1,127 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Tools\Console\Command;
-
-use Symfony\Components\Console\Input\InputArgument,
- Symfony\Components\Console;
-
-/**
- * Task for executing arbitrary SQL that can come from a file or directly from
- * the command line.
- *
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @link www.doctrine-project.org
- * @since 2.0
- * @version $Revision$
- * @author Benjamin Eberlei
- * @author Guilherme Blanco
- * @author Jonathan Wage
- * @author Roman Borschel
- */
-class ImportCommand extends Console\Command\Command
-{
- /**
- * @see Console\Command\Command
- */
- protected function configure()
- {
- $this
- ->setName('dbal:import')
- ->setDescription('Import SQL file(s) directly to Database.')
- ->setDefinition(array(
- new InputArgument(
- 'file', InputArgument::REQUIRED | InputArgument::IS_ARRAY, 'File path(s) of SQL to be executed.'
- )
- ))
- ->setHelp(<<getHelper('db')->getConnection();
-
- if (($fileNames = $input->getArgument('file')) !== null) {
- foreach ((array) $fileNames as $fileName) {
- $fileName = realpath($fileName);
-
- if ( ! file_exists($fileName)) {
- throw new \InvalidArgumentException(
- sprintf("SQL file '%s' does not exist.", $fileName)
- );
- } else if ( ! is_readable($fileName)) {
- throw new \InvalidArgumentException(
- sprintf("SQL file '%s' does not have read permissions.", $fileName)
- );
- }
-
- $output->write(sprintf("Processing file '%s'... ", $fileName));
- $sql = file_get_contents($fileName);
-
- if ($conn instanceof \Doctrine\DBAL\Driver\PDOConnection) {
- // PDO Drivers
- try {
- $lines = 0;
-
- $stmt = $conn->prepare($sql);
- $stmt->execute();
-
- do {
- // Required due to "MySQL has gone away!" issue
- $stmt->fetch();
- $stmt->closeCursor();
-
- $lines++;
- } while ($stmt->nextRowset());
-
- $output->write(sprintf('%d statements executed!', $lines) . PHP_EOL);
- } catch (\PDOException $e) {
- $output->write('error!' . PHP_EOL);
-
- throw new \RuntimeException($e->getMessage(), $e->getCode(), $e);
- }
- } else {
- // Non-PDO Drivers (ie. OCI8 driver)
- $stmt = $conn->prepare($sql);
- $rs = $stmt->execute();
-
- if ($rs) {
- $printer->writeln('OK!');
- } else {
- $error = $stmt->errorInfo();
-
- $output->write('error!' . PHP_EOL);
-
- throw new \RuntimeException($error[2], $error[0]);
- }
-
- $stmt->closeCursor();
- }
- }
- }
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Tools/Console/Command/RunSqlCommand.php b/lib/Doctrine/DBAL/Tools/Console/Command/RunSqlCommand.php
deleted file mode 100644
index a4fdaccd0..000000000
--- a/lib/Doctrine/DBAL/Tools/Console/Command/RunSqlCommand.php
+++ /dev/null
@@ -1,86 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Tools\Console\Command;
-
-use Symfony\Components\Console\Input\InputArgument,
- Symfony\Components\Console\Input\InputOption,
- Symfony\Components\Console;
-
-/**
- * Task for executing arbitrary SQL that can come from a file or directly from
- * the command line.
- *
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @link www.doctrine-project.org
- * @since 2.0
- * @version $Revision$
- * @author Benjamin Eberlei
- * @author Guilherme Blanco
- * @author Jonathan Wage
- * @author Roman Borschel
- */
-class RunSqlCommand extends Console\Command\Command
-{
- /**
- * @see Console\Command\Command
- */
- protected function configure()
- {
- $this
- ->setName('dbal:run-sql')
- ->setDescription('Executes arbitrary SQL directly from the command line.')
- ->setDefinition(array(
- new InputArgument('sql', InputArgument::REQUIRED, 'The SQL statement to execute.'),
- new InputOption('depth', null, InputOption::PARAMETER_REQUIRED, 'Dumping depth of result set.', 7)
- ))
- ->setHelp(<<getHelper('db')->getConnection();
-
- if (($sql = $input->getArgument('sql')) === null) {
- throw new \RuntimeException("Argument 'SQL' is required in order to execute this command correctly.");
- }
-
- $depth = $input->getOption('depth');
-
- if ( ! is_numeric($depth)) {
- throw new \LogicException("Option 'depth' must contains an integer value");
- }
-
- if (preg_match('/^select/i', $sql)) {
- $resultSet = $conn->fetchAll($sql);
- } else {
- $resultSet = $conn->executeUpdate($sql);
- }
-
- \Doctrine\Common\Util\Debug::dump($resultSet, (int) $depth);
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Tools/Console/Helper/ConnectionHelper.php b/lib/Doctrine/DBAL/Tools/Console/Helper/ConnectionHelper.php
deleted file mode 100644
index bcf6f8d97..000000000
--- a/lib/Doctrine/DBAL/Tools/Console/Helper/ConnectionHelper.php
+++ /dev/null
@@ -1,74 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Tools\Console\Helper;
-
-use Symfony\Components\Console\Helper\Helper,
- Doctrine\DBAL\Connection;
-
-/**
- * Doctrine CLI Connection Helper.
- *
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @link www.doctrine-project.org
- * @since 2.0
- * @version $Revision$
- * @author Benjamin Eberlei
- * @author Guilherme Blanco
- * @author Jonathan Wage
- * @author Roman Borschel
- */
-class ConnectionHelper extends Helper
-{
- /**
- * Doctrine Database Connection
- * @var Connection
- */
- protected $_connection;
-
- /**
- * Constructor
- *
- * @param Connection $connection Doctrine Database Connection
- */
- public function __construct(Connection $connection)
- {
- $this->_connection = $connection;
- }
-
- /**
- * Retrieves Doctrine Database Connection
- *
- * @return Connection
- */
- public function getConnection()
- {
- return $this->_connection;
- }
-
- /**
- * @see Helper
- */
- public function getName()
- {
- return 'connection';
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Types/ArrayType.php b/lib/Doctrine/DBAL/Types/ArrayType.php
deleted file mode 100644
index 672710365..000000000
--- a/lib/Doctrine/DBAL/Types/ArrayType.php
+++ /dev/null
@@ -1,51 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Types;
-
-/**
- * Type that maps a PHP array to a clob SQL type.
- *
- * @since 2.0
- */
-class ArrayType extends Type
-{
- public function getSqlDeclaration(array $fieldDeclaration, \Doctrine\DBAL\Platforms\AbstractPlatform $platform)
- {
- return $platform->getClobTypeDeclarationSQL($fieldDeclaration);
- }
-
- public function convertToDatabaseValue($value, \Doctrine\DBAL\Platforms\AbstractPlatform $platform)
- {
- return serialize($value);
- }
-
- public function convertToPHPValue($value, \Doctrine\DBAL\Platforms\AbstractPlatform $platform)
- {
- $value = (is_resource($value)) ? stream_get_contents($value) : $value;
- return unserialize($value);
- }
-
- public function getName()
- {
- return Type::TARRAY;
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Types/BigIntType.php b/lib/Doctrine/DBAL/Types/BigIntType.php
deleted file mode 100644
index 99c1948db..000000000
--- a/lib/Doctrine/DBAL/Types/BigIntType.php
+++ /dev/null
@@ -1,48 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Types;
-
-use Doctrine\DBAL\Platforms\AbstractPlatform;
-
-/**
- * Type that maps a database BIGINT to a PHP string.
- *
- * @author robo
- * @since 2.0
- */
-class BigIntType extends Type
-{
- public function getName()
- {
- return Type::BIGINT;
- }
-
- public function getSqlDeclaration(array $fieldDeclaration, AbstractPlatform $platform)
- {
- return $platform->getBigIntTypeDeclarationSQL($fieldDeclaration);
- }
-
- public function getBindingType()
- {
- return \PDO::PARAM_INT;
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Types/BooleanType.php b/lib/Doctrine/DBAL/Types/BooleanType.php
deleted file mode 100644
index da2694ebf..000000000
--- a/lib/Doctrine/DBAL/Types/BooleanType.php
+++ /dev/null
@@ -1,57 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Types;
-
-use Doctrine\DBAL\Platforms\AbstractPlatform;
-
-/**
- * Type that maps an SQL boolean to a PHP boolean.
- *
- * @since 2.0
- */
-class BooleanType extends Type
-{
- public function getSqlDeclaration(array $fieldDeclaration, AbstractPlatform $platform)
- {
- return $platform->getBooleanTypeDeclarationSQL($fieldDeclaration);
- }
-
- public function convertToDatabaseValue($value, AbstractPlatform $platform)
- {
- return $platform->convertBooleans($value);
- }
-
- public function convertToPHPValue($value, AbstractPlatform $platform)
- {
- return (bool) $value;
- }
-
- public function getName()
- {
- return Type::BOOLEAN;
- }
-
- public function getBindingType()
- {
- return \PDO::PARAM_BOOL;
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Types/DateTimeType.php b/lib/Doctrine/DBAL/Types/DateTimeType.php
deleted file mode 100644
index 91bc9905d..000000000
--- a/lib/Doctrine/DBAL/Types/DateTimeType.php
+++ /dev/null
@@ -1,54 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Types;
-
-use Doctrine\DBAL\Platforms\AbstractPlatform;
-
-/**
- * Type that maps an SQL DATETIME/TIMESTAMP to a PHP DateTime object.
- *
- * @since 2.0
- */
-class DateTimeType extends Type
-{
- public function getName()
- {
- return Type::DATETIME;
- }
-
- public function getSqlDeclaration(array $fieldDeclaration, AbstractPlatform $platform)
- {
- return $platform->getDateTimeTypeDeclarationSQL($fieldDeclaration);
- }
-
- public function convertToDatabaseValue($value, AbstractPlatform $platform)
- {
- return ($value !== null)
- ? $value->format($platform->getDateTimeFormatString()) : null;
- }
-
- public function convertToPHPValue($value, AbstractPlatform $platform)
- {
- return ($value !== null)
- ? \DateTime::createFromFormat($platform->getDateTimeFormatString(), $value) : null;
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Types/DateType.php b/lib/Doctrine/DBAL/Types/DateType.php
deleted file mode 100644
index 5db2ec0f6..000000000
--- a/lib/Doctrine/DBAL/Types/DateType.php
+++ /dev/null
@@ -1,54 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Types;
-
-use Doctrine\DBAL\Platforms\AbstractPlatform;
-
-/**
- * Type that maps an SQL DATE to a PHP Date object.
- *
- * @since 2.0
- */
-class DateType extends Type
-{
- public function getName()
- {
- return Type::DATE;
- }
-
- public function getSqlDeclaration(array $fieldDeclaration, AbstractPlatform $platform)
- {
- return $platform->getDateTypeDeclarationSQL($fieldDeclaration);
- }
-
- public function convertToDatabaseValue($value, AbstractPlatform $platform)
- {
- return ($value !== null)
- ? $value->format($platform->getDateFormatString()) : null;
- }
-
- public function convertToPHPValue($value, AbstractPlatform $platform)
- {
- return ($value !== null)
- ? \DateTime::createFromFormat('!'.$platform->getDateFormatString(), $value) : null;
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Types/DecimalType.php b/lib/Doctrine/DBAL/Types/DecimalType.php
deleted file mode 100644
index 44e97c865..000000000
--- a/lib/Doctrine/DBAL/Types/DecimalType.php
+++ /dev/null
@@ -1,47 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Types;
-
-use Doctrine\DBAL\Platforms\AbstractPlatform;
-
-/**
- * Type that maps an SQL DECIMAL to a PHP double.
- *
- * @since 2.0
- */
-class DecimalType extends Type
-{
- public function getName()
- {
- return Type::DECIMAL;
- }
-
- public function getSqlDeclaration(array $fieldDeclaration, AbstractPlatform $platform)
- {
- return $platform->getDecimalTypeDeclarationSQL($fieldDeclaration);
- }
-
- public function convertToPHPValue($value, AbstractPlatform $platform)
- {
- return (double) $value;
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Types/IntegerType.php b/lib/Doctrine/DBAL/Types/IntegerType.php
deleted file mode 100644
index c790ab130..000000000
--- a/lib/Doctrine/DBAL/Types/IntegerType.php
+++ /dev/null
@@ -1,53 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Types;
-
-use Doctrine\DBAL\Platforms\AbstractPlatform;
-
-/**
- * Type that maps an SQL INT to a PHP integer.
- *
- * @author Roman Borschel
- * @since 2.0
- */
-class IntegerType extends Type
-{
- public function getName()
- {
- return Type::INTEGER;
- }
-
- public function getSqlDeclaration(array $fieldDeclaration, AbstractPlatform $platform)
- {
- return $platform->getIntegerTypeDeclarationSQL($fieldDeclaration);
- }
-
- public function convertToPHPValue($value, AbstractPlatform $platform)
- {
- return (null === $value) ? null : (int) $value;
- }
-
- public function getBindingType()
- {
- return \PDO::PARAM_INT;
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Types/ObjectType.php b/lib/Doctrine/DBAL/Types/ObjectType.php
deleted file mode 100644
index 668746f36..000000000
--- a/lib/Doctrine/DBAL/Types/ObjectType.php
+++ /dev/null
@@ -1,32 +0,0 @@
-getClobTypeDeclarationSQL($fieldDeclaration);
- }
-
- public function convertToDatabaseValue($value, \Doctrine\DBAL\Platforms\AbstractPlatform $platform)
- {
- return serialize($value);
- }
-
- public function convertToPHPValue($value, \Doctrine\DBAL\Platforms\AbstractPlatform $platform)
- {
- $value = (is_resource($value)) ? stream_get_contents($value) : $value;
- return unserialize($value);
- }
-
- public function getName()
- {
- return Type::OBJECT;
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Types/SmallIntType.php b/lib/Doctrine/DBAL/Types/SmallIntType.php
deleted file mode 100644
index 0647687ce..000000000
--- a/lib/Doctrine/DBAL/Types/SmallIntType.php
+++ /dev/null
@@ -1,52 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Types;
-
-use Doctrine\DBAL\Platforms\AbstractPlatform;
-
-/**
- * Type that maps a database SMALLINT to a PHP integer.
- *
- * @author robo
- */
-class SmallIntType extends Type
-{
- public function getName()
- {
- return Type::SMALLINT;
- }
-
- public function getSqlDeclaration(array $fieldDeclaration, AbstractPlatform $platform)
- {
- return $platform->getSmallIntTypeDeclarationSQL($fieldDeclaration);
- }
-
- public function convertToPHPValue($value, AbstractPlatform $platform)
- {
- return (int) $value;
- }
-
- public function getBindingType()
- {
- return \PDO::PARAM_INT;
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Types/StringType.php b/lib/Doctrine/DBAL/Types/StringType.php
deleted file mode 100644
index 5702cb18d..000000000
--- a/lib/Doctrine/DBAL/Types/StringType.php
+++ /dev/null
@@ -1,50 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Types;
-
-use Doctrine\DBAL\Platforms\AbstractPlatform;
-
-/**
- * Type that maps an SQL VARCHAR to a PHP string.
- *
- * @since 2.0
- */
-class StringType extends Type
-{
- /** @override */
- public function getSqlDeclaration(array $fieldDeclaration, AbstractPlatform $platform)
- {
- return $platform->getVarcharTypeDeclarationSQL($fieldDeclaration);
- }
-
- /** @override */
- public function getDefaultLength(AbstractPlatform $platform)
- {
- return $platform->getVarcharDefaultLength();
- }
-
- /** @override */
- public function getName()
- {
- return Type::STRING;
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Types/TextType.php b/lib/Doctrine/DBAL/Types/TextType.php
deleted file mode 100644
index 4fcd87270..000000000
--- a/lib/Doctrine/DBAL/Types/TextType.php
+++ /dev/null
@@ -1,56 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Types;
-
-use Doctrine\DBAL\Platforms\AbstractPlatform;
-
-/**
- * Type that maps an SQL CLOB to a PHP string.
- *
- * @since 2.0
- */
-class TextType extends Type
-{
- /** @override */
- public function getSqlDeclaration(array $fieldDeclaration, AbstractPlatform $platform)
- {
- return $platform->getClobTypeDeclarationSQL($fieldDeclaration);
- }
-
- /**
- * Converts a value from its database representation to its PHP representation
- * of this type.
- *
- * @param mixed $value The value to convert.
- * @param AbstractPlatform $platform The currently used database platform.
- * @return mixed The PHP representation of the value.
- */
- public function convertToPHPValue($value, AbstractPlatform $platform)
- {
- return (is_resource($value)) ? stream_get_contents($value) : $value;
- }
-
- public function getName()
- {
- return Type::TEXT;
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Types/TimeType.php b/lib/Doctrine/DBAL/Types/TimeType.php
deleted file mode 100644
index 920578db7..000000000
--- a/lib/Doctrine/DBAL/Types/TimeType.php
+++ /dev/null
@@ -1,63 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Types;
-
-use Doctrine\DBAL\Platforms\AbstractPlatform;
-
-/**
- * Type that maps an SQL TIME to a PHP DateTime object.
- *
- * @since 2.0
- */
-class TimeType extends Type
-{
- public function getName()
- {
- return Type::TIME;
- }
-
- /**
- * {@inheritdoc}
- */
- public function getSqlDeclaration(array $fieldDeclaration, AbstractPlatform $platform)
- {
- return $platform->getTimeTypeDeclarationSQL($fieldDeclaration);
- }
-
- /**
- * {@inheritdoc}
- */
- public function convertToDatabaseValue($value, AbstractPlatform $platform)
- {
- return ($value !== null)
- ? $value->format($platform->getTimeFormatString()) : null;
- }
-
- /**
- * {@inheritdoc}
- */
- public function convertToPHPValue($value, AbstractPlatform $platform)
- {
- return ($value !== null)
- ? \DateTime::createFromFormat($platform->getTimeFormatString(), $value) : null;
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/DBAL/Types/Type.php b/lib/Doctrine/DBAL/Types/Type.php
deleted file mode 100644
index be110132d..000000000
--- a/lib/Doctrine/DBAL/Types/Type.php
+++ /dev/null
@@ -1,226 +0,0 @@
-.
- */
-
-namespace Doctrine\DBAL\Types;
-
-use Doctrine\DBAL\Platforms\AbstractPlatform,
- Doctrine\DBAL\DBALException;
-
-/**
- * The base class for so-called Doctrine mapping types.
- *
- * A Type object is obtained by calling the static {@link getType()} method.
- *
- * @author Roman Borschel
- * @since 2.0
- */
-abstract class Type
-{
- const TARRAY = 'array';
- const BIGINT = 'bigint';
- const BOOLEAN = 'boolean';
- const DATETIME = 'datetime';
- const DATE = 'date';
- const TIME = 'time';
- const DECIMAL = 'decimal';
- const INTEGER = 'integer';
- const OBJECT = 'object';
- const SMALLINT = 'smallint';
- const STRING = 'string';
- const TEXT = 'text';
-
- /** Map of already instantiated type objects. One instance per type (flyweight). */
- private static $_typeObjects = array();
-
- /** The map of supported doctrine mapping types. */
- private static $_typesMap = array(
- self::TARRAY => 'Doctrine\DBAL\Types\ArrayType',
- self::OBJECT => 'Doctrine\DBAL\Types\ObjectType',
- self::BOOLEAN => 'Doctrine\DBAL\Types\BooleanType',
- self::INTEGER => 'Doctrine\DBAL\Types\IntegerType',
- self::SMALLINT => 'Doctrine\DBAL\Types\SmallIntType',
- self::BIGINT => 'Doctrine\DBAL\Types\BigIntType',
- self::STRING => 'Doctrine\DBAL\Types\StringType',
- self::TEXT => 'Doctrine\DBAL\Types\TextType',
- self::DATETIME => 'Doctrine\DBAL\Types\DateTimeType',
- self::DATE => 'Doctrine\DBAL\Types\DateType',
- self::TIME => 'Doctrine\DBAL\Types\TimeType',
- self::DECIMAL => 'Doctrine\DBAL\Types\DecimalType'
- );
-
- /* Prevent instantiation and force use of the factory method. */
- final private function __construct() {}
-
- /**
- * Converts a value from its PHP representation to its database representation
- * of this type.
- *
- * @param mixed $value The value to convert.
- * @param AbstractPlatform $platform The currently used database platform.
- * @return mixed The database representation of the value.
- */
- public function convertToDatabaseValue($value, AbstractPlatform $platform)
- {
- return $value;
- }
-
- /**
- * Converts a value from its database representation to its PHP representation
- * of this type.
- *
- * @param mixed $value The value to convert.
- * @param AbstractPlatform $platform The currently used database platform.
- * @return mixed The PHP representation of the value.
- */
- public function convertToPHPValue($value, AbstractPlatform $platform)
- {
- return $value;
- }
-
- /**
- * Gets the default length of this type.
- *
- * @todo Needed?
- */
- public function getDefaultLength(AbstractPlatform $platform)
- {
- return null;
- }
-
- /**
- * Gets the SQL declaration snippet for a field of this type.
- *
- * @param array $fieldDeclaration The field declaration.
- * @param AbstractPlatform $platform The currently used database platform.
- */
- abstract public function getSqlDeclaration(array $fieldDeclaration, AbstractPlatform $platform);
-
- /**
- * Gets the name of this type.
- *
- * @return string
- * @todo Needed?
- */
- abstract public function getName();
-
- /**
- * Factory method to create type instances.
- * Type instances are implemented as flyweights.
- *
- * @static
- * @throws DBALException
- * @param string $name The name of the type (as returned by getName()).
- * @return Doctrine\DBAL\Types\Type
- */
- public static function getType($name)
- {
- if ( ! isset(self::$_typeObjects[$name])) {
- if ( ! isset(self::$_typesMap[$name])) {
- throw DBALException::unknownColumnType($name);
- }
- self::$_typeObjects[$name] = new self::$_typesMap[$name]();
- }
-
- return self::$_typeObjects[$name];
- }
-
- /**
- * Adds a custom type to the type map.
- *
- * @static
- * @param string $name Name of the type. This should correspond to what getName() returns.
- * @param string $className The class name of the custom type.
- * @throws DBALException
- */
- public static function addType($name, $className)
- {
- if (isset(self::$_typesMap[$name])) {
- throw DBALException::typeExists($name);
- }
-
- self::$_typesMap[$name] = $className;
- }
-
- /**
- * Checks if exists support for a type.
- *
- * @static
- * @param string $name Name of the type
- * @return boolean TRUE if type is supported; FALSE otherwise
- */
- public static function hasType($name)
- {
- return isset(self::$_typesMap[$name]);
- }
-
- /**
- * Overrides an already defined type to use a different implementation.
- *
- * @static
- * @param string $name
- * @param string $className
- * @throws DBALException
- */
- public static function overrideType($name, $className)
- {
- if ( ! isset(self::$_typesMap[$name])) {
- throw DBALException::typeNotFound($name);
- }
-
- self::$_typesMap[$name] = $className;
- }
-
- /**
- * Gets the (preferred) binding type for values of this type that
- * can be used when binding parameters to prepared statements.
- *
- * This method should return one of the PDO::PARAM_* constants, that is, one of:
- *
- * PDO::PARAM_BOOL
- * PDO::PARAM_NULL
- * PDO::PARAM_INT
- * PDO::PARAM_STR
- * PDO::PARAM_LOB
- *
- * @return integer
- */
- public function getBindingType()
- {
- return \PDO::PARAM_STR;
- }
-
- /**
- * Get the types array map which holds all registered types and the corresponding
- * type class
- *
- * @return array $typesMap
- */
- public static function getTypesMap()
- {
- return self::$_typesMap;
- }
-
- public function __toString()
- {
- $e = explode('\\', get_class($this));
- return str_replace('Type', '', end($e));
- }
-}
\ No newline at end of file
diff --git a/lib/Doctrine/ORM/Configuration.php b/lib/Doctrine/ORM/Configuration.php
index b6fa3a99e..75b66453e 100644
--- a/lib/Doctrine/ORM/Configuration.php
+++ b/lib/Doctrine/ORM/Configuration.php
@@ -462,4 +462,27 @@ class Configuration extends \Doctrine\DBAL\Configuration
{
$this->_attributes['customDatetimeFunctions'] = array_change_key_case($functions);
}
+
+ /**
+ * Get the hydrator class for the given hydration mode name.
+ *
+ * @param string $modeName The hydration mode name.
+ * @return string $hydrator The hydrator class name.
+ */
+ public function getCustomHydrationMode($modeName)
+ {
+ return isset($this->_attributes['customHydrationModes'][$modeName]) ?
+ $this->_attributes['customHydrationModes'][$modeName] : null;
+ }
+
+ /**
+ * Add a custom hydration mode.
+ *
+ * @param string $modeName The hydration mode name.
+ * @param string $hydrator The hydrator class name.
+ */
+ public function addCustomHydrationMode($modeName, $hydrator)
+ {
+ $this->_attributes['customHydrationModes'][$modeName] = $hydrator;
+ }
}
\ No newline at end of file
diff --git a/lib/Doctrine/ORM/EntityManager.php b/lib/Doctrine/ORM/EntityManager.php
index 0ff16f640..566c353c2 100644
--- a/lib/Doctrine/ORM/EntityManager.php
+++ b/lib/Doctrine/ORM/EntityManager.php
@@ -616,6 +616,10 @@ class EntityManager
$hydrator = new Internal\Hydration\SingleScalarHydrator($this);
break;
default:
+ if ($class = $this->_config->getCustomHydrationMode($hydrationMode)) {
+ $hydrator = new $class($this);
+ break;
+ }
throw ORMException::invalidHydrationMode($hydrationMode);
}
diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php
index 48bbc996a..540162c76 100644
--- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php
+++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php
@@ -295,6 +295,9 @@ class ClassMetadata extends ClassMetadataInfo
if ($this->generatorType != self::GENERATOR_TYPE_NONE) {
$serialized[] = 'generatorType';
+ if ($this->generatorType == self::GENERATOR_TYPE_SEQUENCE) {
+ $serialized[] = 'sequenceGeneratorDefinition';
+ }
}
if ($this->isMappedSuperclass) {
diff --git a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php
index 7dc6cb8cd..5dbe6e431 100644
--- a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php
+++ b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php
@@ -1,7 +1,5 @@
* @author Jonathan Wage
+ * @author Benjamin Eberlei
*/
class DatabaseDriver implements Driver
{
- /** The SchemaManager. */
+ /**
+ * @var AbstractSchemaManager
+ */
private $_sm;
+
+ /**
+ * @var array
+ */
+ private $tables = null;
+
+ private $classes = array();
+
+ /**
+ * @var array
+ */
+ private $manyToManyTables = array();
/**
* Initializes a new AnnotationDriver that uses the given AnnotationReader for reading
@@ -53,27 +65,78 @@ class DatabaseDriver implements Driver
{
$this->_sm = $schemaManager;
}
+
+ private function reverseEngineerMappingFromDatabase()
+ {
+ if ($this->tables !== null) {
+ return;
+ }
+
+ foreach ($this->_sm->listTableNames() as $tableName) {
+ $tables[strtolower($tableName)] = $this->_sm->listTableDetails($tableName);
+ }
+
+ $this->tables = array();
+ foreach ($tables AS $name => $table) {
+ /* @var $table Table */
+ if ($this->_sm->getDatabasePlatform()->supportsForeignKeyConstraints()) {
+ $foreignKeys = $table->getForeignKeys();
+ } else {
+ $foreignKeys = array();
+ }
+
+ $allForeignKeyColumns = array();
+ foreach ($foreignKeys AS $foreignKey) {
+ $allForeignKeyColumns = array_merge($allForeignKeyColumns, $foreignKey->getLocalColumns());
+ }
+
+ $pkColumns = $table->getPrimaryKey()->getColumns();
+ sort($pkColumns);
+ sort($allForeignKeyColumns);
+
+ if ($pkColumns == $allForeignKeyColumns) {
+ if (count($table->getForeignKeys()) > 2) {
+ throw new \InvalidArgumentException("ManyToMany table '" . $name . "' with more or less than two foreign keys are not supported by the Database Reverese Engineering Driver.");
+ }
+
+ $this->manyToManyTables[$name] = $table;
+ } else {
+ $className = Inflector::classify($name);
+ $this->tables[$name] = $table;
+ $this->classes[$className] = $name;
+ }
+ }
+ }
/**
* {@inheritdoc}
*/
public function loadMetadataForClass($className, ClassMetadataInfo $metadata)
{
- $tableName = $className;
- $className = Inflector::classify($tableName);
+ $this->reverseEngineerMappingFromDatabase();
+
+ if (!isset($this->classes[$className])) {
+ throw new \InvalidArgumentException("Unknown class " . $className);
+ }
+
+ $tableName = Inflector::tableize($className);
$metadata->name = $className;
$metadata->table['name'] = $tableName;
- $columns = $this->_sm->listTableColumns($tableName);
+ $columns = $this->tables[$tableName]->getColumns();
+ $indexes = $this->tables[$tableName]->getIndexes();
if ($this->_sm->getDatabasePlatform()->supportsForeignKeyConstraints()) {
- $foreignKeys = $this->_sm->listTableForeignKeys($tableName);
+ $foreignKeys = $this->tables[$tableName]->getForeignKeys();
} else {
$foreignKeys = array();
}
- $indexes = $this->_sm->listTableIndexes($tableName);
+ $allForeignKeyColumns = array();
+ foreach ($foreignKeys AS $foreignKey) {
+ $allForeignKeyColumns = array_merge($allForeignKeyColumns, $foreignKey->getLocalColumns());
+ }
$ids = array();
$fieldMappings = array();
@@ -81,6 +144,8 @@ class DatabaseDriver implements Driver
$fieldMapping = array();
if (isset($indexes['primary']) && in_array($column->getName(), $indexes['primary']->getColumns())) {
$fieldMapping['id'] = true;
+ } else if (in_array($column->getName(), $allForeignKeyColumns)) {
+ continue;
}
$fieldMapping['fieldName'] = Inflector::camelize(strtolower($column->getName()));
@@ -116,15 +181,64 @@ class DatabaseDriver implements Driver
$metadata->mapField($fieldMapping);
}
- foreach ($foreignKeys as $foreignKey) {
- $cols = $foreignKey->getColumns();
- $localColumn = current($cols);
+ foreach ($this->manyToManyTables AS $manyTable) {
+ foreach ($manyTable->getForeignKeys() AS $foreignKey) {
+ if ($tableName == strtolower($foreignKey->getForeignTableName())) {
+ $myFk = $foreignKey;
+ foreach ($manyTable->getForeignKeys() AS $foreignKey) {
+ if ($foreignKey != $myFk) {
+ $otherFk = $foreignKey;
+ break;
+ }
+ }
+ $localColumn = current($myFk->getColumns());
+ $associationMapping = array();
+ $associationMapping['fieldName'] = Inflector::camelize(str_replace('_id', '', strtolower(current($otherFk->getColumns()))));
+ $associationMapping['targetEntity'] = Inflector::classify(strtolower($otherFk->getForeignTableName()));
+ if (current($manyTable->getColumns())->getName() == $localColumn) {
+ $associationMapping['inversedBy'] = Inflector::camelize(str_replace('_id', '', strtolower(current($myFk->getColumns()))));
+ $associationMapping['joinTable'] = array(
+ 'name' => strtolower($manyTable->getName()),
+ 'joinColumns' => array(),
+ 'inverseJoinColumns' => array(),
+ );
+
+ $fkCols = $myFk->getForeignColumns();
+ $cols = $myFk->getColumns();
+ for ($i = 0; $i < count($cols); $i++) {
+ $associationMapping['joinTable']['joinColumns'][] = array(
+ 'name' => $cols[$i],
+ 'referencedColumnName' => $fkCols[$i],
+ );
+ }
+
+ $fkCols = $otherFk->getForeignColumns();
+ $cols = $otherFk->getColumns();
+ for ($i = 0; $i < count($cols); $i++) {
+ $associationMapping['joinTable']['inverseJoinColumns'][] = array(
+ 'name' => $cols[$i],
+ 'referencedColumnName' => $fkCols[$i],
+ );
+ }
+ } else {
+ $associationMapping['mappedBy'] = Inflector::camelize(str_replace('_id', '', strtolower(current($myFk->getColumns()))));
+ }
+ $metadata->mapManyToMany($associationMapping);
+ break;
+ }
+ }
+ }
+
+ foreach ($foreignKeys as $foreignKey) {
+ $foreignTable = $foreignKey->getForeignTableName();
+ $cols = $foreignKey->getColumns();
$fkCols = $foreignKey->getForeignColumns();
+ $localColumn = current($cols);
$associationMapping = array();
- $associationMapping['fieldName'] = Inflector::camelize(str_ireplace('_id', '', $localColumn));
- $associationMapping['targetEntity'] = Inflector::classify($foreignKey->getForeignTableName());
+ $associationMapping['fieldName'] = Inflector::camelize(str_replace('_id', '', strtolower($localColumn)));
+ $associationMapping['targetEntity'] = Inflector::classify($foreignTable);
for ($i = 0; $i < count($cols); $i++) {
$associationMapping['joinColumns'][] = array(
@@ -132,7 +246,6 @@ class DatabaseDriver implements Driver
'referencedColumnName' => $fkCols[$i],
);
}
-
$metadata->mapManyToOne($associationMapping);
}
}
@@ -146,16 +259,16 @@ class DatabaseDriver implements Driver
}
/**
- * {@inheritDoc}
+ * Return all the class names supported by this driver.
+ *
+ * IMPORTANT: This method must return an array of class not tables names.
+ *
+ * @return array
*/
public function getAllClassNames()
{
- $classes = array();
-
- foreach ($this->_sm->listTables() as $table) {
- $classes[] = $table->getName(); // TODO: Why is this not correct? Inflector::classify($table->getName());
- }
+ $this->reverseEngineerMappingFromDatabase();
- return $classes;
+ return array_keys($this->classes);
}
}
\ No newline at end of file
diff --git a/lib/Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php b/lib/Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php
index 537aaf3a3..fb7871c74 100644
--- a/lib/Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php
+++ b/lib/Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php
@@ -119,7 +119,7 @@ final class JoinTable extends Annotation {
}
final class SequenceGenerator extends Annotation {
public $sequenceName;
- public $allocationSize = 10;
+ public $allocationSize = 1;
public $initialValue = 1;
}
final class ChangeTrackingPolicy extends Annotation {}
diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php
index d01a46b3c..575fb2230 100644
--- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php
+++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php
@@ -106,21 +106,25 @@ class XmlDriver extends AbstractFileDriver
// Evaluate
if (isset($xmlRoot->indexes)) {
+ $metadata->table['indexes'] = array();
foreach ($xmlRoot->indexes->index as $index) {
- if (is_string($index['columns'])) {
- $columns = explode(',', $index['columns']);
- } else {
- $columns = $index['columns'];
- }
+ $columns = explode(',', (string)$index['columns']);
- $metadata->table['indexes'][$index['name']] = array(
- 'columns' => $columns
- );
+ if (isset($index['name'])) {
+ $metadata->table['indexes'][(string)$index['name']] = array(
+ 'columns' => $columns
+ );
+ } else {
+ $metadata->table['indexes'][] = array(
+ 'columns' => $columns
+ );
+ }
}
}
// Evaluate
if (isset($xmlRoot->{'unique-constraints'})) {
+ $metadata->table['uniqueConstraints'] = array();
foreach ($xmlRoot->{'unique-constraints'}->{'unique-constraint'} as $unique) {
$columns = explode(',', (string)$unique['columns']);
diff --git a/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php
index 22388f4fb..08a7452a3 100644
--- a/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php
+++ b/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php
@@ -513,10 +513,12 @@ class BasicEntityPersister
$targetClass = $this->_em->getClassMetadata($assoc->targetEntityName);
if ($assoc->isOwningSide) {
+ $isInverseSingleValued = $assoc->inversedBy && ! $targetClass->isCollectionValuedAssociation($assoc->inversedBy);
+
// Mark inverse side as fetched in the hints, otherwise the UoW would
// try to load it in a separate query (remember: to-one inverse sides can not be lazy).
$hints = array();
- if ($assoc->inversedBy) {
+ if ($isInverseSingleValued) {
$hints['fetched'][$targetClass->name][$assoc->inversedBy] = true;
if ($targetClass->subClasses) {
foreach ($targetClass->subClasses as $targetSubclassName) {
@@ -533,7 +535,7 @@ class BasicEntityPersister
$targetEntity = $this->load($identifier, $targetEntity, $assoc, $hints);
// Complete bidirectional association, if necessary
- if ($targetEntity !== null && $assoc->inversedBy && ! $targetClass->isCollectionValuedAssociation($assoc->inversedBy)) {
+ if ($targetEntity !== null && $isInverseSingleValued) {
$targetClass->reflFields[$assoc->inversedBy]->setValue($targetEntity, $sourceEntity);
}
} else {
diff --git a/lib/Doctrine/ORM/Query.php b/lib/Doctrine/ORM/Query.php
index ac0d5bdd6..18087ddd0 100644
--- a/lib/Doctrine/ORM/Query.php
+++ b/lib/Doctrine/ORM/Query.php
@@ -244,7 +244,7 @@ final class Query extends AbstractQuery
if (is_object($value) && $this->_em->getMetadataFactory()->hasMetadataFor(get_class($value))) {
$values = $this->_em->getUnitOfWork()->getEntityIdentifier($value);
$sqlPositions = $paramMappings[$key];
- $sqlParams = array_merge($sqlParams, array_combine((array)$sqlPositions, $values));
+ $sqlParams += array_combine((array)$sqlPositions, $values);
} else {
foreach ($paramMappings[$key] as $position) {
$sqlParams[$position] = $value;
diff --git a/lib/Doctrine/ORM/Query/Expr.php b/lib/Doctrine/ORM/Query/Expr.php
index 588333f37..e071d325e 100644
--- a/lib/Doctrine/ORM/Query/Expr.php
+++ b/lib/Doctrine/ORM/Query/Expr.php
@@ -37,7 +37,7 @@ class Expr
{
/**
* Creates a conjunction of the given boolean expressions.
- *
+ *
* Example:
*
* [php]
@@ -55,7 +55,7 @@ class Expr
/**
* Creates a disjunction of the given boolean expressions.
- *
+ *
* Example:
*
* [php]
@@ -70,10 +70,10 @@ class Expr
{
return new Expr\Orx(func_get_args());
}
-
+
/**
* Creates an ASCending order expression.
- *
+ *
* @param $sort
* @return OrderBy
*/
@@ -81,10 +81,10 @@ class Expr
{
return new Expr\OrderBy($expr, 'ASC');
}
-
+
/**
* Creates a DESCending order expression.
- *
+ *
* @param $sort
* @return OrderBy
*/
@@ -95,7 +95,7 @@ class Expr
/**
* Creates an equality comparison expression with the given arguments.
- *
+ *
* First argument is considered the left expression and the second is the right expression.
* When converted to string, it will generated a = . Example:
*
@@ -325,7 +325,7 @@ class Expr
/**
* Creates a product mathematical expression with the given arguments.
- *
+ *
* First argument is considered the left expression and the second is the right expression.
* When converted to string, it will generated a * . Example:
*
@@ -470,9 +470,13 @@ class Expr
* @param integer $len Length of crop. May accept negative values.
* @return Expr\Func
*/
- public function substring($x, $from, $len)
+ public function substring($x, $from, $len = null)
{
- return new Expr\Func('SUBSTRING', array($x, $from, $len));
+ $args = array($x, $from);
+ if (null !== $len) {
+ $args[] = $len;
+ }
+ return new Expr\Func('SUBSTRING', $args);
}
/**
@@ -518,16 +522,16 @@ class Expr
{
return new Expr\Literal($this->_quoteLiteral($literal));
}
-
+
/**
* Quotes a literal value, if necessary, according to the DQL syntax.
- *
+ *
* @param mixed $literal The literal value.
* @return string
*/
private function _quoteLiteral($literal)
{
- if (is_numeric($literal)) {
+ if (is_numeric($literal) && !is_string($literal)) {
return (string) $literal;
} else {
return "'" . str_replace("'", "''", $literal) . "'";
@@ -557,4 +561,4 @@ class Expr
{
return new Expr\Func('TRIM', $x);
}
-}
\ No newline at end of file
+}
diff --git a/lib/Doctrine/ORM/Query/Expr/Select.php b/lib/Doctrine/ORM/Query/Expr/Select.php
index fb049916f..a310a0c7b 100644
--- a/lib/Doctrine/ORM/Query/Expr/Select.php
+++ b/lib/Doctrine/ORM/Query/Expr/Select.php
@@ -36,4 +36,7 @@ class Select extends Base
{
protected $_preSeparator = '';
protected $_postSeparator = '';
+ protected $_allowedClasses = array(
+ 'Doctrine\ORM\Query\Expr\Func'
+ );
}
\ No newline at end of file
diff --git a/lib/Doctrine/ORM/Tools/Console/Command/ConvertDoctrine1SchemaCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/ConvertDoctrine1SchemaCommand.php
index a82824a17..42985393b 100644
--- a/lib/Doctrine/ORM/Tools/Console/Command/ConvertDoctrine1SchemaCommand.php
+++ b/lib/Doctrine/ORM/Tools/Console/Command/ConvertDoctrine1SchemaCommand.php
@@ -25,7 +25,8 @@ use Symfony\Components\Console\Input\InputArgument,
Symfony\Components\Console\Input\InputOption,
Symfony\Components\Console,
Doctrine\ORM\Tools\Export\ClassMetadataExporter,
- Doctrine\ORM\Tools\ConvertDoctrine1Schema;
+ Doctrine\ORM\Tools\ConvertDoctrine1Schema,
+ Doctrine\ORM\Tools\EntityGenerator;
/**
* Command to convert a Doctrine 1 schema to a Doctrine 2 mapping file.
@@ -41,6 +42,56 @@ use Symfony\Components\Console\Input\InputArgument,
*/
class ConvertDoctrine1SchemaCommand extends Console\Command\Command
{
+ /**
+ * @var EntityGenerator
+ */
+ private $entityGenerator = null;
+
+ /**
+ * @var ClassMetadataExporter
+ */
+ private $metadataExporter = null;
+
+ /**
+ * @return EntityGenerator
+ */
+ public function getEntityGenerator()
+ {
+ if ($this->entityGenerator == null) {
+ $this->entityGenerator = new EntityGenerator();
+ }
+
+ return $this->entityGenerator;
+ }
+
+ /**
+ * @param EntityGenerator $entityGenerator
+ */
+ public function setEntityGenerator(EntityGenerator $entityGenerator)
+ {
+ $this->entityGenerator = $entityGenerator;
+ }
+
+ /**
+ * @return ClassMetadataExporter
+ */
+ public function getMetadataExporter()
+ {
+ if ($this->metadataExporter == null) {
+ $this->metadataExporter = new ClassMetadataExporter();
+ }
+
+ return $this->metadataExporter;
+ }
+
+ /**
+ * @param ClassMetadataExporter $metadataExporter
+ */
+ public function setMetadataExporter(ClassMetadataExporter $metadataExporter)
+ {
+ $this->metadataExporter = $metadataExporter;
+ }
+
/**
* @see Console\Command\Command
*/
@@ -90,6 +141,27 @@ EOT
// Process source directories
$fromPaths = array_merge(array($input->getArgument('from-path')), $input->getOption('from'));
+ // Process destination directory
+ $destPath = realpath($input->getArgument('dest-path'));
+
+ $toType = $input->getArgument('to-type');
+ $extend = $input->getOption('extend');
+ $numSpaces = $input->getOption('num-spaces');
+
+ $this->convertDoctrine1Schema($em, $fromPaths, $destPath, $toType, $numSpaces, $extend, $output);
+ }
+
+ /**
+ * @param \Doctrine\ORM\EntityManager $em
+ * @param array $fromPaths
+ * @param string $destPath
+ * @param string $toType
+ * @param int $numSpaces
+ * @param string|null $extend
+ * @param Console\Output\OutputInterface $output
+ */
+ public function convertDoctrine1Schema($em, $fromPaths, $destPath, $toType, $numSpaces, $extend, $output)
+ {
foreach ($fromPaths as &$dirName) {
$dirName = realpath($dirName);
@@ -104,9 +176,6 @@ EOT
}
}
- // Process destination directory
- $destPath = realpath($input->getArgument('dest-path'));
-
if ( ! file_exists($destPath)) {
throw new \InvalidArgumentException(
sprintf("Doctrine 2.X mapping destination directory '%s' does not exist.", $destPath)
@@ -117,18 +186,16 @@ EOT
);
}
- $toType = $input->getArgument('to-type');
-
- $cme = new ClassMetadataExporter();
+ $cme = $this->getMetadataExporter();
$exporter = $cme->getExporter($toType, $destPath);
if (strtolower($toType) === 'annotation') {
- $entityGenerator = new EntityGenerator();
+ $entityGenerator = $this->getEntityGenerator();
$exporter->setEntityGenerator($entityGenerator);
- $entityGenerator->setNumSpaces($input->getOption('num-spaces'));
+ $entityGenerator->setNumSpaces($numSpaces);
- if (($extend = $input->getOption('extend')) !== null) {
+ if ($extend !== null) {
$entityGenerator->setClassToExtend($extend);
}
}
diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php
index b8a47c64d..2af25891f 100644
--- a/lib/Doctrine/ORM/Tools/EntityGenerator.php
+++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php
@@ -698,6 +698,10 @@ public function ()
$typeOptions[] = 'targetEntity="' . $associationMapping->targetEntityName . '"';
}
+ if (isset($associationMapping->inversedBy)) {
+ $typeOptions[] = 'inversedBy="' . $associationMapping->inversedBy . '"';
+ }
+
if (isset($associationMapping->mappedBy)) {
$typeOptions[] = 'mappedBy="' . $associationMapping->mappedBy . '"';
}
diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php
index 201d1072d..831c28f4a 100644
--- a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php
+++ b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php
@@ -113,6 +113,7 @@ class PhpExporter extends AbstractExporter
$method = 'mapOneToOne';
$oneToOneMappingArray = array(
'mappedBy' => $associationMapping->mappedBy,
+ 'inversedBy' => $associationMapping->inversedBy,
'joinColumns' => $associationMapping->joinColumns,
'orphanRemoval' => $associationMapping->orphanRemoval,
);
diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php
index 23466a1b9..63f28ffc9 100644
--- a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php
+++ b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php
@@ -196,6 +196,9 @@ class XmlExporter extends AbstractExporter
if (isset($associationMapping->mappedBy)) {
$associationMappingXml->addAttribute('mapped-by', $associationMapping->mappedBy);
}
+ if (isset($associationMapping->inversedBy)) {
+ $associationMappingXml->addAttribute('inversed-by', $associationMapping->inversedBy);
+ }
if (isset($associationMapping->orphanRemoval)) {
$associationMappingXml->addAttribute('orphan-removal', $associationMapping->orphanRemoval);
}
@@ -266,19 +269,19 @@ class XmlExporter extends AbstractExporter
}
$cascade = array();
if ($associationMapping->isCascadeRemove) {
- $cascade[] = 'remove';
+ $cascade[] = 'cascade-remove';
}
if ($associationMapping->isCascadePersist) {
- $cascade[] = 'persist';
+ $cascade[] = 'cascade-persist';
}
if ($associationMapping->isCascadeRefresh) {
- $cascade[] = 'refresh';
+ $cascade[] = 'cascade-refresh';
}
if ($associationMapping->isCascadeMerge) {
- $cascade[] = 'merge';
+ $cascade[] = 'cascade-merge';
}
if ($associationMapping->isCascadeDetach) {
- $cascade[] = 'detach';
+ $cascade[] = 'cascade-detach';
}
if ($cascade) {
$cascadeXml = $associationMappingXml->addChild('cascade');
diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/YamlExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/YamlExporter.php
index 0eb749ec6..13094a1d9 100644
--- a/lib/Doctrine/ORM/Tools/Export/Driver/YamlExporter.php
+++ b/lib/Doctrine/ORM/Tools/Export/Driver/YamlExporter.php
@@ -168,6 +168,7 @@ class YamlExporter extends AbstractExporter
}
$oneToOneMappingArray = array(
'mappedBy' => $associationMapping->mappedBy,
+ 'inversedBy' => $associationMapping->inversedBy,
'joinColumns' => $newJoinColumns,
'orphanRemoval' => $associationMapping->orphanRemoval,
);
@@ -177,6 +178,7 @@ class YamlExporter extends AbstractExporter
} else if ($associationMapping instanceof OneToManyMapping) {
$oneToManyMappingArray = array(
'mappedBy' => $associationMapping->mappedBy,
+ 'inversedBy' => $associationMapping->inversedBy,
'orphanRemoval' => $associationMapping->orphanRemoval,
'orderBy' => $associationMapping->orderBy
);
@@ -185,8 +187,9 @@ class YamlExporter extends AbstractExporter
$array['oneToMany'][$name] = $associationMappingArray;
} else if ($associationMapping instanceof ManyToManyMapping) {
$manyToManyMappingArray = array(
- 'mappedBy' => $associationMapping->mappedBy,
- 'joinTable' => $associationMapping->joinTable,
+ 'mappedBy' => $associationMapping->mappedBy,
+ 'inversedBy' => $associationMapping->inversedBy,
+ 'joinTable' => $associationMapping->joinTable,
'orderBy' => $associationMapping->orderBy
);
diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php
index 828bd19ed..8287d1fa7 100644
--- a/lib/Doctrine/ORM/UnitOfWork.php
+++ b/lib/Doctrine/ORM/UnitOfWork.php
@@ -832,6 +832,17 @@ class UnitOfWork implements PropertyChangedListener
$calc->addClass($targetClass);
}
$calc->addDependency($targetClass, $class);
+ // If the target class has mapped subclasses,
+ // these share the same dependency.
+ if ($targetClass->subClasses) {
+ foreach ($targetClass->subClasses as $subClassName) {
+ $targetSubClass = $this->_em->getClassMetadata($subClassName);
+ if ( ! $calc->hasClass($subClassName)) {
+ $calc->addClass($targetSubClass);
+ }
+ $calc->addDependency($targetSubClass, $class);
+ }
+ }
}
}
}
diff --git a/lib/Doctrine/Common/Version.php b/lib/Doctrine/ORM/Version.php
similarity index 96%
rename from lib/Doctrine/Common/Version.php
rename to lib/Doctrine/ORM/Version.php
index c01da049f..374acf884 100644
--- a/lib/Doctrine/Common/Version.php
+++ b/lib/Doctrine/ORM/Version.php
@@ -17,7 +17,7 @@
* .
*/
-namespace Doctrine\Common;
+namespace Doctrine\ORM;
/**
* Class to store and retrieve the version of Doctrine
@@ -36,7 +36,7 @@ class Version
/**
* Current Doctrine Version
*/
- const VERSION = '2.0-DEV';
+ const VERSION = '2.0.0BETA3-DEV';
/**
* Compares a Doctrine version with the current one.
diff --git a/lib/vendor/doctrine-common b/lib/vendor/doctrine-common
new file mode 160000
index 000000000..30eac01b1
--- /dev/null
+++ b/lib/vendor/doctrine-common
@@ -0,0 +1 @@
+Subproject commit 30eac01b12afc318bc142b79a339ce0b9fb81239
diff --git a/lib/vendor/doctrine-dbal b/lib/vendor/doctrine-dbal
new file mode 160000
index 000000000..1142739e1
--- /dev/null
+++ b/lib/vendor/doctrine-dbal
@@ -0,0 +1 @@
+Subproject commit 1142739e17f495adc7563c1bb18eab7f3465a231
diff --git a/phpdoc.ini b/phpdoc.ini
deleted file mode 100644
index 2e2d320ce..000000000
--- a/phpdoc.ini
+++ /dev/null
@@ -1,126 +0,0 @@
-; Default configuration file for PHPDoctor
-
-; This config file will cause PHPDoctor to generate API documentation of
-; itself.
-
-
-; PHPDoctor settings
-; -----------------------------------------------------------------------------
-
-; Names of files to parse. This can be a single filename, or a comma separated
-; list of filenames. Wildcards are allowed.
-
-;files = "*.php"
-files = *.php
-
-; Names of files or directories to ignore. This can be a single filename, or a
-; comma separated list of filenames. Wildcards are NOT allowed.
-
-ignore = "CVS, .svn, .git, _compiled, vendor"
-
-; The directory to look for files in, if not used the PHPDoctor will look in
-; the current directory (the directory it is run from).
-
-source_path = "./lib"
-
-; If you do not want PHPDoctor to look in each sub directory for files
-; uncomment this line.
-
-;subdirs = off
-
-; Set how loud PHPDoctor is as it runs. Quiet mode suppresses all output other
-; than warnings and errors. Verbose mode outputs additional messages during
-; execution.
-
-;quiet = on
-;verbose = on
-
-; Select the doclet to use for generating output.
-
-doclet = standard
-;doclet = debug
-
-; The directory to find the doclet in. Doclets are expected to be in a
-; directory named after themselves at the location given.
-
-;doclet_path = ./doclets
-
-; The directory to find taglets in. Taglets allow you to make PHPDoctor handle
-; new tags and to alter the behavour of existing tags and their output.
-
-;taglet_path = ./taglets
-
-; If the code you are parsing does not use package tags or not all elements
-; have package tags, use this setting to place unbound elements into a
-; particular package.
-
-default_package = "Doctrine"
-
-; Specifies the name of a HTML file containing text for the overview
-; documentation to be placed on the overview page. The path is relative to
-; "source_path" unless an absolute path is given.
-
-overview = readme.html
-
-; Package comments will be looked for in a file named package.html in the same
-; directory as the first source file parsed in that package or in the directory
-; given below. If package comments are placed in the directory given below then
-; they should be named ".html".
-
-package_comment_dir = ./
-
-; Parse out global variables and/or global constants?
-
-;globals = off
-;constants = off
-
-; Generate documentation for all class members
-
-;private = on
-
-; Generate documentation for public and protected class members
-
-protected = on
-
-; Generate documentation for only public class members
-
-;public = on
-
-; Use the PEAR compatible handling of the docblock first sentence
-
-;pear_compat = on
-
-; Standard doclet settings
-; -----------------------------------------------------------------------------
-
-; The directory to place generated documentation in. If the given path is
-; relative to it will be relative to "source_path".
-
-d = "api"
-
-; Specifies the title to be placed in the HTML tag.
-
-windowtitle = "Doctrine"
-
-; Specifies the title to be placed near the top of the overview summary file.
-
-doctitle = "Doctrine: PHP Object-Relational Mapper"
-
-; Specifies the header text to be placed at the top of each output file. The
-; header will be placed to the right of the upper navigation bar.
-
-header = "Doctrine"
-
-; Specifies the footer text to be placed at the bottom of each output file. The
-; footer will be placed to the right of the lower navigation bar.
-
-footer = "Doctrine"
-
-; Specifies the text to be placed at the bottom of each output file. The text
-; will be placed at the bottom of the page, below the lower navigation bar.
-
-;bottom = "This document was generated by PHPDoctor: The PHP Documentation Creator"
-
-; Create a class tree?
-
-;tree = off
diff --git a/tests/Doctrine/Tests/AllTests.php b/tests/Doctrine/Tests/AllTests.php
index c326c7dd6..032366d04 100644
--- a/tests/Doctrine/Tests/AllTests.php
+++ b/tests/Doctrine/Tests/AllTests.php
@@ -22,9 +22,6 @@ class AllTests
public static function suite()
{
$suite = new DoctrineTestSuite('Doctrine Tests');
-
- $suite->addTest(Common\AllTests::suite());
- $suite->addTest(DBAL\AllTests::suite());
$suite->addTest(ORM\AllTests::suite());
return $suite;
diff --git a/tests/Doctrine/Tests/Common/AllTests.php b/tests/Doctrine/Tests/Common/AllTests.php
deleted file mode 100644
index db6e81ffa..000000000
--- a/tests/Doctrine/Tests/Common/AllTests.php
+++ /dev/null
@@ -1,39 +0,0 @@
-addTestSuite('Doctrine\Tests\Common\ClassLoaderTest');
- $suite->addTestSuite('Doctrine\Tests\Common\EventManagerTest');
-
- $suite->addTest(Collections\AllTests::suite());
- $suite->addTest(Annotations\AllTests::suite());
- $suite->addTest(Cache\AllTests::suite());
-
- return $suite;
- }
-}
-
-if (PHPUnit_MAIN_METHOD == 'Common_AllTests::main') {
- AllTests::main();
-}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/Common/Annotations/AllTests.php b/tests/Doctrine/Tests/Common/Annotations/AllTests.php
deleted file mode 100644
index f7dcfbb9e..000000000
--- a/tests/Doctrine/Tests/Common/Annotations/AllTests.php
+++ /dev/null
@@ -1,32 +0,0 @@
-addTestSuite('Doctrine\Tests\Common\Annotations\LexerTest');
- $suite->addTestSuite('Doctrine\Tests\Common\Annotations\ParserTest');
- $suite->addTestSuite('Doctrine\Tests\Common\Annotations\AnnotationReaderTest');
-
- return $suite;
- }
-}
-
-if (PHPUnit_MAIN_METHOD == 'Common_Annotations_AllTests::main') {
- AllTests::main();
-}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/Common/Annotations/AnnotationReaderTest.php b/tests/Doctrine/Tests/Common/Annotations/AnnotationReaderTest.php
deleted file mode 100644
index 3f3ece930..000000000
--- a/tests/Doctrine/Tests/Common/Annotations/AnnotationReaderTest.php
+++ /dev/null
@@ -1,188 +0,0 @@
-setDefaultAnnotationNamespace('Doctrine\Tests\Common\Annotations\\');
-
- $class = new \ReflectionClass('Doctrine\Tests\Common\Annotations\DummyClass');
- $classAnnots = $reader->getClassAnnotations($class);
-
- $annotName = 'Doctrine\Tests\Common\Annotations\DummyAnnotation';
- $this->assertEquals(1, count($classAnnots));
- $this->assertTrue($classAnnots[$annotName] instanceof DummyAnnotation);
- $this->assertEquals("hello", $classAnnots[$annotName]->dummyValue);
-
- $field1Prop = $class->getProperty('field1');
- $propAnnots = $reader->getPropertyAnnotations($field1Prop);
- $this->assertEquals(1, count($propAnnots));
- $this->assertTrue($propAnnots[$annotName] instanceof DummyAnnotation);
- $this->assertEquals("fieldHello", $propAnnots[$annotName]->dummyValue);
-
- $getField1Method = $class->getMethod('getField1');
- $methodAnnots = $reader->getMethodAnnotations($getField1Method);
- $this->assertEquals(1, count($methodAnnots));
- $this->assertTrue($methodAnnots[$annotName] instanceof DummyAnnotation);
- $this->assertEquals(array(1, 2, "three"), $methodAnnots[$annotName]->value);
-
- $field2Prop = $class->getProperty('field2');
- $propAnnots = $reader->getPropertyAnnotations($field2Prop);
- $this->assertEquals(1, count($propAnnots));
- $this->assertTrue(isset($propAnnots['Doctrine\Tests\Common\Annotations\DummyJoinTable']));
- $joinTableAnnot = $propAnnots['Doctrine\Tests\Common\Annotations\DummyJoinTable'];
- $this->assertEquals(1, count($joinTableAnnot->joinColumns));
- $this->assertEquals(1, count($joinTableAnnot->inverseJoinColumns));
- $this->assertTrue($joinTableAnnot->joinColumns[0] instanceof DummyJoinColumn);
- $this->assertTrue($joinTableAnnot->inverseJoinColumns[0] instanceof DummyJoinColumn);
- $this->assertEquals('col1', $joinTableAnnot->joinColumns[0]->name);
- $this->assertEquals('col2', $joinTableAnnot->joinColumns[0]->referencedColumnName);
- $this->assertEquals('col3', $joinTableAnnot->inverseJoinColumns[0]->name);
- $this->assertEquals('col4', $joinTableAnnot->inverseJoinColumns[0]->referencedColumnName);
-
- $dummyAnnot = $reader->getMethodAnnotation($class->getMethod('getField1'), 'Doctrine\Tests\Common\Annotations\DummyAnnotation');
- $this->assertEquals('', $dummyAnnot->dummyValue);
- $this->assertEquals(array(1, 2, 'three'), $dummyAnnot->value);
-
- $dummyAnnot = $reader->getPropertyAnnotation($class->getProperty('field1'), 'Doctrine\Tests\Common\Annotations\DummyAnnotation');
- $this->assertEquals('fieldHello', $dummyAnnot->dummyValue);
-
- $classAnnot = $reader->getClassAnnotation($class, 'Doctrine\Tests\Common\Annotations\DummyAnnotation');
- $this->assertEquals('hello', $classAnnot->dummyValue);
- }
-
- public function testClassSyntaxErrorContext()
- {
- $this->setExpectedException(
- "Doctrine\Common\Annotations\AnnotationException",
- "[Syntax Error] Expected Doctrine\Common\Annotations\Lexer::T_IDENTIFIER, got ')' at position 18 in class ".
- "Doctrine\Tests\Common\Annotations\DummyClassSyntaxError."
- );
-
- $class = new \ReflectionClass('\Doctrine\Tests\Common\Annotations\DummyClassSyntaxError');
-
- $reader = $this->createAnnotationReader();
- $reader->getClassAnnotations($class);
- }
-
- public function testMethodSyntaxErrorContext()
- {
- $this->setExpectedException(
- "Doctrine\Common\Annotations\AnnotationException",
- "[Syntax Error] Expected Doctrine\Common\Annotations\Lexer::T_IDENTIFIER, got ')' at position 18 in ".
- "method Doctrine\Tests\Common\Annotations\DummyClassMethodSyntaxError::foo()."
- );
-
- $class = new \ReflectionClass('\Doctrine\Tests\Common\Annotations\DummyClassMethodSyntaxError');
- $method = $class->getMethod('foo');
-
- $reader = $this->createAnnotationReader();
- $reader->getMethodAnnotations($method);
- }
-
- public function testPropertySyntaxErrorContext()
- {
- $this->setExpectedException(
- "Doctrine\Common\Annotations\AnnotationException",
- "[Syntax Error] Expected Doctrine\Common\Annotations\Lexer::T_IDENTIFIER, got ')' at position 18 in ".
- "property Doctrine\Tests\Common\Annotations\DummyClassPropertySyntaxError::\$foo."
- );
-
- $class = new \ReflectionClass('\Doctrine\Tests\Common\Annotations\DummyClassPropertySyntaxError');
- $property = $class->getProperty('foo');
-
- $reader = $this->createAnnotationReader();
- $reader->getPropertyAnnotations($property);
- }
-
- public function createAnnotationReader()
- {
- $reader = new AnnotationReader(new \Doctrine\Common\Cache\ArrayCache);
- $reader->setDefaultAnnotationNamespace('Doctrine\Tests\Common\Annotations\\');
- return $reader;
- }
-}
-
-/**
- * A description of this class.
- *
- * @author robo
- * @since 2.0
- * @DummyAnnotation(dummyValue="hello")
- */
-class DummyClass {
- /**
- * A nice property.
- *
- * @var mixed
- * @DummyAnnotation(dummyValue="fieldHello")
- */
- private $field1;
-
- /**
- * @DummyJoinTable(name="join_table",
- * joinColumns={
- * @DummyJoinColumn(name="col1", referencedColumnName="col2")
- * },
- * inverseJoinColumns={
- * @DummyJoinColumn(name="col3", referencedColumnName="col4")
- * })
- */
- private $field2;
-
- /**
- * Gets the value of field1.
- *
- * @return mixed
- * @DummyAnnotation({1,2,"three"})
- */
- public function getField1() {
- }
-}
-
-class DummyAnnotation extends \Doctrine\Common\Annotations\Annotation {
- public $dummyValue;
-}
-class DummyJoinColumn extends \Doctrine\Common\Annotations\Annotation {
- public $name;
- public $referencedColumnName;
-}
-class DummyJoinTable extends \Doctrine\Common\Annotations\Annotation {
- public $name;
- public $joinColumns;
- public $inverseJoinColumns;
-}
-
-/**
- * @DummyAnnotation(@)
- */
-class DummyClassSyntaxError
-{
-
-}
-
-class DummyClassMethodSyntaxError
-{
- /**
- * @DummyAnnotation(@)
- */
- public function foo()
- {
-
- }
-}
-
-class DummyClassPropertySyntaxError
-{
- /**
- * @DummyAnnotation(@)
- */
- public $foo;
-}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/Common/Annotations/LexerTest.php b/tests/Doctrine/Tests/Common/Annotations/LexerTest.php
deleted file mode 100644
index 01acc8dc5..000000000
--- a/tests/Doctrine/Tests/Common/Annotations/LexerTest.php
+++ /dev/null
@@ -1,29 +0,0 @@
-setInput("@Name");
- $this->assertNull($lexer->token);
- $this->assertNull($lexer->lookahead);
-
- $this->assertTrue($lexer->moveNext());
- $this->assertNull($lexer->token);
- $this->assertEquals('@', $lexer->lookahead['value']);
-
- $this->assertTrue($lexer->moveNext());
- $this->assertEquals('@', $lexer->token['value']);
- $this->assertEquals('Name', $lexer->lookahead['value']);
-
- $this->assertFalse($lexer->moveNext());
- }
-}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/Common/Annotations/ParserTest.php b/tests/Doctrine/Tests/Common/Annotations/ParserTest.php
deleted file mode 100644
index db043f35b..000000000
--- a/tests/Doctrine/Tests/Common/Annotations/ParserTest.php
+++ /dev/null
@@ -1,187 +0,0 @@
-createTestParser();
-
- // Marker annotation
- $result = $parser->parse("@Name");
- $annot = $result['Doctrine\Tests\Common\Annotations\Name'];
- $this->assertTrue($annot instanceof Name);
- $this->assertNull($annot->value);
- $this->assertNull($annot->foo);
-
- // Associative arrays
- $result = $parser->parse('@Name(foo={"key1" = "value1"})');
- $annot = $result['Doctrine\Tests\Common\Annotations\Name'];
- $this->assertNull($annot->value);
- $this->assertTrue(is_array($annot->foo));
- $this->assertTrue(isset($annot->foo['key1']));
-
- // Numerical arrays
- $result = $parser->parse('@Name({2="foo", 4="bar"})');
- $annot = $result['Doctrine\Tests\Common\Annotations\Name'];
- $this->assertTrue(is_array($annot->value));
- $this->assertEquals('foo', $annot->value[2]);
- $this->assertEquals('bar', $annot->value[4]);
- $this->assertFalse(isset($annot->value[0]));
- $this->assertFalse(isset($annot->value[1]));
- $this->assertFalse(isset($annot->value[3]));
-
- // Nested arrays with nested annotations
- $result = $parser->parse('@Name(foo={1,2, {"key"=@Name}})');
- $annot = $result['Doctrine\Tests\Common\Annotations\Name'];
-
- $this->assertTrue($annot instanceof Name);
- $this->assertNull($annot->value);
- $this->assertEquals(3, count($annot->foo));
- $this->assertEquals(1, $annot->foo[0]);
- $this->assertEquals(2, $annot->foo[1]);
- $this->assertTrue(is_array($annot->foo[2]));
-
- $nestedArray = $annot->foo[2];
- $this->assertTrue(isset($nestedArray['key']));
- $this->assertTrue($nestedArray['key'] instanceof Name);
-
- // Complete docblock
- $docblock = <<parse($docblock);
- $this->assertEquals(1, count($result));
- $annot = $result['Doctrine\Tests\Common\Annotations\Name'];
- $this->assertTrue($annot instanceof Name);
- $this->assertEquals("bar", $annot->foo);
- $this->assertNull($annot->value);
- }
-
- public function testNamespacedAnnotations()
- {
- $parser = new Parser;
-
- $docblock = <<parse($docblock);
- $this->assertEquals(1, count($result));
- $annot = $result['Doctrine\Tests\Common\Annotations\Name'];
- $this->assertTrue($annot instanceof Name);
- $this->assertEquals("bar", $annot->foo);
- }
-
- /**
- * @group DDC-77
- */
- public function testAnnotationWithoutClassIsIgnoredWithoutWarning()
- {
- $parser = new Parser();
- $result = $parser->parse("@param");
-
- $this->assertEquals(0, count($result));
- }
-
- public function testAnnotationDontAcceptSingleQuotes()
- {
- $this->setExpectedException(
- 'Doctrine\Common\Annotations\AnnotationException',
- "[Syntax Error] Expected PlainValue, got ''' at position 10."
- );
-
- $parser = $this->createTestParser();
- $parser->parse("@Name(foo='bar')");
- }
-
- /**
- * @group parse
- */
- public function testAnnotationNamespaceAlias()
- {
- $parser = $this->createTestParser();
- $parser->setAnnotationNamespaceAlias('Doctrine\Tests\Common\Annotations\\', 'alias');
- $docblock = <<parse($docblock);
- $this->assertEquals(1, count($result));
- $annot = $result['Doctrine\Tests\Common\Annotations\Name'];
- $this->assertTrue($annot instanceof Name);
- $this->assertEquals("stuff", $annot->foo);
- }
-
- public function createTestParser()
- {
- $parser = new Parser();
- $parser->setDefaultAnnotationNamespace('Doctrine\Tests\Common\Annotations\\');
- return $parser;
- }
-
- /**
- * @group DDC-78
- */
- public function testSyntaxErrorWithContextDescription()
- {
- $this->setExpectedException(
- 'Doctrine\Common\Annotations\AnnotationException',
- "[Syntax Error] Expected PlainValue, got ''' at position 10 ".
- "in class \Doctrine\Tests\Common\Annotations\Name"
- );
-
- $parser = $this->createTestParser();
- $parser->parse("@Name(foo='bar')", "class \Doctrine\Tests\Common\Annotations\Name");
- }
-
- /**
- * @group DDC-183
- */
- public function testSyntaxErrorWithUnknownCharacters()
- {
- $docblock = <<setInput(trim($docblock, '/ *'));
- //var_dump($lexer);
-
- try {
- $parser = $this->createTestParser();
- $result = $parser->parse($docblock);
- } catch (Exception $e) {
- $this->fail($e->getMessage());
- }
- }
-}
-
-class Name extends \Doctrine\Common\Annotations\Annotation {
- public $foo;
-}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/Common/Cache/AllTests.php b/tests/Doctrine/Tests/Common/Cache/AllTests.php
deleted file mode 100644
index d3e6f4d77..000000000
--- a/tests/Doctrine/Tests/Common/Cache/AllTests.php
+++ /dev/null
@@ -1,34 +0,0 @@
-addTestSuite('Doctrine\Tests\Common\Cache\CacheTest');
- $suite->addTestSuite('Doctrine\Tests\Common\Cache\ApcCacheTest');
- $suite->addTestSuite('Doctrine\Tests\Common\Cache\ArrayCacheTest');
- $suite->addTestSuite('Doctrine\Tests\Common\Cache\MemcacheCacheTest');
- $suite->addTestSuite('Doctrine\Tests\Common\Cache\XcacheCacheTest');
-
- return $suite;
- }
-}
-
-if (PHPUnit_MAIN_METHOD == 'Common_Cache_AllTests::main') {
- AllTests::main();
-}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/Common/Cache/ApcCacheTest.php b/tests/Doctrine/Tests/Common/Cache/ApcCacheTest.php
deleted file mode 100644
index f52f5410f..000000000
--- a/tests/Doctrine/Tests/Common/Cache/ApcCacheTest.php
+++ /dev/null
@@ -1,22 +0,0 @@
-markTestSkipped('The ' . __CLASS__ .' requires the use of APC');
- }
- }
-
- protected function _getCacheDriver()
- {
- return new ApcCache();
- }
-}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/Common/Cache/ArrayCacheTest.php b/tests/Doctrine/Tests/Common/Cache/ArrayCacheTest.php
deleted file mode 100644
index 1bb2cb4f2..000000000
--- a/tests/Doctrine/Tests/Common/Cache/ArrayCacheTest.php
+++ /dev/null
@@ -1,15 +0,0 @@
-_getCacheDriver();
-
- // Test save
- $cache->save('test_key', 'testing this out');
-
- // Test contains to test that save() worked
- $this->assertTrue($cache->contains('test_key'));
-
- // Test fetch
- $this->assertEquals('testing this out', $cache->fetch('test_key'));
-
- // Test delete
- $cache->save('test_key2', 'test2');
- $cache->delete('test_key2');
- $this->assertFalse($cache->contains('test_key2'));
- }
-
- public function testDeleteAll()
- {
- $cache = $this->_getCacheDriver();
- $cache->save('test_key1', '1');
- $cache->save('test_key2', '2');
- $cache->deleteAll();
-
- $this->assertFalse($cache->contains('test_key1'));
- $this->assertFalse($cache->contains('test_key2'));
- }
-
- public function testDeleteByRegex()
- {
- $cache = $this->_getCacheDriver();
- $cache->save('test_key1', '1');
- $cache->save('test_key2', '2');
- $cache->deleteByRegex('/test_key[0-9]/');
-
- $this->assertFalse($cache->contains('test_key1'));
- $this->assertFalse($cache->contains('test_key2'));
- }
-
- public function testDeleteByPrefix()
- {
- $cache = $this->_getCacheDriver();
- $cache->save('test_key1', '1');
- $cache->save('test_key2', '2');
- $cache->deleteByPrefix('test_key');
-
- $this->assertFalse($cache->contains('test_key1'));
- $this->assertFalse($cache->contains('test_key2'));
- }
-
- public function testDeleteBySuffix()
- {
- $cache = $this->_getCacheDriver();
- $cache->save('1test_key', '1');
- $cache->save('2test_key', '2');
- $cache->deleteBySuffix('test_key');
-
- $this->assertFalse($cache->contains('1test_key'));
- $this->assertFalse($cache->contains('2test_key'));
- }
-
- public function testDeleteByWildcard()
- {
- $cache = $this->_getCacheDriver();
- $cache->save('test_key1', '1');
- $cache->save('test_key2', '2');
- $cache->delete('test_key*');
-
- $this->assertFalse($cache->contains('test_key1'));
- $this->assertFalse($cache->contains('test_key2'));
- }
-
- public function testNamespace()
- {
- $cache = $this->_getCacheDriver();
- $cache->setNamespace('test_');
- $cache->save('key1', 'test');
- $this->assertTrue($cache->contains('key1'));
-
- $ids = $cache->getIds();
- $this->assertTrue(in_array('test_key1', $ids));
- }
-
- abstract protected function _getCacheDriver();
-}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/Common/Cache/MemcacheCacheTest.php b/tests/Doctrine/Tests/Common/Cache/MemcacheCacheTest.php
deleted file mode 100644
index b176ce95a..000000000
--- a/tests/Doctrine/Tests/Common/Cache/MemcacheCacheTest.php
+++ /dev/null
@@ -1,32 +0,0 @@
-_memcache = new \Memcache;
- $ok = @$this->_memcache->connect('localhost', 11211);
- if (!$ok) {
- $this->markTestSkipped('The ' . __CLASS__ .' requires the use of memcache');
- }
- } else {
- $this->markTestSkipped('The ' . __CLASS__ .' requires the use of memcache');
- }
- }
-
- protected function _getCacheDriver()
- {
- $driver = new MemcacheCache();
- $driver->setMemcache($this->_memcache);
- return $driver;
- }
-}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/Common/Cache/XcacheCacheTest.php b/tests/Doctrine/Tests/Common/Cache/XcacheCacheTest.php
deleted file mode 100644
index d70882335..000000000
--- a/tests/Doctrine/Tests/Common/Cache/XcacheCacheTest.php
+++ /dev/null
@@ -1,22 +0,0 @@
-markTestSkipped('The ' . __CLASS__ .' requires the use of xcache');
- }
- }
-
- protected function _getCacheDriver()
- {
- return new XcacheCache();
- }
-}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/Common/ClassLoaderTest.php b/tests/Doctrine/Tests/Common/ClassLoaderTest.php
deleted file mode 100644
index e18dff88d..000000000
--- a/tests/Doctrine/Tests/Common/ClassLoaderTest.php
+++ /dev/null
@@ -1,22 +0,0 @@
-setIncludePath(__DIR__);
- $classLoader->setFileExtension('.class.php');
- $classLoader->setNamespaceSeparator('_');
-
- $this->assertEquals($classLoader->loadClass('ClassLoaderTest_ClassA'), true);
- $this->assertEquals($classLoader->loadClass('ClassLoaderTest_ClassB'), true);
- $this->assertEquals($classLoader->loadClass('ClassLoaderTest_ClassC'), true);
- }
-}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/Common/ClassLoaderTest/ClassA.class.php b/tests/Doctrine/Tests/Common/ClassLoaderTest/ClassA.class.php
deleted file mode 100644
index f1b499017..000000000
--- a/tests/Doctrine/Tests/Common/ClassLoaderTest/ClassA.class.php
+++ /dev/null
@@ -1,6 +0,0 @@
-addTestSuite('Doctrine\Tests\Common\Collections\CollectionTest');
-
- return $suite;
- }
-}
-
-if (PHPUnit_MAIN_METHOD == 'Common_Collections_AllTests::main') {
- AllTests::main();
-}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/Common/Collections/CollectionTest.php b/tests/Doctrine/Tests/Common/Collections/CollectionTest.php
deleted file mode 100644
index 83bb842f5..000000000
--- a/tests/Doctrine/Tests/Common/Collections/CollectionTest.php
+++ /dev/null
@@ -1,172 +0,0 @@
-_coll = new \Doctrine\Common\Collections\ArrayCollection;
- }
-
- public function testIssetAndUnset()
- {
- $this->assertFalse(isset($this->_coll[0]));
- $this->_coll->add('testing');
- $this->assertTrue(isset($this->_coll[0]));
- unset($this->_coll[0]);
- $this->assertFalse(isset($this->_coll[0]));
- }
-
- public function testToString()
- {
- $this->_coll->add('testing');
- $this->assertTrue(is_string((string) $this->_coll));
- }
-
- public function testRemovingNonExistentEntryReturnsNull()
- {
- $this->assertEquals(null, $this->_coll->remove('testing_does_not_exist'));
- }
-
- public function testExists()
- {
- $this->_coll->add("one");
- $this->_coll->add("two");
- $exists = $this->_coll->exists(function($k, $e) { return $e == "one"; });
- $this->assertTrue($exists);
- $exists = $this->_coll->exists(function($k, $e) { return $e == "other"; });
- $this->assertFalse($exists);
- }
-
- public function testMap()
- {
- $this->_coll->add(1);
- $this->_coll->add(2);
- $res = $this->_coll->map(function($e) { return $e * 2; });
- $this->assertEquals(array(2, 4), $res->toArray());
- }
-
- public function testFilter()
- {
- $this->_coll->add(1);
- $this->_coll->add("foo");
- $this->_coll->add(3);
- $res = $this->_coll->filter(function($e) { return is_numeric($e); });
- $this->assertEquals(array(0 => 1, 2 => 3), $res->toArray());
- }
-
- public function testFirstAndLast()
- {
- $this->_coll->add('one');
- $this->_coll->add('two');
-
- $this->assertEquals($this->_coll->first(), 'one');
- $this->assertEquals($this->_coll->last(), 'two');
- }
-
- public function testArrayAccess()
- {
- $this->_coll[] = 'one';
- $this->_coll[] = 'two';
-
- $this->assertEquals($this->_coll[0], 'one');
- $this->assertEquals($this->_coll[1], 'two');
-
- unset($this->_coll[0]);
- $this->assertEquals($this->_coll->count(), 1);
- }
-
- public function testContainsKey()
- {
- $this->_coll[5] = 'five';
- $this->assertTrue($this->_coll->containsKey(5));
- }
-
- public function testContains()
- {
- $this->_coll[0] = 'test';
- $this->assertTrue($this->_coll->contains('test'));
- }
-
- public function testSearch()
- {
- $this->_coll[0] = 'test';
- $this->assertEquals(0, $this->_coll->indexOf('test'));
- }
-
- public function testGet()
- {
- $this->_coll[0] = 'test';
- $this->assertEquals('test', $this->_coll->get(0));
- }
-
- public function testGetKeys()
- {
- $this->_coll[] = 'one';
- $this->_coll[] = 'two';
- $this->assertEquals(array(0, 1), $this->_coll->getKeys());
- }
-
- public function testGetValues()
- {
- $this->_coll[] = 'one';
- $this->_coll[] = 'two';
- $this->assertEquals(array('one', 'two'), $this->_coll->getValues());
- }
-
- public function testCount()
- {
- $this->_coll[] = 'one';
- $this->_coll[] = 'two';
- $this->assertEquals($this->_coll->count(), 2);
- $this->assertEquals(count($this->_coll), 2);
- }
-
- public function testForAll()
- {
- $this->_coll[] = 'one';
- $this->_coll[] = 'two';
- $this->assertEquals($this->_coll->forAll(function($k, $e) { return is_string($e); }), true);
- $this->assertEquals($this->_coll->forAll(function($k, $e) { return is_array($e); }), false);
- }
-
- public function testPartition()
- {
- $this->_coll[] = true;
- $this->_coll[] = false;
- $partition = $this->_coll->partition(function($k, $e) { return $e == true; });
- $this->assertEquals($partition[0][0], true);
- $this->assertEquals($partition[1][0], false);
- }
-
- public function testClear()
- {
- $this->_coll[] = 'one';
- $this->_coll[] = 'two';
- $this->_coll->clear();
- $this->assertEquals($this->_coll->isEmpty(), true);
- }
-
- public function testRemove()
- {
- $this->_coll[] = 'one';
- $this->_coll[] = 'two';
- $this->_coll->remove(0);
- $this->assertEquals($this->_coll->contains('one'), false);
- }
-
- public function testRemoveElement()
- {
- $this->_coll[] = 'one';
- $this->_coll[] = 'two';
- $this->_coll->removeElement('two');
- $this->assertEquals($this->_coll->contains('two'), false);
- }
-}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/Common/DoctrineExceptionTest.php b/tests/Doctrine/Tests/Common/DoctrineExceptionTest.php
deleted file mode 100644
index e69de29bb..000000000
diff --git a/tests/Doctrine/Tests/Common/EventManagerTest.php b/tests/Doctrine/Tests/Common/EventManagerTest.php
deleted file mode 100644
index 1106eeee5..000000000
--- a/tests/Doctrine/Tests/Common/EventManagerTest.php
+++ /dev/null
@@ -1,90 +0,0 @@
-_eventManager = new EventManager;
- $this->_preFooInvoked = false;
- $this->_postFooInvoked = false;
- }
-
- public function testInitialState()
- {
- $this->assertEquals(array(), $this->_eventManager->getListeners());
- $this->assertFalse($this->_eventManager->hasListeners(self::preFoo));
- $this->assertFalse($this->_eventManager->hasListeners(self::postFoo));
- }
-
- public function testAddEventListener()
- {
- $this->_eventManager->addEventListener(array('preFoo', 'postFoo'), $this);
- $this->assertTrue($this->_eventManager->hasListeners(self::preFoo));
- $this->assertTrue($this->_eventManager->hasListeners(self::postFoo));
- $this->assertEquals(1, count($this->_eventManager->getListeners(self::preFoo)));
- $this->assertEquals(1, count($this->_eventManager->getListeners(self::postFoo)));
- $this->assertEquals(2, count($this->_eventManager->getListeners()));
- }
-
- public function testDispatchEvent()
- {
- $this->_eventManager->addEventListener(array('preFoo', 'postFoo'), $this);
- $this->_eventManager->dispatchEvent(self::preFoo);
- $this->assertTrue($this->_preFooInvoked);
- $this->assertFalse($this->_postFooInvoked);
- }
-
- public function testRemoveEventListener()
- {
- $this->_eventManager->addEventListener(array('preBar'), $this);
- $this->assertTrue($this->_eventManager->hasListeners(self::preBar));
- $this->_eventManager->removeEventListener(array('preBar'), $this);
- $this->assertFalse($this->_eventManager->hasListeners(self::preBar));
- }
-
- public function testAddEventSubscriber()
- {
- $eventSubscriber = new TestEventSubscriber();
- $this->_eventManager->addEventSubscriber($eventSubscriber);
- $this->assertTrue($this->_eventManager->hasListeners(self::preFoo));
- $this->assertTrue($this->_eventManager->hasListeners(self::postFoo));
- }
-
- /* Listener methods */
-
- public function preFoo(EventArgs $e)
- {
- $this->_preFooInvoked = true;
- }
-
- public function postFoo(EventArgs $e)
- {
- $this->_postFooInvoked = true;
- }
-}
-
-class TestEventSubscriber implements \Doctrine\Common\EventSubscriber
-{
- public function getSubscribedEvents()
- {
- return array('preFoo', 'postFoo');
- }
-}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/DBAL/AllTests.php b/tests/Doctrine/Tests/DBAL/AllTests.php
deleted file mode 100644
index 3ced01e85..000000000
--- a/tests/Doctrine/Tests/DBAL/AllTests.php
+++ /dev/null
@@ -1,73 +0,0 @@
-addTestSuite('Doctrine\Tests\DBAL\Platforms\SqlitePlatformTest');
- $suite->addTestSuite('Doctrine\Tests\DBAL\Platforms\MySqlPlatformTest');
- $suite->addTestSuite('Doctrine\Tests\DBAL\Platforms\PostgreSqlPlatformTest');
- $suite->addTestSuite('Doctrine\Tests\DBAL\Platforms\MsSqlPlatformTest');
- $suite->addTestSuite('Doctrine\Tests\DBAL\Platforms\OraclePlatformTest');
-
- // Type tests
- $suite->addTestSuite('Doctrine\Tests\DBAL\Types\ArrayTest');
- $suite->addTestSuite('Doctrine\Tests\DBAL\Types\ObjectTest');
- $suite->addTestSuite('Doctrine\Tests\DBAL\Types\DateTimeTest');
- $suite->addTestSuite('Doctrine\Tests\DBAL\Types\DateTest');
- $suite->addTestSuite('Doctrine\Tests\DBAL\Types\TimeTest');
- $suite->addTestSuite('Doctrine\Tests\DBAL\Types\BooleanTest');
- $suite->addTestSuite('Doctrine\Tests\DBAL\Types\DecimalTest');
- $suite->addTestSuite('Doctrine\Tests\DBAL\Types\IntegerTest');
- $suite->addTestSuite('Doctrine\Tests\DBAL\Types\SmallIntTest');
- $suite->addTestSuite('Doctrine\Tests\DBAL\Types\StringTest');
-
- // Schema tests
- $suite->addTestSuite('Doctrine\Tests\DBAL\Schema\ColumnTest');
- $suite->addTestSuite('Doctrine\Tests\DBAL\Schema\IndexTest');
- $suite->addTestSuite('Doctrine\Tests\DBAL\Schema\TableTest');
- $suite->addTestSuite('Doctrine\Tests\DBAL\Schema\SchemaTest');
- $suite->addTestSuite('Doctrine\Tests\DBAL\Schema\Visitor\SchemaSqlCollectorTest');
- $suite->addTestSuite('Doctrine\Tests\DBAL\Schema\ComparatorTest');
- $suite->addTestSuite('Doctrine\Tests\DBAL\Schema\SchemaDiffTest');
-
- // Driver manager test
- $suite->addTestSuite('Doctrine\Tests\DBAL\DriverManagerTest');
-
- // Connection test
- $suite->addTestSuite('Doctrine\Tests\DBAL\ConnectionTest');
-
- // Events and Listeners
- $suite->addTestSuite('Doctrine\Tests\DBAL\Events\OracleSessionInitTest');
- $suite->addTestSuite('Doctrine\Tests\DBAL\Events\MysqlSessionInitTest');
-
- // All Functional DBAL tests
- $suite->addTest(Functional\AllTests::suite());
-
- return $suite;
- }
-}
-
-if (PHPUnit_MAIN_METHOD == 'Dbal_Platforms_AllTests::main') {
- AllTests::main();
-}
diff --git a/tests/Doctrine/Tests/DBAL/ConnectionTest.php b/tests/Doctrine/Tests/DBAL/ConnectionTest.php
deleted file mode 100644
index 88eb23286..000000000
--- a/tests/Doctrine/Tests/DBAL/ConnectionTest.php
+++ /dev/null
@@ -1,118 +0,0 @@
- 'pdo_mysql',
- 'host' => 'localhost',
- 'user' => 'root',
- 'password' => 'password',
- 'port' => '1234'
- );
- $this->_conn = \Doctrine\DBAL\DriverManager::getConnection($params);
- }
-
- public function testIsConnected()
- {
- $this->assertFalse($this->_conn->isConnected());
- }
-
- public function testNoTransactionActiveByDefault()
- {
- $this->assertFalse($this->_conn->isTransactionActive());
- }
-
- public function testCommitWithNoActiveTransaction_ThrowsException()
- {
- $this->setExpectedException('Doctrine\DBAL\ConnectionException');
- $this->_conn->commit();
- }
-
- public function testRollbackWithNoActiveTransaction_ThrowsException()
- {
- $this->setExpectedException('Doctrine\DBAL\ConnectionException');
- $this->_conn->rollback();
- }
-
- public function testSetRollbackOnlyNoActiveTransaction_ThrowsException()
- {
- $this->setExpectedException('Doctrine\DBAL\ConnectionException');
- $this->_conn->setRollbackOnly();
- }
-
- public function testIsRollbackOnlyNoActiveTransaction_ThrowsException()
- {
- $this->setExpectedException('Doctrine\DBAL\ConnectionException');
- $this->_conn->isRollbackOnly();
- }
-
- public function testGetConfiguration()
- {
- $config = $this->_conn->getConfiguration();
-
- $this->assertType('Doctrine\DBAL\Configuration', $config);
- }
-
- public function testGetHost()
- {
- $this->assertEquals('localhost', $this->_conn->getHost());
- }
-
- public function testGetPort()
- {
- $this->assertEquals('1234', $this->_conn->getPort());
- }
-
- public function testGetUsername()
- {
- $this->assertEquals('root', $this->_conn->getUsername());
- }
-
- public function testGetPassword()
- {
- $this->assertEquals('password', $this->_conn->getPassword());
- }
-
- public function testGetDriver()
- {
- $this->assertType('Doctrine\DBAL\Driver\PDOMySql\Driver', $this->_conn->getDriver());
- }
-
- public function testGetEventManager()
- {
- $this->assertType('Doctrine\Common\EventManager', $this->_conn->getEventManager());
- }
-
- public function testConnectDispatchEvent()
- {
- $listenerMock = $this->getMock('ConnectDispatchEventListener', array('postConnect'));
- $listenerMock->expects($this->once())->method('postConnect');
-
- $eventManager = new EventManager();
- $eventManager->addEventListener(array(Events::postConnect), $listenerMock);
-
- $driverMock = $this->getMock('Doctrine\DBAL\Driver');
- $driverMock->expects(($this->at(0)))
- ->method('connect');
- $platform = new Mocks\MockPlatform();
-
- $conn = new Connection(array('platform' => $platform), $driverMock, new Configuration(), $eventManager);
- $conn->connect();
- }
-}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/DBAL/DriverManagerTest.php b/tests/Doctrine/Tests/DBAL/DriverManagerTest.php
deleted file mode 100644
index a95c9ad67..000000000
--- a/tests/Doctrine/Tests/DBAL/DriverManagerTest.php
+++ /dev/null
@@ -1,102 +0,0 @@
- 'test'
- );
- $test = \Doctrine\DBAL\DriverManager::getConnection($options);
- }
-
- public function testValidPdoInstance()
- {
- $options = array(
- 'pdo' => new \PDO('sqlite::memory:')
- );
- $conn = \Doctrine\DBAL\DriverManager::getConnection($options);
- $this->assertEquals('sqlite', $conn->getDatabasePlatform()->getName());
- }
-
- /**
- * @expectedException \Doctrine\DBAL\DBALException
- */
- public function testCheckParams()
- {
- $conn = \Doctrine\DBAL\DriverManager::getConnection(array());
- }
-
- /**
- * @expectedException \Doctrine\DBAL\DBALException
- */
- public function testInvalidDriver()
- {
- $conn = \Doctrine\DBAL\DriverManager::getConnection(array('driver' => 'invalid_driver'));
- }
-
- public function testCustomPlatform()
- {
- $mockPlatform = new \Doctrine\Tests\DBAL\Mocks\MockPlatform();
- $options = array(
- 'pdo' => new \PDO('sqlite::memory:'),
- 'platform' => $mockPlatform
- );
-
- $conn = \Doctrine\DBAL\DriverManager::getConnection($options);
- $this->assertSame($mockPlatform, $conn->getDatabasePlatform());
- }
-
- public function testCustomWrapper()
- {
- $wrapperClass = 'Doctrine\Tests\Mocks\ConnectionMock';
-
- $options = array(
- 'pdo' => new \PDO('sqlite::memory:'),
- 'wrapperClass' => $wrapperClass,
- );
-
- $conn = \Doctrine\DBAL\DriverManager::getConnection($options);
- $this->assertType($wrapperClass, $conn);
- }
-
- public function testInvalidWrapperClass()
- {
- $this->setExpectedException('\Doctrine\DBAL\DBALException');
-
- $options = array(
- 'pdo' => new \PDO('sqlite::memory:'),
- 'wrapperClass' => 'stdClass',
- );
-
- $conn = \Doctrine\DBAL\DriverManager::getConnection($options);
- }
-
- public function testInvalidDriverClass()
- {
- $this->setExpectedException('\Doctrine\DBAL\DBALException');
-
- $options = array(
- 'driverClass' => 'stdClass'
- );
-
- $conn = \Doctrine\DBAL\DriverManager::getConnection($options);
- }
-
- public function testValidDriverClass()
- {
- $options = array(
- 'driverClass' => 'Doctrine\DBAL\Driver\PDOMySql\Driver',
- );
-
- $conn = \Doctrine\DBAL\DriverManager::getConnection($options);
- $this->assertType('Doctrine\DBAL\Driver\PDOMySql\Driver', $conn->getDriver());
- }
-}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/DBAL/Events/MysqlSessionInitTest.php b/tests/Doctrine/Tests/DBAL/Events/MysqlSessionInitTest.php
deleted file mode 100644
index 1ef47dd53..000000000
--- a/tests/Doctrine/Tests/DBAL/Events/MysqlSessionInitTest.php
+++ /dev/null
@@ -1,33 +0,0 @@
-getMock('Doctrine\DBAL\Connection', array(), array(), '', false);
- $connectionMock->expects($this->once())
- ->method('executeUpdate')
- ->with($this->equalTo("SET NAMES foo COLLATE bar"));
-
- $eventArgs = new ConnectionEventArgs($connectionMock);
-
-
- $listener = new MysqlSessionInit('foo', 'bar');
- $listener->postConnect($eventArgs);
- }
-
- public function testGetSubscribedEvents()
- {
- $listener = new MysqlSessionInit();
- $this->assertEquals(array(Events::postConnect), $listener->getSubscribedEvents());
- }
-}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/DBAL/Events/OracleSessionInitTest.php b/tests/Doctrine/Tests/DBAL/Events/OracleSessionInitTest.php
deleted file mode 100644
index 847ed6b15..000000000
--- a/tests/Doctrine/Tests/DBAL/Events/OracleSessionInitTest.php
+++ /dev/null
@@ -1,33 +0,0 @@
-getMock('Doctrine\DBAL\Connection', array(), array(), '', false);
- $connectionMock->expects($this->once())
- ->method('executeUpdate')
- ->with($this->isType('string'));
-
- $eventArgs = new ConnectionEventArgs($connectionMock);
-
-
- $listener = new OracleSessionInit();
- $listener->postConnect($eventArgs);
- }
-
- public function testGetSubscribedEvents()
- {
- $listener = new OracleSessionInit();
- $this->assertEquals(array(Events::postConnect), $listener->getSubscribedEvents());
- }
-}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/DBAL/Functional/AllTests.php b/tests/Doctrine/Tests/DBAL/Functional/AllTests.php
deleted file mode 100644
index 573177070..000000000
--- a/tests/Doctrine/Tests/DBAL/Functional/AllTests.php
+++ /dev/null
@@ -1,39 +0,0 @@
-addTestSuite('Doctrine\Tests\DBAL\Functional\Schema\SqliteSchemaManagerTest');
- $suite->addTestSuite('Doctrine\Tests\DBAL\Functional\Schema\MySqlSchemaManagerTest');
- $suite->addTestSuite('Doctrine\Tests\DBAL\Functional\Schema\PostgreSqlSchemaManagerTest');
- $suite->addTestSuite('Doctrine\Tests\DBAL\Functional\Schema\OracleSchemaManagerTest');
- $suite->addTestSuite('Doctrine\Tests\DBAL\Functional\Schema\Db2SchemaManagerTest');
- $suite->addTestSuite('Doctrine\Tests\DBAL\Functional\ConnectionTest');
- $suite->addTestSuite('Doctrine\Tests\DBAL\Functional\DataAccessTest');
- $suite->addTestSuite('Doctrine\Tests\DBAL\Functional\WriteTest');
-
- return $suite;
- }
-}
-
-if (PHPUnit_MAIN_METHOD == 'Dbal_Functional_AllTests::main') {
- AllTests::main();
-}
diff --git a/tests/Doctrine/Tests/DBAL/Functional/ConnectionTest.php b/tests/Doctrine/Tests/DBAL/Functional/ConnectionTest.php
deleted file mode 100644
index 5cb6d4167..000000000
--- a/tests/Doctrine/Tests/DBAL/Functional/ConnectionTest.php
+++ /dev/null
@@ -1,105 +0,0 @@
-resetSharedConn();
- parent::setUp();
- }
-
- public function testGetWrappedConnection()
- {
- $this->assertType('Doctrine\DBAL\Driver\Connection', $this->_conn->getWrappedConnection());
- }
-
- public function testCommitWithRollbackOnlyThrowsException()
- {
- $this->_conn->beginTransaction();
- $this->_conn->setRollbackOnly();
- $this->setExpectedException('Doctrine\DBAL\ConnectionException');
- $this->_conn->commit();
- }
-
- public function testTransactionNestingBehavior()
- {
- try {
- $this->_conn->beginTransaction();
- $this->assertEquals(1, $this->_conn->getTransactionNestingLevel());
-
- try {
- $this->_conn->beginTransaction();
- $this->assertEquals(2, $this->_conn->getTransactionNestingLevel());
- throw new \Exception;
- $this->_conn->commit(); // never reached
- } catch (\Exception $e) {
- $this->_conn->rollback();
- $this->assertEquals(1, $this->_conn->getTransactionNestingLevel());
- //no rethrow
- }
- $this->assertTrue($this->_conn->isRollbackOnly());
-
- $this->_conn->commit(); // should throw exception
- $this->fail('Transaction commit after failed nested transaction should fail.');
- } catch (ConnectionException $e) {
- $this->assertEquals(1, $this->_conn->getTransactionNestingLevel());
- $this->_conn->rollback();
- $this->assertEquals(0, $this->_conn->getTransactionNestingLevel());
- }
- }
-
- public function testTransactionBehaviorWithRollback()
- {
- try {
- $this->_conn->beginTransaction();
- $this->assertEquals(1, $this->_conn->getTransactionNestingLevel());
-
- throw new \Exception;
-
- $this->_connx->commit(); // never reached
- } catch (\Exception $e) {
- $this->assertEquals(1, $this->_conn->getTransactionNestingLevel());
- $this->_conn->rollback();
- $this->assertEquals(0, $this->_conn->getTransactionNestingLevel());
- }
- }
-
- public function testTransactionBehaviour()
- {
- try {
- $this->_conn->beginTransaction();
- $this->assertEquals(1, $this->_conn->getTransactionNestingLevel());
- $this->_conn->commit();
- } catch (\Exception $e) {
- $this->_conn->rollback();
- $this->assertEquals(0, $this->_conn->getTransactionNestingLevel());
- }
-
- $this->assertEquals(0, $this->_conn->getTransactionNestingLevel());
- }
-
- public function testTransactionalWithException()
- {
- try {
- $this->_conn->transactional(function($conn) {
- $conn->executeQuery("select 1");
- throw new \RuntimeException("Ooops!");
- });
- } catch (\RuntimeException $expected) {
- $this->assertEquals(0, $this->_conn->getTransactionNestingLevel());
- }
- }
-
- public function testTransactional()
- {
- $this->_conn->transactional(function($conn) {
- $conn->executeQuery("select 1");
- });
- }
-}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/DBAL/Functional/DataAccessTest.php b/tests/Doctrine/Tests/DBAL/Functional/DataAccessTest.php
deleted file mode 100644
index 0e9693a14..000000000
--- a/tests/Doctrine/Tests/DBAL/Functional/DataAccessTest.php
+++ /dev/null
@@ -1,170 +0,0 @@
-addColumn('test_int', 'integer');
- $table->addColumn('test_string', 'string');
-
- $sm = $this->_conn->getSchemaManager();
- $sm->createTable($table);
-
- $this->_conn->insert('fetch_table', array('test_int' => 1, 'test_string' => 'foo'));
- } catch(\Exception $e) {
-
- }
- }
-
- public function testPrepareWithBindValue()
- {
- $sql = "SELECT test_int, test_string FROM fetch_table WHERE test_int = ? AND test_string = ?";
- $stmt = $this->_conn->prepare($sql);
- $this->assertType('Doctrine\DBAL\Statement', $stmt);
-
- $stmt->bindValue(1, 1);
- $stmt->bindValue(2, 'foo');
- $stmt->execute();
-
- $row = $stmt->fetch(\PDO::FETCH_ASSOC);
- $row = array_change_key_case($row, \CASE_LOWER);
- $this->assertEquals(array('test_int' => 1, 'test_string' => 'foo'), $row);
- }
-
- public function testPrepareWithBindParam()
- {
- $paramInt = 1;
- $paramStr = 'foo';
-
- $sql = "SELECT test_int, test_string FROM fetch_table WHERE test_int = ? AND test_string = ?";
- $stmt = $this->_conn->prepare($sql);
- $this->assertType('Doctrine\DBAL\Statement', $stmt);
-
- $stmt->bindParam(1, $paramInt);
- $stmt->bindParam(2, $paramStr);
- $stmt->execute();
-
- $row = $stmt->fetch(\PDO::FETCH_ASSOC);
- $row = array_change_key_case($row, \CASE_LOWER);
- $this->assertEquals(array('test_int' => 1, 'test_string' => 'foo'), $row);
- }
-
- public function testPrepareWithFetchAll()
- {
- $paramInt = 1;
- $paramStr = 'foo';
-
- $sql = "SELECT test_int, test_string FROM fetch_table WHERE test_int = ? AND test_string = ?";
- $stmt = $this->_conn->prepare($sql);
- $this->assertType('Doctrine\DBAL\Statement', $stmt);
-
- $stmt->bindParam(1, $paramInt);
- $stmt->bindParam(2, $paramStr);
- $stmt->execute();
-
- $rows = $stmt->fetchAll(\PDO::FETCH_ASSOC);
- $rows[0] = array_change_key_case($rows[0], \CASE_LOWER);
- $this->assertEquals(array('test_int' => 1, 'test_string' => 'foo'), $rows[0]);
- }
-
- public function testPrepareWithFetchColumn()
- {
- $paramInt = 1;
- $paramStr = 'foo';
-
- $sql = "SELECT test_int FROM fetch_table WHERE test_int = ? AND test_string = ?";
- $stmt = $this->_conn->prepare($sql);
- $this->assertType('Doctrine\DBAL\Statement', $stmt);
-
- $stmt->bindParam(1, $paramInt);
- $stmt->bindParam(2, $paramStr);
- $stmt->execute();
-
- $column = $stmt->fetchColumn();
- $this->assertEquals(1, $column);
- }
-
- public function testPrepareWithQuoted()
- {
- $table = 'fetch_table';
- $paramInt = 1;
- $paramStr = 'foo';
-
- $sql = "SELECT test_int, test_string FROM " . $this->_conn->quoteIdentifier($table) . " ".
- "WHERE test_int = " . $this->_conn->quote($paramInt) . " AND test_string = " . $this->_conn->quote($paramStr);
- $stmt = $this->_conn->prepare($sql);
- $this->assertType('Doctrine\DBAL\Statement', $stmt);
- }
-
- public function testPrepareWithExecuteParams()
- {
- $paramInt = 1;
- $paramStr = 'foo';
-
- $sql = "SELECT test_int, test_string FROM fetch_table WHERE test_int = ? AND test_string = ?";
- $stmt = $this->_conn->prepare($sql);
- $this->assertType('Doctrine\DBAL\Statement', $stmt);
- $stmt->execute(array($paramInt, $paramStr));
-
- $row = $stmt->fetch(\PDO::FETCH_ASSOC);
- $row = array_change_key_case($row, \CASE_LOWER);
- $this->assertEquals(array('test_int' => 1, 'test_string' => 'foo'), $row);
- }
-
- public function testFetchAll()
- {
- $sql = "SELECT test_int, test_string FROM fetch_table WHERE test_int = ? AND test_string = ?";
- $data = $this->_conn->fetchAll($sql, array(1, 'foo'));
-
- $this->assertEquals(1, count($data));
-
- $row = $data[0];
- $this->assertEquals(2, count($row));
-
- $row = array_change_key_case($row, \CASE_LOWER);
- $this->assertEquals(1, $row['test_int']);
- $this->assertEquals('foo', $row['test_string']);
- }
-
- public function testFetchRow()
- {
- $sql = "SELECT test_int, test_string FROM fetch_table WHERE test_int = ? AND test_string = ?";
- $row = $this->_conn->fetchAssoc($sql, array(1, 'foo'));
-
- $row = array_change_key_case($row, \CASE_LOWER);
-
- $this->assertEquals(1, $row['test_int']);
- $this->assertEquals('foo', $row['test_string']);
- }
-
- public function testFetchArray()
- {
- $sql = "SELECT test_int, test_string FROM fetch_table WHERE test_int = ? AND test_string = ?";
- $row = $this->_conn->fetchArray($sql, array(1, 'foo'));
-
- $this->assertEquals(1, $row[0]);
- $this->assertEquals('foo', $row[1]);
- }
-
- public function testFetchColumn()
- {
- $sql = "SELECT test_int, test_string FROM fetch_table WHERE test_int = ? AND test_string = ?";
- $testInt = $this->_conn->fetchColumn($sql, array(1, 'foo'), 0);
-
- $this->assertEquals(1, $testInt);
-
- $sql = "SELECT test_int, test_string FROM fetch_table WHERE test_int = ? AND test_string = ?";
- $testString = $this->_conn->fetchColumn($sql, array(1, 'foo'), 1);
-
- $this->assertEquals('foo', $testString);
- }
-}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/DBAL/Functional/Schema/Db2SchemaManagerTest.php b/tests/Doctrine/Tests/DBAL/Functional/Schema/Db2SchemaManagerTest.php
deleted file mode 100644
index a567900c9..000000000
--- a/tests/Doctrine/Tests/DBAL/Functional/Schema/Db2SchemaManagerTest.php
+++ /dev/null
@@ -1,12 +0,0 @@
-markTestSkipped('Foo');
- }
-
- $username = $GLOBALS['db_username'];
-
- $query = "GRANT ALL PRIVILEGES TO ".$username;
-
- $conn = \Doctrine\Tests\TestUtil::getTempConnection();
- $conn->executeUpdate($query);
- }
-
- public function testRenameTable()
- {
- $this->_sm->tryMethod('DropTable', 'list_tables_test');
- $this->_sm->tryMethod('DropTable', 'list_tables_test_new_name');
-
- $this->createTestTable('list_tables_test');
- $this->_sm->renameTable('list_tables_test', 'list_tables_test_new_name');
-
- $tables = $this->_sm->listTables();
-
- $this->assertHasTable($tables, 'list_tables_test_new_name');
- }
-}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/DBAL/Functional/Schema/PostgreSqlSchemaManagerTest.php b/tests/Doctrine/Tests/DBAL/Functional/Schema/PostgreSqlSchemaManagerTest.php
deleted file mode 100644
index 967b0ccdc..000000000
--- a/tests/Doctrine/Tests/DBAL/Functional/Schema/PostgreSqlSchemaManagerTest.php
+++ /dev/null
@@ -1,12 +0,0 @@
-_conn->getDatabasePlatform()->getName() !== $dbms)
- {
- $this->markTestSkipped('The ' . $testClass .' requires the use of ' . $dbms);
- }
-
- #$this->_conn->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger);
-
- $this->_sm = $this->_conn->getSchemaManager();
- }
-
- public function testListSequences()
- {
- if(!$this->_conn->getDatabasePlatform()->supportsSequences()) {
- $this->markTestSkipped($this->_conn->getDriver()->getName().' does not support sequences.');
- }
-
- $sequence = new \Doctrine\DBAL\Schema\Sequence('list_sequences_test_seq', 20, 10);
- $this->_sm->createSequence($sequence);
-
- $sequences = $this->_sm->listSequences();
-
- $this->assertType('array', $sequences, 'listSequences() should return an array.');
-
- $foundSequence = null;
- foreach($sequences AS $sequence) {
- $this->assertType('Doctrine\DBAL\Schema\Sequence', $sequence, 'Array elements of listSequences() should be Sequence instances.');
- if(strtolower($sequence->getName()) == 'list_sequences_test_seq') {
- $foundSequence = $sequence;
- }
- }
-
- $this->assertNotNull($foundSequence, "Sequence with name 'list_sequences_test_seq' was not found.");
- $this->assertEquals(20, $foundSequence->getAllocationSize(), "Allocation Size is expected to be 20.");
- $this->assertEquals(10, $foundSequence->getInitialValue(), "Initial Value is expected to be 10.");
- }
-
- public function testListDatabases()
- {
- if (!$this->_sm->getDatabasePlatform()->supportsCreateDropDatabase()) {
- $this->markTestSkipped('Cannot drop Database client side with this Driver.');
- }
-
- $this->_sm->dropAndCreateDatabase('test_create_database');
- $databases = $this->_sm->listDatabases();
-
- $databases = \array_map('strtolower', $databases);
-
- $this->assertEquals(true, \in_array('test_create_database', $databases));
- }
-
- public function testListTables()
- {
- $this->createTestTable('list_tables_test');
- $tables = $this->_sm->listTables();
-
- $this->assertType('array', $tables);
- $this->assertTrue(count($tables) > 0, "List Tables has to find at least one table named 'list_tables_test'.");
-
- $foundTable = false;
- foreach ($tables AS $table) {
- $this->assertType('Doctrine\DBAL\Schema\Table', $table);
- if (strtolower($table->getName()) == 'list_tables_test') {
- $foundTable = true;
-
- $this->assertTrue($table->hasColumn('id'));
- $this->assertTrue($table->hasColumn('test'));
- $this->assertTrue($table->hasColumn('foreign_key_test'));
- }
- }
-
- $this->assertTrue( $foundTable , "The 'list_tables_test' table has to be found.");
- }
-
- public function testListTableColumns()
- {
- $table = new \Doctrine\DBAL\Schema\Table('list_table_columns');
- $table->addColumn('id', 'integer', array('notnull' => true));
- $table->addColumn('test', 'string', array('length' => 255, 'notnull' => false));
- $table->addColumn('foo', 'text', array('notnull' => true));
- $table->addColumn('bar', 'decimal', array('precision' => 10, 'scale' => 4, 'notnull' => false));
- $table->addColumn('baz1', 'datetime');
- $table->addColumn('baz2', 'time');
- $table->addColumn('baz3', 'date');
-
- $this->_sm->dropAndCreateTable($table);
-
- $columns = $this->_sm->listTableColumns('list_table_columns');
-
- $this->assertArrayHasKey('id', $columns);
- $this->assertEquals('id', strtolower($columns['id']->getname()));
- $this->assertType('Doctrine\DBAL\Types\IntegerType', $columns['id']->gettype());
- $this->assertEquals(false, $columns['id']->getunsigned());
- $this->assertEquals(true, $columns['id']->getnotnull());
- $this->assertEquals(null, $columns['id']->getdefault());
- $this->assertType('array', $columns['id']->getPlatformOptions());
-
- $this->assertArrayHasKey('test', $columns);
- $this->assertEquals('test', strtolower($columns['test']->getname()));
- $this->assertType('Doctrine\DBAL\Types\StringType', $columns['test']->gettype());
- $this->assertEquals(255, $columns['test']->getlength());
- $this->assertEquals(false, $columns['test']->getfixed());
- $this->assertEquals(false, $columns['test']->getnotnull());
- $this->assertEquals(null, $columns['test']->getdefault());
- $this->assertType('array', $columns['test']->getPlatformOptions());
-
- $this->assertEquals('foo', strtolower($columns['foo']->getname()));
- $this->assertType('Doctrine\DBAL\Types\TextType', $columns['foo']->gettype());
- $this->assertEquals(false, $columns['foo']->getunsigned());
- $this->assertEquals(false, $columns['foo']->getfixed());
- $this->assertEquals(true, $columns['foo']->getnotnull());
- $this->assertEquals(null, $columns['foo']->getdefault());
- $this->assertType('array', $columns['foo']->getPlatformOptions());
-
- $this->assertEquals('bar', strtolower($columns['bar']->getname()));
- $this->assertType('Doctrine\DBAL\Types\DecimalType', $columns['bar']->gettype());
- $this->assertEquals(null, $columns['bar']->getlength());
- $this->assertEquals(10, $columns['bar']->getprecision());
- $this->assertEquals(4, $columns['bar']->getscale());
- $this->assertEquals(false, $columns['bar']->getunsigned());
- $this->assertEquals(false, $columns['bar']->getfixed());
- $this->assertEquals(false, $columns['bar']->getnotnull());
- $this->assertEquals(null, $columns['bar']->getdefault());
- $this->assertType('array', $columns['bar']->getPlatformOptions());
-
- $this->assertEquals('baz1', strtolower($columns['baz1']->getname()));
- $this->assertType('Doctrine\DBAL\Types\DateTimeType', $columns['baz1']->gettype());
- $this->assertEquals(true, $columns['baz1']->getnotnull());
- $this->assertEquals(null, $columns['baz1']->getdefault());
- $this->assertType('array', $columns['baz1']->getPlatformOptions());
-
- $this->assertEquals('baz2', strtolower($columns['baz2']->getname()));
- $this->assertContains($columns['baz2']->gettype()->getName(), array('time', 'date', 'datetime'));
- $this->assertEquals(true, $columns['baz2']->getnotnull());
- $this->assertEquals(null, $columns['baz2']->getdefault());
- $this->assertType('array', $columns['baz2']->getPlatformOptions());
-
- $this->assertEquals('baz3', strtolower($columns['baz3']->getname()));
- $this->assertContains($columns['baz2']->gettype()->getName(), array('time', 'date', 'datetime'));
- $this->assertEquals(true, $columns['baz3']->getnotnull());
- $this->assertEquals(null, $columns['baz3']->getdefault());
- $this->assertType('array', $columns['baz3']->getPlatformOptions());
- }
-
- public function testListTableIndexes()
- {
- $table = $this->getTestTable('list_table_indexes_test');
- $table->addUniqueIndex(array('test'), 'test_index_name');
- $table->addIndex(array('id', 'test'), 'test_composite_idx');
-
- $this->_sm->createTable($table);
-
- $tableIndexes = $this->_sm->listTableIndexes('list_table_indexes_test');
-
- $this->assertEquals(3, count($tableIndexes));
-
- $this->assertArrayHasKey('primary', $tableIndexes, 'listTableIndexes() has to return a "primary" array key.');
- $this->assertEquals(array('id'), array_map('strtolower', $tableIndexes['primary']->getColumns()));
- $this->assertTrue($tableIndexes['primary']->isUnique());
- $this->assertTrue($tableIndexes['primary']->isPrimary());
-
- $this->assertEquals('test_index_name', $tableIndexes['test_index_name']->getName());
- $this->assertEquals(array('test'), array_map('strtolower', $tableIndexes['test_index_name']->getColumns()));
- $this->assertTrue($tableIndexes['test_index_name']->isUnique());
- $this->assertFalse($tableIndexes['test_index_name']->isPrimary());
-
- $this->assertEquals('test_composite_idx', $tableIndexes['test_composite_idx']->getName());
- $this->assertEquals(array('id', 'test'), array_map('strtolower', $tableIndexes['test_composite_idx']->getColumns()));
- $this->assertFalse($tableIndexes['test_composite_idx']->isUnique());
- $this->assertFalse($tableIndexes['test_composite_idx']->isPrimary());
- }
-
- public function testDropAndCreateIndex()
- {
- $table = $this->getTestTable('test_create_index');
- $table->addUniqueIndex(array('test'), 'test');
- $this->_sm->dropAndCreateTable($table);
-
- $this->_sm->dropAndCreateIndex($table->getIndex('test'), $table);
- $tableIndexes = $this->_sm->listTableIndexes('test_create_index');
- $this->assertType('array', $tableIndexes);
-
- $this->assertEquals('test', strtolower($tableIndexes['test']->getName()));
- $this->assertEquals(array('test'), array_map('strtolower', $tableIndexes['test']->getColumns()));
- $this->assertTrue($tableIndexes['test']->isUnique());
- $this->assertFalse($tableIndexes['test']->isPrimary());
- }
-
- public function testCreateTableWithForeignKeys()
- {
- if(!$this->_sm->getDatabasePlatform()->supportsForeignKeyConstraints()) {
- $this->markTestSkipped('Platform does not support foreign keys.');
- }
-
- $tableB = $this->getTestTable('test_foreign');
-
- $this->_sm->dropAndCreateTable($tableB);
-
- $tableA = $this->getTestTable('test_create_fk');
- $tableA->addForeignKeyConstraint('test_foreign', array('foreign_key_test'), array('id'));
-
- $this->_sm->dropAndCreateTable($tableA);
-
- $fkConstraints = $this->_sm->listTableForeignKeys('test_create_fk');
- $this->assertEquals(1, count($fkConstraints), "Table 'test_create_fk1' has to have one foreign key.");
-
- $fkConstraint = current($fkConstraints);
- $this->assertType('\Doctrine\DBAL\Schema\ForeignKeyConstraint', $fkConstraint);
- $this->assertEquals('test_foreign', strtolower($fkConstraint->getForeignTableName()));
- $this->assertEquals(array('foreign_key_test'), array_map('strtolower', $fkConstraint->getColumns()));
- $this->assertEquals(array('id'), array_map('strtolower', $fkConstraint->getForeignColumns()));
- }
-
- public function testListForeignKeys()
- {
- if(!$this->_conn->getDatabasePlatform()->supportsForeignKeyConstraints()) {
- $this->markTestSkipped('Does not support foreign key constraints.');
- }
-
- $this->createTestTable('test_create_fk1');
- $this->createTestTable('test_create_fk2');
-
- $foreignKey = new \Doctrine\DBAL\Schema\ForeignKeyConstraint(
- array('foreign_key_test'), 'test_create_fk2', array('id'), 'foreign_key_test_fk', array('onDelete' => 'CASCADE')
- );
-
- $this->_sm->createForeignKey($foreignKey, 'test_create_fk1');
-
- $fkeys = $this->_sm->listTableForeignKeys('test_create_fk1');
-
- $this->assertEquals(1, count($fkeys), "Table 'test_create_fk1' has to have one foreign key.");
-
- $this->assertType('Doctrine\DBAL\Schema\ForeignKeyConstraint', $fkeys[0]);
- $this->assertEquals(array('foreign_key_test'), array_map('strtolower', $fkeys[0]->getLocalColumns()));
- $this->assertEquals(array('id'), array_map('strtolower', $fkeys[0]->getForeignColumns()));
- $this->assertEquals('test_create_fk2', strtolower($fkeys[0]->getForeignTableName()));
-
- if($fkeys[0]->hasOption('onDelete')) {
- $this->assertEquals('CASCADE', $fkeys[0]->getOption('onDelete'));
- }
- }
-
- protected function getCreateExampleViewSql()
- {
- $this->markTestSkipped('No Create Example View SQL was defined for this SchemaManager');
- }
-
- public function testCreateSchema()
- {
- $this->createTestTable('test_table');
-
- $schema = $this->_sm->createSchema();
-
- $this->assertTrue($schema->hasTable('test_table'));
- }
-
- public function testAlterTableScenario()
- {
- if(!$this->_sm->getDatabasePlatform()->supportsAlterTable()) {
- $this->markTestSkipped('Alter Table is not supported by this platform.');
- }
-
- $this->createTestTable('alter_table');
- $this->createTestTable('alter_table_foreign');
-
- $table = $this->_sm->listTableDetails('alter_table');
- $this->assertTrue($table->hasColumn('id'));
- $this->assertTrue($table->hasColumn('test'));
- $this->assertTrue($table->hasColumn('foreign_key_test'));
- $this->assertEquals(0, count($table->getForeignKeys()));
- $this->assertEquals(1, count($table->getIndexes()));
-
- $tableDiff = new \Doctrine\DBAL\Schema\TableDiff("alter_table");
- $tableDiff->addedColumns['foo'] = new \Doctrine\DBAL\Schema\Column('foo', Type::getType('integer'));
- $tableDiff->removedColumns['test'] = $table->getColumn('test');
-
- $this->_sm->alterTable($tableDiff);
-
- $table = $this->_sm->listTableDetails('alter_table');
- $this->assertFalse($table->hasColumn('test'));
- $this->assertTrue($table->hasColumn('foo'));
-
- $tableDiff = new \Doctrine\DBAL\Schema\TableDiff("alter_table");
- $tableDiff->addedIndexes[] = new \Doctrine\DBAL\Schema\Index('foo_idx', array('foo'));
-
- $this->_sm->alterTable($tableDiff);
-
- $table = $this->_sm->listTableDetails('alter_table');
- $this->assertEquals(2, count($table->getIndexes()));
- $this->assertTrue($table->hasIndex('foo_idx'));
- $this->assertEquals(array('foo'), array_map('strtolower', $table->getIndex('foo_idx')->getColumns()));
- $this->assertFalse($table->getIndex('foo_idx')->isPrimary());
- $this->assertFalse($table->getIndex('foo_idx')->isUnique());
-
- $tableDiff = new \Doctrine\DBAL\Schema\TableDiff("alter_table");
- $tableDiff->changedIndexes[] = new \Doctrine\DBAL\Schema\Index('foo_idx', array('foo', 'foreign_key_test'));
-
- $this->_sm->alterTable($tableDiff);
-
- $table = $this->_sm->listTableDetails('alter_table');
- $this->assertEquals(2, count($table->getIndexes()));
- $this->assertTrue($table->hasIndex('foo_idx'));
- $this->assertEquals(array('foo', 'foreign_key_test'), array_map('strtolower', $table->getIndex('foo_idx')->getColumns()));
-
- $tableDiff = new \Doctrine\DBAL\Schema\TableDiff("alter_table");
- $tableDiff->removedIndexes[] = new \Doctrine\DBAL\Schema\Index('foo_idx', array('foo', 'foreign_key_test'));
- $fk = new \Doctrine\DBAL\Schema\ForeignKeyConstraint(array('foreign_key_test'), 'alter_table_foreign', array('id'));
- $tableDiff->addedForeignKeys[] = $fk;
-
- $this->_sm->alterTable($tableDiff);
- $table = $this->_sm->listTableDetails('alter_table');
-
- // dont check for index size here, some platforms automatically add indexes for foreign keys.
- $this->assertFalse($table->hasIndex('foo_idx'));
-
- $this->assertEquals(1, count($table->getForeignKeys()));
- $fks = $table->getForeignKeys();
- $foreignKey = current($fks);
- $this->assertEquals('alter_table_foreign', strtolower($foreignKey->getForeignTableName()));
- $this->assertEquals(array('foreign_key_test'), array_map('strtolower', $foreignKey->getColumns()));
- $this->assertEquals(array('id'), array_map('strtolower', $foreignKey->getForeignColumns()));
- }
-
- public function testCreateAndListViews()
- {
- $this->createTestTable('view_test_table');
-
- $name = "doctrine_test_view";
- $sql = "SELECT * FROM view_test_table";
-
- $view = new \Doctrine\DBAL\Schema\View($name, $sql);
-
- $this->_sm->dropAndCreateView($view);
-
- $views = $this->_sm->listViews();
- }
-
- protected function createTestTable($name = 'test_table', $data = array())
- {
- $options = array();
- if (isset($data['options'])) {
- $options = $data['options'];
- }
-
- $table = $this->getTestTable($name, $options);
-
- $this->_sm->dropAndCreateTable($table);
- }
-
- protected function getTestTable($name, $options=array())
- {
- $table = new \Doctrine\DBAL\Schema\Table($name, array(), array(), array(), \Doctrine\DBAL\Schema\Table::ID_NONE, $options);
- $table->setSchemaConfig($this->_sm->createSchemaConfig());
- $table->setIdGeneratorType(\Doctrine\DBAL\Schema\Table::ID_IDENTITY);
- $table->addColumn('id', 'integer', array('notnull' => true));
- $table->setPrimaryKey(array('id'));
- $table->addColumn('test', 'string', array('length' => 255));
- $table->addColumn('foreign_key_test', 'integer');
- return $table;
- }
-
- protected function assertHasTable($tables, $tableName)
- {
- $foundTable = false;
- foreach ($tables AS $table) {
- $this->assertType('Doctrine\DBAL\Schema\Table', $table, 'No Table instance was found in tables array.');
- if (strtolower($table->getName()) == 'list_tables_test_new_name') {
- $foundTable = true;
- }
- }
- $this->assertTrue($foundTable, "Could not find new table");
- }
-}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/DBAL/Functional/Schema/SqliteSchemaManagerTest.php b/tests/Doctrine/Tests/DBAL/Functional/Schema/SqliteSchemaManagerTest.php
deleted file mode 100644
index d819ff1b7..000000000
--- a/tests/Doctrine/Tests/DBAL/Functional/Schema/SqliteSchemaManagerTest.php
+++ /dev/null
@@ -1,60 +0,0 @@
-_sm->listDatabases();
- }
-
- public function testCreateAndDropDatabase()
- {
- $path = dirname(__FILE__).'/test_create_and_drop_sqlite_database.sqlite';
-
- $this->_sm->createDatabase($path);
- $this->assertEquals(true, file_exists($path));
- $this->_sm->dropDatabase($path);
- $this->assertEquals(false, file_exists($path));
- }
-
- /**
- * @expectedException \Exception
- */
- // This test is not correct. createSequence expects an object.
- // PHPUnit wrapping the PHP error in an exception hides this but it shows up
- // when the tests are run in the build (phing).
- /*public function testCreateSequence()
- {
- $this->_sm->createSequence('seqname', 1, 1);
- }*/
-
- /**
- * @expectedException \Exception
- */
- // This test is not correct. createForeignKey expects an object.
- // PHPUnit wrapping the PHP error in an exception hides this but it shows up
- // when the tests are run in the build (phing).
- /*public function testCreateForeignKey()
- {
- $this->_sm->createForeignKey('table', array());
- }*/
-
- /**
- * @expectedException \Exception
- */
- public function testRenameTable()
- {
- $this->_sm->renameTable('oldname', 'newname');
- }
-}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/DBAL/Functional/WriteTest.php b/tests/Doctrine/Tests/DBAL/Functional/WriteTest.php
deleted file mode 100644
index 3b2538fee..000000000
--- a/tests/Doctrine/Tests/DBAL/Functional/WriteTest.php
+++ /dev/null
@@ -1,122 +0,0 @@
-addColumn('test_int', 'integer');
- $table->addColumn('test_string', 'string', array('notnull' => false));
-
- $sm = $this->_conn->getSchemaManager();
- $sm->createTable($table);
- } catch(\Exception $e) {
-
- }
- $this->_conn->executeUpdate('DELETE FROM write_table');
- }
-
- public function testExecuteUpdate()
- {
- $sql = "INSERT INTO " . $this->_conn->quoteIdentifier('write_table') . " ( " .
- $this->_conn->quoteIdentifier('test_int') . " ) VALUES ( " . $this->_conn->quote(1) . ")";
- $affected = $this->_conn->executeUpdate($sql);
-
- $this->assertEquals(1, $affected, "executeUpdate() should return the number of affected rows!");
- }
-
- public function testExecuteUpdateWithTypes()
- {
- $sql = "INSERT INTO write_table (test_int, test_string) VALUES (?, ?)";
- $affected = $this->_conn->executeUpdate($sql, array(1, 'foo'), array(\PDO::PARAM_INT, \PDO::PARAM_STR));
-
- $this->assertEquals(1, $affected, "executeUpdate() should return the number of affected rows!");
- }
-
- public function testPrepareRowCountReturnsAffectedRows()
- {
- $sql = "INSERT INTO write_table (test_int, test_string) VALUES (?, ?)";
- $stmt = $this->_conn->prepare($sql);
-
- $stmt->bindValue(1, 1);
- $stmt->bindValue(2, "foo");
- $stmt->execute();
-
- $this->assertEquals(1, $stmt->rowCount());
- }
-
- public function testPrepareWithPdoTypes()
- {
- $sql = "INSERT INTO write_table (test_int, test_string) VALUES (?, ?)";
- $stmt = $this->_conn->prepare($sql);
-
- $stmt->bindValue(1, 1, \PDO::PARAM_INT);
- $stmt->bindValue(2, "foo", \PDO::PARAM_STR);
- $stmt->execute();
-
- $this->assertEquals(1, $stmt->rowCount());
- }
-
- public function testPrepareWithDbalTypes()
- {
- $sql = "INSERT INTO write_table (test_int, test_string) VALUES (?, ?)";
- $stmt = $this->_conn->prepare($sql);
-
- $stmt->bindValue(1, 1, Type::getType('integer'));
- $stmt->bindValue(2, "foo", Type::getType('string'));
- $stmt->execute();
-
- $this->assertEquals(1, $stmt->rowCount());
- }
-
- public function testPrepareWithDbalTypeNames()
- {
- $sql = "INSERT INTO write_table (test_int, test_string) VALUES (?, ?)";
- $stmt = $this->_conn->prepare($sql);
-
- $stmt->bindValue(1, 1, 'integer');
- $stmt->bindValue(2, "foo", 'string');
- $stmt->execute();
-
- $this->assertEquals(1, $stmt->rowCount());
- }
-
- public function insertRows()
- {
- $this->assertEquals(1, $this->_conn->insert('write_table', array('test_int' => 1)));
- $this->assertEquals(1, $this->_conn->insert('write_table', array('test_int' => 2)));
- }
-
- public function testInsert()
- {
- $this->insertRows();
- }
-
- public function testDelete()
- {
- $this->insertRows();
-
- $this->assertEquals(1, $this->_conn->delete('write_table', array('test_int' => 2)));
- $this->assertEquals(1, count($this->_conn->fetchAll('SELECT * FROM write_table')));
-
- $this->assertEquals(1, $this->_conn->delete('write_table', array('test_int' => 1)));
- $this->assertEquals(0, count($this->_conn->fetchAll('SELECT * FROM write_table')));
- }
-
- public function testUpdate()
- {
- $this->insertRows();
-
- $this->assertEquals(1, $this->_conn->update('write_table', array('test_int' => 2), array('test_int' => 1)));
- $this->assertEquals(2, $this->_conn->update('write_table', array('test_int' => 3), array('test_int' => 2)));
- }
-}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/DBAL/Mocks/MockPlatform.php b/tests/Doctrine/Tests/DBAL/Mocks/MockPlatform.php
deleted file mode 100644
index 95e6b55b4..000000000
--- a/tests/Doctrine/Tests/DBAL/Mocks/MockPlatform.php
+++ /dev/null
@@ -1,35 +0,0 @@
-_platform = $this->createPlatform();
- }
-
- public function testCreateWithNoColumns()
- {
- $table = new \Doctrine\DBAL\Schema\Table('test');
-
- $this->setExpectedException('Doctrine\DBAL\DBALException');
- $sql = $this->_platform->getCreateTableSQL($table);
- }
-
- public function testGeneratesTableCreationSql()
- {
- $table = new \Doctrine\DBAL\Schema\Table('test');
- $table->addColumn('id', 'integer', array('notnull' => true));
- $table->addColumn('test', 'string', array('notnull' => false, 'length' => 255));
- $table->setPrimaryKey(array('id'));
- $table->setIdGeneratorType(\Doctrine\DBAL\Schema\Table::ID_IDENTITY);
-
- $sql = $this->_platform->getCreateTableSQL($table);
- $this->assertEquals($this->getGenerateTableSql(), $sql[0]);
- }
-
- abstract public function getGenerateTableSql();
-
- public function testGenerateTableWithMultiColumnUniqueIndex()
- {
- $table = new \Doctrine\DBAL\Schema\Table('test');
- $table->addColumn('foo', 'string', array('notnull' => false, 'length' => 255));
- $table->addColumn('bar', 'string', array('notnull' => false, 'length' => 255));
- $table->addUniqueIndex(array("foo", "bar"));
-
- $sql = $this->_platform->getCreateTableSQL($table);
- $this->assertEquals($this->getGenerateTableWithMultiColumnUniqueIndexSql(), $sql);
- }
-
- abstract public function getGenerateTableWithMultiColumnUniqueIndexSql();
-
- public function testGeneratesIndexCreationSql()
- {
- $indexDef = new \Doctrine\DBAL\Schema\Index('my_idx', array('user_name', 'last_login'));
-
- $this->assertEquals(
- $this->getGenerateIndexSql(),
- $this->_platform->getCreateIndexSQL($indexDef, 'mytable')
- );
- }
-
- abstract public function getGenerateIndexSql();
-
- public function testGeneratesUniqueIndexCreationSql()
- {
- $indexDef = new \Doctrine\DBAL\Schema\Index('index_name', array('test', 'test2'), true);
-
- $sql = $this->_platform->getCreateIndexSQL($indexDef, 'test');
- $this->assertEquals($this->getGenerateUniqueIndexSql(), $sql);
- }
-
- abstract public function getGenerateUniqueIndexSql();
-
- public function testGeneratesForeignKeyCreationSql()
- {
- $fk = new \Doctrine\DBAL\Schema\ForeignKeyConstraint(array('fk_name_id'), 'other_table', array('id'), '');
-
- $sql = $this->_platform->getCreateForeignKeySQL($fk, 'test');
- $this->assertEquals($sql, $this->getGenerateForeignKeySql());
- }
-
- abstract public function getGenerateForeignKeySql();
-
- public function testGeneratesConstraintCreationSql()
- {
- $idx = new \Doctrine\DBAL\Schema\Index('constraint_name', array('test'), true, false);
- $sql = $this->_platform->getCreateConstraintSQL($idx, 'test');
- $this->assertEquals($this->getGenerateConstraintUniqueIndexSql(), $sql);
-
- $pk = new \Doctrine\DBAL\Schema\Index('constraint_name', array('test'), true, true);
- $sql = $this->_platform->getCreateConstraintSQL($pk, 'test');
- $this->assertEquals($this->getGenerateConstraintPrimaryIndexSql(), $sql);
-
- $fk = new \Doctrine\DBAL\Schema\ForeignKeyConstraint(array('fk_name'), 'foreign', array('id'), 'constraint_fk');
- $sql = $this->_platform->getCreateConstraintSQL($fk, 'test');
- $this->assertEquals($this->getGenerateConstraintForeignKeySql(), $sql);
- }
-
- public function getGenerateConstraintUniqueIndexSql()
- {
- return 'ALTER TABLE test ADD CONSTRAINT constraint_name UNIQUE (test)';
- }
-
- public function getGenerateConstraintPrimaryIndexSql()
- {
- return 'ALTER TABLE test ADD CONSTRAINT constraint_name PRIMARY KEY (test)';
- }
-
- public function getGenerateConstraintForeignKeySql()
- {
- return 'ALTER TABLE test ADD CONSTRAINT constraint_fk FOREIGN KEY (fk_name) REFERENCES foreign (id)';
- }
-
- abstract public function getGenerateAlterTableSql();
-
- public function testGeneratesTableAlterationSql()
- {
- $expectedSql = $this->getGenerateAlterTableSql();
-
- $columnDiff = new \Doctrine\DBAL\Schema\ColumnDiff(
- 'bar', new \Doctrine\DBAL\Schema\Column(
- 'baz', \Doctrine\DBAL\Types\Type::getType('string'), array('default' => 'def')
- ),
- array('type', 'notnull', 'default')
- );
-
- $tableDiff = new \Doctrine\DBAL\Schema\TableDiff('mytable');
- $tableDiff->newName = 'userlist';
- $tableDiff->addedColumns['quota'] = new \Doctrine\DBAL\Schema\Column('quota', \Doctrine\DBAL\Types\Type::getType('integer'), array('notnull' => false));
- $tableDiff->removedColumns['foo'] = new \Doctrine\DBAL\Schema\Column('foo', \Doctrine\DBAL\Types\Type::getType('integer'));
- $tableDiff->changedColumns['bar'] = $columnDiff;
-
- $sql = $this->_platform->getAlterTableSQL($tableDiff);
-
- $this->assertEquals($expectedSql, $sql);
- }
-
- public function testGetCustomColumnDeclarationSql()
- {
- $field = array('columnDefinition' => 'MEDIUMINT(6) UNSIGNED');
- $this->assertEquals('foo MEDIUMINT(6) UNSIGNED', $this->_platform->getColumnDeclarationSQL('foo', $field));
- }
-}
diff --git a/tests/Doctrine/Tests/DBAL/Platforms/MsSqlPlatformTest.php b/tests/Doctrine/Tests/DBAL/Platforms/MsSqlPlatformTest.php
deleted file mode 100644
index 1302be035..000000000
--- a/tests/Doctrine/Tests/DBAL/Platforms/MsSqlPlatformTest.php
+++ /dev/null
@@ -1,160 +0,0 @@
-assertEquals('RLIKE', $this->_platform->getRegexpExpression(), 'Regular expression operator is not correct');
- $this->assertEquals('"', $this->_platform->getIdentifierQuoteCharacter(), 'Identifier quote character is not correct');
- $this->assertEquals('(column1 + column2 + column3)', $this->_platform->getConcatExpression('column1', 'column2', 'column3'), 'Concatenation expression is not correct');
- }
-
- public function testGeneratesTransactionsCommands()
- {
- $this->assertEquals(
- 'SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED',
- $this->_platform->getSetTransactionIsolationSQL(\Doctrine\DBAL\Connection::TRANSACTION_READ_UNCOMMITTED)
- );
- $this->assertEquals(
- 'SET TRANSACTION ISOLATION LEVEL READ COMMITTED',
- $this->_platform->getSetTransactionIsolationSQL(\Doctrine\DBAL\Connection::TRANSACTION_READ_COMMITTED)
- );
- $this->assertEquals(
- 'SET TRANSACTION ISOLATION LEVEL REPEATABLE READ',
- $this->_platform->getSetTransactionIsolationSQL(\Doctrine\DBAL\Connection::TRANSACTION_REPEATABLE_READ)
- );
- $this->assertEquals(
- 'SET TRANSACTION ISOLATION LEVEL SERIALIZABLE',
- $this->_platform->getSetTransactionIsolationSQL(\Doctrine\DBAL\Connection::TRANSACTION_SERIALIZABLE)
- );
- }
-
- public function testGeneratesDDLSnippets()
- {
- $this->assertEquals('SHOW DATABASES', $this->_platform->getShowDatabasesSQL());
- $this->assertEquals('CREATE DATABASE foobar', $this->_platform->getCreateDatabaseSQL('foobar'));
- $this->assertEquals('DROP DATABASE foobar', $this->_platform->getDropDatabaseSQL('foobar'));
- $this->assertEquals('DROP TABLE foobar', $this->_platform->getDropTableSQL('foobar'));
- }
-
- public function testGeneratesTypeDeclarationForIntegers()
- {
- $this->assertEquals(
- 'INT',
- $this->_platform->getIntegerTypeDeclarationSQL(array())
- );
- $this->assertEquals(
- 'INT AUTO_INCREMENT',
- $this->_platform->getIntegerTypeDeclarationSQL(array('autoincrement' => true)
- ));
- $this->assertEquals(
- 'INT AUTO_INCREMENT',
- $this->_platform->getIntegerTypeDeclarationSQL(
- array('autoincrement' => true, 'primary' => true)
- ));
- }
-
- public function testGeneratesTypeDeclarationsForStrings()
- {
- $this->assertEquals(
- 'CHAR(10)',
- $this->_platform->getVarcharTypeDeclarationSQL(
- array('length' => 10, 'fixed' => true)
- ));
- $this->assertEquals(
- 'VARCHAR(50)',
- $this->_platform->getVarcharTypeDeclarationSQL(array('length' => 50)),
- 'Variable string declaration is not correct'
- );
- $this->assertEquals(
- 'TEXT',
- $this->_platform->getVarcharTypeDeclarationSQL(array()),
- 'Long string declaration is not correct'
- );
- }
-
- public function testPrefersIdentityColumns()
- {
- $this->assertTrue($this->_platform->prefersIdentityColumns());
- }
-
- public function testSupportsIdentityColumns()
- {
- $this->assertTrue($this->_platform->supportsIdentityColumns());
- }
-
- public function testDoesNotSupportSavePoints()
- {
- $this->assertFalse($this->_platform->supportsSavepoints());
- }
-
- public function getGenerateIndexSql()
- {
- return 'CREATE INDEX my_idx ON mytable (user_name, last_login)';
- }
-
- public function getGenerateUniqueIndexSql()
- {
- return 'CREATE UNIQUE INDEX index_name ON test (test, test2)';
- }
-
- public function getGenerateForeignKeySql()
- {
- return 'ALTER TABLE test ADD FOREIGN KEY (fk_name_id) REFERENCES other_table(id)';
- }
-
- public function testModifyLimitQuery()
- {
- $sql = $this->_platform->modifyLimitQuery('SELECT * FROM user', 10, 0);
- $this->assertEquals('SELECT * FROM (SELECT TOP 10 * FROM (SELECT TOP 10 * FROM user) AS inner_tbl) AS outer_tbl', $sql);
- }
-
- public function testModifyLimitQueryWithEmptyOffset()
- {
- $sql = $this->_platform->modifyLimitQuery('SELECT * FROM user', 10);
- $this->assertEquals('SELECT * FROM (SELECT TOP 10 * FROM (SELECT TOP 10 * FROM user) AS inner_tbl) AS outer_tbl', $sql);
- }
-
- public function testModifyLimitQueryWithAscOrderBy()
- {
- $sql = $this->_platform->modifyLimitQuery('SELECT * FROM user ORDER BY username ASC', 10);
- $this->assertEquals('SELECT * FROM (SELECT TOP 10 * FROM (SELECT TOP 10 * FROM user ORDER BY username ASC) AS inner_tbl ORDER BY inner_tbl.u DESC) AS outer_tbl ORDER BY outer_tbl.u ASC', $sql);
- }
-
- public function testModifyLimitQueryWithDescOrderBy()
- {
- $sql = $this->_platform->modifyLimitQuery('SELECT * FROM user ORDER BY username DESC', 10);
- $this->assertEquals('SELECT * FROM (SELECT TOP 10 * FROM (SELECT TOP 10 * FROM user ORDER BY username DESC) AS inner_tbl ORDER BY inner_tbl.u ASC) AS outer_tbl ORDER BY outer_tbl.u DESC', $sql);
- }
-}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/DBAL/Platforms/MySqlPlatformTest.php b/tests/Doctrine/Tests/DBAL/Platforms/MySqlPlatformTest.php
deleted file mode 100644
index 8dbeac5db..000000000
--- a/tests/Doctrine/Tests/DBAL/Platforms/MySqlPlatformTest.php
+++ /dev/null
@@ -1,169 +0,0 @@
-addColumn("Bar", "integer");
-
- $sql = $this->_platform->getCreateTableSQL($table);
- $this->assertEquals('CREATE TABLE Foo (Bar INT NOT NULL) ENGINE = InnoDB', array_shift($sql));
- }
-
- public function getGenerateTableSql()
- {
- return 'CREATE TABLE test (id INT AUTO_INCREMENT NOT NULL, test VARCHAR(255) DEFAULT NULL, PRIMARY KEY(id)) ENGINE = InnoDB';
- }
-
- public function getGenerateTableWithMultiColumnUniqueIndexSql()
- {
- return array(
- 'CREATE TABLE test (foo VARCHAR(255) DEFAULT NULL, bar VARCHAR(255) DEFAULT NULL, UNIQUE INDEX test_foo_bar_uniq (foo, bar)) ENGINE = InnoDB'
- );
- }
-
- public function getGenerateAlterTableSql()
- {
- return array(
- "ALTER TABLE mytable RENAME TO userlist, ADD quota INT DEFAULT NULL, DROP foo, CHANGE bar baz VARCHAR(255) DEFAULT 'def' NOT NULL"
- );
- }
-
- public function testGeneratesSqlSnippets()
- {
- $this->assertEquals('RLIKE', $this->_platform->getRegexpExpression(), 'Regular expression operator is not correct');
- $this->assertEquals('`', $this->_platform->getIdentifierQuoteCharacter(), 'Quote character is not correct');
- $this->assertEquals('CONCAT(column1, column2, column3)', $this->_platform->getConcatExpression('column1', 'column2', 'column3'), 'Concatenation function is not correct');
- }
-
- public function testGeneratesTransactionsCommands()
- {
- $this->assertEquals(
- 'SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED',
- $this->_platform->getSetTransactionIsolationSQL(\Doctrine\DBAL\Connection::TRANSACTION_READ_UNCOMMITTED),
- ''
- );
- $this->assertEquals(
- 'SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED',
- $this->_platform->getSetTransactionIsolationSQL(\Doctrine\DBAL\Connection::TRANSACTION_READ_COMMITTED)
- );
- $this->assertEquals(
- 'SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ',
- $this->_platform->getSetTransactionIsolationSQL(\Doctrine\DBAL\Connection::TRANSACTION_REPEATABLE_READ)
- );
- $this->assertEquals(
- 'SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE',
- $this->_platform->getSetTransactionIsolationSQL(\Doctrine\DBAL\Connection::TRANSACTION_SERIALIZABLE)
- );
- }
-
-
- public function testGeneratesDDLSnippets()
- {
- $this->assertEquals('SHOW DATABASES', $this->_platform->getShowDatabasesSQL());
- $this->assertEquals('CREATE DATABASE foobar', $this->_platform->getCreateDatabaseSQL('foobar'));
- $this->assertEquals('DROP DATABASE foobar', $this->_platform->getDropDatabaseSQL('foobar'));
- $this->assertEquals('DROP TABLE foobar', $this->_platform->getDropTableSQL('foobar'));
- }
-
- public function testGeneratesTypeDeclarationForIntegers()
- {
- $this->assertEquals(
- 'INT',
- $this->_platform->getIntegerTypeDeclarationSQL(array())
- );
- $this->assertEquals(
- 'INT AUTO_INCREMENT',
- $this->_platform->getIntegerTypeDeclarationSQL(array('autoincrement' => true)
- ));
- $this->assertEquals(
- 'INT AUTO_INCREMENT',
- $this->_platform->getIntegerTypeDeclarationSQL(
- array('autoincrement' => true, 'primary' => true)
- ));
- }
-
- public function testGeneratesTypeDeclarationForStrings()
- {
- $this->assertEquals(
- 'CHAR(10)',
- $this->_platform->getVarcharTypeDeclarationSQL(
- array('length' => 10, 'fixed' => true)
- ));
- $this->assertEquals(
- 'VARCHAR(50)',
- $this->_platform->getVarcharTypeDeclarationSQL(array('length' => 50)),
- 'Variable string declaration is not correct'
- );
- $this->assertEquals(
- 'VARCHAR(255)',
- $this->_platform->getVarcharTypeDeclarationSQL(array()),
- 'Long string declaration is not correct'
- );
- }
-
- public function testPrefersIdentityColumns()
- {
- $this->assertTrue($this->_platform->prefersIdentityColumns());
- }
-
- public function testSupportsIdentityColumns()
- {
- $this->assertTrue($this->_platform->supportsIdentityColumns());
- }
-
- public function testDoesNotSupportSavePoints()
- {
- $this->assertFalse($this->_platform->supportsSavepoints());
- }
-
- public function getGenerateIndexSql()
- {
- return 'CREATE INDEX my_idx ON mytable (user_name, last_login)';
- }
-
- public function getGenerateUniqueIndexSql()
- {
- return 'CREATE UNIQUE INDEX index_name ON test (test, test2)';
- }
-
- public function getGenerateForeignKeySql()
- {
- return 'ALTER TABLE test ADD FOREIGN KEY (fk_name_id) REFERENCES other_table(id)';
- }
-
- public function testModifyLimitQuery()
- {
- $sql = $this->_platform->modifyLimitQuery('SELECT * FROM user', 10, 0);
- $this->assertEquals('SELECT * FROM user LIMIT 10 OFFSET 0', $sql);
- }
-
- public function testModifyLimitQueryWithEmptyOffset()
- {
- $sql = $this->_platform->modifyLimitQuery('SELECT * FROM user', 10);
- $this->assertEquals('SELECT * FROM user LIMIT 10', $sql);
- }
-
- /**
- * @group DDC-118
- */
- public function testGetDateTimeTypeDeclarationSql()
- {
- $this->assertEquals("DATETIME", $this->_platform->getDateTimeTypeDeclarationSQL(array('version' => false)));
- $this->assertEquals("TIMESTAMP", $this->_platform->getDateTimeTypeDeclarationSQL(array('version' => true)));
- $this->assertEquals("DATETIME", $this->_platform->getDateTimeTypeDeclarationSQL(array()));
- }
-}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/DBAL/Platforms/OraclePlatformTest.php b/tests/Doctrine/Tests/DBAL/Platforms/OraclePlatformTest.php
deleted file mode 100644
index 8fb24abf6..000000000
--- a/tests/Doctrine/Tests/DBAL/Platforms/OraclePlatformTest.php
+++ /dev/null
@@ -1,189 +0,0 @@
-assertEquals('RLIKE', $this->_platform->getRegexpExpression(), 'Regular expression operator is not correct');
- }
-
- public function testGeneratesSqlSnippets()
- {
- $this->assertEquals('"', $this->_platform->getIdentifierQuoteCharacter(), 'Identifier quote character is not correct');
- $this->assertEquals('column1 || column2 || column3', $this->_platform->getConcatExpression('column1', 'column2', 'column3'), 'Concatenation expression is not correct');
- }
-
- public function testGeneratesTransactionsCommands()
- {
- $this->assertEquals(
- 'SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED',
- $this->_platform->getSetTransactionIsolationSQL(\Doctrine\DBAL\Connection::TRANSACTION_READ_UNCOMMITTED)
- );
- $this->assertEquals(
- 'SET TRANSACTION ISOLATION LEVEL READ COMMITTED',
- $this->_platform->getSetTransactionIsolationSQL(\Doctrine\DBAL\Connection::TRANSACTION_READ_COMMITTED)
- );
- $this->assertEquals(
- 'SET TRANSACTION ISOLATION LEVEL SERIALIZABLE',
- $this->_platform->getSetTransactionIsolationSQL(\Doctrine\DBAL\Connection::TRANSACTION_REPEATABLE_READ)
- );
- $this->assertEquals(
- 'SET TRANSACTION ISOLATION LEVEL SERIALIZABLE',
- $this->_platform->getSetTransactionIsolationSQL(\Doctrine\DBAL\Connection::TRANSACTION_SERIALIZABLE)
- );
- }
-
- /**
- * @expectedException Doctrine\DBAL\DBALException
- */
- public function testShowDatabasesThrowsException()
- {
- $this->assertEquals('SHOW DATABASES', $this->_platform->getShowDatabasesSQL());
- }
-
- /**
- * @expectedException Doctrine\DBAL\DBALException
- */
- public function testCreateDatabaseThrowsException()
- {
- $this->assertEquals('CREATE DATABASE foobar', $this->_platform->getCreateDatabaseSQL('foobar'));
- }
-
- public function testDropDatabaseThrowsException()
- {
- $this->assertEquals('DROP USER foobar CASCADE', $this->_platform->getDropDatabaseSQL('foobar'));
- }
-
- public function testDropTable()
- {
- $this->assertEquals('DROP TABLE foobar', $this->_platform->getDropTableSQL('foobar'));
- }
-
- public function testGeneratesTypeDeclarationForIntegers()
- {
- $this->assertEquals(
- 'NUMBER(10)',
- $this->_platform->getIntegerTypeDeclarationSQL(array())
- );
- $this->assertEquals(
- 'NUMBER(10)',
- $this->_platform->getIntegerTypeDeclarationSQL(array('autoincrement' => true)
- ));
- $this->assertEquals(
- 'NUMBER(10)',
- $this->_platform->getIntegerTypeDeclarationSQL(
- array('autoincrement' => true, 'primary' => true)
- ));
- }
-
- public function testGeneratesTypeDeclarationsForStrings()
- {
- $this->assertEquals(
- 'CHAR(10)',
- $this->_platform->getVarcharTypeDeclarationSQL(
- array('length' => 10, 'fixed' => true)
- ));
- $this->assertEquals(
- 'VARCHAR2(50)',
- $this->_platform->getVarcharTypeDeclarationSQL(array('length' => 50)),
- 'Variable string declaration is not correct'
- );
- $this->assertEquals(
- 'VARCHAR2(4000)',
- $this->_platform->getVarcharTypeDeclarationSQL(array()),
- 'Long string declaration is not correct'
- );
- }
-
- public function testPrefersIdentityColumns()
- {
- $this->assertFalse($this->_platform->prefersIdentityColumns());
- }
-
- public function testSupportsIdentityColumns()
- {
- $this->assertFalse($this->_platform->supportsIdentityColumns());
- }
-
- public function testSupportsSavePoints()
- {
- $this->assertTrue($this->_platform->supportsSavepoints());
- }
-
- public function getGenerateIndexSql()
- {
- return 'CREATE INDEX my_idx ON mytable (user_name, last_login)';
- }
-
- public function getGenerateUniqueIndexSql()
- {
- return 'CREATE UNIQUE INDEX index_name ON test (test, test2)';
- }
-
- public function getGenerateForeignKeySql()
- {
- return 'ALTER TABLE test ADD FOREIGN KEY (fk_name_id) REFERENCES other_table(id)';
- }
-
- public function testModifyLimitQuery()
- {
- $sql = $this->_platform->modifyLimitQuery('SELECT * FROM user', 10, 0);
- $this->assertEquals('SELECT a.* FROM (SELECT * FROM user) a WHERE ROWNUM <= 10', $sql);
- }
-
- public function testModifyLimitQueryWithEmptyOffset()
- {
- $sql = $this->_platform->modifyLimitQuery('SELECT * FROM user', 10);
- $this->assertEquals('SELECT a.* FROM (SELECT * FROM user) a WHERE ROWNUM <= 10', $sql);
- }
-
- public function testModifyLimitQueryWithAscOrderBy()
- {
- $sql = $this->_platform->modifyLimitQuery('SELECT * FROM user ORDER BY username ASC', 10);
- $this->assertEquals('SELECT a.* FROM (SELECT * FROM user ORDER BY username ASC) a WHERE ROWNUM <= 10', $sql);
- }
-
- public function testModifyLimitQueryWithDescOrderBy()
- {
- $sql = $this->_platform->modifyLimitQuery('SELECT * FROM user ORDER BY username DESC', 10);
- $this->assertEquals('SELECT a.* FROM (SELECT * FROM user ORDER BY username DESC) a WHERE ROWNUM <= 10', $sql);
- }
-}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/DBAL/Platforms/PostgreSqlPlatformTest.php b/tests/Doctrine/Tests/DBAL/Platforms/PostgreSqlPlatformTest.php
deleted file mode 100644
index 38681b3e1..000000000
--- a/tests/Doctrine/Tests/DBAL/Platforms/PostgreSqlPlatformTest.php
+++ /dev/null
@@ -1,193 +0,0 @@
- 'CASCADE')
- );
- $this->assertEquals(
- "CONSTRAINT my_fk FOREIGN KEY (foreign_id) REFERENCES my_table(id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE",
- $this->_platform->getForeignKeyDeclarationSQL($foreignKey)
- );
- }
-
- public function testGeneratesSqlSnippets()
- {
- $this->assertEquals('SIMILAR TO', $this->_platform->getRegexpExpression(), 'Regular expression operator is not correct');
- $this->assertEquals('"', $this->_platform->getIdentifierQuoteCharacter(), 'Identifier quote character is not correct');
- $this->assertEquals('column1 || column2 || column3', $this->_platform->getConcatExpression('column1', 'column2', 'column3'), 'Concatenation expression is not correct');
- $this->assertEquals('SUBSTR(column, 5)', $this->_platform->getSubstringExpression('column', 5), 'Substring expression without length is not correct');
- $this->assertEquals('SUBSTR(column, 0, 5)', $this->_platform->getSubstringExpression('column', 0, 5), 'Substring expression with length is not correct');
- }
-
- public function testGeneratesTransactionCommands()
- {
- $this->assertEquals(
- 'SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL READ UNCOMMITTED',
- $this->_platform->getSetTransactionIsolationSQL(\Doctrine\DBAL\Connection::TRANSACTION_READ_UNCOMMITTED)
- );
- $this->assertEquals(
- 'SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL READ COMMITTED',
- $this->_platform->getSetTransactionIsolationSQL(\Doctrine\DBAL\Connection::TRANSACTION_READ_COMMITTED)
- );
- $this->assertEquals(
- 'SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL REPEATABLE READ',
- $this->_platform->getSetTransactionIsolationSQL(\Doctrine\DBAL\Connection::TRANSACTION_REPEATABLE_READ)
- );
- $this->assertEquals(
- 'SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL SERIALIZABLE',
- $this->_platform->getSetTransactionIsolationSQL(\Doctrine\DBAL\Connection::TRANSACTION_SERIALIZABLE)
- );
- }
-
- public function testGeneratesDDLSnippets()
- {
- $this->assertEquals('CREATE DATABASE foobar', $this->_platform->getCreateDatabaseSQL('foobar'));
- $this->assertEquals('DROP DATABASE foobar', $this->_platform->getDropDatabaseSQL('foobar'));
- $this->assertEquals('DROP TABLE foobar', $this->_platform->getDropTableSQL('foobar'));
- }
-
- public function testGeneratesTypeDeclarationForIntegers()
- {
- $this->assertEquals(
- 'INT',
- $this->_platform->getIntegerTypeDeclarationSQL(array())
- );
- $this->assertEquals(
- 'SERIAL',
- $this->_platform->getIntegerTypeDeclarationSQL(array('autoincrement' => true)
- ));
- $this->assertEquals(
- 'SERIAL',
- $this->_platform->getIntegerTypeDeclarationSQL(
- array('autoincrement' => true, 'primary' => true)
- ));
- }
-
- public function testGeneratesTypeDeclarationForStrings()
- {
- $this->assertEquals(
- 'CHAR(10)',
- $this->_platform->getVarcharTypeDeclarationSQL(
- array('length' => 10, 'fixed' => true))
- );
- $this->assertEquals(
- 'VARCHAR(50)',
- $this->_platform->getVarcharTypeDeclarationSQL(array('length' => 50)),
- 'Variable string declaration is not correct'
- );
- $this->assertEquals(
- 'TEXT',
- $this->_platform->getVarcharTypeDeclarationSQL(array()),
- 'Long string declaration is not correct'
- );
- }
-
- public function getGenerateUniqueIndexSql()
- {
- return 'CREATE UNIQUE INDEX index_name ON test (test, test2)';
- }
-
- public function testGeneratesSequenceSqlCommands()
- {
- $sequence = new \Doctrine\DBAL\Schema\Sequence('myseq', 20, 1);
- $this->assertEquals(
- 'CREATE SEQUENCE myseq INCREMENT BY 20 MINVALUE 1 START 1',
- $this->_platform->getCreateSequenceSQL($sequence)
- );
- $this->assertEquals(
- 'DROP SEQUENCE myseq',
- $this->_platform->getDropSequenceSQL('myseq')
- );
- $this->assertEquals(
- "SELECT NEXTVAL('myseq')",
- $this->_platform->getSequenceNextValSQL('myseq')
- );
- }
-
- public function testDoesNotPreferIdentityColumns()
- {
- $this->assertFalse($this->_platform->prefersIdentityColumns());
- }
-
- public function testPrefersSequences()
- {
- $this->assertTrue($this->_platform->prefersSequences());
- }
-
- public function testSupportsIdentityColumns()
- {
- $this->assertTrue($this->_platform->supportsIdentityColumns());
- }
-
- public function testSupportsSavePoints()
- {
- $this->assertTrue($this->_platform->supportsSavepoints());
- }
-
- public function testSupportsSequences()
- {
- $this->assertTrue($this->_platform->supportsSequences());
- }
-
- public function testModifyLimitQuery()
- {
- $sql = $this->_platform->modifyLimitQuery('SELECT * FROM user', 10, 0);
- $this->assertEquals('SELECT * FROM user LIMIT 10 OFFSET 0', $sql);
- }
-
- public function testModifyLimitQueryWithEmptyOffset()
- {
- $sql = $this->_platform->modifyLimitQuery('SELECT * FROM user', 10);
- $this->assertEquals('SELECT * FROM user LIMIT 10', $sql);
- }
-}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/DBAL/Platforms/SqlitePlatformTest.php b/tests/Doctrine/Tests/DBAL/Platforms/SqlitePlatformTest.php
deleted file mode 100644
index fae5538e3..000000000
--- a/tests/Doctrine/Tests/DBAL/Platforms/SqlitePlatformTest.php
+++ /dev/null
@@ -1,129 +0,0 @@
-assertEquals('RLIKE', $this->_platform->getRegexpExpression(), 'Regular expression operator is not correct');
- $this->assertEquals('SUBSTR(column, 5, LENGTH(column))', $this->_platform->getSubstringExpression('column', 5), 'Substring expression without length is not correct');
- $this->assertEquals('SUBSTR(column, 0, 5)', $this->_platform->getSubstringExpression('column', 0, 5), 'Substring expression with length is not correct');
- }
-
- public function testGeneratesTransactionCommands()
- {
- $this->assertEquals(
- 'PRAGMA read_uncommitted = 0',
- $this->_platform->getSetTransactionIsolationSQL(\Doctrine\DBAL\Connection::TRANSACTION_READ_UNCOMMITTED)
- );
- $this->assertEquals(
- 'PRAGMA read_uncommitted = 1',
- $this->_platform->getSetTransactionIsolationSQL(\Doctrine\DBAL\Connection::TRANSACTION_READ_COMMITTED)
- );
- $this->assertEquals(
- 'PRAGMA read_uncommitted = 1',
- $this->_platform->getSetTransactionIsolationSQL(\Doctrine\DBAL\Connection::TRANSACTION_REPEATABLE_READ)
- );
- $this->assertEquals(
- 'PRAGMA read_uncommitted = 1',
- $this->_platform->getSetTransactionIsolationSQL(\Doctrine\DBAL\Connection::TRANSACTION_SERIALIZABLE)
- );
- }
-
- public function testPrefersIdentityColumns()
- {
- $this->assertTrue($this->_platform->prefersIdentityColumns());
- }
-
- public function testGeneratesTypeDeclarationForIntegers()
- {
- $this->assertEquals(
- 'INTEGER',
- $this->_platform->getIntegerTypeDeclarationSQL(array())
- );
- $this->assertEquals(
- 'INTEGER AUTOINCREMENT',
- $this->_platform->getIntegerTypeDeclarationSQL(array('autoincrement' => true))
- );
- $this->assertEquals(
- 'INTEGER PRIMARY KEY AUTOINCREMENT',
- $this->_platform->getIntegerTypeDeclarationSQL(
- array('autoincrement' => true, 'primary' => true))
- );
- }
-
- public function testGeneratesTypeDeclarationForStrings()
- {
- $this->assertEquals(
- 'CHAR(10)',
- $this->_platform->getVarcharTypeDeclarationSQL(
- array('length' => 10, 'fixed' => true))
- );
- $this->assertEquals(
- 'VARCHAR(50)',
- $this->_platform->getVarcharTypeDeclarationSQL(array('length' => 50)),
- 'Variable string declaration is not correct'
- );
- $this->assertEquals(
- 'TEXT',
- $this->_platform->getVarcharTypeDeclarationSQL(array()),
- 'Long string declaration is not correct'
- );
- }
-
- public function getGenerateIndexSql()
- {
- return 'CREATE INDEX my_idx ON mytable (user_name, last_login)';
- }
-
- public function getGenerateUniqueIndexSql()
- {
- return 'CREATE UNIQUE INDEX index_name ON test (test, test2)';
- }
-
- public function getGenerateForeignKeySql()
- {
- $this->markTestSkipped('SQLite does not support ForeignKeys.');
- }
-
- public function testModifyLimitQuery()
- {
- $sql = $this->_platform->modifyLimitQuery('SELECT * FROM user', 10, 0);
- $this->assertEquals('SELECT * FROM user LIMIT 10 OFFSET 0', $sql);
- }
-
- public function testModifyLimitQueryWithEmptyOffset()
- {
- $sql = $this->_platform->modifyLimitQuery('SELECT * FROM user', 10);
- $this->assertEquals('SELECT * FROM user LIMIT 10', $sql);
- }
-
- public function getGenerateAlterTableSql()
- {
- $this->markTestSkipped('SQlite does not support ALTER Table.');
- }
-}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/DBAL/Schema/ColumnTest.php b/tests/Doctrine/Tests/DBAL/Schema/ColumnTest.php
deleted file mode 100644
index 4b6cd85a4..000000000
--- a/tests/Doctrine/Tests/DBAL/Schema/ColumnTest.php
+++ /dev/null
@@ -1,73 +0,0 @@
-createColumn();
-
- $this->assertEquals("foo", $column->getName());
- $this->assertSame(Type::getType('string'), $column->getType());
-
- $this->assertEquals(200, $column->getLength());
- $this->assertEquals(5, $column->getPrecision());
- $this->assertEquals(2, $column->getScale());
- $this->assertTrue($column->getUnsigned());
- $this->assertFalse($column->getNotNull());
- $this->assertTrue($column->getFixed());
- $this->assertEquals("baz", $column->getDefault());
-
- $this->assertEquals(array('foo' => 'bar'), $column->getPlatformOptions());
- $this->assertTrue($column->hasPlatformOption('foo'));
- $this->assertEquals('bar', $column->getPlatformOption('foo'));
- $this->assertFalse($column->hasPlatformOption('bar'));
- }
-
- public function testToArray()
- {
- $expected = array(
- 'name' => 'foo',
- 'type' => Type::getType('string'),
- 'default' => 'baz',
- 'notnull' => false,
- 'length' => 200,
- 'precision' => 5,
- 'scale' => 2,
- 'fixed' => true,
- 'unsigned' => true,
- 'columnDefinition' => null,
- 'foo' => 'bar',
- );
-
- $this->assertEquals($expected, $this->createColumn()->toArray());
- }
-
- /**
- * @return Column
- */
- public function createColumn()
- {
- $options = array(
- 'length' => 200,
- 'precision' => 5,
- 'scale' => 2,
- 'unsigned' => true,
- 'notnull' => false,
- 'fixed' => true,
- 'default' => 'baz',
- 'platformOptions' => array('foo' => 'bar'),
- );
-
- $string = Type::getType('string');
- return new Column("foo", $string, $options);
- }
-}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/DBAL/Schema/ComparatorTest.php b/tests/Doctrine/Tests/DBAL/Schema/ComparatorTest.php
deleted file mode 100644
index 4433ef924..000000000
--- a/tests/Doctrine/Tests/DBAL/Schema/ComparatorTest.php
+++ /dev/null
@@ -1,600 +0,0 @@
-.
- */
-
-namespace Doctrine\Tests\DBAL\Schema;
-
-require_once __DIR__ . '/../../TestInit.php';
-
-use Doctrine\DBAL\Schema\Schema,
- Doctrine\DBAL\Schema\Table,
- Doctrine\DBAL\Schema\Column,
- Doctrine\DBAL\Schema\Index,
- Doctrine\DBAL\Schema\Sequence,
- Doctrine\DBAL\Schema\SchemaDiff,
- Doctrine\DBAL\Schema\TableDiff,
- Doctrine\DBAL\Schema\Comparator,
- Doctrine\DBAL\Types\Type,
- Doctrine\DBAL\Schema\ForeignKeyConstraint;
-
-/**
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @link www.doctrine-project.org
- * @copyright Copyright (C) 2005-2009 eZ Systems AS. All rights reserved.
- * @license http://ez.no/licenses/new_bsd New BSD License
- * @since 2.0
- * @version $Revision$
- * @author Benjamin Eberlei
- */
-class ComparatorTest extends \PHPUnit_Framework_TestCase
-{
- public function testCompareSame1()
- {
- $schema1 = new Schema( array(
- 'bugdb' => new Table('bugdb',
- array (
- 'integerfield1' => new Column('integerfield1', Type::getType('integer' ) ),
- )
- ),
- ) );
- $schema2 = new Schema( array(
- 'bugdb' => new Table('bugdb',
- array (
- 'integerfield1' => new Column('integerfield1', Type::getType('integer') ),
- )
- ),
- ) );
-
- $this->assertEquals(new SchemaDiff(), Comparator::compareSchemas( $schema1, $schema2 ) );
- }
-
- public function testCompareSame2()
- {
- $schema1 = new Schema( array(
- 'bugdb' => new Table('bugdb',
- array (
- 'integerfield1' => new Column('integerfield1', Type::getType('integer')),
- 'integerfield2' => new Column('integerfield2', Type::getType('integer')),
- )
- ),
- ) );
- $schema2 = new Schema( array(
- 'bugdb' => new Table('bugdb',
- array (
- 'integerfield2' => new Column('integerfield2', Type::getType('integer')),
- 'integerfield1' => new Column('integerfield1', Type::getType('integer')),
- )
- ),
- ) );
- $this->assertEquals(new SchemaDiff(), Comparator::compareSchemas( $schema1, $schema2 ) );
- }
-
- public function testCompareMissingTable()
- {
- $schemaConfig = new \Doctrine\DBAL\Schema\SchemaConfig;
- $table = new Table('bugdb', array ('integerfield1' => new Column('integerfield1', Type::getType('integer'))));
- $table->setSchemaConfig($schemaConfig);
-
- $schema1 = new Schema( array($table), array(), $schemaConfig );
- $schema2 = new Schema( array(), array(), $schemaConfig );
-
- $expected = new SchemaDiff( array(), array(), array('bugdb' => $table) );
-
- $this->assertEquals($expected, Comparator::compareSchemas( $schema1, $schema2 ) );
- }
-
- public function testCompareNewTable()
- {
- $schemaConfig = new \Doctrine\DBAL\Schema\SchemaConfig;
- $table = new Table('bugdb', array ('integerfield1' => new Column('integerfield1', Type::getType('integer'))));
- $table->setSchemaConfig($schemaConfig);
-
- $schema1 = new Schema( array(), array(), $schemaConfig );
- $schema2 = new Schema( array($table), array(), $schemaConfig );
-
- $expected = new SchemaDiff( array('bugdb' => $table), array(), array() );
- $this->assertEquals($expected, Comparator::compareSchemas( $schema1, $schema2 ) );
- }
-
- public function testCompareMissingField()
- {
- $missingColumn = new Column('integerfield1', Type::getType('integer'));
- $schema1 = new Schema( array(
- 'bugdb' => new Table('bugdb',
- array (
- 'integerfield1' => $missingColumn,
- 'integerfield2' => new Column('integerfield2', Type::getType('integer')),
- )
- ),
- ) );
- $schema2 = new Schema( array(
- 'bugdb' => new Table('bugdb',
- array (
- 'integerfield2' => new Column('integerfield2', Type::getType('integer')),
- )
- ),
- ) );
-
- $expected = new SchemaDiff ( array(),
- array (
- 'bugdb' => new TableDiff( 'bugdb', array(), array(),
- array (
- 'integerfield1' => $missingColumn,
- )
- )
- )
- );
- $this->assertEquals($expected, Comparator::compareSchemas( $schema1, $schema2 ) );
- }
-
- public function testCompareNewField()
- {
- $schema1 = new Schema( array(
- 'bugdb' => new Table('bugdb',
- array (
- 'integerfield1' => new Column('integerfield1', Type::getType('integer')),
- )
- ),
- ) );
- $schema2 = new Schema( array(
- 'bugdb' => new Table('bugdb',
- array (
- 'integerfield1' => new Column('integerfield1', Type::getType('integer')),
- 'integerfield2' => new Column('integerfield2', Type::getType('integer')),
- )
- ),
- ) );
-
- $expected = new SchemaDiff ( array(),
- array (
- 'bugdb' => new TableDiff ('bugdb',
- array (
- 'integerfield2' => new Column('integerfield2', Type::getType('integer')),
- )
- ),
- )
- );
- $this->assertEquals($expected, Comparator::compareSchemas( $schema1, $schema2 ) );
- }
-
- public function testCompareChangedColumns_ChangeType()
- {
- $column1 = new Column('charfield1', Type::getType('string'));
- $column2 = new Column('charfield1', Type::getType('integer'));
-
- $c = new Comparator();
- $this->assertEquals(array('type'), $c->diffColumn($column1, $column2));
- $this->assertEquals(array(), $c->diffColumn($column1, $column1));
- }
-
- public function testCompareRemovedIndex()
- {
- $schema1 = new Schema( array(
- 'bugdb' => new Table('bugdb',
- array (
- 'integerfield1' => new Column('integerfield1', Type::getType('integer')),
- 'integerfield2' => new Column('integerfield2', Type::getType('integer')),
- ),
- array (
- 'primary' => new Index('primary',
- array(
- 'integerfield1'
- ),
- true
- )
- )
- ),
- ) );
- $schema2 = new Schema( array(
- 'bugdb' => new Table('bugdb',
- array (
- 'integerfield1' => new Column('integerfield1', Type::getType('integer')),
- 'integerfield2' => new Column('integerfield2', Type::getType('integer')),
- )
- ),
- ) );
-
- $expected = new SchemaDiff ( array(),
- array (
- 'bugdb' => new TableDiff( 'bugdb', array(), array(), array(), array(), array(),
- array (
- 'primary' => new Index('primary',
- array(
- 'integerfield1'
- ),
- true
- )
- )
- ),
- )
- );
- $this->assertEquals($expected, Comparator::compareSchemas( $schema1, $schema2 ) );
- }
-
- public function testCompareNewIndex()
- {
- $schema1 = new Schema( array(
- 'bugdb' => new Table('bugdb',
- array (
- 'integerfield1' => new Column('integerfield1', Type::getType('integer')),
- 'integerfield2' => new Column('integerfield2', Type::getType('integer')),
- )
- ),
- ) );
- $schema2 = new Schema( array(
- 'bugdb' => new Table('bugdb',
- array (
- 'integerfield1' => new Column('integerfield1', Type::getType('integer')),
- 'integerfield2' => new Column('integerfield2', Type::getType('integer')),
- ),
- array (
- 'primary' => new Index('primary',
- array(
- 'integerfield1'
- ),
- true
- )
- )
- ),
- ) );
-
- $expected = new SchemaDiff ( array(),
- array (
- 'bugdb' => new TableDiff( 'bugdb', array(), array(), array(),
- array (
- 'primary' => new Index('primary',
- array(
- 'integerfield1'
- ),
- true
- )
- )
- ),
- )
- );
- $this->assertEquals($expected, Comparator::compareSchemas( $schema1, $schema2 ) );
- }
-
- public function testCompareChangedIndex()
- {
- $schema1 = new Schema( array(
- 'bugdb' => new Table('bugdb',
- array (
- 'integerfield1' => new Column('integerfield1', Type::getType('integer')),
- 'integerfield2' => new Column('integerfield2', Type::getType('integer')),
- ),
- array (
- 'primary' => new Index('primary',
- array(
- 'integerfield1'
- ),
- true
- )
- )
- ),
- ) );
- $schema2 = new Schema( array(
- 'bugdb' => new Table('bugdb',
- array (
- 'integerfield1' => new Column('integerfield1', Type::getType('integer')),
- 'integerfield2' => new Column('integerfield2', Type::getType('integer')),
- ),
- array (
- 'primary' => new Index('primary',
- array('integerfield1', 'integerfield2'),
- true
- )
- )
- ),
- ) );
-
- $expected = new SchemaDiff ( array(),
- array (
- 'bugdb' => new TableDiff( 'bugdb', array(), array(), array(), array(),
- array (
- 'primary' => new Index('primary',
- array(
- 'integerfield1',
- 'integerfield2'
- ),
- true
- )
- )
- ),
- )
- );
- $actual = Comparator::compareSchemas( $schema1, $schema2 );
- $this->assertEquals($expected, $actual);
- }
-
- public function testCompareChangedIndexFieldPositions()
- {
- $schema1 = new Schema( array(
- 'bugdb' => new Table('bugdb',
- array (
- 'integerfield1' => new Column('integerfield1', Type::getType('integer')),
- 'integerfield2' => new Column('integerfield2', Type::getType('integer')),
- ),
- array (
- 'primary' => new Index('primary', array('integerfield1', 'integerfield2'), true)
- )
- ),
- ) );
- $schema2 = new Schema( array(
- 'bugdb' => new Table('bugdb',
- array (
- 'integerfield1' => new Column('integerfield1', Type::getType('integer')),
- 'integerfield2' => new Column('integerfield2', Type::getType('integer')),
- ),
- array (
- 'primary' => new Index('primary', array('integerfield2', 'integerfield1'), true)
- )
- ),
- ) );
-
- $expected = new SchemaDiff ( array(),
- array (
- 'bugdb' => new TableDiff('bugdb', array(), array(), array(), array(),
- array (
- 'primary' => new Index('primary', array('integerfield2', 'integerfield1'), true)
- )
- ),
- )
- );
- $actual = Comparator::compareSchemas( $schema1, $schema2 );
- $this->assertEquals($expected, $actual);
- }
-
- public function testCompareSequences()
- {
- $seq1 = new Sequence('foo', 1, 1);
- $seq2 = new Sequence('foo', 1, 2);
- $seq3 = new Sequence('foo', 2, 1);
-
- $c = new Comparator();
-
- $this->assertTrue($c->diffSequence($seq1, $seq2));
- $this->assertTrue($c->diffSequence($seq1, $seq3));
- }
-
- public function testRemovedSequence()
- {
- $schema1 = new Schema();
- $seq = $schema1->createSequence('foo');
-
- $schema2 = new Schema();
-
- $c = new Comparator();
- $diffSchema = $c->compare($schema1, $schema2);
-
- $this->assertEquals(1, count($diffSchema->removedSequences));
- $this->assertSame($seq, $diffSchema->removedSequences[0]);
- }
-
- public function testAddedSequence()
- {
- $schema1 = new Schema();
-
- $schema2 = new Schema();
- $seq = $schema2->createSequence('foo');
-
- $c = new Comparator();
- $diffSchema = $c->compare($schema1, $schema2);
-
- $this->assertEquals(1, count($diffSchema->newSequences));
- $this->assertSame($seq, $diffSchema->newSequences[0]);
- }
-
- public function testTableAddForeignKey()
- {
- $tableForeign = new Table("bar");
- $tableForeign->addColumn('id', 'integer');
-
- $table1 = new Table("foo");
- $table1->addColumn('fk', 'integer');
-
- $table2 = new Table("foo");
- $table2->addColumn('fk', 'integer');
- $table2->addForeignKeyConstraint($tableForeign, array('fk'), array('id'));
-
- $c = new Comparator();
- $tableDiff = $c->diffTable($table1, $table2);
-
- $this->assertType('Doctrine\DBAL\Schema\TableDiff', $tableDiff);
- $this->assertEquals(1, count($tableDiff->addedForeignKeys));
- }
-
- public function testTableRemoveForeignKey()
- {
- $tableForeign = new Table("bar");
- $tableForeign->addColumn('id', 'integer');
-
- $table1 = new Table("foo");
- $table1->addColumn('fk', 'integer');
-
- $table2 = new Table("foo");
- $table2->addColumn('fk', 'integer');
- $table2->addForeignKeyConstraint($tableForeign, array('fk'), array('id'));
-
- $c = new Comparator();
- $tableDiff = $c->diffTable($table2, $table1);
-
- $this->assertType('Doctrine\DBAL\Schema\TableDiff', $tableDiff);
- $this->assertEquals(1, count($tableDiff->removedForeignKeys));
- }
-
- public function testTableUpdateForeignKey()
- {
- $tableForeign = new Table("bar");
- $tableForeign->addColumn('id', 'integer');
-
- $table1 = new Table("foo");
- $table1->addColumn('fk', 'integer');
- $table1->addForeignKeyConstraint($tableForeign, array('fk'), array('id'));
-
- $table2 = new Table("foo");
- $table2->addColumn('fk', 'integer');
- $table2->addForeignKeyConstraint($tableForeign, array('fk'), array('id'), array('onUpdate' => 'CASCADE'));
-
- $c = new Comparator();
- $tableDiff = $c->diffTable($table1, $table2);
-
- $this->assertType('Doctrine\DBAL\Schema\TableDiff', $tableDiff);
- $this->assertEquals(1, count($tableDiff->changedForeignKeys));
- }
-
- public function testTablesCaseInsensitive()
- {
- $schemaA = new Schema();
- $schemaA->createTable('foo');
- $schemaA->createTable('bAr');
- $schemaA->createTable('BAZ');
- $schemaA->createTable('new');
-
- $schemaB = new Schema();
- $schemaB->createTable('FOO');
- $schemaB->createTable('bar');
- $schemaB->createTable('Baz');
- $schemaB->createTable('old');
-
- $c = new Comparator();
- $diff = $c->compare($schemaA, $schemaB);
-
- $this->assertSchemaTableChangeCount($diff, 1, 0, 1);
- }
-
- public function testSequencesCaseInsenstive()
- {
- $schemaA = new Schema();
- $schemaA->createSequence('foo');
- $schemaA->createSequence('BAR');
- $schemaA->createSequence('Baz');
- $schemaA->createSequence('new');
-
- $schemaB = new Schema();
- $schemaB->createSequence('FOO');
- $schemaB->createSequence('Bar');
- $schemaB->createSequence('baz');
- $schemaB->createSequence('old');
-
- $c = new Comparator();
- $diff = $c->compare($schemaA, $schemaB);
-
- $this->assertSchemaSequenceChangeCount($diff, 1, 0, 1);
- }
-
- public function testCompareColumnCompareCaseInsensitive()
- {
- $tableA = new Table("foo");
- $tableA->addColumn('id', 'integer');
-
- $tableB = new Table("foo");
- $tableB->addColumn('ID', 'integer');
-
- $c = new Comparator();
- $tableDiff = $c->diffTable($tableA, $tableB);
-
- $this->assertFalse($tableDiff);
- }
-
- public function testCompareIndexBasedOnPropertiesNotName()
- {
- $tableA = new Table("foo");
- $tableA->addColumn('id', 'integer');
- $tableA->addIndex(array("id"), "foo_bar_idx");
-
- $tableB = new Table("foo");
- $tableB->addColumn('ID', 'integer');
- $tableB->addIndex(array("id"), "bar_foo_idx");
-
- $c = new Comparator();
- $tableDiff = $c->diffTable($tableA, $tableB);
-
- $this->assertFalse($tableDiff);
- }
-
- public function testCompareForeignKeyBasedOnPropertiesNotName()
- {
- $tableA = new Table("foo");
- $tableA->addColumn('id', 'integer');
- $tableA->addNamedForeignKeyConstraint('foo_constraint', 'bar', array('id'), array('id'));
-
- $tableB = new Table("foo");
- $tableB->addColumn('ID', 'integer');
- $tableB->addNamedForeignKeyConstraint('bar_constraint', 'bar', array('id'), array('id'));
-
- $c = new Comparator();
- $tableDiff = $c->diffTable($tableA, $tableB);
-
- $this->assertFalse($tableDiff);
- }
-
- public function testCompareForeignKey_RestrictNoAction_AreTheSame()
- {
- $fk1 = new ForeignKeyConstraint(array("foo"), "bar", array("baz"), "fk1", array('onDelete' => 'NO ACTION'));
- $fk2 = new ForeignKeyConstraint(array("foo"), "bar", array("baz"), "fk1", array('onDelete' => 'RESTRICT'));
-
- $c = new Comparator();
- $this->assertFalse($c->diffForeignKey($fk1, $fk2));
- }
-
- public function testDetectRenameColumn()
- {
- $tableA = new Table("foo");
- $tableA->addColumn('foo', 'integer');
-
- $tableB = new Table("foo");
- $tableB->addColumn('bar', 'integer');
-
- $c = new Comparator();
- $tableDiff = $c->diffTable($tableA, $tableB);
-
- $this->assertEquals(0, count($tableDiff->addedColumns));
- $this->assertEquals(0, count($tableDiff->removedColumns));
- $this->assertArrayHasKey('foo', $tableDiff->renamedColumns);
- $this->assertEquals('bar', $tableDiff->renamedColumns['foo']->getName());
- }
-
- /**
- * @param SchemaDiff $diff
- * @param int $newTableCount
- * @param int $changeTableCount
- * @param int $removeTableCount
- */
- public function assertSchemaTableChangeCount($diff, $newTableCount=0, $changeTableCount=0, $removeTableCount=0)
- {
- $this->assertEquals($newTableCount, count($diff->newTables));
- $this->assertEquals($changeTableCount, count($diff->changedTables));
- $this->assertEquals($removeTableCount, count($diff->removedTables));
- }
-
- /**
- * @param SchemaDiff $diff
- * @param int $newSequenceCount
- * @param int $changeSequenceCount
- * @param int $changeSequenceCount
- */
- public function assertSchemaSequenceChangeCount($diff, $newSequenceCount=0, $changeSequenceCount=0, $removeSequenceCount=0)
- {
- $this->assertEquals($newSequenceCount, count($diff->newSequences), "Expected number of new sequences is wrong.");
- $this->assertEquals($changeSequenceCount, count($diff->changedSequences), "Expected number of changed sequences is wrong.");
- $this->assertEquals($removeSequenceCount, count($diff->removedSequences), "Expected number of removed sequences is wrong.");
- }
-}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/DBAL/Schema/IndexTest.php b/tests/Doctrine/Tests/DBAL/Schema/IndexTest.php
deleted file mode 100644
index 338fbedc8..000000000
--- a/tests/Doctrine/Tests/DBAL/Schema/IndexTest.php
+++ /dev/null
@@ -1,43 +0,0 @@
-createIndex();
- $this->assertEquals("foo", $idx->getName());
- $columns = $idx->getColumns();
- $this->assertEquals(2, count($columns));
- $this->assertEquals(array("bar", "baz"), $columns);
- $this->assertFalse($idx->isUnique());
- $this->assertFalse($idx->isPrimary());
- }
-
- public function testCreatePrimary()
- {
- $idx = $this->createIndex(false, true);
- $this->assertTrue($idx->isUnique());
- $this->assertTrue($idx->isPrimary());
- }
-
- public function testCreateUnique()
- {
- $idx = $this->createIndex(true, false);
- $this->assertTrue($idx->isUnique());
- $this->assertFalse($idx->isPrimary());
- }
-}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/DBAL/Schema/SchemaDiffTest.php b/tests/Doctrine/Tests/DBAL/Schema/SchemaDiffTest.php
deleted file mode 100644
index ecffaf5d1..000000000
--- a/tests/Doctrine/Tests/DBAL/Schema/SchemaDiffTest.php
+++ /dev/null
@@ -1,97 +0,0 @@
-createSchemaDiff();
- $platform = $this->createPlatform();
-
- $sql = $diff->toSql($platform);
-
- $expected = array('drop_orphan_fk', 'drop_seq', 'create_seq', 'drop_seq', 'create_seq', 'create_table', 'drop_table', 'alter_table');
-
- $this->assertEquals($expected, $sql);
- }
-
- public function testSchemaDiffToSaveSql()
- {
- $diff = $this->createSchemaDiff();
- $platform = $this->createPlatform(1, 0, 0);
-
- $sql = $diff->toSaveSql($platform);
-
- $expected = array('drop_seq', 'create_seq', 'create_seq', 'create_table', 'alter_table');
-
- $this->assertEquals($expected, $sql);
- }
-
- public function createPlatform($dropSequenceCount=2, $dropTableCount=1, $dropOrphanedFkCount=1)
- {
- $platform = $this->getMock('Doctrine\Tests\DBAL\Mocks\MockPlatform');
- $platform->expects($this->exactly($dropSequenceCount))
- ->method('getDropSequenceSql')
- ->with($this->isInstanceOf('Doctrine\DBAL\Schema\Sequence'))
- ->will($this->returnValue('drop_seq'));
- $platform->expects($this->exactly(2))
- ->method('getCreateSequenceSql')
- ->with($this->isInstanceOf('Doctrine\DBAL\Schema\Sequence'))
- ->will($this->returnValue('create_seq'));
- if ($dropTableCount > 0) {
- $platform->expects($this->exactly($dropTableCount))
- ->method('getDropTableSql')
- ->with($this->isInstanceof('Doctrine\DBAL\Schema\Table'))
- ->will($this->returnValue('drop_table'));
- }
- $platform->expects($this->exactly(1))
- ->method('getCreateTableSql')
- ->with($this->isInstanceof('Doctrine\DBAL\Schema\Table'))
- ->will($this->returnValue(array('create_table')));
- $platform->expects($this->exactly(1))
- ->method('getAlterTableSql')
- ->with($this->isInstanceOf('Doctrine\DBAL\Schema\TableDiff'))
- ->will($this->returnValue(array('alter_table')));
- if ($dropOrphanedFkCount > 0) {
- $platform->expects($this->exactly($dropOrphanedFkCount))
- ->method('getDropForeignKeySql')
- ->with($this->isInstanceof('Doctrine\DBAL\Schema\ForeignKeyConstraint'), $this->equalTo('local_table'))
- ->will($this->returnValue('drop_orphan_fk'));
- }
- $platform->expects($this->exactly(1))
- ->method('supportsSequences')
- ->will($this->returnValue(true));
- $platform->expects($this->exactly(1))
- ->method('supportsForeignKeyConstraints')
- ->will($this->returnValue(true));
- return $platform;
- }
-
- public function createSchemaDiff()
- {
- $diff = new SchemaDiff();
- $diff->changedSequences['foo_seq'] = new Sequence('foo_seq');
- $diff->newSequences['bar_seq'] = new Sequence('bar_seq');
- $diff->removedSequences['baz_seq'] = new Sequence('baz_seq');
- $diff->newTables['foo_table'] = new Table('foo_table');
- $diff->removedTables['bar_table'] = new Table('bar_table');
- $diff->changedTables['baz_table'] = new TableDiff('baz_table');
- $fk = new \Doctrine\DBAL\Schema\ForeignKeyConstraint(array('id'), 'foreign_table', array('id'));
- $fk->setLocalTable(new Table('local_table'));
- $diff->orphanedForeignKeys[] = $fk;
- return $diff;
- }
-}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/DBAL/Schema/SchemaTest.php b/tests/Doctrine/Tests/DBAL/Schema/SchemaTest.php
deleted file mode 100644
index 9e073fdd4..000000000
--- a/tests/Doctrine/Tests/DBAL/Schema/SchemaTest.php
+++ /dev/null
@@ -1,243 +0,0 @@
-assertTrue($schema->hasTable($tableName));
-
- $tables = $schema->getTables();
- $this->assertTrue( isset($tables[$tableName]) );
- $this->assertSame($table, $tables[$tableName]);
- $this->assertSame($table, $schema->getTable($tableName));
- $this->assertTrue($schema->hasTable($tableName));
- }
-
- public function testTableMatchingCaseInsenstive()
- {
- $table = new Table("Foo");
-
- $schema = new Schema(array($table));
- $this->assertTrue($schema->hasTable("foo"));
- $this->assertTrue($schema->hasTable("FOO"));
-
- $this->assertSame($table, $schema->getTable('FOO'));
- $this->assertSame($table, $schema->getTable('foo'));
- $this->assertSame($table, $schema->getTable('Foo'));
- }
-
- public function testGetUnknownTableThrowsException()
- {
- $this->setExpectedException("Doctrine\DBAL\Schema\SchemaException");
-
- $schema = new Schema();
- $schema->getTable("unknown");
- }
-
- public function testCreateTableTwiceThrowsException()
- {
- $this->setExpectedException("Doctrine\DBAL\Schema\SchemaException");
-
- $tableName = "foo";
- $table = new Table($tableName);
- $tables = array($table, $table);
-
- $schema = new Schema($tables);
- }
-
- public function testRenameTable()
- {
- $tableName = "foo";
- $table = new Table($tableName);
- $schema = new Schema(array($table));
-
- $this->assertTrue($schema->hasTable("foo"));
- $schema->renameTable("foo", "bar");
- $this->assertFalse($schema->hasTable("foo"));
- $this->assertTrue($schema->hasTable("bar"));
- $this->assertSame($table, $schema->getTable("bar"));
- }
-
- public function testDropTable()
- {
- $tableName = "foo";
- $table = new Table($tableName);
- $schema = new Schema(array($table));
-
- $this->assertTrue($schema->hasTable("foo"));
-
- $schema->dropTable("foo");
-
- $this->assertFalse($schema->hasTable("foo"));
- }
-
- public function testCreateTable()
- {
- $schema = new Schema();
-
- $this->assertFalse($schema->hasTable("foo"));
-
- $table = $schema->createTable("foo");
-
- $this->assertType('Doctrine\DBAL\Schema\Table', $table);
- $this->assertEquals("foo", $table->getName());
- $this->assertTrue($schema->hasTable("foo"));
- }
-
- public function testAddSequences()
- {
- $sequence = new Sequence("a_seq", 1, 1);
-
- $schema = new Schema(array(), array($sequence));
-
- $this->assertTrue($schema->hasSequence("a_seq"));
- $this->assertType('Doctrine\DBAL\Schema\Sequence', $schema->getSequence("a_seq"));
-
- $sequences = $schema->getSequences();
- $this->assertArrayHasKey('a_seq', $sequences);
- }
-
- public function testSequenceAccessCaseInsensitive()
- {
- $sequence = new Sequence("a_Seq");
-
- $schema = new Schema(array(), array($sequence));
- $this->assertTrue($schema->hasSequence('a_seq'));
- $this->assertTrue($schema->hasSequence('a_Seq'));
- $this->assertTrue($schema->hasSequence('A_SEQ'));
-
- $this->assertEquals($sequence, $schema->getSequence('a_seq'));
- $this->assertEquals($sequence, $schema->getSequence('a_Seq'));
- $this->assertEquals($sequence, $schema->getSequence('A_SEQ'));
- }
-
- public function testGetUnknownSequenceThrowsException()
- {
- $this->setExpectedException("Doctrine\DBAL\Schema\SchemaException");
-
- $schema = new Schema();
- $schema->getSequence("unknown");
- }
-
- public function testCreateSequence()
- {
- $schema = new Schema();
- $sequence = $schema->createSequence('a_seq', 10, 20);
-
- $this->assertEquals('a_seq', $sequence->getName());
- $this->assertEquals(10, $sequence->getAllocationSize());
- $this->assertEquals(20, $sequence->getInitialValue());
-
- $this->assertTrue($schema->hasSequence("a_seq"));
- $this->assertType('Doctrine\DBAL\Schema\Sequence', $schema->getSequence("a_seq"));
-
- $sequences = $schema->getSequences();
- $this->assertArrayHasKey('a_seq', $sequences);
- }
-
- public function testDropSequence()
- {
- $sequence = new Sequence("a_seq", 1, 1);
-
- $schema = new Schema(array(), array($sequence));
-
- $schema->dropSequence("a_seq");
- $this->assertFalse($schema->hasSequence("a_seq"));
- }
-
- public function testAddSequenceTwiceThrowsException()
- {
- $this->setExpectedException("Doctrine\DBAL\Schema\SchemaException");
-
- $sequence = new Sequence("a_seq", 1, 1);
-
- $schema = new Schema(array(), array($sequence, $sequence));
- }
-
- public function testFixSchema_AddExplicitIndexForForeignKey()
- {
- $schema = new Schema();
- $tableA = $schema->createTable('foo');
- $tableA->addColumn('id', 'integer');
-
- $tableB = $schema->createTable('bar');
- $tableB->addColumn('id', 'integer');
- $tableB->addColumn('foo_id', 'integer');
- $tableB->addForeignKeyConstraint($tableA, array('foo_id'), array('id'));
-
- $this->assertEquals(0, count($tableB->getIndexes()));
-
- $schema->visit(new \Doctrine\DBAL\Schema\Visitor\FixSchema(true));
-
- $this->assertEquals(1, count($tableB->getIndexes()));
- $indexes = $tableB->getIndexes();
- $index = current($indexes);
- $this->assertTrue($index->hasColumnAtPosition('foo_id', 0));
- }
-
- public function testConfigHasExplicitForeignKeyIndex()
- {
- $schemaConfig = new \Doctrine\DBAL\Schema\SchemaConfig();
- $schemaConfig->setExplicitForeignKeyIndexes(false);
-
- $schema = new Schema(array(), array(), $schemaConfig);
- $this->assertFalse($schema->hasExplicitForeignKeyIndexes());
-
- $schemaConfig->setExplicitForeignKeyIndexes(true);
- $this->assertTrue($schema->hasExplicitForeignKeyIndexes());
- }
-
- public function testConfigMaxIdentifierLength()
- {
- $schemaConfig = new \Doctrine\DBAL\Schema\SchemaConfig();
- $schemaConfig->setMaxIdentifierLength(10);
-
- $schema = new Schema(array(), array(), $schemaConfig);
- $table = $schema->createTable("smalltable");
- $table->addColumn('long_id', 'integer');
- $table->addIndex(array('long_id'));
-
- $this->assertTrue($table->hasIndex('le_id_idx'));
- }
-
- public function testDeepClone()
- {
- $schema = new Schema();
- $sequence = $schema->createSequence('baz');
-
- $tableA = $schema->createTable('foo');
- $tableA->addColumn('id', 'integer');
-
- $tableB = $schema->createTable('bar');
- $tableB->addColumn('id', 'integer');
- $tableB->addColumn('foo_id', 'integer');
- $tableB->addForeignKeyConstraint($tableA, array('foo_id'), array('id'));
-
- $schemaNew = clone $schema;
-
- $this->assertNotSame($sequence, $schemaNew->getSequence('baz'));
-
- $this->assertNotSame($tableA, $schemaNew->getTable('foo'));
- $this->assertNotSame($tableA->getColumn('id'), $schemaNew->getTable('foo')->getColumn('id'));
-
- $this->assertNotSame($tableB, $schemaNew->getTable('bar'));
- $this->assertNotSame($tableB->getColumn('id'), $schemaNew->getTable('bar')->getColumn('id'));
-
- $fk = $schemaNew->getTable('bar')->getForeignKeys();
- $fk = current($fk);
- $this->assertSame($schemaNew->getTable('bar'), $this->readAttribute($fk, '_localTable'));
- }
-}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/DBAL/Schema/TableTest.php b/tests/Doctrine/Tests/DBAL/Schema/TableTest.php
deleted file mode 100644
index 652e475b9..000000000
--- a/tests/Doctrine/Tests/DBAL/Schema/TableTest.php
+++ /dev/null
@@ -1,362 +0,0 @@
-setExpectedException('Doctrine\DBAL\DBALException');
- $table = new \Doctrine\DBAL\Schema\Table('');
- }
-
- public function testGetName()
- {
- $table = new Table("foo", array(), array(), array());
- $this->assertEquals("foo", $table->getName());
- }
-
- public function testColumns()
- {
- $type = Type::getType('integer');
- $columns = array();
- $columns[] = new Column("foo", $type);
- $columns[] = new Column("bar", $type);
- $table = new Table("foo", $columns, array(), array());
-
- $this->assertTrue($table->hasColumn("foo"));
- $this->assertTrue($table->hasColumn("bar"));
- $this->assertFalse($table->hasColumn("baz"));
-
- $this->assertType('Doctrine\DBAL\Schema\Column', $table->getColumn("foo"));
- $this->assertType('Doctrine\DBAL\Schema\Column', $table->getColumn("bar"));
-
- $this->assertEquals(2, count($table->getColumns()));
- }
-
- public function testColumnsCaseInsensitive()
- {
- $table = new Table("foo");
- $column = $table->addColumn('Foo', 'integer');
-
- $this->assertTrue($table->hasColumn('Foo'));
- $this->assertTrue($table->hasColumn('foo'));
- $this->assertTrue($table->hasColumn('FOO'));
-
- $this->assertSame($column, $table->getColumn('Foo'));
- $this->assertSame($column, $table->getColumn('foo'));
- $this->assertSame($column, $table->getColumn('FOO'));
- }
-
- public function testCreateColumn()
- {
- $type = Type::getType('integer');
-
- $table = new Table("foo");
-
- $this->assertFalse($table->hasColumn("bar"));
- $table->addColumn("bar", 'integer');
- $this->assertTrue($table->hasColumn("bar"));
- $this->assertSame($type, $table->getColumn("bar")->getType());
- }
-
- public function testDropColumn()
- {
- $type = Type::getType('integer');
- $columns = array();
- $columns[] = new Column("foo", $type);
- $columns[] = new Column("bar", $type);
- $table = new Table("foo", $columns, array(), array());
-
- $this->assertTrue($table->hasColumn("foo"));
- $this->assertTrue($table->hasColumn("bar"));
-
- $table->dropColumn("foo")->dropColumn("bar");
-
- $this->assertFalse($table->hasColumn("foo"));
- $this->assertFalse($table->hasColumn("bar"));
- }
-
- public function testGetUnknownColumnThrowsException()
- {
- $this->setExpectedException("Doctrine\DBAL\Schema\SchemaException");
-
- $table = new Table("foo", array(), array(), array());
- $table->getColumn('unknown');
- }
-
- public function testAddColumnTwiceThrowsException()
- {
- $this->setExpectedException("Doctrine\DBAL\Schema\SchemaException");
-
- $type = \Doctrine\DBAL\Types\Type::getType('integer');
- $columns = array();
- $columns[] = new Column("foo", $type);
- $columns[] = new Column("foo", $type);
- $table = new Table("foo", $columns, array(), array());
- }
-
- public function testCreateIndex()
- {
- $type = \Doctrine\DBAL\Types\Type::getType('integer');
- $columns = array(new Column("foo", $type), new Column("bar", $type), new Column("baz", $type));
- $table = new Table("foo", $columns);
-
- $table->addIndex(array("foo", "bar", "baz"));
- $table->addUniqueIndex(array("foo", "bar", "baz"));
-
- $this->assertTrue($table->hasIndex("foo_foo_bar_baz_idx"));
- $this->assertTrue($table->hasIndex("foo_foo_bar_baz_uniq"));
- }
-
- public function testIndexCaseInsensitive()
- {
- $type = \Doctrine\DBAL\Types\Type::getType('integer');
- $columns = array(new Column("foo", $type), new Column("bar", $type), new Column("baz", $type));
- $table = new Table("foo", $columns);
-
- $table->addIndex(array("foo", "bar", "baz"), "Foo_Idx");
-
- $this->assertTrue($table->hasIndex('foo_idx'));
- $this->assertTrue($table->hasIndex('Foo_Idx'));
- $this->assertTrue($table->hasIndex('FOO_IDX'));
- }
-
- public function testAddIndexes()
- {
- $type = \Doctrine\DBAL\Types\Type::getType('integer');
- $columns = array(new Column("foo", $type));
- $indexes = array(
- new Index("the_primary", array("foo"), true, true),
- new Index("foo_idx", array("foo"), false, false),
- );
- $table = new Table("foo", $columns, $indexes, array());
-
- $this->assertTrue($table->hasIndex("the_primary"));
- $this->assertTrue($table->hasIndex("foo_idx"));
- $this->assertFalse($table->hasIndex("some_idx"));
-
- $this->assertType('Doctrine\DBAL\Schema\Index', $table->getPrimaryKey());
- $this->assertType('Doctrine\DBAL\Schema\Index', $table->getIndex('the_primary'));
- $this->assertType('Doctrine\DBAL\Schema\Index', $table->getIndex('foo_idx'));
- }
-
- public function testGetUnknownIndexThrowsException()
- {
- $this->setExpectedException("Doctrine\DBAL\Schema\SchemaException");
-
- $table = new Table("foo", array(), array(), array());
- $table->getIndex("unknownIndex");
- }
-
- public function testAddTwoPrimaryThrowsException()
- {
- $this->setExpectedException("Doctrine\DBAL\Schema\SchemaException");
-
- $type = \Doctrine\DBAL\Types\Type::getType('integer');
- $columns = array(new Column("foo", $type), new Column("bar", $type));
- $indexes = array(
- new Index("the_primary", array("foo"), true, true),
- new Index("other_primary", array("bar"), true, true),
- );
- $table = new Table("foo", $columns, $indexes, array());
- }
-
- public function testAddTwoIndexesWithSameNameThrowsException()
- {
- $this->setExpectedException("Doctrine\DBAL\Schema\SchemaException");
-
- $type = \Doctrine\DBAL\Types\Type::getType('integer');
- $columns = array(new Column("foo", $type), new Column("bar", $type));
- $indexes = array(
- new Index("an_idx", array("foo"), false, false),
- new Index("an_idx", array("bar"), false, false),
- );
- $table = new Table("foo", $columns, $indexes, array());
- }
-
- public function testIdGenerator()
- {
- $tableA = new Table("foo", array(), array(), array(), Table::ID_NONE);
- $this->assertFalse($tableA->isIdGeneratorIdentity());
- $this->assertFalse($tableA->isIdGeneratorSequence());;
-
- $tableB = new Table("foo", array(), array(), array(), Table::ID_IDENTITY);
- $this->assertTrue($tableB->isIdGeneratorIdentity());
- $this->assertFalse($tableB->isIdGeneratorSequence());;
-
- $tableC = new Table("foo", array(), array(), array(), Table::ID_SEQUENCE);
- $this->assertFalse($tableC->isIdGeneratorIdentity());
- $this->assertTrue($tableC->isIdGeneratorSequence());;
- }
-
- public function testConstraints()
- {
- $constraint = new ForeignKeyConstraint(array(), "foo", array());
-
- $tableA = new Table("foo", array(), array(), array($constraint));
- $constraints = $tableA->getForeignKeys();
-
- $this->assertEquals(1, count($constraints));
- $this->assertSame($constraint, array_shift($constraints));
- }
-
- public function testOptions()
- {
- $table = new Table("foo", array(), array(), array(), Table::ID_NONE, array("foo" => "bar"));
-
- $this->assertTrue($table->hasOption("foo"));
- $this->assertEquals("bar", $table->getOption("foo"));
- }
-
- public function testBuilderSetPrimaryKey()
- {
- $table = new Table("foo");
-
- $table->addColumn("bar", 'integer');
- $table->setPrimaryKey(array("bar"));
-
- $this->assertTrue($table->hasIndex("primary"));
- $this->assertType('Doctrine\DBAL\Schema\Index', $table->getPrimaryKey());
- $this->assertTrue($table->getIndex("primary")->isUnique());
- $this->assertTrue($table->getIndex("primary")->isPrimary());
- }
-
- public function testBuilderAddUniqueIndex()
- {
- $table = new Table("foo");
-
- $table->addColumn("bar", 'integer');
- $table->addUniqueIndex(array("bar"), "my_idx");
-
- $this->assertTrue($table->hasIndex("my_idx"));
- $this->assertTrue($table->getIndex("my_idx")->isUnique());
- $this->assertFalse($table->getIndex("my_idx")->isPrimary());
- }
-
- public function testBuilderAddIndex()
- {
- $table = new Table("foo");
-
- $table->addColumn("bar", 'integer');
- $table->addIndex(array("bar"), "my_idx");
-
- $this->assertTrue($table->hasIndex("my_idx"));
- $this->assertFalse($table->getIndex("my_idx")->isUnique());
- $this->assertFalse($table->getIndex("my_idx")->isPrimary());
- }
-
- public function testBuilderAddIndexWithInvalidNameThrowsException()
- {
- $this->setExpectedException("Doctrine\DBAL\Schema\SchemaException");
-
- $table = new Table("foo");
- $table->addColumn("bar",'integer');
- $table->addIndex(array("bar"), "invalid name %&/");
- }
-
- public function testBuilderAddIndexWithUnknownColumnThrowsException()
- {
- $this->setExpectedException("Doctrine\DBAL\Schema\SchemaException");
-
- $table = new Table("foo");
- $table->addIndex(array("bar"), "invalidName");
- }
-
- public function testBuilderOptions()
- {
- $table = new Table("foo");
- $table->addOption("foo", "bar");
- $this->assertTrue($table->hasOption("foo"));
- $this->assertEquals("bar", $table->getOption("foo"));
- }
-
- public function testIdGeneratorType()
- {
- $table = new Table("foo");
-
- $table->setIdGeneratorType(Table::ID_IDENTITY);
- $this->assertTrue($table->isIdGeneratorIdentity());
-
- $table->setIdGeneratorType(Table::ID_SEQUENCE);
- $this->assertTrue($table->isIdGeneratorSequence());
- }
-
- public function testAddForeignKeyConstraint_UnknownLocalColumn_ThrowsException()
- {
- $this->setExpectedException("Doctrine\DBAL\Schema\SchemaException");
-
- $table = new Table("foo");
- $table->addColumn("id", 'integer');
-
- $foreignTable = new Table("bar");
- $foreignTable->addColumn("id", 'integer');
-
- $table->addForeignKeyConstraint($foreignTable, array("foo"), array("id"));
- }
-
- public function testAddForeignKeyConstraint_UnknownForeignColumn_ThrowsException()
- {
- $this->setExpectedException("Doctrine\DBAL\Schema\SchemaException");
-
- $table = new Table("foo");
- $table->addColumn("id", 'integer');
-
- $foreignTable = new Table("bar");
- $foreignTable->addColumn("id", 'integer');
-
- $table->addForeignKeyConstraint($foreignTable, array("id"), array("foo"));
- }
-
- public function testAddForeignKeyConstraint()
- {
- $table = new Table("foo");
- $table->addColumn("id", 'integer');
-
- $foreignTable = new Table("bar");
- $foreignTable->addColumn("id", 'integer');
-
- $table->addForeignKeyConstraint($foreignTable, array("id"), array("id"), array("foo" => "bar"));
-
- $constraints = $table->getForeignKeys();
- $this->assertEquals(1, count($constraints));
- $this->assertType('Doctrine\DBAL\Schema\ForeignKeyConstraint', $constraints["foo_id_fk"]);
-
- $this->assertEquals("foo_id_fk", $constraints["foo_id_fk"]->getName());
- $this->assertTrue($constraints["foo_id_fk"]->hasOption("foo"));
- $this->assertEquals("bar", $constraints["foo_id_fk"]->getOption("foo"));
- }
-
- public function testAddIndexWithCaseSensitiveColumnProblem()
- {
- $table = new Table("foo");
- $table->addColumn("id", 'integer');
-
- $table->addIndex(array("ID"), "my_idx");
-
- $this->assertTrue($table->hasIndex('my_idx'));
- $this->assertEquals(array("ID"), $table->getIndex("my_idx")->getColumns());
- }
-
- public function testAddPrimaryKey_ColumnsAreExplicitlySetToNotNull()
- {
- $table = new Table("foo");
- $column = $table->addColumn("id", 'integer', array('notnull' => false));
-
- $this->assertFalse($column->getNotnull());
-
- $table->setPrimaryKey(array('id'));
-
- $this->assertTrue($column->getNotnull());
- }
-}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/DBAL/Schema/Visitor/SchemaSqlCollectorTest.php b/tests/Doctrine/Tests/DBAL/Schema/Visitor/SchemaSqlCollectorTest.php
deleted file mode 100644
index f38a609d1..000000000
--- a/tests/Doctrine/Tests/DBAL/Schema/Visitor/SchemaSqlCollectorTest.php
+++ /dev/null
@@ -1,81 +0,0 @@
-getMock(
- 'Doctrine\DBAL\Platforms\MySqlPlatform',
- array('getCreateTableSql', 'getCreateSequenceSql', 'getCreateForeignKeySql')
- );
- $platformMock->expects($this->exactly(2))
- ->method('getCreateTableSql')
- ->will($this->returnValue(array("foo")));
- $platformMock->expects($this->exactly(1))
- ->method('getCreateSequenceSql')
- ->will($this->returnValue(array("bar")));
- $platformMock->expects($this->exactly(1))
- ->method('getCreateForeignKeySql')
- ->will($this->returnValue(array("baz")));
-
- $schema = $this->createFixtureSchema();
-
- $sql = $schema->toSql($platformMock);
-
- $this->assertEquals(array("foo", "foo", "bar", "baz"), $sql);
- }
-
- public function testDropSchema()
- {
- $platformMock = $this->getMock(
- 'Doctrine\DBAL\Platforms\MySqlPlatform',
- array('getDropTableSql', 'getDropSequenceSql', 'getDropForeignKeySql')
- );
- $platformMock->expects($this->exactly(2))
- ->method('getDropTableSql')
- ->will($this->returnValue("tbl"));
- $platformMock->expects($this->exactly(1))
- ->method('getDropSequenceSql')
- ->will($this->returnValue("seq"));
- $platformMock->expects($this->exactly(1))
- ->method('getDropForeignKeySql')
- ->will($this->returnValue("fk"));
-
- $schema = $this->createFixtureSchema();
-
- $sql = $schema->toDropSql($platformMock);
-
- $this->assertEquals(array("fk", "seq", "tbl", "tbl"), $sql);
- }
-
- /**
- * @return Schema
- */
- public function createFixtureSchema()
- {
- $schema = new Schema();
- $tableA = $schema->createTable("foo");
- $tableA->addColumn("id", 'integer');
- $tableA->addColumn("bar", 'string', array('length' => 255));
- $tableA->setPrimaryKey(array("id"));
- $tableA->setIdGeneratorType(Table::ID_SEQUENCE);
-
- $schema->createSequence("foo_seq");
-
- $tableB = $schema->createTable("bar");
- $tableB->addColumn("id", 'integer');
- $tableB->setPrimaryKey(array("id"));
-
- $tableA->addForeignKeyConstraint($tableB, array("bar"), array("id"));
-
- return $schema;
- }
-}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/DBAL/Types/ArrayTest.php b/tests/Doctrine/Tests/DBAL/Types/ArrayTest.php
deleted file mode 100644
index dc4a223a9..000000000
--- a/tests/Doctrine/Tests/DBAL/Types/ArrayTest.php
+++ /dev/null
@@ -1,35 +0,0 @@
-_platform = new \Doctrine\Tests\DBAL\Mocks\MockPlatform();
- $this->_type = Type::getType('array');
- }
-
- public function testArrayConvertsToDatabaseValue()
- {
- $this->assertTrue(
- is_string($this->_type->convertToDatabaseValue(array(), $this->_platform))
- );
- }
-
- public function testArrayConvertsToPHPValue()
- {
- $this->assertTrue(
- is_array($this->_type->convertToPHPValue(serialize(array()), $this->_platform))
- );
- }
-}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/DBAL/Types/BooleanTest.php b/tests/Doctrine/Tests/DBAL/Types/BooleanTest.php
deleted file mode 100644
index 1e9cf2a44..000000000
--- a/tests/Doctrine/Tests/DBAL/Types/BooleanTest.php
+++ /dev/null
@@ -1,35 +0,0 @@
-_platform = new \Doctrine\Tests\DBAL\Mocks\MockPlatform();
- $this->_type = Type::getType('boolean');
- }
-
- public function testBooleanConvertsToDatabaseValue()
- {
- $this->assertTrue(
- is_integer($this->_type->convertToDatabaseValue(1, $this->_platform))
- );
- }
-
- public function testBooleanConvertsToPHPValue()
- {
- $this->assertTrue(
- is_bool($this->_type->convertToPHPValue(0, $this->_platform))
- );
- }
-}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/DBAL/Types/DateTest.php b/tests/Doctrine/Tests/DBAL/Types/DateTest.php
deleted file mode 100644
index 3368a6c93..000000000
--- a/tests/Doctrine/Tests/DBAL/Types/DateTest.php
+++ /dev/null
@@ -1,64 +0,0 @@
-_platform = new \Doctrine\Tests\DBAL\Mocks\MockPlatform();
- $this->_type = Type::getType('date');
- $this->_tz = date_default_timezone_get();
- }
-
- public function tearDown()
- {
- date_default_timezone_set($this->_tz);
- }
-
- public function testDateConvertsToDatabaseValue()
- {
- $this->assertTrue(
- is_string($this->_type->convertToDatabaseValue(new \DateTime(), $this->_platform))
- );
- }
-
- public function testDateConvertsToPHPValue()
- {
- // Birthday of jwage and also birthday of Doctrine. Send him a present ;)
- $this->assertTrue(
- $this->_type->convertToPHPValue('1985-09-01', $this->_platform)
- instanceof \DateTime
- );
- }
-
- public function testDateResetsNonDatePartsToZeroUnixTimeValues()
- {
- $date = $this->_type->convertToPHPValue('1985-09-01', $this->_platform);
-
- $this->assertEquals('00:00:00', $date->format('H:i:s'));
- }
-
- public function testDateRests_SummerTimeAffection()
- {
- date_default_timezone_set('Europe/Berlin');
-
- $date = $this->_type->convertToPHPValue('2009-08-01', $this->_platform);
- $this->assertEquals('00:00:00', $date->format('H:i:s'));
- $this->assertEquals('2009-08-01', $date->format('Y-m-d'));
-
- $date = $this->_type->convertToPHPValue('2009-11-01', $this->_platform);
- $this->assertEquals('00:00:00', $date->format('H:i:s'));
- $this->assertEquals('2009-11-01', $date->format('Y-m-d'));
- }
-}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/DBAL/Types/DateTimeTest.php b/tests/Doctrine/Tests/DBAL/Types/DateTimeTest.php
deleted file mode 100644
index a60cae01b..000000000
--- a/tests/Doctrine/Tests/DBAL/Types/DateTimeTest.php
+++ /dev/null
@@ -1,37 +0,0 @@
-_platform = new \Doctrine\Tests\DBAL\Mocks\MockPlatform();
- $this->_type = Type::getType('datetime');
- }
-
- public function testDateTimeConvertsToDatabaseValue()
- {
- $this->assertTrue(
- is_string($this->_type->convertToDatabaseValue(new \DateTime(), $this->_platform))
- );
- }
-
- public function testDateTimeConvertsToPHPValue()
- {
- // Birthday of jwage and also birthday of Doctrine. Send him a present ;)
- $this->assertTrue(
- $this->_type->convertToPHPValue('1985-09-01 00:00:00', $this->_platform)
- instanceof \DateTime
- );
- }
-}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/DBAL/Types/DecimalTest.php b/tests/Doctrine/Tests/DBAL/Types/DecimalTest.php
deleted file mode 100644
index ee5e2491a..000000000
--- a/tests/Doctrine/Tests/DBAL/Types/DecimalTest.php
+++ /dev/null
@@ -1,28 +0,0 @@
-_platform = new \Doctrine\Tests\DBAL\Mocks\MockPlatform();
- $this->_type = Type::getType('decimal');
- }
-
- public function testDecimalConvertsToPHPValue()
- {
- $this->assertTrue(
- is_float($this->_type->convertToPHPValue('5.5', $this->_platform))
- );
- }
-}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/DBAL/Types/IntegerTest.php b/tests/Doctrine/Tests/DBAL/Types/IntegerTest.php
deleted file mode 100644
index f03e400ba..000000000
--- a/tests/Doctrine/Tests/DBAL/Types/IntegerTest.php
+++ /dev/null
@@ -1,32 +0,0 @@
-_platform = new \Doctrine\Tests\DBAL\Mocks\MockPlatform();
- $this->_type = Type::getType('integer');
- }
-
- public function testIntegerConvertsToPHPValue()
- {
- $this->assertTrue(
- is_integer($this->_type->convertToPHPValue('1', $this->_platform))
- );
-
- $this->assertTrue(
- is_null($this->_type->convertToPHPValue(null, $this->_platform))
- );
- }
-}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/DBAL/Types/ObjectTest.php b/tests/Doctrine/Tests/DBAL/Types/ObjectTest.php
deleted file mode 100644
index 122844c22..000000000
--- a/tests/Doctrine/Tests/DBAL/Types/ObjectTest.php
+++ /dev/null
@@ -1,35 +0,0 @@
-_platform = new \Doctrine\Tests\DBAL\Mocks\MockPlatform();
- $this->_type = Type::getType('object');
- }
-
- public function testObjectConvertsToDatabaseValue()
- {
- $this->assertTrue(
- is_string($this->_type->convertToDatabaseValue(new \stdClass(), $this->_platform))
- );
- }
-
- public function testObjectConvertsToPHPValue()
- {
- $this->assertTrue(
- is_object($this->_type->convertToPHPValue(serialize(new \stdClass), $this->_platform))
- );
- }
-}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/DBAL/Types/SmallIntTest.php b/tests/Doctrine/Tests/DBAL/Types/SmallIntTest.php
deleted file mode 100644
index 8495d45f3..000000000
--- a/tests/Doctrine/Tests/DBAL/Types/SmallIntTest.php
+++ /dev/null
@@ -1,28 +0,0 @@
-_platform = new \Doctrine\Tests\DBAL\Mocks\MockPlatform();
- $this->_type = Type::getType('smallint');
- }
-
- public function testDecimalConvertsToPHPValue()
- {
- $this->assertTrue(
- is_integer($this->_type->convertToPHPValue('1', $this->_platform))
- );
- }
-}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/DBAL/Types/StringTest.php b/tests/Doctrine/Tests/DBAL/Types/StringTest.php
deleted file mode 100644
index f67adbf0b..000000000
--- a/tests/Doctrine/Tests/DBAL/Types/StringTest.php
+++ /dev/null
@@ -1,31 +0,0 @@
-_platform = new \Doctrine\Tests\DBAL\Mocks\MockPlatform();
- $this->_type = Type::getType('string');
- }
-
- public function testReturnsSqlDeclarationFromPlatformVarchar()
- {
- $this->assertEquals("DUMMYVARCHAR()", $this->_type->getSqlDeclaration(array(), $this->_platform));
- }
-
- public function testReturnsDefaultLengthFromPlatformVarchar()
- {
- $this->assertEquals(255, $this->_type->getDefaultLength($this->_platform));
- }
-}
diff --git a/tests/Doctrine/Tests/DBAL/Types/TimeTest.php b/tests/Doctrine/Tests/DBAL/Types/TimeTest.php
deleted file mode 100644
index eb272ed59..000000000
--- a/tests/Doctrine/Tests/DBAL/Types/TimeTest.php
+++ /dev/null
@@ -1,36 +0,0 @@
-_platform = new \Doctrine\Tests\DBAL\Mocks\MockPlatform();
- $this->_type = Type::getType('time');
- }
-
- public function testTimeConvertsToDatabaseValue()
- {
- $this->assertTrue(
- is_string($this->_type->convertToDatabaseValue(new \DateTime(), $this->_platform))
- );
- }
-
- public function testTimeConvertsToPHPValue()
- {
- $this->assertTrue(
- $this->_type->convertToPHPValue('5:30:55', $this->_platform)
- instanceof \DateTime
- );
- }
-}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/Mocks/DatabasePlatformMock.php b/tests/Doctrine/Tests/Mocks/DatabasePlatformMock.php
index f2bbf1215..b2954cf55 100644
--- a/tests/Doctrine/Tests/Mocks/DatabasePlatformMock.php
+++ b/tests/Doctrine/Tests/Mocks/DatabasePlatformMock.php
@@ -82,4 +82,9 @@ class DatabasePlatformMock extends \Doctrine\DBAL\Platforms\AbstractPlatform
{
return 'mock';
}
+
+ protected function initializeDoctrineTypeMappings()
+ {
+
+ }
}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/Models/Generic/DateTimeModel.php b/tests/Doctrine/Tests/Models/Generic/DateTimeModel.php
index 0733245ff..3298a8850 100644
--- a/tests/Doctrine/Tests/Models/Generic/DateTimeModel.php
+++ b/tests/Doctrine/Tests/Models/Generic/DateTimeModel.php
@@ -14,15 +14,15 @@ class DateTimeModel
*/
public $id;
/**
- * @Column(name="col_datetime", type="datetime")
+ * @Column(name="col_datetime", type="datetime", nullable=true)
*/
public $datetime;
/**
- * @Column(name="col_date", type="date")
+ * @Column(name="col_date", type="date", nullable=true)
*/
public $date;
/**
- * @Column(name="col_time", type="time")
+ * @Column(name="col_time", type="time", nullable=true)
*/
public $time;
}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php b/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php
index ccd59a7ed..6f02328dc 100644
--- a/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php
+++ b/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php
@@ -4,7 +4,8 @@ namespace Doctrine\Tests\ORM\Functional;
require_once __DIR__ . '/../../TestInit.php';
-use Doctrine\ORM\Mapping\ClassMetadataInfo;
+use Doctrine\ORM\Mapping\ClassMetadataInfo,
+ Doctrine\Common\Util\Inflector;
class DatabaseDriverTest extends \Doctrine\Tests\OrmFunctionalTestCase
{
@@ -15,12 +16,13 @@ class DatabaseDriverTest extends \Doctrine\Tests\OrmFunctionalTestCase
public function setUp()
{
+ $this->useModelSet('cms');
parent::setUp();
$this->_sm = $this->_em->getConnection()->getSchemaManager();
}
- public function testCreateSimpleYamlFromDatabase()
+ public function testLoadMetadataFromDatabase()
{
if (!$this->_em->getConnection()->getDatabasePlatform()->supportsForeignKeyConstraints()) {
$this->markTestSkipped('Platform does not support foreign keys.');
@@ -29,27 +31,29 @@ class DatabaseDriverTest extends \Doctrine\Tests\OrmFunctionalTestCase
$table = new \Doctrine\DBAL\Schema\Table("dbdriver_foo");
$table->addColumn('id', 'integer');
$table->setPrimaryKey(array('id'));
- $table->addColumn('bar', 'string', array('length' => 200));
+ $table->addColumn('bar', 'string', array('notnull' => false, 'length' => 200));
$this->_sm->dropAndCreateTable($table);
- $metadata = $this->extractClassMetadata("DbdriverFoo");
+ $metadatas = $this->extractClassMetadata(array("DbdriverFoo"));
+
+ $this->assertArrayHasKey('DbdriverFoo', $metadatas);
+ $metadata = $metadatas['DbdriverFoo'];
$this->assertArrayHasKey('id', $metadata->fieldMappings);
$this->assertEquals('id', $metadata->fieldMappings['id']['fieldName']);
$this->assertEquals('id', strtolower($metadata->fieldMappings['id']['columnName']));
$this->assertEquals('integer', (string)$metadata->fieldMappings['id']['type']);
- $this->assertTrue($metadata->fieldMappings['id']['notnull']);
$this->assertArrayHasKey('bar', $metadata->fieldMappings);
$this->assertEquals('bar', $metadata->fieldMappings['bar']['fieldName']);
$this->assertEquals('bar', strtolower($metadata->fieldMappings['bar']['columnName']));
$this->assertEquals('string', (string)$metadata->fieldMappings['bar']['type']);
$this->assertEquals(200, $metadata->fieldMappings['bar']['length']);
- $this->assertTrue($metadata->fieldMappings['bar']['notnull']);
+ $this->assertTrue($metadata->fieldMappings['bar']['nullable']);
}
- public function testCreateYamlWithForeignKeyFromDatabase()
+ public function testLoadMetadataWithForeignKeyFromDatabase()
{
if (!$this->_em->getConnection()->getDatabasePlatform()->supportsForeignKeyConstraints()) {
$this->markTestSkipped('Platform does not support foreign keys.');
@@ -69,33 +73,61 @@ class DatabaseDriverTest extends \Doctrine\Tests\OrmFunctionalTestCase
$this->_sm->dropAndCreateTable($tableA);
- $metadata = $this->extractClassMetadata("DbdriverBaz");
+ $metadatas = $this->extractClassMetadata(array("DbdriverBar", "DbdriverBaz"));
- $this->assertArrayNotHasKey('bar', $metadata->fieldMappings);
- $this->assertArrayHasKey('id', $metadata->fieldMappings);
+ $this->assertArrayHasKey('DbdriverBaz', $metadatas);
+ $bazMetadata = $metadatas['DbdriverBaz'];
- $metadata->associationMappings = \array_change_key_case($metadata->associationMappings, \CASE_LOWER);
+ $this->assertArrayNotHasKey('barId', $bazMetadata->fieldMappings, "The foreign Key field should not be inflected as 'barId' field, its an association.");
+ $this->assertArrayHasKey('id', $bazMetadata->fieldMappings);
- $this->assertArrayHasKey('bar', $metadata->associationMappings);
- $this->assertType('Doctrine\ORM\Mapping\OneToOneMapping', $metadata->associationMappings['bar']);
+ $bazMetadata->associationMappings = \array_change_key_case($bazMetadata->associationMappings, \CASE_LOWER);
+
+ $this->assertArrayHasKey('bar', $bazMetadata->associationMappings);
+ $this->assertType('Doctrine\ORM\Mapping\OneToOneMapping', $bazMetadata->associationMappings['bar']);
}
+ public function testDetectManyToManyTables()
+ {
+ if (!$this->_em->getConnection()->getDatabasePlatform()->supportsForeignKeyConstraints()) {
+ $this->markTestSkipped('Platform does not support foreign keys.');
+ }
+
+ $metadatas = $this->extractClassMetadata(array("CmsUsers", "CmsGroups"));
+
+ $this->assertArrayHasKey('CmsUsers', $metadatas, 'CmsUsers entity was not detected.');
+ $this->assertArrayHasKey('CmsGroups', $metadatas, 'CmsGroups entity was not detected.');
+
+ $this->assertEquals(1, count($metadatas['CmsUsers']->associationMappings));
+ $this->assertArrayHasKey('group', $metadatas['CmsUsers']->associationMappings);
+ $this->assertEquals(1, count($metadatas['CmsGroups']->associationMappings));
+ $this->assertArrayHasKey('user', $metadatas['CmsGroups']->associationMappings);
+ }
+
+
/**
*
* @param string $className
* @return ClassMetadata
*/
- protected function extractClassMetadata($className)
+ protected function extractClassMetadata(array $classNames)
{
+ $classNames = array_map('strtolower', $classNames);
+ $metadatas = array();
+
$driver = new \Doctrine\ORM\Mapping\Driver\DatabaseDriver($this->_sm);
- foreach ($driver->getAllClassNames() as $dbClassName) {
- $class = new ClassMetadataInfo($dbClassName);
- $driver->loadMetadataForClass($dbClassName, $class);
- if (strtolower($class->name) == strtolower($className)) {
- return $class;
+ foreach ($driver->getAllClassNames() as $className) {
+ if (!in_array(strtolower($className), $classNames)) {
+ continue;
}
+ $class = new ClassMetadataInfo($className);
+ $driver->loadMetadataForClass($className, $class);
+ $metadatas[$className] = $class;
}
- $this->fail("No class matching the name '".$className."' was found!");
+ if (count($metadatas) != count($classNames)) {
+ $this->fail("Have not found all classes matching the names '" . implode(", ", $classNames) . "' only tables " . implode(", ", array_keys($metadatas)));
+ }
+ return $metadatas;
}
}
diff --git a/tests/Doctrine/Tests/ORM/Functional/Locking/LockTest.php b/tests/Doctrine/Tests/ORM/Functional/Locking/LockTest.php
index c5316f769..6917e7252 100644
--- a/tests/Doctrine/Tests/ORM/Functional/Locking/LockTest.php
+++ b/tests/Doctrine/Tests/ORM/Functional/Locking/LockTest.php
@@ -125,7 +125,13 @@ class LockTest extends \Doctrine\Tests\OrmFunctionalTestCase {
$this->_em->flush();
$this->_em->beginTransaction();
- $this->_em->lock($article, LockMode::PESSIMISTIC_WRITE);
+ try {
+ $this->_em->lock($article, LockMode::PESSIMISTIC_WRITE);
+ $this->_em->commit();
+ } catch (\Exception $e) {
+ $this->_em->rollback();
+ throw $e;
+ }
$query = array_pop( $this->_sqlLoggerStack->queries );
$this->assertContains($writeLockSql, $query['sql']);
@@ -149,7 +155,13 @@ class LockTest extends \Doctrine\Tests\OrmFunctionalTestCase {
$this->_em->flush();
$this->_em->beginTransaction();
- $this->_em->lock($article, LockMode::PESSIMISTIC_READ);
+ try {
+ $this->_em->lock($article, LockMode::PESSIMISTIC_READ);
+ $this->_em->commit();
+ } catch (\Exception $e) {
+ $this->_em->rollback();
+ throw $e;
+ }
$query = array_pop( $this->_sqlLoggerStack->queries );
$this->assertContains($readLockSql, $query['sql']);
diff --git a/tests/Doctrine/Tests/ORM/Functional/QueryTest.php b/tests/Doctrine/Tests/ORM/Functional/QueryTest.php
index b1074cbc5..c55c76149 100644
--- a/tests/Doctrine/Tests/ORM/Functional/QueryTest.php
+++ b/tests/Doctrine/Tests/ORM/Functional/QueryTest.php
@@ -281,4 +281,34 @@ class QueryTest extends \Doctrine\Tests\OrmFunctionalTestCase
$this->_em->getConfiguration()->setEntityNamespaces(array());
}
+
+ /**
+ * @group DDC-604
+ */
+ public function testEntityParameters()
+ {
+ $article = new CmsArticle;
+ $article->topic = "dr. dolittle";
+ $article->text = "Once upon a time ...";
+ $author = new CmsUser;
+ $author->name = "anonymous";
+ $author->username = "anon";
+ $author->status = "here";
+ $article->user = $author;
+ $this->_em->persist($author);
+ $this->_em->persist($article);
+ $this->_em->flush();
+ $this->_em->clear();
+ //$this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger);
+ $q = $this->_em->createQuery("select a from Doctrine\Tests\Models\CMS\CmsArticle a where a.topic = :topic and a.user = :user")
+ ->setParameter("user", $this->_em->getReference('Doctrine\Tests\Models\CMS\CmsUser', $author->id))
+ ->setParameter("topic", "dr. dolittle");
+
+ $result = $q->getResult();
+ $this->assertEquals(1, count($result));
+ $this->assertTrue($result[0] instanceof CmsArticle);
+ $this->assertEquals("dr. dolittle", $result[0]->topic);
+ $this->assertTrue($result[0]->user instanceof \Doctrine\ORM\Proxy\Proxy);
+ $this->assertFalse($result[0]->user->__isInitialized__);
+ }
}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC144Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC144Test.php
index 9b493e7da..82a2e314c 100644
--- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC144Test.php
+++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC144Test.php
@@ -8,7 +8,6 @@ class DDC144Test extends \Doctrine\Tests\OrmFunctionalTestCase
{
protected function setUp() {
parent::setUp();
-
//$this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger);
$this->_schemaTool->createSchema(array(
diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC353Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC353Test.php
index 5091cd44c..40f4ca298 100644
--- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC353Test.php
+++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC353Test.php
@@ -10,15 +10,12 @@ class DDC353Test extends \Doctrine\Tests\OrmFunctionalTestCase
protected function setUp()
{
parent::setUp();
-
try {
$this->_schemaTool->createSchema(array(
$this->_em->getClassMetadata(__NAMESPACE__ . '\DDC353File'),
$this->_em->getClassMetadata(__NAMESPACE__ . '\DDC353Picture'),
));
- } catch(\Exception $e) {
-
- }
+ } catch(\Exception $ignored) {}
}
public function testWorkingCase()
diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC531Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC531Test.php
new file mode 100644
index 000000000..0ac3b9b8d
--- /dev/null
+++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC531Test.php
@@ -0,0 +1,88 @@
+_schemaTool->createSchema(array(
+ $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC531Item'),
+ $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC531SubItem'),
+ ));
+ }
+
+ public function testIssue()
+ {
+ $item1 = new DDC531Item;
+ $item2 = new DDC531Item;
+ $item2->parent = $item1;
+ $item1->getChildren()->add($item2);
+ $this->_em->persist($item1);
+ $this->_em->persist($item2);
+ $this->_em->flush();
+ $this->_em->clear();
+
+ $item3 = $this->_em->find(__NAMESPACE__ . '\DDC531Item', $item2->id); // Load child item first (id 2)
+ // parent will already be loaded, cannot be lazy because it has mapped subclasses and we would not
+ // know which proxy type to put in.
+ $this->assertTrue($item3->parent instanceof DDC531Item);
+ $this->assertFalse($item3->parent instanceof \Doctrine\ORM\Proxy\Proxy);
+ $item4 = $this->_em->find(__NAMESPACE__ . '\DDC531Item', $item1->id); // Load parent item (id 1)
+ $this->assertNull($item4->parent);
+ $this->assertNotNull($item4->getChildren());
+ $this->assertTrue($item4->getChildren()->contains($item3)); // lazy-loads children
+ }
+}
+
+/**
+ * @Entity
+ * @InheritanceType("SINGLE_TABLE")
+ * @DiscriminatorColumn(name="type", type="integer")
+ * @DiscriminatorMap({"0" = "DDC531Item", "1" = "DDC531SubItem"})
+ */
+class DDC531Item
+{
+ /**
+ * @Id
+ * @Column(type="integer")
+ * @GeneratedValue(strategy="AUTO")
+ */
+ public $id;
+
+ /**
+ * @OneToMany(targetEntity="DDC531Item", mappedBy="parent")
+ */
+ protected $children;
+
+ /**
+ * @ManyToOne(targetEntity="DDC531Item", inversedBy="children")
+ * @JoinColumn(name="parentId", referencedColumnName="id")
+ */
+ public $parent;
+
+ public function __construct()
+ {
+ $this->children = new \Doctrine\Common\Collections\ArrayCollection;
+ }
+
+ public function getParent()
+ {
+ return $this->parent;
+ }
+
+ public function getChildren()
+ {
+ return $this->children;
+ }
+}
+
+/**
+ * @Entity
+ */
+class DDC531SubItem extends DDC531Item
+{
+}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC599Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC599Test.php
new file mode 100644
index 000000000..d9f9a82be
--- /dev/null
+++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC599Test.php
@@ -0,0 +1,132 @@
+_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger);
+ try {
+ $this->_schemaTool->createSchema(array(
+ $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC599Item'),
+ $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC599Subitem'),
+ $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC599Child'),
+ ));
+ } catch (\Exception $ignored) {}
+ }
+
+ public function testCascadeRemoveOnInheritanceHierachy()
+ {
+ $item = new DDC599Subitem;
+ $item->elem = "foo";
+ $child = new DDC599Child;
+ $child->parent = $item;
+ $item->getChildren()->add($child);
+ $this->_em->persist($item);
+ $this->_em->persist($child);
+ $this->_em->flush();
+ $this->_em->clear();
+
+ $item = $this->_em->find(__NAMESPACE__ . '\DDC599Item', $item->id);
+
+ $this->_em->remove($item);
+ $this->_em->flush(); // Should not fail
+
+ $this->assertFalse($this->_em->contains($item));
+ $children = $item->getChildren();
+ $this->assertFalse($this->_em->contains($children[0]));
+
+ $this->_em->clear();
+
+
+ $item2 = new DDC599Subitem;
+ $item2->elem = "bar";
+ $this->_em->persist($item2);
+ $this->_em->flush();
+
+ $child2 = new DDC599Child;
+ $child2->parent = $item2;
+ $item2->getChildren()->add($child2);
+ $this->_em->persist($child2);
+ $this->_em->flush();
+
+ $this->_em->remove($item2);
+ $this->_em->flush(); // should not fail
+
+ $this->assertFalse($this->_em->contains($item));
+ $children = $item->getChildren();
+ $this->assertFalse($this->_em->contains($children[0]));
+ }
+
+ public function testCascadeRemoveOnChildren()
+ {
+ $class = $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC599Subitem');
+
+ $this->assertArrayHasKey('children', $class->associationMappings);
+ $this->assertTrue($class->associationMappings['children']->isCascadeRemove);
+ }
+}
+
+/**
+ * @Entity
+ * @InheritanceType("SINGLE_TABLE")
+ * @DiscriminatorColumn(name="type", type="integer")
+ * @DiscriminatorMap({"0" = "DDC599Item", "1" = "DDC599Subitem"})
+ */
+class DDC599Item
+{
+ /**
+ * @Id
+ * @Column(type="integer")
+ * @GeneratedValue(strategy="AUTO")
+ */
+ public $id;
+
+ /**
+ * @OneToMany(targetEntity="DDC599Child", mappedBy="parent", cascade={"remove"})
+ */
+ protected $children;
+
+ public function __construct()
+ {
+ $this->children = new \Doctrine\Common\Collections\ArrayCollection;
+ }
+
+ public function getChildren()
+ {
+ return $this->children;
+ }
+}
+
+/**
+ * @Entity
+ */
+class DDC599Subitem extends DDC599Item
+{
+ /**
+ * @Column(type="string")
+ */
+ public $elem;
+}
+
+/**
+ * @Entity
+ */
+class DDC599Child
+{
+ /**
+ * @Id
+ * @Column(type="integer")
+ * @GeneratedValue(strategy="AUTO")
+ */
+ public $id;
+
+ /**
+ * @ManyToOne(targetEntity="DDC599Item", inversedBy="children")
+ * @JoinColumn(name="parentId", referencedColumnName="id")
+ */
+ public $parent;
+}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/ORM/Functional/TypeTest.php b/tests/Doctrine/Tests/ORM/Functional/TypeTest.php
index 001087639..a4ef84589 100644
--- a/tests/Doctrine/Tests/ORM/Functional/TypeTest.php
+++ b/tests/Doctrine/Tests/ORM/Functional/TypeTest.php
@@ -91,4 +91,49 @@ class TypeTest extends \Doctrine\Tests\OrmFunctionalTestCase
$this->assertType('stdClass', $serialize->object);
}
+
+ public function testDate()
+ {
+ $dateTime = new DateTimeModel();
+ $dateTime->date = new \DateTime('2009-10-01', new \DateTimeZone('Europe/Berlin'));
+
+ $this->_em->persist($dateTime);
+ $this->_em->flush();
+ $this->_em->clear();
+
+ $dateTimeDb = $this->_em->find('Doctrine\Tests\Models\Generic\DateTimeModel', $dateTime->id);
+
+ $this->assertType('DateTime', $dateTimeDb->date);
+ $this->assertEquals('2009-10-01', $dateTimeDb->date->format('Y-m-d'));
+ }
+
+ public function testDateTime()
+ {
+ $dateTime = new DateTimeModel();
+ $dateTime->datetime = new \DateTime('2009-10-02 20:10:52', new \DateTimeZone('Europe/Berlin'));
+
+ $this->_em->persist($dateTime);
+ $this->_em->flush();
+ $this->_em->clear();
+
+ $dateTimeDb = $this->_em->find('Doctrine\Tests\Models\Generic\DateTimeModel', $dateTime->id);
+
+ $this->assertType('DateTime', $dateTime->datetime);
+ $this->assertEquals('2009-10-02 20:10:52', $dateTimeDb->datetime->format('Y-m-d H:i:s'));
+ }
+
+ public function testTime()
+ {
+ $dateTime = new DateTimeModel();
+ $dateTime->time = new \DateTime('2010-01-01 19:27:20');
+
+ $this->_em->persist($dateTime);
+ $this->_em->flush();
+ $this->_em->clear();
+
+ $dateTimeDb = $this->_em->find('Doctrine\Tests\Models\Generic\DateTimeModel', $dateTime->id);
+
+ $this->assertType('DateTime', $dateTime->time);
+ $this->assertEquals('19:27:20', $dateTime->time->format('H:i:s'));
+ }
}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/ORM/Hydration/AllTests.php b/tests/Doctrine/Tests/ORM/Hydration/AllTests.php
index 76a9cbcb1..d2ecafec3 100644
--- a/tests/Doctrine/Tests/ORM/Hydration/AllTests.php
+++ b/tests/Doctrine/Tests/ORM/Hydration/AllTests.php
@@ -25,6 +25,7 @@ class AllTests
$suite->addTestSuite('Doctrine\Tests\ORM\Hydration\ScalarHydratorTest');
$suite->addTestSuite('Doctrine\Tests\ORM\Hydration\SingleScalarHydratorTest');
$suite->addTestSuite('Doctrine\Tests\ORM\Hydration\ResultSetMappingTest');
+ $suite->addTestSuite('Doctrine\Tests\ORM\Hydration\CustomHydratorTest');
return $suite;
}
diff --git a/tests/Doctrine/Tests/ORM/Hydration/CustomHydratorTest.php b/tests/Doctrine/Tests/ORM/Hydration/CustomHydratorTest.php
new file mode 100644
index 000000000..6b5e45149
--- /dev/null
+++ b/tests/Doctrine/Tests/ORM/Hydration/CustomHydratorTest.php
@@ -0,0 +1,29 @@
+_getTestEntityManager();
+ $config = $em->getConfiguration();
+ $config->addCustomHydrationMode('CustomHydrator', 'Doctrine\Tests\ORM\Hydration\CustomHydrator');
+
+ $hydrator = $em->newHydrator('CustomHydrator');
+ $this->assertTrue($hydrator instanceof \Doctrine\Tests\ORM\Hydration\CustomHydrator);
+ $this->assertNull($config->getCustomHydrationMode('does not exist'));
+ }
+}
+
+class CustomHydrator extends AbstractHydrator
+{
+ protected function _hydrateAll()
+ {
+ return $this->_stmt->fetchAll(PDO::FETCH_ASSOC);
+ }
+}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php
index 270e16234..858a00eba 100644
--- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php
+++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php
@@ -36,6 +36,21 @@ abstract class AbstractMappingDriverTest extends \Doctrine\Tests\OrmTestCase
return $class;
}
+ /**
+ * @depends testEntityTableNameAndInheritance
+ * @param ClassMetadata $class
+ */
+ public function testEntityIndexes($class)
+ {
+ $this->assertArrayHasKey('indexes', $class->table, 'ClassMetadata should have indexes key in table property.');
+ $this->assertEquals(array(
+ 'name_idx' => array('columns' => array('name')),
+ 0 => array('columns' => array('user_email'))
+ ), $class->table['indexes']);
+
+ return $class;
+ }
+
/**
* @depends testEntityTableNameAndInheritance
* @param ClassMetadata $class
@@ -240,7 +255,11 @@ abstract class AbstractMappingDriverTest extends \Doctrine\Tests\OrmTestCase
/**
* @Entity
* @HasLifecycleCallbacks
- * @Table(name="cms_users", uniqueConstraints={@UniqueConstraint(name="search_idx", columns={"name", "user_email"})})
+ * @Table(
+ * name="cms_users",
+ * uniqueConstraints={@UniqueConstraint(name="search_idx", columns={"name", "user_email"})},
+ * indexes={@Index(name="name_idx", columns={"name"}), @Index(name="0", columns={"user_email"})}
+ * )
*/
class User
{
@@ -411,6 +430,9 @@ class User
$metadata->table['uniqueConstraints'] = array(
'search_idx' => array('columns' => array('name', 'user_email')),
);
+ $metadata->table['indexes'] = array(
+ 'name_idx' => array('columns' => array('name')), 0 => array('columns' => array('user_email'))
+ );
$metadata->setSequenceGeneratorDefinition(array(
'sequenceName' => 'tablename_seq',
'allocationSize' => 100,
diff --git a/tests/Doctrine/Tests/ORM/Mapping/XmlMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/XmlMappingDriverTest.php
index d41e01eed..5c2edff5b 100644
--- a/tests/Doctrine/Tests/ORM/Mapping/XmlMappingDriverTest.php
+++ b/tests/Doctrine/Tests/ORM/Mapping/XmlMappingDriverTest.php
@@ -32,6 +32,19 @@ class XmlMappingDriverTest extends AbstractMappingDriverTest
$this->assertEquals(3, count($class->discriminatorMap));
$this->assertEquals($expectedMap, $class->discriminatorMap);
}
+
+ public function testValidateXmlSchema()
+ {
+ $xsdSchemaFile = __DIR__ . "/../../../../../doctrine-mapping.xsd";
+
+ $dom = new \DOMDocument('UTF-8');
+ $dom->load(__DIR__ . "/xml/Doctrine.Tests.ORM.Mapping.CTI.dcm.xml");
+ $this->assertTrue($dom->schemaValidate($xsdSchemaFile));
+
+ $dom = new \DOMDocument('UTF-8');
+ $dom->load(__DIR__ . "/xml/Doctrine.Tests.ORM.Mapping.User.dcm.xml");
+ $this->assertTrue($dom->schemaValidate($xsdSchemaFile));
+ }
}
class CTI
diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php
index 819a01109..4aadffb30 100644
--- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php
+++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php
@@ -106,6 +106,9 @@ $metadata->mapManyToMany(array(
$metadata->table['uniqueConstraints'] = array(
'search_idx' => array('columns' => array('name', 'user_email')),
);
+$metadata->table['indexes'] = array(
+ 'name_idx' => array('columns' => array('name')), 0 => array('columns' => array('user_email'))
+);
$metadata->setSequenceGeneratorDefinition(array(
'sequenceName' => 'tablename_seq',
'allocationSize' => 100,
diff --git a/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.ORM.Mapping.CTI.dcm.xml b/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.ORM.Mapping.CTI.dcm.xml
index 472c16558..e6459afae 100644
--- a/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.ORM.Mapping.CTI.dcm.xml
+++ b/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.ORM.Mapping.CTI.dcm.xml
@@ -1,9 +1,10 @@
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping
+ http://www.doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
-
+
diff --git a/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.ORM.Mapping.User.dcm.xml b/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.ORM.Mapping.User.dcm.xml
index 793be0f06..948430c24 100644
--- a/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.ORM.Mapping.User.dcm.xml
+++ b/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.ORM.Mapping.User.dcm.xml
@@ -7,6 +7,11 @@
+
+
+
+
+
@@ -18,8 +23,8 @@
-
+
@@ -31,12 +36,12 @@
-
-
-
+
+
+
diff --git a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.User.dcm.yml b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.User.dcm.yml
index 7dd6bfaed..b541c8877 100644
--- a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.User.dcm.yml
+++ b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.User.dcm.yml
@@ -58,4 +58,9 @@ Doctrine\Tests\ORM\Mapping\User:
postPersist: [ doStuffOnPostPersist ]
uniqueConstraints:
search_idx:
- columns: name,user_email
\ No newline at end of file
+ columns: name,user_email
+ indexes:
+ name_idx:
+ columns: name
+ 0:
+ columns: user_email
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/ORM/Query/ExprTest.php b/tests/Doctrine/Tests/ORM/Query/ExprTest.php
index 8a3d966d7..032411761 100644
--- a/tests/Doctrine/Tests/ORM/Query/ExprTest.php
+++ b/tests/Doctrine/Tests/ORM/Query/ExprTest.php
@@ -27,7 +27,7 @@ use Doctrine\ORM\Query;
require_once __DIR__ . '/../../TestInit.php';
/**
- * Test case for the DQL Expr class used for generating DQL snippets through
+ * Test case for the DQL Expr class used for generating DQL snippets through
* a programmatic interface
*
* @author Jonathan H. Wage
@@ -75,7 +75,7 @@ class ExprTest extends \Doctrine\Tests\OrmTestCase
{
$qb = $this->_em->createQueryBuilder();
$qb->select('u')->from('User', 'u')->where('u.name = ?1');
-
+
$this->assertEquals('EXISTS(SELECT u FROM User u WHERE u.name = ?1)', (string) $this->_expr->exists($qb));
}
@@ -83,7 +83,7 @@ class ExprTest extends \Doctrine\Tests\OrmTestCase
{
$qb = $this->_em->createQueryBuilder();
$qb->select('u')->from('User', 'u')->where('u.name = ?1');
-
+
$this->assertEquals('ALL(SELECT u FROM User u WHERE u.name = ?1)', (string) $this->_expr->all($qb));
}
@@ -91,7 +91,7 @@ class ExprTest extends \Doctrine\Tests\OrmTestCase
{
$qb = $this->_em->createQueryBuilder();
$qb->select('u')->from('User', 'u')->where('u.name = ?1');
-
+
$this->assertEquals('SOME(SELECT u FROM User u WHERE u.name = ?1)', (string) $this->_expr->some($qb));
}
@@ -99,7 +99,7 @@ class ExprTest extends \Doctrine\Tests\OrmTestCase
{
$qb = $this->_em->createQueryBuilder();
$qb->select('u')->from('User', 'u')->where('u.name = ?1');
-
+
$this->assertEquals('ANY(SELECT u FROM User u WHERE u.name = ?1)', (string) $this->_expr->any($qb));
}
@@ -107,7 +107,7 @@ class ExprTest extends \Doctrine\Tests\OrmTestCase
{
$qb = $this->_em->createQueryBuilder();
$qb->select('u')->from('User', 'u')->where('u.name = ?1');
-
+
$this->assertEquals('NOT(SELECT u FROM User u WHERE u.name = ?1)', (string) $this->_expr->not($qb));
}
@@ -115,11 +115,11 @@ class ExprTest extends \Doctrine\Tests\OrmTestCase
{
$this->assertEquals('(1 = 1) AND (2 = 2)', (string) $this->_expr->andx((string) $this->_expr->eq(1, 1), (string) $this->_expr->eq(2, 2)));
}
-
+
public function testIntelligentParenthesisPreventionAndExpr()
{
$this->assertEquals(
- '(1 = 1) AND (2 = 2)',
+ '(1 = 1) AND (2 = 2)',
(string) $this->_expr->andx($this->_expr->orx($this->_expr->andx($this->_expr->eq(1, 1))), (string) $this->_expr->eq(2, 2))
);
}
@@ -153,7 +153,7 @@ class ExprTest extends \Doctrine\Tests\OrmTestCase
{
$this->assertEquals('10 / 2', (string) $this->_expr->quot(10, 2));
}
-
+
public function testScopeInArithmeticExpr()
{
$this->assertEquals('(100 - 20) / 2', (string) $this->_expr->quot($this->_expr->diff(100, 20), 2));
@@ -185,6 +185,15 @@ class ExprTest extends \Doctrine\Tests\OrmTestCase
$this->assertEquals('SUBSTRING(a.title, 0, 25)', (string) $this->_expr->substring('a.title', 0, 25));
}
+ /**
+ * @group regression
+ * @group DDC-612
+ */
+ public function testSubstringExprAcceptsTwoArguments()
+ {
+ $this->assertEquals('SUBSTRING(a.title, 5)', (string) $this->_expr->substring('a.title', 5));
+ }
+
public function testLowerExpr()
{
$this->assertEquals('LOWER(u.first_name)', (string) $this->_expr->lower('u.first_name'));
@@ -220,6 +229,15 @@ class ExprTest extends \Doctrine\Tests\OrmTestCase
$this->assertEquals(5, (string) $this->_expr->literal(5));
}
+ /**
+ * @group regression
+ * @group DDC-610
+ */
+ public function testLiteralExprProperlyQuotesStrings()
+ {
+ $this->assertEquals("'00010001'", (string) $this->_expr->literal('00010001'));
+ }
+
public function testGreaterThanOrEqualToExpr()
{
$this->assertEquals('5 >= 2', (string) $this->_expr->gte(5, 2));
@@ -266,7 +284,7 @@ class ExprTest extends \Doctrine\Tests\OrmTestCase
$this->assertEquals('(1 = 1) OR (1 < 5)', (string) $orExpr);
}
-
+
public function testOrderByCountExpr()
{
$orderExpr = $this->_expr->desc('u.username');
diff --git a/tests/Doctrine/Tests/ORM/QueryBuilderTest.php b/tests/Doctrine/Tests/ORM/QueryBuilderTest.php
index 468e0e20c..e2430e8cc 100644
--- a/tests/Doctrine/Tests/ORM/QueryBuilderTest.php
+++ b/tests/Doctrine/Tests/ORM/QueryBuilderTest.php
@@ -516,4 +516,13 @@ class QueryBuilderTest extends \Doctrine\Tests\OrmTestCase
$this->assertEquals(QueryBuilder::STATE_DIRTY, $qb->getState());
}
+
+ public function testSelectWithFuncExpression()
+ {
+ $qb = $this->_em->createQueryBuilder();
+ $expr = $qb->expr();
+ $qb->select($expr->count('e.id'));
+
+ $this->assertValidQueryBuilder($qb, 'SELECT COUNT(e.id)');
+ }
}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/ORM/Tools/AllTests.php b/tests/Doctrine/Tests/ORM/Tools/AllTests.php
index faeeb1dd0..3d9fe929c 100644
--- a/tests/Doctrine/Tests/ORM/Tools/AllTests.php
+++ b/tests/Doctrine/Tests/ORM/Tools/AllTests.php
@@ -28,6 +28,7 @@ class AllTests
$suite->addTestSuite('Doctrine\Tests\ORM\Tools\SchemaToolTest');
$suite->addTestSuite('Doctrine\Tests\ORM\Tools\EntityGeneratorTest');
$suite->addTestSuite('Doctrine\Tests\ORM\Tools\SchemaValidatorTest');
+ $suite->addTestSuite('Doctrine\Tests\ORM\Tools\Console\Command\ConvertDoctrine1SchemaCommandTest');
return $suite;
}
diff --git a/tests/Doctrine/Tests/ORM/Tools/Console/Command/ConvertDoctrine1SchemaCommandTest.php b/tests/Doctrine/Tests/ORM/Tools/Console/Command/ConvertDoctrine1SchemaCommandTest.php
new file mode 100644
index 000000000..cf520fc39
--- /dev/null
+++ b/tests/Doctrine/Tests/ORM/Tools/Console/Command/ConvertDoctrine1SchemaCommandTest.php
@@ -0,0 +1,23 @@
+getMock('Doctrine\ORM\Tools\EntityGenerator');
+ $metadataExporter = $this->getMock('Doctrine\ORM\Tools\Export\ClassMetadataExporter');
+ $command = new ConvertDoctrine1SchemaCommand();
+ $command->setEntityGenerator($entityGenerator);
+
+ $output = $this->getMock('Symfony\Components\Console\Output\OutputInterface');
+ $output->expects($this->once())
+ ->method('write')
+ ->with($this->equalTo('No Metadata Classes to process.' . PHP_EOL));
+
+ $command->convertDoctrine1Schema($this->_getTestEntityManager(), array(), sys_get_temp_dir(), 'annotation', 4, null, $output);
+ }
+}
\ No newline at end of file
diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php
index f1ba8ba92..0fa781285 100644
--- a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php
+++ b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php
@@ -102,7 +102,9 @@ abstract class AbstractClassMetadataExporterTest extends \Doctrine\Tests\OrmTest
$cmf = $this->_createClassMetadataFactory($em, $type);
$metadata = $cmf->getAllMetadata();
- $this->assertEquals('Doctrine\Tests\ORM\Tools\Export\User', $metadata[0]->name);
+ $metadata[0]->name = 'Doctrine\Tests\ORM\Tools\Export\ExportedUser';
+
+ $this->assertEquals('Doctrine\Tests\ORM\Tools\Export\ExportedUser', $metadata[0]->name);
$type = $this->_getType();
$cme = new ClassMetadataExporter();
@@ -117,9 +119,9 @@ abstract class AbstractClassMetadataExporterTest extends \Doctrine\Tests\OrmTest
$exporter->export();
if ($type == 'annotation') {
- $this->assertTrue(file_exists(__DIR__ . '/export/' . $type . '/'.str_replace('\\', '/', 'Doctrine\Tests\ORM\Tools\Export\User').$this->_extension));
+ $this->assertTrue(file_exists(__DIR__ . '/export/' . $type . '/'.str_replace('\\', '/', 'Doctrine\Tests\ORM\Tools\Export\ExportedUser').$this->_extension));
} else {
- $this->assertTrue(file_exists(__DIR__ . '/export/' . $type . '/Doctrine.Tests.ORM.Tools.Export.User'.$this->_extension));
+ $this->assertTrue(file_exists(__DIR__ . '/export/' . $type . '/Doctrine.Tests.ORM.Tools.Export.ExportedUser'.$this->_extension));
}
}
@@ -130,14 +132,14 @@ abstract class AbstractClassMetadataExporterTest extends \Doctrine\Tests\OrmTest
{
$type = $this->_getType();
- $metadataDriver = $this->_createMetadataDriver($type, __DIR__ . '/' . $type);
+ $metadataDriver = $this->_createMetadataDriver($type, __DIR__ . '/export/' . $type);
$em = $this->_createEntityManager($metadataDriver);
$cmf = $this->_createClassMetadataFactory($em, $type);
$metadata = $cmf->getAllMetadata();
$class = current($metadata);
- $this->assertEquals('Doctrine\Tests\ORM\Tools\Export\User', $class->name);
+ $this->assertEquals('Doctrine\Tests\ORM\Tools\Export\ExportedUser', $class->name);
return $class;
}
@@ -290,6 +292,29 @@ abstract class AbstractClassMetadataExporterTest extends \Doctrine\Tests\OrmTest
return $class;
}
+ /**
+ * @depends testLifecycleCallbacksAreExported
+ * @param ClassMetadataInfo $class
+ */
+ public function testCascadeIsExported($class)
+ {
+ $this->assertTrue($class->associationMappings['phonenumbers']->isCascadePersist);
+ $this->assertFalse($class->associationMappings['phonenumbers']->isCascadeMerge);
+ $this->assertFalse($class->associationMappings['phonenumbers']->isCascadeRemove);
+ $this->assertFalse($class->associationMappings['phonenumbers']->isCascadeRefresh);
+
+ return $class;
+ }
+
+ /**
+ * @depends testCascadeIsExported
+ * @param ClassMetadataInfo $class
+ */
+ public function testInversedByIsExported($class)
+ {
+ $this->assertEquals('user', $class->associationMappings['address']->inversedBy);
+ }
+
public function __destruct()
{
$type = $this->_getType();
diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/annotation/Doctrine.Tests.ORM.Tools.Export.User.php b/tests/Doctrine/Tests/ORM/Tools/Export/annotation/Doctrine.Tests.ORM.Tools.Export.User.php
index 25f6fdd7b..e71da460e 100644
--- a/tests/Doctrine/Tests/ORM/Tools/Export/annotation/Doctrine.Tests.ORM.Tools.Export.User.php
+++ b/tests/Doctrine/Tests/ORM/Tools/Export/annotation/Doctrine.Tests.ORM.Tools.Export.User.php
@@ -23,7 +23,7 @@ class User
public $email;
/**
- * @OneToOne(targetEntity="Doctrine\Tests\ORM\Tools\Export\Address", cascade={"remove"})
+ * @OneToOne(targetEntity="Doctrine\Tests\ORM\Tools\Export\Address", cascade={"remove"}, inversedBy="user")
* @JoinColumn(name="address_id", onDelete="CASCADE", onUpdate="CASCADE")
*/
public $address;
diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php b/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php
index 5b1e328e1..1a3824543 100644
--- a/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php
+++ b/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php
@@ -34,6 +34,7 @@ $metadata->setIdGeneratorType(ClassMetadataInfo::GENERATOR_TYPE_AUTO);
$metadata->mapOneToOne(array(
'fieldName' => 'address',
'targetEntity' => 'Doctrine\\Tests\\ORM\\Tools\\Export\\Address',
+ 'inversedBy' => 'user',
'cascade' =>
array(
0 => 'remove',
diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/xml/Doctrine.Tests.ORM.Tools.Export.User.dcm.xml b/tests/Doctrine/Tests/ORM/Tools/Export/xml/Doctrine.Tests.ORM.Tools.Export.User.dcm.xml
index e8444e738..11bb6ac95 100644
--- a/tests/Doctrine/Tests/ORM/Tools/Export/xml/Doctrine.Tests.ORM.Tools.Export.User.dcm.xml
+++ b/tests/Doctrine/Tests/ORM/Tools/Export/xml/Doctrine.Tests.ORM.Tools.Export.User.dcm.xml
@@ -20,7 +20,7 @@
-
+
diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/yaml/Doctrine.Tests.ORM.Tools.Export.User.dcm.yml b/tests/Doctrine/Tests/ORM/Tools/Export/yaml/Doctrine.Tests.ORM.Tools.Export.User.dcm.yml
index d60f41026..2b3048fba 100644
--- a/tests/Doctrine/Tests/ORM/Tools/Export/yaml/Doctrine.Tests.ORM.Tools.Export.User.dcm.yml
+++ b/tests/Doctrine/Tests/ORM/Tools/Export/yaml/Doctrine.Tests.ORM.Tools.Export.User.dcm.yml
@@ -25,6 +25,7 @@ Doctrine\Tests\ORM\Tools\Export\User:
onDelete: CASCADE
onUpdate: CASCADE
cascade: [ remove ]
+ inversedBy: user
oneToMany:
phonenumbers:
targetEntity: Doctrine\Tests\ORM\Tools\Export\Phonenumber
diff --git a/tests/Doctrine/Tests/TestInit.php b/tests/Doctrine/Tests/TestInit.php
index 1c7bea434..cd3bf4daa 100644
--- a/tests/Doctrine/Tests/TestInit.php
+++ b/tests/Doctrine/Tests/TestInit.php
@@ -8,7 +8,21 @@ error_reporting(E_ALL | E_STRICT);
require_once 'PHPUnit/Framework.php';
require_once 'PHPUnit/TextUI/TestRunner.php';
-require_once __DIR__ . '/../../../lib/Doctrine/Common/ClassLoader.php';
+require_once __DIR__ . '/../../../lib/vendor/doctrine-common/lib/Doctrine/Common/ClassLoader.php';
+
+if (isset($GLOBALS['DOCTRINE_COMMON_PATH'])) {
+ $classLoader = new \Doctrine\Common\ClassLoader('Doctrine\Common', $GLOBALS['DOCTRINE_COMMON_PATH']);
+} else {
+ $classLoader = new \Doctrine\Common\ClassLoader('Doctrine\Common', __DIR__ . '/../../../lib/vendor/doctrine-common/lib');
+}
+$classLoader->register();
+
+if (isset($GLOBALS['DOCTRINE_DBAL_PATH'])) {
+ $classLoader = new \Doctrine\Common\ClassLoader('Doctrine\DBAL', $GLOBALS['DOCTRINE_DBAL_PATH']);
+} else {
+ $classLoader = new \Doctrine\Common\ClassLoader('Doctrine\DBAL', __DIR__ . '/../../../lib/vendor/doctrine-dbal/lib');
+}
+$classLoader->register();
$classLoader = new \Doctrine\Common\ClassLoader('Doctrine');
$classLoader->register();
diff --git a/tools/NativePhpunitTask.php b/tests/NativePhpunitTask.php
similarity index 100%
rename from tools/NativePhpunitTask.php
rename to tests/NativePhpunitTask.php
diff --git a/tools/sandbox/cli-config.php b/tools/sandbox/cli-config.php
index afe1296e6..c949668e0 100644
--- a/tools/sandbox/cli-config.php
+++ b/tools/sandbox/cli-config.php
@@ -1,10 +1,17 @@
register();
+$classLoader = new \Doctrine\Common\ClassLoader('Doctrine\DBAL', realpath(__DIR__ . '/../../lib/vendor/doctrine-dbal/lib'));
+$classLoader->register();
+$classLoader = new \Doctrine\Common\ClassLoader('Doctrine\Common', realpath(__DIR__ . '/../../lib/vendor/doctrine-common/lib'));
+$classLoader->register();
+$classLoader = new \Doctrine\Common\ClassLoader('Symfony', realpath(__DIR__ . '/../../lib/vendor'));
+$classLoader->register();
$classLoader = new \Doctrine\Common\ClassLoader('Entities', __DIR__);
$classLoader->register();
-
$classLoader = new \Doctrine\Common\ClassLoader('Proxies', __DIR__);
$classLoader->register();
diff --git a/tools/sandbox/doctrine.php b/tools/sandbox/doctrine.php
index f325e143a..9d498d440 100644
--- a/tools/sandbox/doctrine.php
+++ b/tools/sandbox/doctrine.php
@@ -1,11 +1,18 @@
register();
-
-$classLoader = new \Doctrine\Common\ClassLoader('Symfony', __DIR__ . '/../../lib/vendor');
+$classLoader = new \Doctrine\Common\ClassLoader('Doctrine\DBAL', realpath(__DIR__ . '/../../lib/vendor/doctrine-dbal/lib'));
+$classLoader->register();
+$classLoader = new \Doctrine\Common\ClassLoader('Doctrine\Common', realpath(__DIR__ . '/../../lib/vendor/doctrine-common/lib'));
+$classLoader->register();
+$classLoader = new \Doctrine\Common\ClassLoader('Symfony', realpath(__DIR__ . '/../../lib/vendor'));
+$classLoader->register();
+$classLoader = new \Doctrine\Common\ClassLoader('Entities', __DIR__);
+$classLoader->register();
+$classLoader = new \Doctrine\Common\ClassLoader('Proxies', __DIR__);
$classLoader->register();
// Variable $helperSet is defined inside cli-config.php
diff --git a/tools/sandbox/index.php b/tools/sandbox/index.php
index 37879eef4..ad1cb9d6b 100644
--- a/tools/sandbox/index.php
+++ b/tools/sandbox/index.php
@@ -15,16 +15,22 @@ use Doctrine\Common\ClassLoader,
Doctrine\Common\Cache\ApcCache,
Entities\User, Entities\Address;
-require '../../lib/Doctrine/Common/ClassLoader.php';
+require_once '../../lib/vendor/doctrine-common/lib/Doctrine/Common/ClassLoader.php';
// Set up class loading. You could use different autoloaders, provided by your favorite framework,
// if you want to.
-$doctrineClassLoader = new ClassLoader('Doctrine', realpath(__DIR__ . '/../../lib'));
-$doctrineClassLoader->register();
-$entitiesClassLoader = new ClassLoader('Entities', __DIR__);
-$entitiesClassLoader->register();
-$proxiesClassLoader = new ClassLoader('Proxies', __DIR__);
-$proxiesClassLoader->register();
+$classLoader = new ClassLoader('Doctrine\ORM', realpath(__DIR__ . '/../../lib'));
+$classLoader->register();
+$classLoader = new ClassLoader('Doctrine\DBAL', realpath(__DIR__ . '/../../lib/vendor/doctrine-dbal/lib'));
+$classLoader->register();
+$classLoader = new ClassLoader('Doctrine\Common', realpath(__DIR__ . '/../../lib/vendor/doctrine-common/lib'));
+$classLoader->register();
+$classLoader = new ClassLoader('Symfony', realpath(__DIR__ . '/../../lib/vendor'));
+$classLoader->register();
+$classLoader = new ClassLoader('Entities', __DIR__);
+$classLoader->register();
+$classLoader = new ClassLoader('Proxies', __DIR__);
+$classLoader->register();
// Set up caches
$config = new Configuration;
@@ -54,4 +60,3 @@ $user = new User;
$address = new Address;
echo 'Hello World!' . PHP_EOL;
-