Index: modules/system/system.install
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system.install,v
retrieving revision 1.103
diff -u -F^f -r1.103 system.install
--- modules/system/system.install	9 May 2007 11:39:23 -0000	1.103
+++ modules/system/system.install	9 May 2007 15:55:48 -0000
@@ -200,6 +200,7 @@ function system_install() {
       ) /*!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 '',
@@ -210,7 +211,8 @@ function system_install() {
         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} (
@@ -315,17 +317,21 @@ function system_install() {
       ) /*!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} (
@@ -389,7 +395,8 @@ function system_install() {
         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)),
@@ -457,9 +464,11 @@ function system_install() {
       ) /*!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 */ ");
 
@@ -547,15 +556,19 @@ function system_install() {
       ) /*!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 */ ");
@@ -685,6 +698,7 @@ function system_install() {
       db_query("CREATE INDEX {batch}_sid_idx ON {batch} (sid)");
 
       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 '',
@@ -695,7 +709,8 @@ function system_install() {
         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} (
@@ -800,17 +815,21 @@ function system_install() {
       )");
 
       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} (
@@ -875,7 +894,8 @@ function system_install() {
         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))");
@@ -943,9 +963,11 @@ function system_install() {
       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)");
 
@@ -1034,15 +1056,19 @@ function system_install() {
       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))");
@@ -1117,8 +1143,8 @@ function system_install() {
   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\";')");
 
@@ -3873,6 +3899,47 @@ function system_update_6013() {
   system_theme_data();
 }
 
+/**
+ * Make {node}'s primary key be nid, change nid,vid to a unique key.
+ * Add primary keys to block, filters, flood, permission, and term_relation.
+ */
+function system_update_6014() {
+  $ret = array();
+
+  switch ($GLOBALS['db_type']) {
+    case 'pgsql':
+      $ret[] = update_sql("ALTER TABLE {node} DROP CONSTRAINT {node}_pkey");
+      $ret[] = update_sql("ALTER TABLE {node} ADD PRIMARY KEY (nid)");
+      $ret[] = update_sql("ALTER TABLE {node} ADD CONSTRAINT {node}_nid_vid_key UNIQUE (nid, vid)");
+      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 {node} DROP PRIMARY KEY');
+      $ret[] = update_sql('ALTER TABLE {node} ADD PRIMARY KEY (nid)');
+      $ret[] = update_sql('ALTER TABLE {node} ADD UNIQUE KEY nid_vid (nid, vid)');
+      $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"
