return false;
}
+ $id = (int)$dataobject->id;
+
$columns = $this->get_columns($table);
$cleaned = array();
+ $blobs = array();
foreach ($dataobject as $field=>$value) {
if (!isset($columns[$field])) {
continue;
}
- if (is_bool($value)) {
- $value = (int)$value; // prevent "false" problems
+ $column = $columns[$field];
+ if ($column->meta_type == 'B') {
+ if (is_null($value)) {
+ $cleaned[$field] = null;
+ } else {
+ $blobs[$field] = $value;
+ $cleaned[$field] = '@#BLOB#@';
+ }
+ continue;
+
+ } else if (is_bool($value)) {
+ $value = (int)$value; // prevent false '' problems
+
+ } else if ($value === '') {
+ if ($column->meta_type == 'I' or $column->meta_type == 'F' or $column->meta_type == 'N') {
+ $value = 0; // prevent '' problems in numeric fields
+ }
}
+
$cleaned[$field] = $value;
}
- return $this->update_record_raw($table, $cleaned, $bulk);
+ if (!$this->update_record_raw($table, $cleaned, $bulk)) {
+ return false;
+ }
+
+ if (empty($blobs)) {
+ return true;
+ }
+
+ foreach ($blobs as $key=>$value) {
+ $this->writes++;
+ $value = pg_escape_bytea($this->pgsql, $value);
+ $sql = "UPDATE {$this->prefix}$table SET $key = '$value'::bytea WHERE id = $id";
+ $result = pg_query($this->pgsql, $sql);
+ if ($result === false) {
+ return false;
+ }
+ pg_free_result($result);
+ }
+
+ return true;
}
/**
$clob = file_get_contents($CFG->libdir.'/dml/simpletest/clob.txt');
$blob = file_get_contents($CFG->libdir.'/dml/simpletest/randombinary');
+ $newclob = substr($clob, 0, 500);
+ $newblob = substr($blob, 0, 250);
+
$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);
+ $record->description = $newclob;
+ $record->image = $newblob;
$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', array('id' => $id)));
- $this->assertEqual(substr($blob, 0, 250), $DB->get_field('testtable', 'image', array('id' => $id)));
+ $this->assertEqual($newclob, $record->description);
+ $this->assertEqual($newblob, $record->image);
+ $this->assertEqual($newclob, $DB->get_field('testtable', 'description', array('id' => $id)));
+ $this->assertEqual($newblob, $DB->get_field('testtable', 'image', array('id' => $id)));
}