Index: includes/database/sqlite/query.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/database/sqlite/query.inc,v
retrieving revision 1.14
diff -u -p -r1.14 query.inc
--- includes/database/sqlite/query.inc	29 Nov 2010 04:45:11 -0000	1.14
+++ includes/database/sqlite/query.inc	22 Dec 2010 00:32:21 -0000
@@ -97,7 +97,7 @@ class UpdateQuery_sqlite extends UpdateQ
     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)) {
Index: modules/simpletest/tests/database_test.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/simpletest/tests/database_test.test,v
retrieving revision 1.105
diff -u -p -r1.105 database_test.test
--- modules/simpletest/tests/database_test.test	15 Dec 2010 06:52:54 -0000	1.105
+++ modules/simpletest/tests/database_test.test	22 Dec 2010 00:32:21 -0000
@@ -776,6 +776,26 @@ class DatabaseUpdateTestCase extends Dat
     $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 the expression is entered as SQL, and not as a string. If the
+    // exprssion is entered as a string, it should affect all four rows (none
+    // of the four ages are "age * age"). If it is entered as a SQL, it should
+    // update three rows - the row previously created above with age=1 should
+    // not update, as 1*1 = 1.
+    $num_rows = db_update('test')
+      ->expression('age', 'age * age')
+      ->execute();
+    $this->assertIdentical($num_rows, 3, t('Expression entered as straight SQL.'));
+  }
 }
 
 /**
