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
<?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 @@ ...@@ -8,6 +8,7 @@
namespace Drupal\Core\Database\Query; namespace Drupal\Core\Database\Query;
use Drupal\Core\Database\Connection; use Drupal\Core\Database\Connection;
use Drupal\Core\Database\InvalidQueryException;
/** /**
* Generic class for a series of conditions in a query. * Generic class for a series of conditions in a query.
...@@ -76,6 +77,10 @@ public function condition($field, $value = NULL, $operator = NULL) { ...@@ -76,6 +77,10 @@ public function condition($field, $value = NULL, $operator = NULL) {
$operator = '='; $operator = '=';
} }
} }
if (empty($value) && is_array($value)) {
throw new InvalidQueryException(sprintf("Query condition '%s %s ()' cannot be empty.", $field, $operator));
}
$this->conditions[] = array( $this->conditions[] = array(
'field' => $field, 'field' => $field,
'value' => $value, 'value' => $value,
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
*/ */
namespace Drupal\system\Tests\Database; namespace Drupal\system\Tests\Database;
use Drupal\Core\Database\InvalidQueryException;
/** /**
* Tests the SELECT builder. * Tests the SELECT builder.
...@@ -481,4 +482,33 @@ function testInvalidSelectCount() { ...@@ -481,4 +482,33 @@ function testInvalidSelectCount() {
$this->fail('No Exception thrown.'); $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());
}
}
} }
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment