summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorAngie Byron <webchick@24967.no-reply.drupal.org>2010-12-22 01:16:43 +0000
committerAngie Byron <webchick@24967.no-reply.drupal.org>2010-12-22 01:16:43 +0000
commit8eb5874e645941473e31525e76d8ce55b39f0135 (patch)
tree6d25d00dc9310287c4b24baadebeb5415c94b573
parentdc51c88aec0e1685dc9020cc30c05e3131fbde76 (diff)
downloaddrupal-8eb5874e645941473e31525e76d8ce55b39f0135.tar.gz
drupal-8eb5874e645941473e31525e76d8ce55b39f0135.zip
#1004060 by dmitrig01, chx: Fixed SQLite update queries with expression failing
-rw-r--r--includes/database/sqlite/query.inc2
-rw-r--r--modules/simpletest/tests/database_test.test19
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.'));
+ }
}
/**