Index: system.install
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system.install,v
retrieving revision 1.99
diff -u -r1.99 system.install
--- system.install	25 Apr 2007 21:34:32 -0000	1.99
+++ system.install	1 May 2007 23:12:53 -0000
@@ -191,6 +191,7 @@
       ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
 
       db_query("CREATE TABLE {blocks} (
+        id int NOT NULL AUTO_INCREMENT,
         module varchar(64) DEFAULT '' NOT NULL,
         delta varchar(32) NOT NULL default '0',
         theme varchar(255) NOT NULL default '',
@@ -201,7 +202,8 @@
         throttle tinyint DEFAULT '0' NOT NULL,
         visibility tinyint DEFAULT '0' NOT NULL,
         pages text NOT NULL,
-        title varchar(64) DEFAULT '' NOT NULL
+        title varchar(64) DEFAULT '' NOT NULL,
+        PRIMARY KEY (id)
       ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
 
       db_query("CREATE TABLE {boxes} (
@@ -306,17 +308,21 @@
       ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
 
       db_query("CREATE TABLE {filters} (
+        id int NOT NULL AUTO_INCREMENT,
         format int NOT NULL default '0',
         module varchar(64) NOT NULL default '',
         delta tinyint DEFAULT '0' NOT NULL,
         weight tinyint DEFAULT '0' NOT NULL,
+        PRIMARY KEY (id),
         INDEX (weight)
       ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
 
       db_query("CREATE TABLE {flood} (
+        id int NOT NULL AUTO_INCREMENT,
         event varchar(64) NOT NULL default '',
         hostname varchar(128) NOT NULL default '',
-        timestamp int NOT NULL default '0'
+        timestamp int NOT NULL default '0',
+        PRIMARY KEY (id)
       ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
 
       db_query("CREATE TABLE {history} (
@@ -380,7 +386,8 @@
         promote int NOT NULL default '0',
         moderate int NOT NULL default '0',
         sticky int NOT NULL default '0',
-        PRIMARY KEY  (nid, vid),
+        PRIMARY KEY  (nid),
+        UNIQUE KEY nid_vid (nid, vid),
         UNIQUE KEY vid (vid),
         KEY node_type (type(4)),
         KEY node_title_type (title, type(4)),
@@ -448,9 +455,11 @@
       ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
 
       db_query("CREATE TABLE {permission} (
+        id int NOT NULL AUTO_INCREMENT,
         rid int unsigned NOT NULL default '0',
         perm longtext,
         tid int unsigned NOT NULL default '0',
+        PRIMARY KEY (id),
         KEY rid (rid)
       ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
 
@@ -538,15 +547,19 @@
       ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
 
       db_query("CREATE TABLE {term_relation} (
+        id int NOT NULL AUTO_INCREMENT,
         tid1 int unsigned NOT NULL default '0',
         tid2 int unsigned NOT NULL default '0',
+        PRIMARY KEY (id),
         KEY tid1 (tid1),
         KEY tid2 (tid2)
       ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
 
       db_query("CREATE TABLE {term_synonym} (
+        id int NOT NULL AUTO_INCREMENT,
         tid int unsigned NOT NULL default '0',
         name varchar(255) NOT NULL default '',
+        PRIMARY KEY (id),
         KEY tid (tid),
         KEY name (name(3))
       ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
@@ -667,6 +680,7 @@
       )");
 
       db_query("CREATE TABLE {blocks} (
+        id serial,
         module varchar(64) DEFAULT '' NOT NULL,
         delta varchar(32) NOT NULL default '0',
         theme varchar(255) NOT NULL default '',
@@ -677,7 +691,8 @@
         throttle smallint DEFAULT '0' NOT NULL,
         visibility smallint DEFAULT '0' NOT NULL,
         pages text DEFAULT '' NOT NULL,
-        title varchar(64) DEFAULT '' NOT NULL
+        title varchar(64) DEFAULT '' NOT NULL,
+        PRIMARY KEY (id)
       )");
 
       db_query("CREATE TABLE {boxes} (
@@ -695,7 +710,7 @@
         expire int NOT NULL default '0',
         created int NOT NULL default '0',
         headers text,
-        serialized int(1) NOT NULL default '0',
+        serialized smallint NOT NULL default '0',
         PRIMARY KEY (cid)
       )");
       db_query("CREATE TABLE {cache_filter} (
@@ -704,7 +719,7 @@
         expire int NOT NULL default '0',
         created int NOT NULL default '0',
         headers text,
-        serialized int(1) NOT NULL default '0',
+        serialized smallint NOT NULL default '0',
         PRIMARY KEY (cid)
       )");
       db_query("CREATE TABLE {cache_page} (
@@ -713,7 +728,7 @@
         expire int NOT NULL default '0',
         created int NOT NULL default '0',
         headers text,
-        serialized int(1) NOT NULL default '0',
+        serialized smallint NOT NULL default '0',
         PRIMARY KEY (cid)
       )");
       db_query("CREATE INDEX {cache}_expire_idx ON {cache} (expire)");
@@ -782,17 +797,21 @@
       )");
 
       db_query("CREATE TABLE {filters} (
+        id serial,
         format int NOT NULL default '0',
         module varchar(64) NOT NULL default '',
         delta smallint DEFAULT '0' NOT NULL,
-        weight smallint DEFAULT '0' NOT NULL
+        weight smallint DEFAULT '0' NOT NULL,
+        PRIMARY KEY (id)
       )");
       db_query("CREATE INDEX {filters}_weight_idx ON {filters} (weight)");
 
       db_query("CREATE TABLE {flood} (
+        id serial,
         event varchar(64) NOT NULL default '',
         hostname varchar(128) NOT NULL default '',
-        timestamp int NOT NULL default '0'
+        timestamp int NOT NULL default '0',
+        PRIMARY KEY (id)
       )");
 
       db_query("CREATE TABLE {history} (
@@ -857,7 +876,8 @@
         promote int NOT NULL default '0',
         moderate int NOT NULL default '0',
         sticky int NOT NULL default '0',
-        PRIMARY KEY (nid, vid),
+        PRIMARY KEY (nid),
+        UNIQUE (nid, vid),
         UNIQUE (vid)
       )");
       db_query("CREATE INDEX {node}_node_type_idx ON {node} (substr (type, 1, 4))");
@@ -925,9 +945,11 @@
       db_query("CREATE UNIQUE INDEX {url_alias}_dst_language_idx ON {url_alias} (dst, language)");
 
       db_query("CREATE TABLE {permission} (
+        id serial,
         rid int_unsigned NOT NULL default '0',
         perm text,
-        tid int_unsigned NOT NULL default '0'
+        tid int_unsigned NOT NULL default '0',
+        PRIMARY KEY (id)
       )");
       db_query("CREATE INDEX {permission}_rid_idx ON {permission} (rid)");
 
@@ -1016,15 +1038,19 @@
       db_query("CREATE INDEX {term_node}_tid_idx ON {term_node} (tid)");
 
       db_query("CREATE TABLE {term_relation} (
+        id serial,
         tid1 int_unsigned NOT NULL default '0',
-        tid2 int_unsigned NOT NULL default '0'
+        tid2 int_unsigned NOT NULL default '0',
+        PRIMARY KEY (id)
       )");
       db_query("CREATE INDEX {term_relation}_tid1_idx ON {term_relation} (tid1)");
       db_query("CREATE INDEX {term_relation}_tid2_idx ON {term_relation} (tid2)");
 
       db_query("CREATE TABLE {term_synonym} (
+        id serial,
         tid int_unsigned NOT NULL default '0',
-        name varchar(255) NOT NULL default ''
+        name varchar(255) NOT NULL default '',
+        PRIMARY KEY (id)
       )");
       db_query("CREATE INDEX {term_synonym}_tid_idx ON {term_synonym} (tid)");
       db_query("CREATE INDEX {term_synonym}_name_idx ON {term_synonym} (substr(name, 1, 3))");
@@ -1099,8 +1125,8 @@
   db_query("INSERT INTO {role} (name) VALUES ('anonymous user')");
   db_query("INSERT INTO {role} (name) VALUES ('authenticated user')");
 
-  db_query("INSERT INTO {permission} VALUES (1,'access content',0)");
-  db_query("INSERT INTO {permission} VALUES (2,'access comments, access content, post comments, post comments without approval',0)");
+  db_query("INSERT INTO {permission} (rid,perm,tid) VALUES (1,'access content',0)");
+  db_query("INSERT INTO {permission} (rid,perm,tid) VALUES (2,'access comments, access content, post comments, post comments without approval',0)");
 
   db_query("INSERT INTO {variable} (name,value) VALUES('theme_default', 's:7:\"garland\";')");
 
@@ -3830,9 +3856,9 @@
 
   switch ($GLOBALS['db_type']) {
     case 'pgsql':
-      db_add_column($ret, 'cache', 'serialized', 'int(1)', array('default' => "'0'", 'not null' => TRUE));
-      db_add_column($ret, 'cache_filter', 'serialized', 'int(1)', array('default' => "'0'", 'not null' => TRUE));
-      db_add_column($ret, 'cache_page', 'serialized', 'int(1)', array('default' => "'0'", 'not null' => TRUE));
+      db_add_column($ret, 'cache', 'serialized', 'smallint', array('default' => "'0'", 'not null' => TRUE));
+      db_add_column($ret, 'cache_filter', 'serialized', 'smallint', array('default' => "'0'", 'not null' => TRUE));
+      db_add_column($ret, 'cache_page', 'serialized', 'smallint', array('default' => "'0'", 'not null' => TRUE));
       break;
     case 'mysql':
     case 'mysqli':
@@ -3847,6 +3873,41 @@
 }
 
 /**
+ * Add primary keys to block, filters, flood, permission, and term_relation.
+ */
+function system_update_6013() {
+  $ret = array();
+
+  switch ($GLOBALS['db_type']) {
+    case 'pgsql':
+      db_add_column($ret, 'blocks', 'id', 'serial');
+      $ret[] = update_sql("ALTER TABLE {blocks} ADD PRIMARY KEY (id)");
+      db_add_column($ret, 'filters', 'id', 'serial');
+      $ret[] = update_sql("ALTER TABLE {filters} ADD PRIMARY KEY (id)");
+      db_add_column($ret, 'flood', 'id', 'serial');
+      $ret[] = update_sql("ALTER TABLE {flood} ADD PRIMARY KEY (id)");
+      db_add_column($ret, 'permission', 'id', 'serial');
+      $ret[] = update_sql("ALTER TABLE {permission} ADD PRIMARY KEY (id)");
+      db_add_column($ret, 'term_relation', 'id', 'serial');
+      $ret[] = update_sql("ALTER TABLE {term_relation} ADD PRIMARY KEY (id)");
+      db_add_column($ret, 'term_synonym', 'id', 'serial');
+      $ret[] = update_sql("ALTER TABLE {term_synonym} ADD PRIMARY KEY (id)");
+      break;
+    case 'mysql':
+    case 'mysqli':
+      $ret[] = update_sql("ALTER TABLE {blocks} ADD id int NOT NULL AUTO_INCREMENT PRIMARY KEY");
+      $ret[] = update_sql("ALTER TABLE {filters} ADD id int NOT NULL AUTO_INCREMENT PRIMARY KEY");
+      $ret[] = update_sql("ALTER TABLE {flood} ADD id int NOT NULL AUTO_INCREMENT PRIMARY KEY");
+      $ret[] = update_sql("ALTER TABLE {permission} ADD id int NOT NULL AUTO_INCREMENT PRIMARY KEY");
+      $ret[] = update_sql("ALTER TABLE {term_relation} ADD id int NOT NULL AUTO_INCREMENT PRIMARY KEY");
+      $ret[] = update_sql("ALTER TABLE {term_synonym} ADD id int NOT NULL AUTO_INCREMENT PRIMARY KEY");
+      break;
+  }
+
+  return $ret;
+}
+
+/**
  * @} End of "defgroup updates-5.x-to-6.x"
  * The next series of updates should start at 7000.
  */
