summaryrefslogtreecommitdiffstats
path: root/lib/private/db/querybuilder/querybuilder.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/private/db/querybuilder/querybuilder.php')
-rw-r--r--lib/private/db/querybuilder/querybuilder.php28
1 files changed, 22 insertions, 6 deletions
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;
}
/**