Index: modules/category_simple_patches/category_menu/category_menu.install
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/category/category_menu/category_menu.install,v
retrieving revision 1.2
diff -u -r1.2 category_menu.install
--- modules/category_simple_patches/category_menu/category_menu.install	14 Apr 2006 13:52:03 -0000	1.2
+++ modules/category_simple_patches/category_menu/category_menu.install	5 Nov 2006 19:49:35 -0000
@@ -24,8 +24,8 @@
       db_query("CREATE TABLE {category_menu_map} (
         nid int(10) unsigned NOT NULL default '0',
         mid int(10) unsigned NOT NULL default '0',
-        PRIMARY KEY (nid),
-        KEY mid (mid)
+        PRIMARY KEY (nid,mid),
+        KEY mid_nid (mid,nid)
         ) /*!40100 DEFAULT CHARACTER SET utf8 */
       ");
       break;
@@ -39,9 +39,40 @@
       db_query("CREATE TABLE {category_menu_map} (
         nid integer NOT NULL default '0',
         mid integer NOT NULL default '0',
-        PRIMARY KEY (nid)
+        PRIMARY KEY (nid,mid)
       )");
-      db_query("CREATE INDEX {category_menu_map}_mid_idx ON {category_menu_map}(mid)");
+      db_query("CREATE INDEX {category_menu_map}_mid_nid_idx ON {category_menu_map}(mid,nid)");
       break;
   }
 }
+
+function category_menu_update_1() {
+  // Using nid as a primary key was incorrect.
+  // This is an N:M join table!
+  // This update will allow multiple entries on a node to work.
+  $ret = array();
+  switch ($GLOBALS['db_type']) {
+    case 'mysql':
+    case 'mysqli':
+      // Drop the mid index.
+      $ret[] = update_sql('ALTER TABLE {category_menu_map} DROP INDEX mid');
+      // Drop the primary key.
+      $ret[] = update_sql('ALTER TABLE {category_menu_map} DROP PRIMARY KEY');
+      // Create a new primary key.
+      $ret[] = update_sql('ALTER TABLE {category_menu_map} ADD PRIMARY KEY (nid,mid)');
+      // Create a reverse lookup key to replace the mid index.
+      $ret[] = update_sql('ALTER TABLE {category_menu_map} ADD KEY mid_nid (mid,nid)');
+      break;
+    case 'pgsql':
+      // Drop the mid index.
+      $ret[] = update_sql('ALTER TABLE {category_menu_map} DROP CONSTRAINT {category_menu_map}_mid_idx');
+      // Drop the primary key.
+      $ret[] = update_sql('ALTER TABLE {category_menu_map} DROP CONSTRAINT {category_menu_map}_pkey');
+      // Create a new primary key.
+      $ret[] = update_sql('ALTER TABLE {category_menu_map} ADD PRIMARY KEY (nid,mid)');
+      // Create a reverse lookup key to replace the mid index.
+      $ret[] = update_sql('CREATE INDEX {category_menu_map}_mid_nid_idx ON {category_menu_map}(mid,nid)');
+      break;
+  }
+  return $ret;
+}
