MDL-27071 Add big IN() unit tests

Let's verify how all databases perform with a big
number of parameters (10000) using IN() SQL clauses.
Both using QM and NAMED parameters.

Ideally only Oracle fails, and only it will need fixing.
This commit is contained in:
Eloy Lafuente (stronk7)
2013-04-29 01:11:10 +02:00
parent cf5a3296c4
commit 9b2ebc4587
+21
View File
@@ -4202,6 +4202,27 @@ class dml_testcase extends database_driver_testcase {
$DB->insert_record($tablename, array('course' => 7, 'content' => 'xx', 'name'=>'1abc'));
$this->assertEquals(count($DB->get_records_sql($sql, array(1))), 1);
$this->assertEquals(count($DB->get_records_sql($sql, array("1"))), 1);
// Test get_in_or_equal() with a big number of elements. Note that ideally
// we should be detecting and warning about any use over, say, 200 elements
// and recommend to change code to use subqueries and/or chunks instead.
$currentcount = $DB->count_records($tablename);
$numelements = 10000; // Verify that we can handle 10000 elements (crazy!)
$values = range(1, $numelements);
list($insql, $inparams) = $DB->get_in_or_equal($values, SQL_PARAMS_QM); // With QM params.
$sql = "SELECT *
FROM {{$tablename}}
WHERE id $insql";
$results = $DB->get_records_sql($sql, $inparams);
$this->assertEquals($currentcount, count($results));
list($insql, $inparams) = $DB->get_in_or_equal($values, SQL_PARAMS_NAMED); // With NAMED params.
$sql = "SELECT *
FROM {{$tablename}}
WHERE id $insql";
$results = $DB->get_records_sql($sql, $inparams);
$this->assertEquals($currentcount, count($results));
}
function test_onelevel_commit() {