Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/roundcube/roundcubemail.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG1
-rw-r--r--program/lib/Roundcube/db/sqlsrv.php32
2 files changed, 33 insertions, 0 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 95b75ae8f..8d836faf8 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -9,6 +9,7 @@ CHANGELOG Roundcube Webmail
- Fix link to closure compiler in bin/jsshrink.sh script (#7567)
- Fix bug where some parts of a message could have been missing in a reply/forward body (#7568)
- Fix empty space on mail printouts in Chrome (#7604)
+- Fix incorrect PDO::lastInsertId() use in sqlsrv driver (#7564)
RELEASE 1.4.8
-------------
diff --git a/program/lib/Roundcube/db/sqlsrv.php b/program/lib/Roundcube/db/sqlsrv.php
index 7d561e2d7..b41ea6ce7 100644
--- a/program/lib/Roundcube/db/sqlsrv.php
+++ b/program/lib/Roundcube/db/sqlsrv.php
@@ -27,6 +27,38 @@
*/
class rcube_db_sqlsrv extends rcube_db_mssql
{
+
+ /**
+ * Get last inserted record ID
+ *
+ * @param string $table Table name (to find the incremented sequence)
+ *
+ * @return string|false The ID or False on failure
+ */
+ public function insert_id($table = '')
+ {
+ if (!$this->db_connected || $this->db_mode == 'r') {
+ return false;
+ }
+
+ if ($table) {
+ $driver_version = $this->dbh->getAttribute(PDO::ATTR_DRIVER_VERSION);
+
+ // Starting from version 5 of the driver lastInsertId() method expects
+ // a sequence name instead of a table name. We'll unset the argument
+ // to get the last insert sequence (#7564)
+ if (version_compare($driver_version, '5', '>=')) {
+ $table = null;
+ }
+ else {
+ // resolve table name
+ $table = $this->table_name($table);
+ }
+ }
+
+ return $this->dbh->lastInsertId($table);
+ }
+
/**
* Returns PDO DSN string from DSN array
*/