From 8eb5874e645941473e31525e76d8ce55b39f0135 Mon Sep 17 00:00:00 2001 From: Angie Byron <webchick@24967.no-reply.drupal.org> Date: Wed, 22 Dec 2010 01:16:43 +0000 Subject: [PATCH] #1004060 by dmitrig01, chx: Fixed SQLite update queries with expression failing --- includes/database/sqlite/query.inc | 2 +- modules/simpletest/tests/database_test.test | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/includes/database/sqlite/query.inc b/includes/database/sqlite/query.inc index 158da3d0a649..7b1af8114fa1 100644 --- a/includes/database/sqlite/query.inc +++ b/includes/database/sqlite/query.inc @@ -97,7 +97,7 @@ public function execute() { foreach ($fields as $field => $data) { if (is_array($data)) { // The field is an expression. - $condition->condition($field, $data['expression'], '<>'); + $condition->where($field . ' <> ' . $data['expression']); $condition->isNull($field); } elseif (!isset($data)) { diff --git a/modules/simpletest/tests/database_test.test b/modules/simpletest/tests/database_test.test index b80f55231e90..65d84c18075f 100644 --- a/modules/simpletest/tests/database_test.test +++ b/modules/simpletest/tests/database_test.test @@ -776,6 +776,25 @@ class DatabaseUpdateTestCase extends DatabaseTestCase { $this->assertIdentical($num_matches, '1', t('Updated fields successfully.')); } + /** + * Test updating with expressions. + */ + function testExpressionUpdate() { + // Set age = 1 for a single row for this test to work. + db_update('test') + ->condition('id', 1) + ->fields(array('age' => 1)) + ->execute(); + + // Ensure that expressions are handled properly. This should set every + // record's age to a square of itself, which will change only three of the + // four records in the table since 1*1 = 1. That means only three records + // are modified, so we should get back 3, not 4, from execute(). + $num_rows = db_update('test') + ->expression('age', 'age * age') + ->execute(); + $this->assertIdentical($num_rows, 3, t('Number of affected rows are returned.')); + } } /** -- GitLab