]> git.mjollnir.org Git - moodle.git/commitdiff
MDL-11347 adding comments with description of UPDATE related problems; minor whitespa...
authorskodak <skodak>
Thu, 20 Sep 2007 07:37:50 +0000 (07:37 +0000)
committerskodak <skodak>
Thu, 20 Sep 2007 07:37:50 +0000 (07:37 +0000)
lib/accesslib.php

index 1094a4347b99b46ff2fe2c1e8c41cfa3221e761b..bd4585311c8592608b29861ff8677223d93848a3 100755 (executable)
@@ -4431,31 +4431,40 @@ function build_context_path($force=false) {
                                     'instanceid', SITEID);
     }
 
-    $ctxemptyclause = " AND (ctx.depth IS NULL 
+    $ctxemptyclause = " AND (ctx.depth IS NULL
                               OR ctx.depth=0) ";
-    $emptyclause    = " AND ({$CFG->prefix}context.depth IS NULL 
+    $emptyclause    = " AND ({$CFG->prefix}context.depth IS NULL
                               OR {$CFG->prefix}context.depth=0) ";
     if ($force) {
         $ctxemptyclause = $emptyclause = '';
     }
 
-    $updatesql = "UPDATE {$CFG->prefix}context
-                    SET path  = ct.path,
-                        depth = ct.depth
-                 FROM {$CFG->prefix}$temptable ct
-                 WHERE ct.id={$CFG->prefix}context.id";
-    if ($CFG->dbfamily==='mysql') {
+    /* MDL-11347:
+     *  - mysql does not allow to use FROM in UPDATE statements
+     *  - using two tables after UPDATE works in mysql, but might give unexpected
+     *    results in pg 8 (depends on configuration)
+     *  - when using temporary table in mysql, it can be used only once in subselects
+     *  - using table alias in UPDATE does not work in pg < 8.2
+     */
+    if ($CFG->dbfamily == 'mysql') {
         $updatesql = "UPDATE {$CFG->prefix}context, {$CFG->prefix}$temptable
-                        SET {$CFG->prefix}context.path  = {$CFG->prefix}$temptable.path,
-                            {$CFG->prefix}context.depth = {$CFG->prefix}$temptable.depth
-                     WHERE {$CFG->prefix}$temptable.id={$CFG->prefix}context.id";
+                         SET {$CFG->prefix}context.path  = {$CFG->prefix}$temptable.path,
+                             {$CFG->prefix}context.depth = {$CFG->prefix}$temptable.depth
+                       WHERE {$CFG->prefix}$temptable.id={$CFG->prefix}context.id";
+    } else {
+        $updatesql = "UPDATE {$CFG->prefix}context
+                         SET path  = ct.path,
+                             depth = ct.depth
+                        FROM {$CFG->prefix}$temptable ct
+                       WHERE ct.id={$CFG->prefix}context.id";
     }
+
     $udelsql = "TRUNCATE TABLE {$CFG->prefix}$temptable";
 
     // Top level categories
     $sql = "UPDATE {$CFG->prefix}context
-              SET depth=2, path=" . sql_concat("'$base/'", 'id') . "
-            WHERE contextlevel=".CONTEXT_COURSECAT."
+               SET depth=2, path=" . sql_concat("'$base/'", 'id') . "
+             WHERE contextlevel=".CONTEXT_COURSECAT."
                    AND EXISTS (SELECT 'x'
                                  FROM {$CFG->prefix}course_categories cc
                                 WHERE cc.id = {$CFG->prefix}context.instanceid
@@ -4545,7 +4554,7 @@ function build_context_path($force=false) {
              WHERE contextlevel=".CONTEXT_USER."
                    AND EXISTS (SELECT 'x'
                                  FROM {$CFG->prefix}user u
-                                WHERE u.id = {$CFG->prefix}context.instanceid) 
+                                WHERE u.id = {$CFG->prefix}context.instanceid)
                    $emptyclause ";
     execute_sql($sql, $force);