View source
<?php
namespace Drupal\KernelTests\Core\Database;
class UpdateTest extends DatabaseTestBase {
public function testSimpleUpdate() {
$num_updated = $this->connection
->update('test')
->fields([
'name' => 'Tiffany',
])
->condition('id', 1)
->execute();
$this
->assertIdentical($num_updated, 1, 'Updated 1 record.');
$saved_name = $this->connection
->query('SELECT name FROM {test} WHERE id = :id', [
':id' => 1,
])
->fetchField();
$this
->assertIdentical($saved_name, 'Tiffany', 'Updated name successfully.');
}
public function testSimpleNullUpdate() {
$this
->ensureSampleDataNull();
$num_updated = $this->connection
->update('test_null')
->fields([
'age' => NULL,
])
->condition('name', 'Kermit')
->execute();
$this
->assertIdentical($num_updated, 1, 'Updated 1 record.');
$saved_age = $this->connection
->query('SELECT age FROM {test_null} WHERE name = :name', [
':name' => 'Kermit',
])
->fetchField();
$this
->assertNull($saved_age, 'Updated name successfully.');
}
public function testMultiUpdate() {
$num_updated = $this->connection
->update('test')
->fields([
'job' => 'Musician',
])
->condition('job', 'Singer')
->execute();
$this
->assertIdentical($num_updated, 2, 'Updated 2 records.');
$num_matches = $this->connection
->query('SELECT COUNT(*) FROM {test} WHERE job = :job', [
':job' => 'Musician',
])
->fetchField();
$this
->assertIdentical($num_matches, '2', 'Updated fields successfully.');
}
public function testMultiGTUpdate() {
$num_updated = $this->connection
->update('test')
->fields([
'job' => 'Musician',
])
->condition('age', 26, '>')
->execute();
$this
->assertIdentical($num_updated, 2, 'Updated 2 records.');
$num_matches = $this->connection
->query('SELECT COUNT(*) FROM {test} WHERE job = :job', [
':job' => 'Musician',
])
->fetchField();
$this
->assertIdentical($num_matches, '2', 'Updated fields successfully.');
}
public function testWhereUpdate() {
$num_updated = $this->connection
->update('test')
->fields([
'job' => 'Musician',
])
->where('age > :age', [
':age' => 26,
])
->execute();
$this
->assertIdentical($num_updated, 2, 'Updated 2 records.');
$num_matches = $this->connection
->query('SELECT COUNT(*) FROM {test} WHERE job = :job', [
':job' => 'Musician',
])
->fetchField();
$this
->assertIdentical($num_matches, '2', 'Updated fields successfully.');
}
public function testWhereAndConditionUpdate() {
$update = $this->connection
->update('test')
->fields([
'job' => 'Musician',
])
->where('age > :age', [
':age' => 26,
])
->condition('name', 'Ringo');
$num_updated = $update
->execute();
$this
->assertIdentical($num_updated, 1, 'Updated 1 record.');
$num_matches = $this->connection
->query('SELECT COUNT(*) FROM {test} WHERE job = :job', [
':job' => 'Musician',
])
->fetchField();
$this
->assertIdentical($num_matches, '1', 'Updated fields successfully.');
}
public function testExpressionUpdate() {
$num_rows = $this->connection
->update('test')
->expression('age', 'age * age')
->execute();
$this
->assertIdentical($num_rows, 4, 'Updated 4 records.');
$saved_name = $this->connection
->query('SELECT name FROM {test} WHERE age = :age', [
':age' => pow(26, 2),
])
->fetchField();
$this
->assertIdentical($saved_name, 'Paul', 'Successfully updated values using an algebraic expression.');
}
public function testUpdateAffectedRows() {
$num_rows = $this->connection
->update('test_task')
->condition('priority', 1, '<>')
->fields([
'task' => 'sleep',
])
->execute();
$this
->assertIdentical($num_rows, 5, 'Correctly returned 5 affected rows.');
}
public function testSpecialColumnUpdate() {
$num_updated = $this->connection
->update('test_special_columns')
->fields([
'offset' => 'New offset value',
])
->condition('id', 1)
->execute();
$this
->assertIdentical($num_updated, 1, 'Updated 1 special column record.');
$saved_value = $this->connection
->query('SELECT "offset" FROM {test_special_columns} WHERE id = :id', [
':id' => 1,
])
->fetchField();
$this
->assertIdentical($saved_value, 'New offset value', 'Updated special column name value successfully.');
}
}