fields(['job' => 'Musician']) ->condition(db_or() ->condition('name', 'John') ->condition('name', 'Paul') ); $num_updated = $update->execute(); $this->assertIdentical($num_updated, 2, 'Updated 2 records.'); $num_matches = db_query('SELECT COUNT(*) FROM {test} WHERE job = :job', [':job' => 'Musician'])->fetchField(); $this->assertIdentical($num_matches, '2', 'Updated fields successfully.'); } /** * Tests WHERE IN clauses. */ public function testInConditionUpdate() { $num_updated = db_update('test') ->fields(['job' => 'Musician']) ->condition('name', ['John', 'Paul'], 'IN') ->execute(); $this->assertIdentical($num_updated, 2, 'Updated 2 records.'); $num_matches = db_query('SELECT COUNT(*) FROM {test} WHERE job = :job', [':job' => 'Musician'])->fetchField(); $this->assertIdentical($num_matches, '2', 'Updated fields successfully.'); } /** * Tests WHERE NOT IN clauses. */ public function testNotInConditionUpdate() { // The o is lowercase in the 'NoT IN' operator, to make sure the operators // work in mixed case. $num_updated = db_update('test') ->fields(['job' => 'Musician']) ->condition('name', ['John', 'Paul', 'George'], 'NoT IN') ->execute(); $this->assertIdentical($num_updated, 1, 'Updated 1 record.'); $num_matches = db_query('SELECT COUNT(*) FROM {test} WHERE job = :job', [':job' => 'Musician'])->fetchField(); $this->assertIdentical($num_matches, '1', 'Updated fields successfully.'); } /** * Tests BETWEEN conditional clauses. */ public function testBetweenConditionUpdate() { $num_updated = db_update('test') ->fields(['job' => 'Musician']) ->condition('age', [25, 26], 'BETWEEN') ->execute(); $this->assertIdentical($num_updated, 2, 'Updated 2 records.'); $num_matches = db_query('SELECT COUNT(*) FROM {test} WHERE job = :job', [':job' => 'Musician'])->fetchField(); $this->assertIdentical($num_matches, '2', 'Updated fields successfully.'); } /** * Tests LIKE conditionals. */ public function testLikeConditionUpdate() { $num_updated = db_update('test') ->fields(['job' => 'Musician']) ->condition('name', '%ge%', 'LIKE') ->execute(); $this->assertIdentical($num_updated, 1, 'Updated 1 record.'); $num_matches = db_query('SELECT COUNT(*) FROM {test} WHERE job = :job', [':job' => 'Musician'])->fetchField(); $this->assertIdentical($num_matches, '1', 'Updated fields successfully.'); } /** * Tests UPDATE with expression values. */ public function testUpdateExpression() { $before_age = db_query('SELECT age FROM {test} WHERE name = :name', [':name' => 'Ringo'])->fetchField(); $num_updated = db_update('test') ->condition('name', 'Ringo') ->fields(['job' => 'Musician']) ->expression('age', 'age + :age', [':age' => 4]) ->execute(); $this->assertIdentical($num_updated, 1, 'Updated 1 record.'); $num_matches = db_query('SELECT COUNT(*) FROM {test} WHERE job = :job', [':job' => 'Musician'])->fetchField(); $this->assertIdentical($num_matches, '1', 'Updated fields successfully.'); $person = db_query('SELECT * FROM {test} WHERE name = :name', [':name' => 'Ringo'])->fetch(); $this->assertEqual($person->name, 'Ringo', 'Name set correctly.'); $this->assertEqual($person->age, $before_age + 4, 'Age set correctly.'); $this->assertEqual($person->job, 'Musician', 'Job set correctly.'); } /** * Tests UPDATE with only expression values. */ public function testUpdateOnlyExpression() { $before_age = db_query('SELECT age FROM {test} WHERE name = :name', [':name' => 'Ringo'])->fetchField(); $num_updated = db_update('test') ->condition('name', 'Ringo') ->expression('age', 'age + :age', [':age' => 4]) ->execute(); $this->assertIdentical($num_updated, 1, 'Updated 1 record.'); $after_age = db_query('SELECT age FROM {test} WHERE name = :name', [':name' => 'Ringo'])->fetchField(); $this->assertEqual($before_age + 4, $after_age, 'Age updated correctly'); } /** * Test UPDATE with a subselect value. */ public function testSubSelectUpdate() { $subselect = db_select('test_task', 't'); $subselect->addExpression('MAX(priority) + :increment', 'max_priority', [':increment' => 30]); // Clone this to make sure we are running a different query when // asserting. $select = clone $subselect; $query = db_update('test') ->expression('age', $subselect) ->condition('name', 'Ringo'); // Save the number of rows that updated for assertion later. $num_updated = $query->execute(); $after_age = db_query('SELECT age FROM {test} WHERE name = :name', [':name' => 'Ringo'])->fetchField(); $expected_age = $select->execute()->fetchField(); $this->assertEqual($after_age, $expected_age); $this->assertEqual(1, $num_updated, t('Expected 1 row to be updated in subselect update query.')); } }