diff options
author | Angie Byron <webchick@24967.no-reply.drupal.org> | 2010-12-22 01:16:43 +0000 |
---|---|---|
committer | Angie Byron <webchick@24967.no-reply.drupal.org> | 2010-12-22 01:16:43 +0000 |
commit | 8eb5874e645941473e31525e76d8ce55b39f0135 (patch) | |
tree | 6d25d00dc9310287c4b24baadebeb5415c94b573 | |
parent | dc51c88aec0e1685dc9020cc30c05e3131fbde76 (diff) | |
download | drupal-8eb5874e645941473e31525e76d8ce55b39f0135.tar.gz drupal-8eb5874e645941473e31525e76d8ce55b39f0135.zip |
#1004060 by dmitrig01, chx: Fixed SQLite update queries with expression failing
-rw-r--r-- | includes/database/sqlite/query.inc | 2 | ||||
-rw-r--r-- | modules/simpletest/tests/database_test.test | 19 |
2 files changed, 20 insertions, 1 deletions
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 @@ class UpdateQuery_sqlite extends UpdateQuery { 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.')); + } } /** |