From 39714cb25543f94e99f496caab3ad6ead7f280f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20S=CC=8Ckoda?= Date: Mon, 1 Jul 2013 08:50:51 +0200 Subject: [PATCH 1/2] MDL-40266 improve emulate_bound_params() for sqlsrv driver 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/mssql_native_moodle_database.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/dml/mssql_native_moodle_database.php b/lib/dml/mssql_native_moodle_database.php index e1ea067c5e91e..63f2470b1ccb7 100644 --- a/lib/dml/mssql_native_moodle_database.php +++ b/lib/dml/mssql_native_moodle_database.php @@ -625,8 +625,8 @@ protected function emulate_bound_params($sql, array $params=null) { 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; @@ -651,7 +651,7 @@ protected function emulate_bound_params($sql, array $params=null) { $return .= "N'$param'"; } - $return .= array_shift($parts); + $return .= array_pop($parts); } return $return; } From fc4523f8f305ea5ddb70180f5d54f561c4c7f30e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20S=CC=8Ckoda?= Date: Mon, 1 Jul 2013 08:52:03 +0200 Subject: [PATCH 2/2] MDL-40266 improve emulate_bound_params() for mssql driver 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 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/dml/sqlsrv_native_moodle_database.php b/lib/dml/sqlsrv_native_moodle_database.php index f5992b46f264b..af3697bebcd87 100644 --- a/lib/dml/sqlsrv_native_moodle_database.php +++ b/lib/dml/sqlsrv_native_moodle_database.php @@ -709,8 +709,8 @@ protected function emulate_bound_params($sql, array $params = null) { 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; @@ -730,7 +730,7 @@ protected function emulate_bound_params($sql, array $params = null) { $return .= "N'$param'"; } - $return .= array_shift($parts); + $return .= array_pop($parts); } return $return; }