array( 2, 'toad', 102),
array( 3, 'tadpole', 103),
array( 4, 'tadpole', 104),
+ array( 5, 'nothing', NULL),
);
var $objects = array();
function setUp() {
global $CFG, $db;
parent::setUp();
- wipe_tables($CFG->prefix, $db);
load_test_table($CFG->prefix . $this->table, $this->data, $db);
$keys = reset($this->data);
- foreach ($this->data as $datum) {
- if ($datum != $keys) {
- $this->objects[$datum[0]] = (object) array_combine($keys, $datum);
+ foreach ($this->data as $row=>$datum) {
+ if ($row == 0) {
+ continue;
}
+ $this->objects[$datum[0]] = (object) array_combine($keys, $datum);
}
}
$this->assertEqual(where_clause('f1', 'v1'), "WHERE f1 = 'v1'");
$this->assertEqual(where_clause('f1', 'v1', 'f2', 2), "WHERE f1 = 'v1' AND f2 = '2'");
$this->assertEqual(where_clause('f1', 'v1', 'f2', 1.75, 'f3', 'v3'), "WHERE f1 = 'v1' AND f2 = '1.75' AND f3 = 'v3'");
+ $this->assertEqual(where_clause('f1', NULL), "WHERE f1 IS NULL");
}
-
+
function test_record_exists() {
$this->assertTrue(record_exists($this->table, 'numberfield', 101, 'id', 1));
$this->assertFalse(record_exists($this->table, 'numberfield', 102, 'id', 1));
+ $this->assertTrue(record_exists($this->table, 'numberfield', NULL));
}
function test_record_exists_select() {
$this->assertTrue(record_exists_select($this->table, 'numberfield = 101 AND id = 1'));
$this->assertFalse(record_exists_select($this->table, 'numberfield = 102 AND id = 1'));
+ $this->assertTrue(record_exists_select($this->table, 'numberfield IS NULL'));
}
function test_record_exists_sql() {
global $CFG;
$this->assertTrue(record_exists_sql("SELECT * FROM {$CFG->prefix}$this->table WHERE numberfield = 101 AND id = 1"));
$this->assertFalse(record_exists_sql("SELECT * FROM {$CFG->prefix}$this->table WHERE numberfield = 102 AND id = 1"));
+ $this->assertTrue(record_exists_sql("SELECT * FROM {$CFG->prefix}$this->table WHERE numberfield IS NULL"));
}
function test_get_record() {
// Get particular records.
- $this->assert(new CheckSpecifiedFieldsExpectation($this->objects[1]), get_record($this->table, 'id', 1), 'id = 1');
- $this->assert(new CheckSpecifiedFieldsExpectation($this->objects[3]), get_record($this->table, 'textfield', 'tadpole', 'numberfield', 103), 'textfield = tadpole AND numberfield = 103');
+ $this->assert(new CheckSpecifiedFieldsExpectation($this->objects[1]), get_record($this->table, 'id', 1));
+ $this->assert(new CheckSpecifiedFieldsExpectation($this->objects[3]), get_record($this->table, 'textfield', 'tadpole', 'numberfield', 103));
+ $this->assert(new CheckSpecifiedFieldsExpectation($this->objects[5]), get_record($this->table, 'numberfield', null));
// Abiguous get attempt, should return one, and print a warning in debug mode.
global $CFG;
$this->assertEqual(get_field($this->table, 'textfield', 'numberfield', 102), 'toad');
$this->assertEqual(get_field($this->table, 'numberfield', 'textfield', 'tadpole', 'id', 4), 104);
$this->assertEqual(get_field($this->table, 'numberfield + id', 'textfield', 'tadpole', 'id', 4), 108);
+ $this->assertNull(get_field($this->table, 'numberfield', 'id', 5));
}
function test_get_field_select() {
set_field($this->table, 'numberfield', -1, 'textfield', 'tadpole', 'id', 4);
$this->assertEqual(get_field($this->table, 'numberfield', 'textfield', 'tadpole', 'id', 4), -1);
+
+ set_field($this->table, 'textfield', null, 'id', 5);
+ $this->assertNull(get_field($this->table, 'textfield', 'id', 5));
}
function test_delete_records() {
delete_records($this->table, 'id', 666);
- $this->assertEqual(count_records($this->table), 4);
+ $this->assertEqual(count_records($this->table), 5);
delete_records($this->table, 'id', 1);
- $this->assertEqual(count_records($this->table), 3);
+ $this->assertEqual(count_records($this->table), 4);
delete_records($this->table, 'textfield', 'tadpole');
+ $this->assertEqual(count_records($this->table), 2);
+ delete_records($this->table, 'numberfield', NULL);
$this->assertEqual(count_records($this->table), 1);
}
function test_delete_records2() {
delete_records($this->table, 'textfield', 'tadpole', 'id', 4);
- $this->assertEqual(count_records($this->table), 3);
+ $this->assertEqual(count_records($this->table), 4);
delete_records($this->table);
$this->assertEqual(count_records($this->table), 0);
}
function test_delete_records_select() {
delete_records_select($this->table, "textfield LIKE 't%'");
- $this->assertEqual(count_records($this->table), 1);
+ $this->assertEqual(count_records($this->table), 2);
delete_records_select($this->table, "'1' = '1'");
$this->assertEqual(count_records($this->table), 0);
}
+ function test_update_record() {
+ global $CFG;
+
+ // Simple update
+ $obj = new stdClass;
+ $obj->id = 1;
+ $obj->textfield = 'changed entry';
+ $obj->numberfield = 123;
+ $this->assertTrue(update_record($this->table, $obj));
+ $this->assert(new CheckSpecifiedFieldsExpectation($obj, 'Simple update (%s)'), get_record($this->table, 'id', $obj->id));
+
+ // Simple incomplete update
+ $obj = new stdClass;
+ $obj->id = 2;
+ $obj->numberfield = 123;
+ $this->assertTrue(update_record($this->table, $obj));
+ $obj->textfield = 'toad';
+ $this->assert(new CheckSpecifiedFieldsExpectation($obj, 'Simple update (%s)'), get_record($this->table, 'id', $obj->id));
+
+ // Simple incomplete update
+ $obj = new stdClass;
+ $obj->id = 3;
+ $obj->numberfield = 123;
+ $obj->textfield = null;
+ $this->assertTrue(update_record($this->table, $obj));
+ $this->assert(new CheckSpecifiedFieldsExpectation($obj, 'Simple update (%s)'), get_record($this->table, 'id', $obj->id));
+
+ }
+
//function insert_record($table, $dataobject, $returnid=true, $primarykey='id', $feedback=true) {
function test_insert_record() {
global $CFG;
$obj = new stdClass;
$obj->textfield = 'new entry';
$obj->numberfield = 123;
- $this->assertEqual(insert_record($this->table, $obj), 5);
- $obj->id = 5;
- $this->assert(new CheckSpecifiedFieldsExpectation($obj, 'Simple insert with returnid (%s)'), get_record($this->table, 'id', 5));
-
+ $this->assertEqual(insert_record($this->table, $obj), 6);
+ $obj->id = 6;
+ $this->assert(new CheckSpecifiedFieldsExpectation($obj, 'Simple insert with returnid (%s)'), get_record($this->table, 'id', $obj->id));
+
// Simple insert without $returnid
$obj = new stdClass;
$obj->textfield = 'newer entry';
$obj->numberfield = 321;
$this->assertEqual(insert_record($this->table, $obj, false), true);
- $obj->id = 6;
- $this->assert(new CheckSpecifiedFieldsExpectation($obj, 'Simple insert without returnid (%s)'), get_record($this->table, 'id', 6));
-
+ $obj->id = 7;
+ $this->assert(new CheckSpecifiedFieldsExpectation($obj, 'Simple insert without returnid (%s)'), get_record($this->table, 'id', $obj->id));
+
// Insert with missing columns - should get defaults.
$obj = new stdClass;
$obj->textfield = 'partial entry';
- $this->assertEqual(insert_record($this->table, $obj), 7);
- $obj->id = 7;
+ $this->assertEqual(insert_record($this->table, $obj), 8);
+ $obj->id = 8;
$obj->numberfield = 0xDefa;
- $got = get_record($this->table, 'id', 7);
- $this->assert(new CheckSpecifiedFieldsExpectation($obj, 'Insert with missing columns - should get defaults (%s)'), get_record($this->table, 'id', 7));
-
+ $got = get_record($this->table, 'id', 8);
+ $this->assert(new CheckSpecifiedFieldsExpectation($obj, 'Insert with missing columns - should get defaults (%s)'), get_record($this->table, 'id', $obj->id));
+
// Insert with extra columns - should be ingnored.
$obj = new stdClass;
$obj->textfield = 'entry with extra';
$obj->numberfield = 747;
$obj->unused = 666;
- $this->assertEqual(insert_record($this->table, $obj), 8);
- $obj->id = 8;
+ $this->assertEqual(insert_record($this->table, $obj), 9);
+ $obj->id = 9;
unset($obj->unused);
- $this->assert(new CheckSpecifiedFieldsExpectation($obj, 'Insert with extra columns - should be ingnored (%s)'), get_record($this->table, 'id', 8));
-
+ $this->assert(new CheckSpecifiedFieldsExpectation($obj, 'Insert with extra columns - should be ingnored (%s)'), get_record($this->table, 'id', $obj->id));
+
+ // Simple insert with $returnid and NULL values
+ $obj = new stdClass;
+ $obj->textfield = null;
+ $obj->numberfield = null;
+ $this->assertEqual(insert_record($this->table, $obj), 10);
+ $obj->id = 10;
+ $new = get_record($this->table, 'id', $obj->id);
+ $this->assert(new CheckSpecifiedFieldsExpectation($obj, 'Simple insert with returnid (%s)'), $new);
+ $this->assertNull($new->textfield);
+ $this->assertNull($new->numberfield);
+
// Insert into nonexistant table - should fail.
$obj = new stdClass;
$obj->textfield = 'new entry';