From 6d682bae11e42326954a5fbaa9e06dae2b52f577 Mon Sep 17 00:00:00 2001 From: stronk7 Date: Tue, 1 Sep 2009 16:31:09 +0000 Subject: [PATCH] MDL-17969 mssql (freetds/odbtp) native driver. Now supporting DB sessions with proper locking. --- lib/dml/mssql_native_moodle_database.php | 25 ++++++++++-------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/lib/dml/mssql_native_moodle_database.php b/lib/dml/mssql_native_moodle_database.php index 4f067d002e..e3574bfc05 100644 --- a/lib/dml/mssql_native_moodle_database.php +++ b/lib/dml/mssql_native_moodle_database.php @@ -1152,26 +1152,22 @@ s only returning name of SQL substring function, it now requires all parameters. /// session locking public function session_lock_supported() { - return false; + return true; } public function get_session_lock($rowid) { - // NOTE: there is a potential locking problem for database running - // multiple instances of moodle, we could try to use pg_advisory_lock(int, int), - // luckily there is not a big chance that they would collide if (!$this->session_lock_supported()) { return; } - parent::get_session_lock($rowid); - $sql = "SELECT pg_advisory_lock($rowid)"; + + $fullname = $this->dbname.'-'.$this->prefix.'-session-'.$rowid; + $sql = "sp_getapplock '$fullname', 'Exclusive', 'Session', 120000"; $this->query_start($sql, null, SQL_QUERY_AUX); - $result = pg_query($this->pgsql, $sql); + $result = mssql_query($sql, $this->mssql); $this->query_end($result); - if ($result) { - pg_free_result($result); - } + $this->free_result($result); } public function release_session_lock($rowid) { @@ -1180,14 +1176,13 @@ s only returning name of SQL substring function, it now requires all parameters. } parent::release_session_lock($rowid); - $sql = "SELECT pg_advisory_unlock($rowid)"; + $fullname = $this->dbname.'-'.$this->prefix.'-session-'.$rowid; + $sql = "sp_releaseapplock '$fullname', 'Exclusive', 'Session'"; $this->query_start($sql, null, SQL_QUERY_AUX); - $result = pg_query($this->pgsql, $sql); + $result = mssql_query($sql, $this->mssql); $this->query_end($result); - if ($result) { - pg_free_result($result); - } + $this->free_result($result); } /// transactions -- 2.39.5