Skip to content
Snippets Groups Projects
Commit 26b14bc5 authored by catch's avatar catch
Browse files

Issue #664722 by amateescu: Make insert queries Countable

parent 49a419de
No related branches found
No related tags found
2 merge requests!7452Issue #1797438. HTML5 validation is preventing form submit and not fully...,!789Issue #3210310: Adjust Database API to remove deprecated Drupal 9 code in Drupal 10
......@@ -14,7 +14,7 @@
*
* @ingroup database
*/
class Insert extends Query {
class Insert extends Query implements \Countable {
use InsertTrait;
......
......@@ -181,4 +181,11 @@ protected function getInsertPlaceholderFragment(array $nested_insert_values, arr
return $values;
}
/**
* {@inheritdoc}
*/
public function count() {
return count($this->insertValues);
}
}
......@@ -18,7 +18,7 @@
* Insert except the rows will be set to the desired values even if the key
* existed before.
*/
abstract class Upsert extends Query {
abstract class Upsert extends Query implements \Countable {
use InsertTrait;
......
......@@ -25,6 +25,9 @@ function testSimpleInsert() {
'name' => 'Yoko',
'age' => '29',
));
// Check how many records are queued for insertion.
$this->assertIdentical($query->count(), 1, 'One record is queued for insertion.');
$query->execute();
$num_records_after = db_query('SELECT COUNT(*) FROM {test}')->fetchField();
......@@ -51,9 +54,15 @@ function testMultiInsert() {
'name' => 'Curly',
));
// Check how many records are queued for insertion.
$this->assertIdentical($query->count(), 2, 'Two records are queued for insertion.');
// We should be able to say "use the field order".
// This is not the recommended mechanism for most cases, but it should work.
$query->values(array('Moe', '32'));
// Check how many records are queued for insertion.
$this->assertIdentical($query->count(), 3, 'Three records are queued for insertion.');
$query->execute();
$num_records_after = (int) db_query('SELECT COUNT(*) FROM {test}')->fetchField();
......@@ -78,6 +87,8 @@ function testRepeatedInsert() {
'name' => 'Larry',
'age' => '30',
));
// Check how many records are queued for insertion.
$this->assertIdentical($query->count(), 1, 'One record is queued for insertion.');
$query->execute(); // This should run the insert, but leave the fields intact.
// We should be able to specify values in any order if named.
......@@ -85,10 +96,15 @@ function testRepeatedInsert() {
'age' => '31',
'name' => 'Curly',
));
// Check how many records are queued for insertion.
$this->assertIdentical($query->count(), 1, 'One record is queued for insertion.');
$query->execute();
// We should be able to say "use the field order".
$query->values(array('Moe', '32'));
// Check how many records are queued for insertion.
$this->assertIdentical($query->count(), 1, 'One record is queued for insertion.');
$query->execute();
$num_records_after = db_query('SELECT COUNT(*) FROM {test}')->fetchField();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment