Merge pull request #21061 from owncloud/fix-oracle-last-insert-id-test

Fix the last insert id test by changing to an autoincremen…
This commit is contained in:
Thomas Müller 2015-12-09 11:53:43 +01:00
commit 5c95939bf3
2 changed files with 39 additions and 11 deletions

View File

@ -40,6 +40,9 @@ class QueryBuilder implements IQueryBuilder {
/** @var bool */ /** @var bool */
private $automaticTablePrefix = true; private $automaticTablePrefix = true;
/** @var string */
protected $lastInsertedTable;
/** /**
* Initializes a new QueryBuilder. * Initializes a new QueryBuilder.
* *
@ -445,6 +448,8 @@ class QueryBuilder implements IQueryBuilder {
$this->getTableName($insert) $this->getTableName($insert)
); );
$this->lastInsertedTable = $insert;
return $this; return $this;
} }
@ -1051,10 +1056,10 @@ class QueryBuilder implements IQueryBuilder {
* @throws \BadMethodCallException When being called before an insert query has been run. * @throws \BadMethodCallException When being called before an insert query has been run.
*/ */
public function getLastInsertId() { public function getLastInsertId() {
$from = $this->getQueryPart('from'); if ($this->getType() === \Doctrine\DBAL\Query\QueryBuilder::INSERT && $this->lastInsertedTable) {
// lastInsertId() needs the prefix but no quotes
if ($this->getType() === \Doctrine\DBAL\Query\QueryBuilder::INSERT && !empty($from)) { $table = $this->prefixTableName($this->lastInsertedTable);
return (int) $this->connection->lastInsertId($from['table']); return (int) $this->connection->lastInsertId($table);
} }
throw new \BadMethodCallException('Invalid call to getLastInsertId without using insert() before.'); throw new \BadMethodCallException('Invalid call to getLastInsertId without using insert() before.');
@ -1067,11 +1072,22 @@ class QueryBuilder implements IQueryBuilder {
* @return string * @return string
*/ */
public function getTableName($table) { public function getTableName($table) {
$table = $this->prefixTableName($table);
return $this->helper->quoteColumnName($table);
}
/**
* Returns the table name with database prefix as needed by the implementation
*
* @param string $table
* @return string
*/
protected function prefixTableName($table) {
if ($this->automaticTablePrefix === false || strpos($table, '*PREFIX*') === 0) { if ($this->automaticTablePrefix === false || strpos($table, '*PREFIX*') === 0) {
return $this->helper->quoteColumnName($table); return $table;
} }
return $this->helper->quoteColumnName('*PREFIX*' . $table); return '*PREFIX*' . $table;
} }
/** /**

View File

@ -1124,11 +1124,12 @@ class QueryBuilderTest extends \Test\TestCase {
$this->assertTrue(true); $this->assertTrue(true);
} }
$qB->insert('appconfig') $qB->insert('properties')
->values([ ->values([
'appid' => $qB->expr()->literal('testFirstResult'), 'userid' => $qB->expr()->literal('testFirstResult'),
'configkey' => $qB->expr()->literal('testing' . 50), 'propertypath' => $qB->expr()->literal('testing'),
'configvalue' => $qB->expr()->literal(100 - 50), 'propertyname' => $qB->expr()->literal('testing'),
'propertyvalue' => $qB->expr()->literal('testing'),
]) ])
->execute(); ->execute();
@ -1136,7 +1137,18 @@ class QueryBuilderTest extends \Test\TestCase {
$this->assertNotNull($actual); $this->assertNotNull($actual);
$this->assertInternalType('int', $actual); $this->assertInternalType('int', $actual);
$this->assertEquals($this->connection->lastInsertId('*PREFIX*appconfig'), $actual); $this->assertEquals($this->connection->lastInsertId('*PREFIX*properties'), $actual);
$qB->delete('properties')
->where($qB->expr()->eq('userid', $qB->expr()->literal('testFirstResult')))
->execute();
try {
$qB->getLastInsertId();
$this->fail('getLastInsertId() should throw an exception, when being called after delete()');
} catch (\BadMethodCallException $e) {
$this->assertTrue(true);
}
} }
public function dataGetTableName() { public function dataGetTableName() {