Commit ee96cf6b authored by catch's avatar catch
Browse files

Issue #1889328 by gielfeldt, gumanist: Fixed Not all objects respect the query...

Issue #1889328 by gielfeldt, gumanist: Fixed Not all objects respect the query option throw_exception.
parent 31bd2006
......@@ -403,6 +403,12 @@ public function __toString() {
}
public function execute() {
// Default options for merge queries.
$this->queryOptions += array(
'throw_exception' => TRUE,
);
try {
if (!count($this->condition)) {
throw new InvalidMergeQueryException(t('Invalid merge query: no conditions'));
}
......@@ -441,4 +447,13 @@ public function execute() {
return self::STATUS_UPDATE;
}
}
catch (\Exception $e) {
if ($this->queryOptions['throw_exception']) {
throw $e;
}
else {
return NULL;
}
}
}
}
......@@ -589,7 +589,7 @@ public function groupBy($field) {
public function countQuery() {
$count = $this->prepareCountQuery();
$query = $this->connection->select($count);
$query = $this->connection->select($count, NULL, $this->queryOptions);
$query->addExpression('COUNT(*)');
return $query;
......
......@@ -208,7 +208,25 @@ function testMergeUpdateWithoutUpdate() {
*/
function testInvalidMerge() {
try {
// This query should die because there is no key field specified.
// This query will fail because there is no key field specified.
// Normally it would throw an exception but we are supressing it with
// the throw_exception option.
$options['throw_exception'] = FALSE;
db_merge('test_people', $options)
->fields(array(
'age' => 31,
'name' => 'Tiffany',
))
->execute();
$this->pass('$options[\'throw_exception\'] is FALSE, no InvalidMergeQueryException thrown.');
}
catch (InvalidMergeQueryException $e) {
$this->fail('$options[\'throw_exception\'] is FALSE, but InvalidMergeQueryException thrown for invalid query.');
return;
}
try {
// This query will fail because there is no key field specified.
db_merge('test_people')
->fields(array(
'age' => 31,
......
......@@ -376,4 +376,40 @@ function testSelectDuplicateAlias() {
$alias2 = $query->addField('t', 'age', 'the_alias');
$this->assertNotIdentical($alias1, $alias2, 'Duplicate aliases are renamed.');
}
/**
* Tests that an invalid merge query throws an exception.
*/
function testInvalidSelectCount() {
try {
// This query will fail because the table does not exist.
// Normally it would throw an exception but we are supressing
// it with the throw_exception option.
$options['throw_exception'] = FALSE;
db_select('some_table_that_doesnt_exist', 't', $options)
->fields('t')
->countQuery()
->execute();
$this->pass('$options[\'throw_exception\'] is FALSE, no Exception thrown.');
}
catch (\Exception $e) {
$this->fail('$options[\'throw_exception\'] is FALSE, but Exception thrown for invalid query.');
return;
}
try {
// This query will fail because the table does not exist.
db_select('some_table_that_doesnt_exist', 't')
->fields('t')
->countQuery()
->execute();
}
catch (\Exception $e) {
$this->pass('Exception thrown for invalid query.');
return;
}
$this->fail('No Exception thrown.');
}
}
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