From: Joas Schilling Date: Wed, 9 Dec 2015 10:09:02 +0000 (+0100) Subject: Do not quote the table name for lastInsertId() X-Git-Tag: v9.0beta1~527^2 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=bef6344b277186e37cd02a4af74f270d97435d40;p=nextcloud-server.git Do not quote the table name for lastInsertId() --- diff --git a/lib/private/db/querybuilder/querybuilder.php b/lib/private/db/querybuilder/querybuilder.php index 741da4efc27..a4cbb5abd76 100644 --- a/lib/private/db/querybuilder/querybuilder.php +++ b/lib/private/db/querybuilder/querybuilder.php @@ -40,6 +40,9 @@ class QueryBuilder implements IQueryBuilder { /** @var bool */ private $automaticTablePrefix = true; + /** @var string */ + protected $lastInsertedTable; + /** * Initializes a new QueryBuilder. * @@ -445,6 +448,8 @@ class QueryBuilder implements IQueryBuilder { $this->getTableName($insert) ); + $this->lastInsertedTable = $insert; + return $this; } @@ -1051,10 +1056,10 @@ class QueryBuilder implements IQueryBuilder { * @throws \BadMethodCallException When being called before an insert query has been run. */ public function getLastInsertId() { - $from = $this->getQueryPart('from'); - - if ($this->getType() === \Doctrine\DBAL\Query\QueryBuilder::INSERT && !empty($from)) { - return (int) $this->connection->lastInsertId($from['table']); + if ($this->getType() === \Doctrine\DBAL\Query\QueryBuilder::INSERT && $this->lastInsertedTable) { + // lastInsertId() needs the prefix but no quotes + $table = $this->prefixTableName($this->lastInsertedTable); + return (int) $this->connection->lastInsertId($table); } throw new \BadMethodCallException('Invalid call to getLastInsertId without using insert() before.'); @@ -1067,11 +1072,22 @@ class QueryBuilder implements IQueryBuilder { * @return string */ 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) { - return $this->helper->quoteColumnName($table); + return $table; } - return $this->helper->quoteColumnName('*PREFIX*' . $table); + return '*PREFIX*' . $table; } /**