MDL-40266 improve emulate_bound_params() for mssql driver
authorPetr Škoda <commits@skodak.org>
Mon, 1 Jul 2013 06:52:03 +0000 (08:52 +0200)
committerDan Poltawski <dan@moodle.com>
Tue, 2 Jul 2013 05:33:38 +0000 (13:33 +0800)
Looping over large numbers of items with array_shift() is expensive.
Reverse the array and fetch items from the top of the pile.

Credit goes to Martin Langhoff for original mysqli fix.

lib/dml/sqlsrv_native_moodle_database.php

index 6081d0b..d693418 100644 (file)
@@ -701,8 +701,8 @@ class sqlsrv_native_moodle_database extends moodle_database {
             return $sql;
         }
         // ok, we have verified sql statement with ? and correct number of params
-        $parts = explode('?', $sql);
-        $return = array_shift($parts);
+        $parts = array_reverse(explode('?', $sql));
+        $return = array_pop($parts);
         foreach ($params as $param) {
             if (is_bool($param)) {
                 $return .= (int)$param;
@@ -722,7 +722,7 @@ class sqlsrv_native_moodle_database extends moodle_database {
                 $return .= "N'$param'";
             }
 
-            $return .= array_shift($parts);
+            $return .= array_pop($parts);
         }
         return $return;
     }