diff --git a/apachesolr.module b/apachesolr.module
index c65d953..b70529a 100644
--- a/apachesolr.module
+++ b/apachesolr.module
@@ -473,8 +473,21 @@ function apachesolr_document_id($id, $entity = 'node') {
 function apachesolr_user_update(&$edit, $account, $category) {
   if (isset($edit['name']) && $account->name != $edit['name']) {
     // TODO: performance issue. see http://drupal.org/node/592522
-    $nid_query = db_select('node')->fields('node', array('nid'))->where("uid = :uid", array(':uid' => $account->uid));
-    db_update('apachesolr_search_node')->condition('nid', $nid_query, 'IN')->fields(array('changed' => REQUEST_TIME))->execute();
+    $nid = db_select('node')->fields('node', array('nid'))->where("uid = :uid", array(':uid' => $account->uid));
+    switch(db_driver()) {
+    case 'mysql' :
+    case 'mysqli' :
+      db_update('apachesolr_search_node')
+      ->condition('nid', $nid, 'IN')
+      ->fields(array('changed' => REQUEST_TIME))
+      ->execute();
+      break;
+    default :
+      db_update('apachesolr_search_node')
+      ->condition('nid', $nid, 'IN')
+      ->fields(array('changed' => REQUEST_TIME))
+      ->execute();
+    }
   }
 }
 
@@ -485,8 +498,21 @@ function apachesolr_user_update(&$edit, $account, $category) {
  */
 function apachesolr_taxonomy_term_update($term) {
   // TODO: performance issue. see http://drupal.org/node/592522
-  $nid_query = db_select('taxonomy_index')->fields('taxonomy_index', array('nid'))->where("tid = :tid", array(':tid' => $term->tid));
-  db_update('apachesolr_search_node')->condition('nid', $nid_query, 'IN')->fields(array('changed' => REQUEST_TIME))->execute();
+  $nid = db_select('taxonomy_index')->fields('taxonomy_index', array('nid'))->where("tid = :tid", array(':tid' => $term->tid));
+  switch(db_driver()) {
+    case 'mysql' :
+    case 'mysqli' :
+      db_update('apachesolr_search_node')
+      ->condition('nid', $nid, 'IN')
+      ->fields(array('changed' => REQUEST_TIME))
+      ->execute();
+      break;
+    default :
+      db_update('apachesolr_search_node')
+      ->condition('nid', $nid, 'IN')
+      ->fields(array('changed' => REQUEST_TIME))
+      ->execute();
+  }
   // TODO: the rest, such as term deletion.
 }
 
@@ -550,10 +576,25 @@ function apachesolr_node_type_delete($info) {
  * Implements of hook_node_type_update().
  */
 function apachesolr_node_type_update($info) {
+  dsm($info);
+  // TODO: performance issue. see http://drupal.org/node/592522
   if (!empty($info->old_type) && $info->old_type != $info->type) {
     // We cannot be sure we are going before or after node module.
     $nid = db_select('node')->fields('node', array('nid'))->where("type = :new OR type = :old", array(':new' => $info->type, ':old' => $info->old_type));
-    db_update('apachesolr_search_node')->condition('nid', $nid, 'IN')->fields(array('changed' => REQUEST_TIME))->execute();
+    switch(db_driver()) {
+      case 'mysql' :
+      case 'mysqli' :
+        db_update('apachesolr_search_node')
+        ->condition('nid', $nid, 'IN')
+        ->fields(array('changed' => REQUEST_TIME))
+        ->execute();
+        break;
+      default :
+        db_update('apachesolr_search_node')
+        ->condition('nid', $nid, 'IN')
+        ->fields(array('changed' => REQUEST_TIME))
+        ->execute();
+    }
   }
 }
 
