Index: flag.install
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/flag/Attic/flag.install,v
retrieving revision 1.2.2.32
diff -u -r1.2.2.32 flag.install
--- flag.install	22 Jun 2009 22:46:51 -0000	1.2.2.32
+++ flag.install	14 Sep 2009 18:39:45 -0000
@@ -439,13 +439,25 @@
 function flag_update_6004() {
   $ret = array();
 
-  db_drop_primary_key($ret, 'flags');
-  db_change_field($ret, 'flags', 'fid', 'fid', array(
-    'type' => 'serial',
-    'size' => 'small',
-    'unsigned' => TRUE,
-    'not null' => TRUE,
-  ), array('primary key' => array('fid')));
+  // This check ensures that converting a serial to serial column does not break
+  // in MySQL, which requires all serial columns simultaneously be a primary key.
+  if (strstr($GLOBALS['db_type'], 'mysql')) {
+    db_change_field($ret, 'flags', 'fid', 'fid', array(
+      'type' => 'serial',
+      'size' => 'small',
+      'unsigned' => TRUE,
+      'not null' => TRUE,
+    ));
+  }
+  else {
+    db_drop_primary_key($ret, 'flags');
+    db_change_field($ret, 'flags', 'fid', 'fid', array(
+      'type' => 'serial',
+      'size' => 'small',
+      'unsigned' => TRUE,
+      'not null' => TRUE,
+    ), array('primary key' => array('fid')));
+  }
 
   return $ret;
 }
