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:
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user