3 namespace Drupal\KernelTests\Core\Database;
6 * Tests delete and truncate queries.
8 * The DELETE tests are not as extensive, as all of the interesting code for
9 * DELETE queries is in the conditional which is identical to the UPDATE and
10 * SELECT conditional handling.
12 * The TRUNCATE tests are not extensive either, because the behavior of
13 * TRUNCATE queries is not consistent across database engines. We only test
14 * that a TRUNCATE query actually deletes all rows from the target table.
18 class DeleteTruncateTest extends DatabaseTestBase {
21 * Confirms that we can use a subselect in a delete successfully.
23 public function testSubselectDelete() {
24 $num_records_before = db_query('SELECT COUNT(*) FROM {test_task}')->fetchField();
25 $pid_to_delete = db_query("SELECT * FROM {test_task} WHERE task = 'sleep'")->fetchField();
27 $subquery = db_select('test', 't')
29 ->condition('t.id', [$pid_to_delete], 'IN');
30 $delete = db_delete('test_task')
31 ->condition('task', 'sleep')
32 ->condition('pid', $subquery, 'IN');
34 $num_deleted = $delete->execute();
35 $this->assertEqual($num_deleted, 1, 'Deleted 1 record.');
37 $num_records_after = db_query('SELECT COUNT(*) FROM {test_task}')->fetchField();
38 $this->assertEqual($num_records_before, $num_records_after + $num_deleted, 'Deletion adds up.');
42 * Confirms that we can delete a single record successfully.
44 public function testSimpleDelete() {
45 $num_records_before = db_query('SELECT COUNT(*) FROM {test}')->fetchField();
47 $num_deleted = db_delete('test')
50 $this->assertIdentical($num_deleted, 1, 'Deleted 1 record.');
52 $num_records_after = db_query('SELECT COUNT(*) FROM {test}')->fetchField();
53 $this->assertEqual($num_records_before, $num_records_after + $num_deleted, 'Deletion adds up.');
57 * Confirms that we can truncate a whole table successfully.
59 public function testTruncate() {
60 $num_records_before = db_query("SELECT COUNT(*) FROM {test}")->fetchField();
61 $this->assertTrue($num_records_before > 0, 'The table is not empty.');
63 db_truncate('test')->execute();
65 $num_records_after = db_query("SELECT COUNT(*) FROM {test}")->fetchField();
66 $this->assertEqual(0, $num_records_after, 'Truncate really deletes everything.');
70 * Confirms that we can delete a single special column name record successfully.
72 public function testSpecialColumnDelete() {
73 $num_records_before = db_query('SELECT COUNT(*) FROM {test_special_columns}')->fetchField();
75 $num_deleted = db_delete('test_special_columns')
78 $this->assertIdentical($num_deleted, 1, 'Deleted 1 special column record.');
80 $num_records_after = db_query('SELECT COUNT(*) FROM {test_special_columns}')->fetchField();
81 $this->assertEqual($num_records_before, $num_records_after + $num_deleted, 'Deletion adds up.');