diff --git a/lib/Doctrine/Query.php b/lib/Doctrine/Query.php index 2f86aaf11..6a444acb4 100644 --- a/lib/Doctrine/Query.php +++ b/lib/Doctrine/Query.php @@ -579,6 +579,7 @@ class Doctrine_Query extends Doctrine_Hydrate implements Countable { $k = array_keys($this->tables); $table = $this->tables[$k[0]]; + // get short alias $alias = $this->aliasHandler->getShortAlias($table->getTableName()); $primaryKey = $alias . '.' . $table->getIdentifier(); @@ -597,7 +598,7 @@ class Doctrine_Query extends Doctrine_Hydrate implements Countable { } } - $subquery .= ' FROM ' . $table->getTableName() . ' ' . $alias; + $subquery .= ' FROM ' . $this->conn->quoteIdentifier($table->getTableName()) . ' ' . $alias; foreach($this->parts['join'] as $parts) { foreach($parts as $part) { diff --git a/tests/ExportSqliteTestCase.php b/tests/ExportSqliteTestCase.php new file mode 100644 index 000000000..af09cb313 --- /dev/null +++ b/tests/ExportSqliteTestCase.php @@ -0,0 +1,53 @@ +export->createDatabase('db'); + $this->fail(); + } catch(Doctrine_Export_Exception $e) { + $this->pass(); + } + } + public function testDropDatabaseDoesNotExecuteSql() { + try { + $this->export->dropDatabase('db'); + $this->fail(); + } catch(Doctrine_Export_Exception $e) { + $this->pass(); + } + } + public function testCreateTableSupportsAutoincPks() { + $name = 'mytable'; + + $fields = array('id' => array('type' => 'integer', 'unsigned' => 1, 'autoincrement' => true)); + + $this->export->createTable($name, $fields); + + $this->assertEqual($this->adapter->pop(), 'CREATE TABLE mytable (id INTEGER UNSIGNED PRIMARY KEY AUTOINCREMENT)'); + } + public function testCreateTableSupportsDefaultAttribute() { + $name = 'mytable'; + $fields = array('name' => array('type' => 'char', 'length' => 10, 'default' => 'def'), + 'type' => array('type' => 'integer', 'length' => 3, 'default' => 12) + ); + + $options = array('primary' => array('name', 'type')); + $this->export->createTable($name, $fields, $options); + + $this->assertEqual($this->adapter->pop(), 'CREATE TABLE mytable (name CHAR(10) DEFAULT \'def\', type INTEGER DEFAULT 12, PRIMARY KEY(name, type))'); + } + public function testCreateTableSupportsMultiplePks() { + $name = 'mytable'; + $fields = array('name' => array('type' => 'char', 'length' => 10), + 'type' => array('type' => 'integer', 'length' => 3)); + + $options = array('primary' => array('name', 'type')); + $this->export->createTable($name, $fields, $options); + + $this->assertEqual($this->adapter->pop(), 'CREATE TABLE mytable (name CHAR(10), type INTEGER, PRIMARY KEY(name, type))'); + } +} +?> diff --git a/tests/QueryIdentifierQuotingTestCase.php b/tests/QueryIdentifierQuotingTestCase.php new file mode 100644 index 000000000..4b93eba79 --- /dev/null +++ b/tests/QueryIdentifierQuotingTestCase.php @@ -0,0 +1,34 @@ +connection->setAttribute(Doctrine::ATTR_QUOTE_IDENTIFIER, true); + + $q = new Doctrine_Query(); + + $q->parseQuery('SELECT MAX(u.id), MIN(u.name) FROM User u'); + + $this->assertEqual($q->getQuery(), 'SELECT MAX(e.id) AS e__0, MIN(e.name) AS e__1 FROM "entity" e WHERE (e.type = 0)'); + + } + public function testQuerySupportsIdentifierQuotingWithJoins() { + $q = new Doctrine_Query(); + + $q->parseQuery('SELECT u.name FROM User u LEFT JOIN u.Phonenumber p'); + + $this->assertEqual($q->getQuery(), 'SELECT e.id AS e__id, e.name AS e__name FROM "entity" e LEFT JOIN "phonenumber" p ON e.id = p.entity_id WHERE (e.type = 0)'); + + + } + + public function testLimitSubqueryAlgorithmSupportsIdentifierQuoting() { + $q = new Doctrine_Query(); + + $q->parseQuery('SELECT u.name FROM User u INNER JOIN u.Phonenumber p')->limit(5); + + $this->assertEqual($q->getQuery(), 'SELECT e.id AS e__id, e.name AS e__name FROM "entity" e INNER JOIN "phonenumber" p ON e.id = p.entity_id WHERE e.id IN (SELECT DISTINCT e2.id FROM "entity" e2 INNER JOIN "phonenumber" p2 ON e2.id = p2.entity_id WHERE (e2.type = 0) LIMIT 5) AND (e.type = 0)'); + + $this->connection->setAttribute(Doctrine::ATTR_QUOTE_IDENTIFIER, false); + } +}