1363 lines
58 KiB
PHP
Executable File
1363 lines
58 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* Unit tests for dml
|
|
* @package dml
|
|
*/
|
|
|
|
if (!defined('MOODLE_INTERNAL')) {
|
|
die('Direct access to this script is forbidden.'); /// It must be included from a Moodle page
|
|
}
|
|
|
|
class dml_test extends UnitTestCase {
|
|
private $tables = array();
|
|
private $tdb;
|
|
private $data;
|
|
|
|
function setUp() {
|
|
global $CFG, $DB, $UNITTEST;
|
|
|
|
if (isset($UNITTEST->func_test_db)) {
|
|
$this->tdb = $UNITTEST->func_test_db;
|
|
} else {
|
|
$this->tdb = $DB;
|
|
}
|
|
|
|
}
|
|
|
|
function tearDown() {
|
|
$dbman = $this->tdb->get_manager();
|
|
|
|
foreach ($this->tables as $table) {
|
|
if ($dbman->table_exists($table)) {
|
|
$dbman->drop_table($table);
|
|
}
|
|
}
|
|
$this->tables = array();
|
|
}
|
|
|
|
function test_fix_sql_params() {
|
|
$DB = $this->tdb;
|
|
|
|
// Malformed table placeholder
|
|
$sql = "SELECT * FROM [testtable]";
|
|
$sqlarray = $DB->fix_sql_params($sql);
|
|
$this->assertEqual($sql, $sqlarray[0]);
|
|
|
|
// Correct table placeholder substitution
|
|
$sql = "SELECT * FROM {testtable}";
|
|
$sqlarray = $DB->fix_sql_params($sql);
|
|
$this->assertEqual("SELECT * FROM {$DB->get_prefix()}testtable", $sqlarray[0]);
|
|
|
|
// Malformed param placeholders
|
|
$sql = "SELECT * FROM {testtable} WHERE name = ?param1";
|
|
$params = array('param1' => 'record2');
|
|
$sqlarray = $DB->fix_sql_params($sql, $params);
|
|
$this->assertEqual("SELECT * FROM {$DB->get_prefix()}testtable WHERE name = ?param1", $sqlarray[0]);
|
|
|
|
// Mixed param types (colon and dollar)
|
|
$sql = "SELECT * FROM {testtable} WHERE name = :param1, course = \$1";
|
|
$params = array('param1' => 'record1', 'param2' => 3);
|
|
try {
|
|
$sqlarray = $DB->fix_sql_params($sql, $params);
|
|
$this->fail("Expecting an exception, none occurred");
|
|
} catch (Exception $e) {
|
|
$this->assertTrue($e instanceof moodle_exception);
|
|
}
|
|
|
|
// Mixed param types (question and dollar)
|
|
$sql = "SELECT * FROM {testtable} WHERE name = ?, course = \$1";
|
|
$params = array('param1' => 'record2', 'param2' => 5);
|
|
try {
|
|
$sqlarray = $DB->fix_sql_params($sql, $params);
|
|
$this->fail("Expecting an exception, none occurred");
|
|
} catch (Exception $e) {
|
|
$this->assertTrue($e instanceof moodle_exception);
|
|
}
|
|
|
|
// Too many params in sql
|
|
$sql = "SELECT * FROM {testtable} WHERE name = ?, course = ?, id = ?";
|
|
$params = array('record2', 3);
|
|
try {
|
|
$sqlarray = $DB->fix_sql_params($sql, $params);
|
|
$this->fail("Expecting an exception, none occurred");
|
|
} catch (Exception $e) {
|
|
$this->assertTrue($e instanceof moodle_exception);
|
|
}
|
|
|
|
// Too many params in array: no error
|
|
$params[] = 1;
|
|
$params[] = time();
|
|
$sqlarray = null;
|
|
|
|
try {
|
|
$sqlarray = $DB->fix_sql_params($sql, $params);
|
|
$this->pass();
|
|
} catch (Exception $e) {
|
|
$this->fail("Unexpected " . get_class($e) . " exception");
|
|
}
|
|
$this->assertTrue($sqlarray[0]);
|
|
|
|
// Named params missing from array
|
|
$sql = "SELECT * FROM {testtable} WHERE name = :name, course = :course";
|
|
$params = array('wrongname' => 'record1', 'course' => 1);
|
|
try {
|
|
$sqlarray = $DB->fix_sql_params($sql, $params);
|
|
$this->fail("Expecting an exception, none occurred");
|
|
} catch (Exception $e) {
|
|
$this->assertTrue($e instanceof moodle_exception);
|
|
}
|
|
|
|
// Duplicate named param in query
|
|
$sql = "SELECT * FROM {testtable} WHERE name = :name, course = :name";
|
|
$params = array('name' => 'record2', 'course' => 3);
|
|
try {
|
|
$sqlarray = $DB->fix_sql_params($sql, $params);
|
|
$this->fail("Expecting an exception, none occurred");
|
|
} catch (Exception $e) {
|
|
$this->assertTrue($e instanceof moodle_exception);
|
|
}
|
|
|
|
// Unsupported Bound params
|
|
$sql = "SELECT * FROM {testtable} WHERE name = $1, course = $2";
|
|
$params = array('first record', 1);
|
|
try {
|
|
$sqlarray = $DB->fix_sql_params($sql, $params);
|
|
$this->fail("Expecting an exception, none occurred");
|
|
} catch (Exception $e) {
|
|
$this->assertTrue($e instanceof moodle_exception);
|
|
}
|
|
|
|
// Correct named param placeholders
|
|
$sql = "SELECT * FROM {testtable} WHERE name = :name, course = :course";
|
|
$params = array('name' => 'first record', 'course' => 1);
|
|
$sqlarray = $DB->fix_sql_params($sql, $params);
|
|
$this->assertEqual("SELECT * FROM {$DB->get_prefix()}testtable WHERE name = ?, course = ?", $sqlarray[0]);
|
|
$this->assertEqual(2, count($sqlarray[1]));
|
|
|
|
// Correct ? params
|
|
$sql = "SELECT * FROM {testtable} WHERE name = ?, course = ?";
|
|
$params = array('first record', 1);
|
|
$sqlarray = $DB->fix_sql_params($sql, $params);
|
|
$this->assertEqual("SELECT * FROM {$DB->get_prefix()}testtable WHERE name = ?, course = ?", $sqlarray[0]);
|
|
$this->assertEqual(2, count($sqlarray[1]));
|
|
|
|
}
|
|
|
|
public function testGetTables() {
|
|
$DB = $this->tdb;
|
|
$dbman = $this->tdb->get_manager();
|
|
|
|
$original_count = count($DB->get_tables());
|
|
|
|
// Need to test with multiple DBs
|
|
$table = new xmldb_table("testtable");
|
|
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
|
|
$table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
|
|
$dbman->create_table($table);
|
|
$this->tables[$table->getName()] = $table;
|
|
|
|
$this->assertTrue(count($DB->get_tables()) == $original_count + 1);
|
|
}
|
|
|
|
public function testEnums() {
|
|
$DB = $this->tdb;
|
|
$dbman = $this->tdb->get_manager();
|
|
|
|
$table = new xmldb_table("testtable");
|
|
$table->add_field('enumfield', XMLDB_TYPE_CHAR, '255', null, null, null, XMLDB_ENUM, array('test','test2','test3'),null);
|
|
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
|
|
$table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
|
|
$dbman->create_table($table);
|
|
$this->tables[$table->getName()] = $table;
|
|
|
|
$columns = $DB->get_columns('testtable');
|
|
|
|
$enumfield = $columns['enumfield'];
|
|
$this->assertEqual('enumfield', $enumfield->name);
|
|
$this->assertEqual('enum', $enumfield->type);
|
|
$this->assertEqual(3, count($enumfield->enums));
|
|
$this->assertEqual('test', $enumfield->enums[0]);
|
|
$this->assertEqual('test2', $enumfield->enums[1]);
|
|
$this->assertEqual('test3', $enumfield->enums[2]);
|
|
|
|
}
|
|
|
|
public function testDefaults() {
|
|
$DB = $this->tdb;
|
|
$dbman = $this->tdb->get_manager();
|
|
|
|
$table = new xmldb_table("testtable");
|
|
$enumvalues = array('test','test2','test3');
|
|
$table->add_field('enumfield', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, XMLDB_ENUM, $enumvalues, 'test2');
|
|
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
|
|
$table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
|
|
$dbman->create_table($table);
|
|
$this->tables[$table->getName()] = $table;
|
|
|
|
$columns = $DB->get_columns('testtable');
|
|
|
|
$enumfield = $columns['enumfield'];
|
|
$this->assertEqual('test2', $enumfield->default_value);
|
|
$this->assertEqual('C', $enumfield->meta_type);
|
|
|
|
}
|
|
|
|
public function testGetIndexes() {
|
|
$DB = $this->tdb;
|
|
$dbman = $this->tdb->get_manager();
|
|
|
|
$table = new xmldb_table("testtable");
|
|
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
|
|
$table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
|
|
$table->add_index('course', XMLDB_INDEX_NOTUNIQUE, array('course'));
|
|
$table->add_index('course-id', XMLDB_INDEX_UNIQUE, array('course', 'id'));
|
|
$table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
|
|
$dbman->create_table($table);
|
|
$this->tables[$table->getName()] = $table;
|
|
|
|
$this->assertTrue($indices = $DB->get_indexes('testtable'));
|
|
$this->assertTrue(count($indices) == 2);
|
|
sort($indices);
|
|
|
|
$this->assertFalse($indices[0]['unique']);
|
|
$this->assertTrue($indices[1]['unique']);
|
|
$this->assertEqual(1, count($indices[0]['columns']));
|
|
$this->assertEqual(2, count($indices[1]['columns']));
|
|
$this->assertEqual('course', $indices[0]['columns'][0]);
|
|
$this->assertEqual('course', $indices[1]['columns'][0]);
|
|
$this->assertEqual('id', $indices[1]['columns'][1]);
|
|
}
|
|
|
|
public function testGetColumns() {
|
|
$DB = $this->tdb;
|
|
$dbman = $this->tdb->get_manager();
|
|
|
|
$table = new xmldb_table("testtable");
|
|
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
|
|
$table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
|
|
$table->add_field('name', XMLDB_TYPE_CHAR, '255', null, null, null, null, null, '0');
|
|
$table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
|
|
$dbman->create_table($table);
|
|
$this->tables[$table->getName()] = $table;
|
|
|
|
$this->assertTrue($columns = $DB->get_columns('testtable'));
|
|
$fields = $this->tables['testtable']->getFields();
|
|
$this->assertEqual(count($columns), count($fields));
|
|
|
|
for ($i = 0; $i < count($columns); $i++) {
|
|
if ($i == 0) {
|
|
$next_column = reset($columns);
|
|
$next_field = reset($fields);
|
|
} else {
|
|
$next_column = next($columns);
|
|
$next_field = next($fields);
|
|
}
|
|
|
|
$this->assertEqual($next_column->name, $next_field->name);
|
|
}
|
|
}
|
|
|
|
public function testExecute() {
|
|
$DB = $this->tdb;
|
|
$dbman = $this->tdb->get_manager();
|
|
|
|
$table = new xmldb_table("testtable");
|
|
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
|
|
$table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
|
|
$table->add_field('name', XMLDB_TYPE_CHAR, '255', null, null, null, null, null, '0');
|
|
$table->add_index('course', XMLDB_INDEX_NOTUNIQUE, array('course'));
|
|
$table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
|
|
$dbman->create_table($table);
|
|
$this->tables[$table->getName()] = $table;
|
|
|
|
$sql = "SELECT * FROM {testtable}";
|
|
|
|
$this->assertTrue($DB->execute($sql));
|
|
|
|
$params = array('course' => 1, 'name' => 'test');
|
|
|
|
$sql = "INSERT INTO {testtable} (".implode(',', array_keys($params)).")
|
|
VALUES (".implode(',', array_fill(0, count($params), '?')).")";
|
|
|
|
|
|
$this->assertTrue($DB->execute($sql, $params));
|
|
|
|
$record = $DB->get_record('testtable', array('id' => 1));
|
|
|
|
foreach ($params as $field => $value) {
|
|
$this->assertEqual($value, $record->$field, "Field $field in DB ({$record->$field}) is not equal to field $field in sql ($value)");
|
|
}
|
|
}
|
|
|
|
public function test_get_in_or_equal() {
|
|
$DB = $this->tdb;
|
|
|
|
// SQL_PARAMS_QM - IN or =
|
|
|
|
// Correct usage of multiple values
|
|
$in_values = array('value1', 'value2', 'value3', 'value4');
|
|
list($usql, $params) = $DB->get_in_or_equal($in_values);
|
|
$this->assertEqual("IN (?,?,?,?)", $usql);
|
|
$this->assertEqual(4, count($params));
|
|
foreach ($params as $key => $value) {
|
|
$this->assertEqual($in_values[$key], $value);
|
|
}
|
|
|
|
// Correct usage of single value (in an array)
|
|
$in_values = array('value1');
|
|
list($usql, $params) = $DB->get_in_or_equal($in_values);
|
|
$this->assertEqual("= ?", $usql);
|
|
$this->assertEqual(1, count($params));
|
|
$this->assertEqual($in_values[0], $params[0]);
|
|
|
|
// Correct usage of single value
|
|
$in_value = 'value1';
|
|
list($usql, $params) = $DB->get_in_or_equal($in_values);
|
|
$this->assertEqual("= ?", $usql);
|
|
$this->assertEqual(1, count($params));
|
|
$this->assertEqual($in_value, $params[0]);
|
|
|
|
// SQL_PARAMS_QM - NOT IN or <>
|
|
|
|
// Correct usage of multiple values
|
|
$in_values = array('value1', 'value2', 'value3', 'value4');
|
|
list($usql, $params) = $DB->get_in_or_equal($in_values, SQL_PARAMS_QM, null, false);
|
|
$this->assertEqual("NOT IN (?,?,?,?)", $usql);
|
|
$this->assertEqual(4, count($params));
|
|
foreach ($params as $key => $value) {
|
|
$this->assertEqual($in_values[$key], $value);
|
|
}
|
|
|
|
// Correct usage of single value (in array()
|
|
$in_values = array('value1');
|
|
list($usql, $params) = $DB->get_in_or_equal($in_values, SQL_PARAMS_QM, null, false);
|
|
$this->assertEqual("<> ?", $usql);
|
|
$this->assertEqual(1, count($params));
|
|
$this->assertEqual($in_values[0], $params[0]);
|
|
|
|
// Correct usage of single value
|
|
$in_value = 'value1';
|
|
list($usql, $params) = $DB->get_in_or_equal($in_values, SQL_PARAMS_QM, null, false);
|
|
$this->assertEqual("<> ?", $usql);
|
|
$this->assertEqual(1, count($params));
|
|
$this->assertEqual($in_value, $params[0]);
|
|
|
|
// SQL_PARAMS_NAMED - IN or =
|
|
|
|
// Correct usage of multiple values
|
|
$in_values = array('value1', 'value2', 'value3', 'value4');
|
|
list($usql, $params) = $DB->get_in_or_equal($in_values, SQL_PARAMS_NAMED, 'param01', true);
|
|
$this->assertEqual("IN (:param01,:param02,:param03,:param04)", $usql);
|
|
$this->assertEqual(4, count($params));
|
|
reset($in_values);
|
|
foreach ($params as $key => $value) {
|
|
$this->assertEqual(current($in_values), $value);
|
|
next($in_values);
|
|
}
|
|
|
|
// Correct usage of single values (in array)
|
|
$in_values = array('value1');
|
|
list($usql, $params) = $DB->get_in_or_equal($in_values, SQL_PARAMS_NAMED, 'param01', true);
|
|
$this->assertEqual("= :param01", $usql);
|
|
$this->assertEqual(1, count($params));
|
|
$this->assertEqual($in_values[0], $params['param01']);
|
|
|
|
// Correct usage of single value
|
|
$in_value = 'value1';
|
|
list($usql, $params) = $DB->get_in_or_equal($in_values, SQL_PARAMS_NAMED, 'param01', true);
|
|
$this->assertEqual("= :param01", $usql);
|
|
$this->assertEqual(1, count($params));
|
|
$this->assertEqual($in_value, $params['param01']);
|
|
|
|
// SQL_PARAMS_NAMED - NOT IN or <>
|
|
|
|
// Correct usage of multiple values
|
|
$in_values = array('value1', 'value2', 'value3', 'value4');
|
|
list($usql, $params) = $DB->get_in_or_equal($in_values, SQL_PARAMS_NAMED, 'param01', false);
|
|
$this->assertEqual("NOT IN (:param01,:param02,:param03,:param04)", $usql);
|
|
$this->assertEqual(4, count($params));
|
|
reset($in_values);
|
|
foreach ($params as $key => $value) {
|
|
$this->assertEqual(current($in_values), $value);
|
|
next($in_values);
|
|
}
|
|
|
|
// Correct usage of single values (in array)
|
|
$in_values = array('value1');
|
|
list($usql, $params) = $DB->get_in_or_equal($in_values, SQL_PARAMS_NAMED, 'param01', false);
|
|
$this->assertEqual("<> :param01", $usql);
|
|
$this->assertEqual(1, count($params));
|
|
$this->assertEqual($in_values[0], $params['param01']);
|
|
|
|
// Correct usage of single value
|
|
$in_value = 'value1';
|
|
list($usql, $params) = $DB->get_in_or_equal($in_values, SQL_PARAMS_NAMED, 'param01', false);
|
|
$this->assertEqual("<> :param01", $usql);
|
|
$this->assertEqual(1, count($params));
|
|
$this->assertEqual($in_value, $params['param01']);
|
|
|
|
}
|
|
|
|
public function test_fix_table_names() {
|
|
$DB = new moodle_database_for_testing();
|
|
$prefix = $DB->get_prefix();
|
|
|
|
// Simple placeholder
|
|
$placeholder = "{user}";
|
|
$this->assertEqual($prefix . "user", $DB->public_fix_table_names($placeholder));
|
|
|
|
// Full SQL
|
|
$sql = "SELECT * FROM {user}, {funny_table_name}, {mdl_stupid_table} WHERE {user}.id = {funny_table_name}.userid";
|
|
$expected = "SELECT * FROM {$prefix}user, {$prefix}funny_table_name, {$prefix}mdl_stupid_table WHERE {$prefix}user.id = {$prefix}funny_table_name.userid";
|
|
$this->assertEqual($expected, $DB->public_fix_table_names($sql));
|
|
|
|
|
|
}
|
|
|
|
public function test_get_recordset() {
|
|
$DB = $this->tdb;
|
|
$dbman = $DB->get_manager();
|
|
|
|
$table = new xmldb_table("testtable");
|
|
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
|
|
$table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
|
|
$table->add_field('name', XMLDB_TYPE_CHAR, '255', null, null, null, null, null, '0');
|
|
$table->add_index('course', XMLDB_INDEX_NOTUNIQUE, array('course'));
|
|
$table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
|
|
$dbman->create_table($table);
|
|
$this->tables[$table->getName()] = $table;
|
|
|
|
$data = array(array('id' => 1, 'course' => 3, 'name' => 'record1'),
|
|
array('id' => 2, 'course' => 3, 'name' => 'record2'),
|
|
array('id' => 3, 'course' => 5, 'name' => 'record3'));
|
|
foreach ($data as $record) {
|
|
$DB->insert_record('testtable', $record);
|
|
}
|
|
|
|
$rs = $DB->get_recordset('testtable');
|
|
$this->assertTrue($rs);
|
|
|
|
reset($data);
|
|
foreach($rs as $record) {
|
|
$data_record = current($data);
|
|
foreach ($record as $k => $v) {
|
|
$this->assertEqual($data_record[$k], $v);
|
|
}
|
|
next($data);
|
|
}
|
|
$rs->close();
|
|
}
|
|
|
|
public function test_get_recordset_iterator_keys() {
|
|
$DB = $this->tdb;
|
|
$dbman = $DB->get_manager();
|
|
|
|
$table = new xmldb_table("testtable");
|
|
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
|
|
$table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
|
|
$table->add_field('name', XMLDB_TYPE_CHAR, '255', null, null, null, null, null, '0');
|
|
$table->add_index('course', XMLDB_INDEX_NOTUNIQUE, array('course'));
|
|
$table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
|
|
$dbman->create_table($table);
|
|
$this->tables[$table->getName()] = $table;
|
|
|
|
$data = array(array('id' => 1, 'course' => 3, 'name' => 'record1'),
|
|
array('id' => 2, 'course' => 3, 'name' => 'record2'),
|
|
array('id' => 3, 'course' => 5, 'name' => 'record3'));
|
|
foreach ($data as $record) {
|
|
$DB->insert_record('testtable', $record);
|
|
}
|
|
|
|
/// Test repeated numeric keys are returned ok
|
|
$rs = $DB->get_recordset('testtable', NULL, NULL, 'course, name, id');
|
|
|
|
reset($data);
|
|
$count = 0;
|
|
foreach($rs as $key => $record) {
|
|
$data_record = current($data);
|
|
$this->assertEqual($data_record['course'], $key);
|
|
next($data);
|
|
$count++;
|
|
}
|
|
$rs->close();
|
|
|
|
/// Test record returned are ok
|
|
$this->assertEqual($count, 3);
|
|
|
|
/// Test string keys are returned ok
|
|
$rs = $DB->get_recordset('testtable', NULL, NULL, 'name, course, id');
|
|
|
|
reset($data);
|
|
$count = 0;
|
|
foreach($rs as $key => $record) {
|
|
$data_record = current($data);
|
|
$this->assertEqual($data_record['name'], $key);
|
|
next($data);
|
|
$count++;
|
|
}
|
|
$rs->close();
|
|
|
|
/// Test record returned are ok
|
|
$this->assertEqual($count, 3);
|
|
|
|
/// Test numeric not starting in 1 keys are returned ok
|
|
$rs = $DB->get_recordset('testtable', NULL, 'id DESC', 'id, course, name');
|
|
|
|
$data = array_reverse($data);
|
|
reset($data);
|
|
$count = 0;
|
|
foreach($rs as $key => $record) {
|
|
$data_record = current($data);
|
|
$this->assertEqual($data_record['id'], $key);
|
|
next($data);
|
|
$count++;
|
|
}
|
|
$rs->close();
|
|
|
|
/// Test record returned are ok
|
|
$this->assertEqual($count, 3);
|
|
}
|
|
|
|
public function test_get_recordset_list() {
|
|
$DB = $this->tdb;
|
|
$dbman = $DB->get_manager();
|
|
|
|
$table = new xmldb_table("testtable");
|
|
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
|
|
$table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
|
|
$table->add_index('course', XMLDB_INDEX_NOTUNIQUE, array('course'));
|
|
$table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
|
|
$dbman->create_table($table);
|
|
$this->tables[$table->getName()] = $table;
|
|
|
|
$DB->insert_record('testtable', array('course' => 3));
|
|
$DB->insert_record('testtable', array('course' => 3));
|
|
$DB->insert_record('testtable', array('course' => 5));
|
|
$DB->insert_record('testtable', array('course' => 2));
|
|
|
|
$rs = $DB->get_recordset_list('testtable', 'course', array(3, 2));
|
|
|
|
$this->assertTrue($rs);
|
|
|
|
$counter = 0;
|
|
foreach ($rs as $record) {
|
|
$counter++;
|
|
}
|
|
$this->assertEqual(3, $counter);
|
|
}
|
|
|
|
public function test_get_recordset_select() {
|
|
$DB = $this->tdb;
|
|
$dbman = $DB->get_manager();
|
|
|
|
$table = new xmldb_table("testtable");
|
|
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
|
|
$table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
|
|
$table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
|
|
$dbman->create_table($table);
|
|
$this->tables[$table->getName()] = $table;
|
|
|
|
$DB->insert_record('testtable', array('course' => 3));
|
|
$DB->insert_record('testtable', array('course' => 3));
|
|
$DB->insert_record('testtable', array('course' => 5));
|
|
$DB->insert_record('testtable', array('course' => 2));
|
|
|
|
$this->assertTrue($rs = $DB->get_recordset_select('testtable', ''));
|
|
$counter = 0;
|
|
foreach ($rs as $record) {
|
|
$counter++;
|
|
}
|
|
$this->assertEqual(4, $counter);
|
|
|
|
$this->assertTrue($rs = $DB->get_recordset_select('testtable', 'course = 3'));
|
|
$counter = 0;
|
|
foreach ($rs as $record) {
|
|
$counter++;
|
|
}
|
|
$this->assertEqual(2, $counter);
|
|
}
|
|
|
|
public function test_get_recordset_sql() {
|
|
$DB = $this->tdb;
|
|
$dbman = $DB->get_manager();
|
|
|
|
$table = new xmldb_table("testtable");
|
|
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
|
|
$table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
|
|
$table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
|
|
$dbman->create_table($table);
|
|
$this->tables[$table->getName()] = $table;
|
|
|
|
$DB->insert_record('testtable', array('course' => 3));
|
|
$DB->insert_record('testtable', array('course' => 3));
|
|
$DB->insert_record('testtable', array('course' => 5));
|
|
$DB->insert_record('testtable', array('course' => 2));
|
|
|
|
$this->assertTrue($rs = $DB->get_recordset_sql('SELECT * FROM {testtable} WHERE course = ?', array(3)));
|
|
$counter = 0;
|
|
foreach ($rs as $record) {
|
|
$counter++;
|
|
}
|
|
$this->assertEqual(2, $counter);
|
|
}
|
|
|
|
public function test_get_records() {
|
|
$DB = $this->tdb;
|
|
$dbman = $DB->get_manager();
|
|
|
|
$table = new xmldb_table("testtable");
|
|
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
|
|
$table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
|
|
$table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
|
|
$dbman->create_table($table);
|
|
$this->tables[$table->getName()] = $table;
|
|
|
|
$DB->insert_record('testtable', array('course' => 3));
|
|
$DB->insert_record('testtable', array('course' => 3));
|
|
$DB->insert_record('testtable', array('course' => 5));
|
|
$DB->insert_record('testtable', array('course' => 2));
|
|
|
|
// All records
|
|
$records = $DB->get_records('testtable');
|
|
$this->assertEqual(4, count($records));
|
|
$this->assertEqual(3, $records[1]->course);
|
|
$this->assertEqual(3, $records[2]->course);
|
|
$this->assertEqual(5, $records[3]->course);
|
|
$this->assertEqual(2, $records[4]->course);
|
|
|
|
// Records matching certain conditions
|
|
$records = $DB->get_records('testtable', array('course' => 3));
|
|
$this->assertEqual(2, count($records));
|
|
$this->assertEqual(3, $records[1]->course);
|
|
$this->assertEqual(3, $records[2]->course);
|
|
|
|
// All records sorted by course
|
|
$records = $DB->get_records('testtable', null, 'course');
|
|
$this->assertEqual(4, count($records));
|
|
$current_record = reset($records);
|
|
$this->assertEqual(4, $current_record->id);
|
|
$current_record = next($records);
|
|
$this->assertEqual(1, $current_record->id);
|
|
$current_record = next($records);
|
|
$this->assertEqual(2, $current_record->id);
|
|
$current_record = next($records);
|
|
$this->assertEqual(3, $current_record->id);
|
|
|
|
// All records, but get only one field
|
|
$records = $DB->get_records('testtable', null, '', 'id');
|
|
$this->assertTrue(empty($records[1]->course));
|
|
$this->assertFalse(empty($records[1]->id));
|
|
$this->assertEqual(4, count($records));
|
|
}
|
|
|
|
public function test_get_records_list() {
|
|
$DB = $this->tdb;
|
|
$dbman = $DB->get_manager();
|
|
|
|
$table = new xmldb_table("testtable");
|
|
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
|
|
$table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
|
|
$table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
|
|
$dbman->create_table($table);
|
|
$this->tables[$table->getName()] = $table;
|
|
|
|
$DB->insert_record('testtable', array('course' => 3));
|
|
$DB->insert_record('testtable', array('course' => 3));
|
|
$DB->insert_record('testtable', array('course' => 5));
|
|
$DB->insert_record('testtable', array('course' => 2));
|
|
|
|
$this->assertTrue($records = $DB->get_records_list('testtable', 'course', array(3, 2)));
|
|
$this->assertEqual(3, count($records));
|
|
$this->assertEqual(1, reset($records)->id);
|
|
$this->assertEqual(2, next($records)->id);
|
|
$this->assertEqual(4, next($records)->id);
|
|
|
|
}
|
|
|
|
public function test_get_records_sql() {
|
|
$DB = $this->tdb;
|
|
$dbman = $DB->get_manager();
|
|
|
|
$table = new xmldb_table("testtable");
|
|
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
|
|
$table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
|
|
$table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
|
|
$dbman->create_table($table);
|
|
$this->tables[$table->getName()] = $table;
|
|
|
|
$DB->insert_record('testtable', array('course' => 3));
|
|
$DB->insert_record('testtable', array('course' => 3));
|
|
$DB->insert_record('testtable', array('course' => 5));
|
|
$DB->insert_record('testtable', array('course' => 2));
|
|
|
|
$this->assertTrue($records = $DB->get_records_sql('SELECT * FROM {testtable} WHERE course = ?', array(3)));
|
|
$this->assertEqual(2, count($records));
|
|
$this->assertEqual(1, reset($records)->id);
|
|
$this->assertEqual(2, next($records)->id);
|
|
|
|
}
|
|
|
|
public function test_get_records_menu() {
|
|
$DB = $this->tdb;
|
|
$dbman = $DB->get_manager();
|
|
|
|
$table = new xmldb_table("testtable");
|
|
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
|
|
$table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
|
|
$table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
|
|
$dbman->create_table($table);
|
|
$this->tables[$table->getName()] = $table;
|
|
|
|
$DB->insert_record('testtable', array('course' => 3));
|
|
$DB->insert_record('testtable', array('course' => 3));
|
|
$DB->insert_record('testtable', array('course' => 5));
|
|
$DB->insert_record('testtable', array('course' => 2));
|
|
|
|
$this->assertTrue($records = $DB->get_records_menu('testtable', array('course' => 3)));
|
|
$this->assertEqual(2, count($records));
|
|
$this->assertFalse(empty($records[1]));
|
|
$this->assertFalse(empty($records[2]));
|
|
$this->assertEqual(3, $records[1]);
|
|
$this->assertEqual(3, $records[2]);
|
|
|
|
}
|
|
|
|
public function test_get_records_select_menu() {
|
|
$DB = $this->tdb;
|
|
$dbman = $DB->get_manager();
|
|
|
|
$table = new xmldb_table("testtable");
|
|
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
|
|
$table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
|
|
$table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
|
|
$dbman->create_table($table);
|
|
$this->tables[$table->getName()] = $table;
|
|
|
|
$DB->insert_record('testtable', array('course' => 3));
|
|
$DB->insert_record('testtable', array('course' => 2));
|
|
$DB->insert_record('testtable', array('course' => 3));
|
|
$DB->insert_record('testtable', array('course' => 5));
|
|
|
|
$this->assertTrue($records = $DB->get_records_select_menu('testtable', "course > ?", array(2)));
|
|
|
|
$this->assertEqual(3, count($records));
|
|
$this->assertFalse(empty($records[1]));
|
|
$this->assertTrue(empty($records[2]));
|
|
$this->assertFalse(empty($records[3]));
|
|
$this->assertFalse(empty($records[4]));
|
|
$this->assertEqual(3, $records[1]);
|
|
$this->assertEqual(3, $records[3]);
|
|
$this->assertEqual(5, $records[4]);
|
|
|
|
}
|
|
|
|
public function test_get_records_sql_menu() {
|
|
$DB = $this->tdb;
|
|
$dbman = $DB->get_manager();
|
|
|
|
$table = new xmldb_table("testtable");
|
|
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
|
|
$table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
|
|
$table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
|
|
$dbman->create_table($table);
|
|
$this->tables[$table->getName()] = $table;
|
|
|
|
$DB->insert_record('testtable', array('course' => 3));
|
|
$DB->insert_record('testtable', array('course' => 2));
|
|
$DB->insert_record('testtable', array('course' => 3));
|
|
$DB->insert_record('testtable', array('course' => 5));
|
|
|
|
$this->assertTrue($records = $DB->get_records_sql_menu('SELECT * FROM {testtable} WHERE course > ?', array(2)));
|
|
|
|
$this->assertEqual(3, count($records));
|
|
$this->assertFalse(empty($records[1]));
|
|
$this->assertTrue(empty($records[2]));
|
|
$this->assertFalse(empty($records[3]));
|
|
$this->assertFalse(empty($records[4]));
|
|
$this->assertEqual(3, $records[1]);
|
|
$this->assertEqual(3, $records[3]);
|
|
$this->assertEqual(5, $records[4]);
|
|
|
|
}
|
|
|
|
public function test_get_record() {
|
|
$DB = $this->tdb;
|
|
$dbman = $DB->get_manager();
|
|
|
|
$table = new xmldb_table("testtable");
|
|
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
|
|
$table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
|
|
$table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
|
|
$dbman->create_table($table);
|
|
$this->tables[$table->getName()] = $table;
|
|
|
|
$DB->insert_record('testtable', array('course' => 3));
|
|
$DB->insert_record('testtable', array('course' => 2));
|
|
|
|
$this->assertTrue($record = $DB->get_record('testtable', array('id' => 2)));
|
|
|
|
$this->assertEqual(2, $record->course);
|
|
}
|
|
|
|
public function test_get_record_select() {
|
|
$DB = $this->tdb;
|
|
$dbman = $DB->get_manager();
|
|
|
|
$table = new xmldb_table("testtable");
|
|
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
|
|
$table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
|
|
$table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
|
|
$dbman->create_table($table);
|
|
$this->tables[$table->getName()] = $table;
|
|
|
|
$DB->insert_record('testtable', array('course' => 3));
|
|
$DB->insert_record('testtable', array('course' => 2));
|
|
|
|
$this->assertTrue($record = $DB->get_record_select('testtable', "id = ?", array(2)));
|
|
|
|
$this->assertEqual(2, $record->course);
|
|
|
|
}
|
|
|
|
public function test_get_record_sql() {
|
|
$DB = $this->tdb;
|
|
$dbman = $DB->get_manager();
|
|
|
|
$table = new xmldb_table("testtable");
|
|
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
|
|
$table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
|
|
$table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
|
|
$dbman->create_table($table);
|
|
$this->tables[$table->getName()] = $table;
|
|
|
|
$DB->insert_record('testtable', array('course' => 3));
|
|
$DB->insert_record('testtable', array('course' => 2));
|
|
|
|
$this->assertTrue($record = $DB->get_record_sql("SELECT * FROM {testtable} WHERE id = ?", array(2)));
|
|
|
|
$this->assertEqual(2, $record->course);
|
|
|
|
}
|
|
|
|
public function test_get_field() {
|
|
$DB = $this->tdb;
|
|
$dbman = $DB->get_manager();
|
|
|
|
$table = new xmldb_table("testtable");
|
|
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
|
|
$table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
|
|
$table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
|
|
$dbman->create_table($table);
|
|
$this->tables[$table->getName()] = $table;
|
|
|
|
$DB->insert_record('testtable', array('course' => 3));
|
|
|
|
$this->assertTrue($course = $DB->get_field('testtable', 'course', array('id' => 1)));
|
|
$this->assertEqual(3, $course);
|
|
}
|
|
|
|
public function test_get_field_select() {
|
|
$DB = $this->tdb;
|
|
$dbman = $DB->get_manager();
|
|
|
|
$table = new xmldb_table("testtable");
|
|
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
|
|
$table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
|
|
$table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
|
|
$dbman->create_table($table);
|
|
$this->tables[$table->getName()] = $table;
|
|
|
|
$DB->insert_record('testtable', array('course' => 3));
|
|
|
|
$this->assertTrue($course = $DB->get_field_select('testtable', 'course', "id = ?", array(1)));
|
|
$this->assertEqual(3, $course);
|
|
|
|
}
|
|
|
|
public function test_get_field_sql() {
|
|
$DB = $this->tdb;
|
|
$dbman = $DB->get_manager();
|
|
|
|
$table = new xmldb_table("testtable");
|
|
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
|
|
$table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
|
|
$table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
|
|
$dbman->create_table($table);
|
|
$this->tables[$table->getName()] = $table;
|
|
|
|
$DB->insert_record('testtable', array('course' => 3));
|
|
|
|
$this->assertTrue($course = $DB->get_field_sql("SELECT course FROM {testtable} WHERE id = ?", array(1)));
|
|
$this->assertEqual(3, $course);
|
|
|
|
}
|
|
|
|
public function test_get_fieldset_select() {
|
|
$DB = $this->tdb;
|
|
$dbman = $DB->get_manager();
|
|
|
|
$table = new xmldb_table("testtable");
|
|
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
|
|
$table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
|
|
$table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
|
|
$dbman->create_table($table);
|
|
$this->tables[$table->getName()] = $table;
|
|
|
|
$DB->insert_record('testtable', array('course' => 1));
|
|
$DB->insert_record('testtable', array('course' => 3));
|
|
$DB->insert_record('testtable', array('course' => 2));
|
|
$DB->insert_record('testtable', array('course' => 6));
|
|
|
|
$this->assertTrue($fieldset = $DB->get_fieldset_select('testtable', 'course', "course > ?", array(1)));
|
|
|
|
$this->assertEqual(3, count($fieldset));
|
|
$this->assertEqual(3, $fieldset[0]);
|
|
$this->assertEqual(2, $fieldset[1]);
|
|
$this->assertEqual(6, $fieldset[2]);
|
|
|
|
}
|
|
|
|
public function test_get_fieldset_sql() {
|
|
$DB = $this->tdb;
|
|
$dbman = $DB->get_manager();
|
|
|
|
$table = new xmldb_table("testtable");
|
|
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
|
|
$table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
|
|
$table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
|
|
$dbman->create_table($table);
|
|
$this->tables[$table->getName()] = $table;
|
|
|
|
$DB->insert_record('testtable', array('course' => 1));
|
|
$DB->insert_record('testtable', array('course' => 3));
|
|
$DB->insert_record('testtable', array('course' => 2));
|
|
$DB->insert_record('testtable', array('course' => 6));
|
|
|
|
$this->assertTrue($fieldset = $DB->get_fieldset_sql("SELECT * FROM {testtable} WHERE course > ?", array(1)));
|
|
|
|
$this->assertEqual(3, count($fieldset));
|
|
$this->assertEqual(2, $fieldset[0]);
|
|
$this->assertEqual(3, $fieldset[1]);
|
|
$this->assertEqual(4, $fieldset[2]);
|
|
}
|
|
|
|
public function test_insert_record_raw() {
|
|
$DB = $this->tdb;
|
|
$dbman = $DB->get_manager();
|
|
|
|
$table = new xmldb_table("testtable");
|
|
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
|
|
$table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
|
|
$table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
|
|
$dbman->create_table($table);
|
|
$this->tables[$table->getName()] = $table;
|
|
|
|
$this->assertTrue($DB->insert_record_raw('testtable', array('course' => 1)));
|
|
$this->assertTrue($record = $DB->get_record('testtable', array('course' => 1)));
|
|
$this->assertEqual(1, $record->course);
|
|
}
|
|
|
|
public function test_insert_record() {
|
|
$DB = $this->tdb;
|
|
$dbman = $DB->get_manager();
|
|
|
|
$table = new xmldb_table("testtable");
|
|
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
|
|
$table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
|
|
$table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
|
|
$dbman->create_table($table);
|
|
$this->tables[$table->getName()] = $table;
|
|
|
|
$this->assertTrue($DB->insert_record('testtable', array('course' => 1)));
|
|
$this->assertTrue($record = $DB->get_record('testtable', array('course' => 1)));
|
|
$this->assertEqual(1, $record->course);
|
|
|
|
}
|
|
|
|
public function test_insert_record_clob() {
|
|
global $CFG;
|
|
|
|
$DB = $this->tdb;
|
|
$dbman = $DB->get_manager();
|
|
|
|
$table = new xmldb_table("testtable");
|
|
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
|
|
$table->add_field('description', XMLDB_TYPE_TEXT, 'big', null, null, null, null, null, null);
|
|
$table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
|
|
$dbman->create_table($table);
|
|
$this->tables[$table->getName()] = $table;
|
|
|
|
$clob = file_get_contents($CFG->libdir.'/dml/simpletest/clob.txt');
|
|
|
|
$this->assertTrue($id = $DB->insert_record('testtable', array('description' => $clob)));
|
|
$this->assertTrue($record = $DB->get_record('testtable', array('id' => $id)));
|
|
$this->assertEqual($clob, $record->description);
|
|
|
|
}
|
|
|
|
public function test_insert_record_multiple_clobs() {
|
|
global $CFG;
|
|
|
|
$DB = $this->tdb;
|
|
$dbman = $DB->get_manager();
|
|
|
|
$table = new xmldb_table("testtable");
|
|
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
|
|
$table->add_field('description', XMLDB_TYPE_TEXT, 'big', null, null, null, null, null, null);
|
|
$table->add_field('image', XMLDB_TYPE_BINARY, 'big', null, null, null, null, null, null);
|
|
$table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
|
|
$dbman->create_table($table);
|
|
$this->tables[$table->getName()] = $table;
|
|
|
|
$clob = file_get_contents($CFG->libdir.'/dml/simpletest/clob.txt', FILE_TEXT);
|
|
$blob = file_get_contents($CFG->libdir.'/dml/simpletest/randombinary', FILE_BINARY);
|
|
|
|
$this->assertTrue($id = $DB->insert_record('testtable', array('description' => $clob, 'image' => $blob)));
|
|
$this->assertTrue($record = $DB->get_record('testtable', array('id' => $id)));
|
|
$this->assertEqual($clob, $record->description);
|
|
$this->assertEqual($blob, $record->image);
|
|
$this->assertEqual($clob, $DB->get_field('testtable', 'description', 'id', $id));
|
|
$this->assertEqual($blob, $DB->get_field('testtable', 'image', 'id', $id));
|
|
}
|
|
|
|
|
|
public function test_update_record_raw() {
|
|
$DB = $this->tdb;
|
|
$dbman = $DB->get_manager();
|
|
|
|
$table = new xmldb_table("testtable");
|
|
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
|
|
$table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
|
|
$table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
|
|
$dbman->create_table($table);
|
|
$this->tables[$table->getName()] = $table;
|
|
|
|
$DB->insert_record('testtable', array('course' => 1));
|
|
$record = $DB->get_record('testtable', array('course' => 1));
|
|
$record->course = 2;
|
|
$this->assertTrue($DB->update_record_raw('testtable', $record));
|
|
$this->assertFalse($record = $DB->get_record('testtable', array('course' => 1)));
|
|
$this->assertTrue($record = $DB->get_record('testtable', array('course' => 2)));
|
|
}
|
|
|
|
public function test_update_record() {
|
|
$DB = $this->tdb;
|
|
$dbman = $DB->get_manager();
|
|
|
|
$table = new xmldb_table("testtable");
|
|
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
|
|
$table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
|
|
$table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
|
|
$dbman->create_table($table);
|
|
$this->tables[$table->getName()] = $table;
|
|
|
|
$DB->insert_record('testtable', array('course' => 1));
|
|
$record = $DB->get_record('testtable', array('course' => 1));
|
|
$record->course = 2;
|
|
$this->assertTrue($DB->update_record('testtable', $record));
|
|
$this->assertFalse($record = $DB->get_record('testtable', array('course' => 1)));
|
|
$this->assertTrue($record = $DB->get_record('testtable', array('course' => 2)));
|
|
}
|
|
|
|
public function test_update_record_clob() {
|
|
global $CFG;
|
|
|
|
$DB = $this->tdb;
|
|
$dbman = $DB->get_manager();
|
|
|
|
$table = new xmldb_table("testtable");
|
|
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
|
|
$table->add_field('description', XMLDB_TYPE_TEXT, 'big', null, null, null, null, null, null);
|
|
$table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
|
|
$dbman->create_table($table);
|
|
$this->tables[$table->getName()] = $table;
|
|
|
|
$clob = file_get_contents($CFG->libdir.'/dml/simpletest/clob.txt');
|
|
|
|
$id = $DB->insert_record('testtable', array('description' => $clob));
|
|
$record = $DB->get_record('testtable', array('id' => $id));
|
|
$record->description = substr($clob, 0, 500);
|
|
$this->assertTrue($DB->update_record('testtable', $record));
|
|
|
|
$record = $DB->get_record('testtable', array('id' => $id));
|
|
$this->assertEqual(substr($clob, 0, 500), $record->description);
|
|
}
|
|
|
|
public function test_update_record_multiple_clobs() {
|
|
global $CFG;
|
|
|
|
$DB = $this->tdb;
|
|
$dbman = $DB->get_manager();
|
|
|
|
$table = new xmldb_table("testtable");
|
|
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
|
|
$table->add_field('description', XMLDB_TYPE_TEXT, 'big', null, null, null, null, null, null);
|
|
$table->add_field('image', XMLDB_TYPE_BINARY, 'big', null, null, null, null, null, null);
|
|
$table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
|
|
$dbman->create_table($table);
|
|
$this->tables[$table->getName()] = $table;
|
|
|
|
$clob = file_get_contents($CFG->libdir.'/dml/simpletest/clob.txt');
|
|
$blob = file_get_contents($CFG->libdir.'/dml/simpletest/randombinary');
|
|
|
|
$id = $DB->insert_record('testtable', array('description' => $clob, 'image' => $blob));
|
|
$record = $DB->get_record('testtable', array('id' => $id));
|
|
$record->description = substr($clob, 0, 500);
|
|
$record->image = substr($blob, 0, 250);
|
|
$this->assertTrue($DB->update_record('testtable', $record));
|
|
|
|
$record = $DB->get_record('testtable', array('id' => $id));
|
|
$this->assertEqual(substr($clob, 0, 500), $record->description);
|
|
$this->assertEqual(substr($blob, 0, 250), $record->image);
|
|
$this->assertEqual(substr($clob, 0, 500), $DB->get_field('testtable', 'description', 'id', $id));
|
|
$this->assertEqual(substr($blob, 0, 250), $DB->get_field('testtable', 'image', 'id', $id));
|
|
|
|
}
|
|
|
|
public function test_set_field() {
|
|
$DB = $this->tdb;
|
|
$dbman = $DB->get_manager();
|
|
|
|
$table = new xmldb_table("testtable");
|
|
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
|
|
$table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
|
|
$table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
|
|
$dbman->create_table($table);
|
|
$this->tables[$table->getName()] = $table;
|
|
|
|
$DB->insert_record('testtable', array('course' => 1));
|
|
|
|
$this->assertTrue($DB->set_field('testtable', 'course', 2, array('id' => 1)));
|
|
$this->assertEqual(2, $DB->get_field('testtable', 'course', array('id' => 1)));
|
|
}
|
|
|
|
public function test_set_field_select() {
|
|
$DB = $this->tdb;
|
|
$dbman = $DB->get_manager();
|
|
|
|
$table = new xmldb_table("testtable");
|
|
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
|
|
$table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
|
|
$table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
|
|
$dbman->create_table($table);
|
|
$this->tables[$table->getName()] = $table;
|
|
|
|
$DB->insert_record('testtable', array('course' => 1));
|
|
|
|
$this->assertTrue($DB->set_field_select('testtable', 'course', 2, 'id = ?', array(1)));
|
|
$this->assertEqual(2, $DB->get_field('testtable', 'course', array('id' => 1)));
|
|
|
|
}
|
|
|
|
public function test_count_records() {
|
|
$DB = $this->tdb;
|
|
|
|
$dbman = $DB->get_manager();
|
|
|
|
$table = new xmldb_table("testtable");
|
|
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
|
|
$table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
|
|
$table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
|
|
$dbman->create_table($table);
|
|
$this->tables[$table->getName()] = $table;
|
|
|
|
$this->assertEqual(0, $DB->count_records('testtable'));
|
|
|
|
$DB->insert_record('testtable', array('course' => 3));
|
|
$DB->insert_record('testtable', array('course' => 4));
|
|
$DB->insert_record('testtable', array('course' => 5));
|
|
|
|
$this->assertEqual(3, $DB->count_records('testtable'));
|
|
}
|
|
|
|
public function test_count_records_select() {
|
|
$DB = $this->tdb;
|
|
|
|
$dbman = $DB->get_manager();
|
|
|
|
$table = new xmldb_table("testtable");
|
|
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
|
|
$table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
|
|
$table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
|
|
$dbman->create_table($table);
|
|
$this->tables[$table->getName()] = $table;
|
|
|
|
$this->assertEqual(0, $DB->count_records('testtable'));
|
|
|
|
$DB->insert_record('testtable', array('course' => 3));
|
|
$DB->insert_record('testtable', array('course' => 4));
|
|
$DB->insert_record('testtable', array('course' => 5));
|
|
|
|
$this->assertEqual(2, $DB->count_records_select('testtable', 'course > ?', array(3)));
|
|
}
|
|
|
|
public function test_count_records_sql() {
|
|
$DB = $this->tdb;
|
|
$dbman = $DB->get_manager();
|
|
|
|
$table = new xmldb_table("testtable");
|
|
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
|
|
$table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
|
|
$table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
|
|
$dbman->create_table($table);
|
|
$this->tables[$table->getName()] = $table;
|
|
|
|
$this->assertEqual(0, $DB->count_records('testtable'));
|
|
|
|
$DB->insert_record('testtable', array('course' => 3));
|
|
$DB->insert_record('testtable', array('course' => 4));
|
|
$DB->insert_record('testtable', array('course' => 5));
|
|
|
|
$this->assertEqual(2, $DB->count_records_sql("SELECT COUNT(*) FROM {testtable} WHERE course > ?", array(3)));
|
|
}
|
|
|
|
public function test_record_exists() {
|
|
$DB = $this->tdb;
|
|
$dbman = $DB->get_manager();
|
|
|
|
$table = new xmldb_table("testtable");
|
|
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
|
|
$table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
|
|
$table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
|
|
$dbman->create_table($table);
|
|
$this->tables[$table->getName()] = $table;
|
|
|
|
$this->assertEqual(0, $DB->count_records('testtable'));
|
|
|
|
$this->assertFalse($DB->record_exists('testtable', array('course' => 3)));
|
|
$DB->insert_record('testtable', array('course' => 3));
|
|
|
|
$this->assertTrue($DB->record_exists('testtable', array('course' => 3)));
|
|
|
|
}
|
|
|
|
public function test_record_exists_select() {
|
|
$DB = $this->tdb;
|
|
$dbman = $DB->get_manager();
|
|
|
|
$table = new xmldb_table("testtable");
|
|
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
|
|
$table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
|
|
$table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
|
|
$dbman->create_table($table);
|
|
$this->tables[$table->getName()] = $table;
|
|
|
|
$this->assertEqual(0, $DB->count_records('testtable'));
|
|
|
|
$this->assertFalse($DB->record_exists_select('testtable', "course = ?", array(3)));
|
|
$DB->insert_record('testtable', array('course' => 3));
|
|
|
|
$this->assertTrue($DB->record_exists_select('testtable', "course = ?", array(3)));
|
|
}
|
|
|
|
public function test_record_exists_sql() {
|
|
$DB = $this->tdb;
|
|
$dbman = $DB->get_manager();
|
|
|
|
$table = new xmldb_table("testtable");
|
|
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
|
|
$table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
|
|
$table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
|
|
$dbman->create_table($table);
|
|
$this->tables[$table->getName()] = $table;
|
|
|
|
$this->assertEqual(0, $DB->count_records('testtable'));
|
|
|
|
$this->assertFalse($DB->record_exists_sql("SELECT * FROM {testtable} WHERE course = ?", array(3)));
|
|
$DB->insert_record('testtable', array('course' => 3));
|
|
|
|
$this->assertTrue($DB->record_exists_sql("SELECT * FROM {testtable} WHERE course = ?", array(3)));
|
|
}
|
|
|
|
public function test_delete_records() {
|
|
$DB = $this->tdb;
|
|
$dbman = $DB->get_manager();
|
|
|
|
$table = new xmldb_table("testtable");
|
|
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
|
|
$table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
|
|
$table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
|
|
$dbman->create_table($table);
|
|
$this->tables[$table->getName()] = $table;
|
|
|
|
$DB->insert_record('testtable', array('course' => 3));
|
|
$DB->insert_record('testtable', array('course' => 2));
|
|
$DB->insert_record('testtable', array('course' => 2));
|
|
|
|
// Delete all records
|
|
$this->assertTrue($DB->delete_records('testtable'));
|
|
$this->assertEqual(0, $DB->count_records('testtable'));
|
|
|
|
// Delete subset of records
|
|
$DB->insert_record('testtable', array('course' => 3));
|
|
$DB->insert_record('testtable', array('course' => 2));
|
|
$DB->insert_record('testtable', array('course' => 2));
|
|
|
|
$this->assertTrue($DB->delete_records('testtable', array('course' => 2)));
|
|
$this->assertEqual(1, $DB->count_records('testtable'));
|
|
}
|
|
|
|
public function test_delete_records_select() {
|
|
$DB = $this->tdb;
|
|
$dbman = $DB->get_manager();
|
|
|
|
$table = new xmldb_table("testtable");
|
|
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
|
|
$table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
|
|
$table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
|
|
$dbman->create_table($table);
|
|
$this->tables[$table->getName()] = $table;
|
|
|
|
$DB->insert_record('testtable', array('course' => 3));
|
|
$DB->insert_record('testtable', array('course' => 2));
|
|
$DB->insert_record('testtable', array('course' => 2));
|
|
|
|
$this->assertTrue($DB->delete_records_select('testtable', 'course = ?', array(2)));
|
|
$this->assertEqual(1, $DB->count_records('testtable'));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* This class is not a proper subclass of moodle_database. It is
|
|
* intended to be used only in unit tests, in order to gain access to the
|
|
* protected methods of moodle_database, and unit test them.
|
|
*/
|
|
class moodle_database_for_testing extends moodle_database {
|
|
protected $prefix = 'mdl_';
|
|
|
|
public function public_fix_table_names($sql) {
|
|
return $this->fix_table_names($sql);
|
|
}
|
|
|
|
public function driver_installed(){}
|
|
public function get_dbfamily(){}
|
|
protected function get_dbtype(){}
|
|
protected function get_dblibrary(){}
|
|
public function get_name(){}
|
|
public function get_configuration_hints(){}
|
|
public function connect($dbhost, $dbuser, $dbpass, $dbname, $dbpersist, $prefix, array $dboptions=null){}
|
|
public function get_server_info(){}
|
|
protected function allowed_param_types(){}
|
|
public function get_last_error(){}
|
|
public function get_tables(){}
|
|
public function get_indexes($table){}
|
|
public function get_columns($table, $usecache=true){}
|
|
public function set_debug($state){}
|
|
public function get_debug(){}
|
|
public function set_logging($state){}
|
|
public function change_database_structure($sql){}
|
|
public function execute($sql, array $params=null){}
|
|
public function get_recordset_sql($sql, array $params=null, $limitfrom=0, $limitnum=0){}
|
|
public function get_records_sql($sql, array $params=null, $limitfrom=0, $limitnum=0){}
|
|
public function get_fieldset_sql($sql, array $params=null){}
|
|
public function insert_record_raw($table, $params, $returnid=true, $bulk=false){}
|
|
public function insert_record($table, $dataobject, $returnid=true, $bulk=false){}
|
|
public function update_record_raw($table, $params, $bulk=false){}
|
|
public function update_record($table, $dataobject, $bulk=false){}
|
|
public function set_field_select($table, $newfield, $newvalue, $select, array $params=null){}
|
|
public function delete_records_select($table, $select, array $params=null){}
|
|
public function sql_concat(){}
|
|
public function sql_concat_join($separator="' '", $elements=array()){}
|
|
public function sql_substr(){}
|
|
}
|