Issue #2161943 by Berdir, sun, jibran: Throw a helpful exception for empty IN conditions in Database\Query\Condition.
parent
ea9ed40f79
commit
cad040a5ec
|
@ -0,0 +1,16 @@
|
|||
<?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 @@ class Condition implements ConditionInterface, \Countable {
|
|||
$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 @@ class SelectTest extends DatabaseTestBase {
|
|||
$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());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue