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

Issue #2161943 by Berdir, sun, jibran: Throw a helpful exception for empty IN...

Issue #2161943 by Berdir, sun, jibran: Throw a helpful exception for empty IN conditions in Database\Query\Condition.
parent ea9ed40f
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
<?php
/**
* @file
* Definition of Drupal\Core\Database\IntegrityConstraintViolationException
*/
namespace Drupal\Core\Database;
/**
* Exception thrown if a query would be invalidt.
*
* This exception is thrown e.g. when trying to have an IN condition with an
* empty array.
*/
class InvalidQueryException extends \InvalidArgumentException implements DatabaseException { }
......@@ -8,6 +8,7 @@
namespace Drupal\Core\Database\Query;
use Drupal\Core\Database\Connection;
use Drupal\Core\Database\InvalidQueryException;
/**
* Generic class for a series of conditions in a query.
......@@ -76,6 +77,10 @@ public function condition($field, $value = NULL, $operator = NULL) {
$operator = '=';
}
}
if (empty($value) && is_array($value)) {
throw new InvalidQueryException(sprintf("Query condition '%s %s ()' cannot be empty.", $field, $operator));
}
$this->conditions[] = array(
'field' => $field,
'value' => $value,
......
......@@ -6,6 +6,7 @@
*/
namespace Drupal\system\Tests\Database;
use Drupal\Core\Database\InvalidQueryException;
/**
* Tests the SELECT builder.
......@@ -481,4 +482,33 @@ function testInvalidSelectCount() {
$this->fail('No Exception thrown.');
}
/**
* Tests thrown exception for IN query conditions with an empty array.
*/
function testEmptyInCondition() {
try {
db_select('test', 't')
->fields('t')
->condition('age', array(), 'IN')
->execute();
$this->fail('Expected exception not thrown');
}
catch (InvalidQueryException $e) {
$this->assertEqual("Query condition 'age IN ()' cannot be empty.", $e->getMessage());
}
try {
db_select('test', 't')
->fields('t')
->condition('age', array(), 'NOT IN')
->execute();
$this->fail('Expected exception not thrown');
}
catch (InvalidQueryException $e) {
$this->assertEqual("Query condition 'age NOT IN ()' cannot be empty.", $e->getMessage());
}
}
}
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