Index: feedapi_node.install
===================================================================
--- feedapi_node.install	(Revision 241)
+++ feedapi_node.install	(Arbeitskopie)
@@ -1,54 +1,56 @@
 <?php
 // $Id: feedapi_node.install,v 1.1.2.15 2008/02/29 16:32:07 aronnovak Exp $
 
-
+/**
+ * Implementation of hook_install().
+ */
 function feedapi_node_install() {
   switch ($GLOBALS['db_type']) {
     case 'mysqli':
     case 'mysql':
       db_query("CREATE TABLE {feedapi_node_item} (
         nid int(10) unsigned NOT NULL,
-        url text character set latin1 collate latin1_general_ci NOT NULL,
+        url text NOT NULL,
         `timestamp` int(10) unsigned NOT NULL default '0',
         arrived int(10) unsigned NOT NULL default '0',
-        guid text character set latin1 collate latin1_general_ci NOT NULL,
+        guid text NOT NULL,
         PRIMARY KEY  (nid),
         KEY arrived (arrived),
         KEY url (url(255)),
         KEY guid (guid(255))
-        ) DEFAULT CHARSET=latin1;
-      ");
+      ) /*!40100 DEFAULT CHARACTER SET utf8 */");
       db_query("CREATE TABLE {feedapi_node_item_feed} (
-        `feed_nid` int(10) unsigned NOT NULL default '0',
-        `feed_item_nid` int(10) unsigned NOT NULL default '0',
-        PRIMARY KEY  (`feed_nid`,`feed_item_nid`),
-        KEY `feed_nid` (`feed_nid`),
-        KEY `feed_item_nid` (`feed_item_nid`)
-        ) DEFAULT CHARSET=latin1;
-      ");
+        feed_nid int(10) unsigned NOT NULL default '0',
+        feed_item_nid int(10) unsigned NOT NULL default '0',
+        PRIMARY KEY  (feed_nid, feed_item_nid),
+        KEY feed_nid (feed_nid),
+        KEY feed_item_nid (feed_item_nid)
+      ) /*!40100 DEFAULT CHARACTER SET utf8 */");
       break;
+
     case 'pgsql':
       db_query("CREATE TABLE {feedapi_node_item} (
-        nid integer not null,
-        url text NOT NULL default '',
-        timestamp integer not null,
-        arrived integer not null,
-        guid text NOT NULL default '',
-        PRIMARY KEY(nid))
-      ");
-      db_query("CREATE INDEX {feedapi_node_item}_arrived_idx ON {feedapi_node_item} (arrived)");
-      db_query("CREATE INDEX url_index on {feedapi_node_item}(url)");
-      db_query("CREATE INDEX guid_index on {feedapi_node_item}(guid)");
+        nid integer NOT NULL,
+        url text NOT NULL,
+        timestamp integer NOT NULL,
+        arrived integer NOT NULL,
+        guid text NOT NULL,
+        PRIMARY KEY (nid)
+      )");
+      db_query("CREATE INDEX {feedapi_node_item}_arrived_idx ON {feedapi_node_item}(arrived)");
+      db_query("CREATE INDEX {feedapi_node_item}_url_idx ON {feedapi_node_item}(url)");
+      db_query("CREATE INDEX {feedapi_node_item}_guid_idx ON {feedapi_node_item}(guid)");
       db_query("CREATE TABLE {feedapi_node_item_feed} (
         feed_nid integer NOT NULL default '0',
         feed_item_nid integer NOT NULL default '0',
-        PRIMARY KEY  (feed_nid,feed_item_nid))
-      ");
-      db_query("CREATE INDEX feed_nid_index on {feedapi_node_item_feed}(feed_nid)");
-      db_query("CREATE INDEX feed_item_nid_index on {feedapi_node_item_feed}(feed_item_nid)");
+        PRIMARY KEY (feed_nid, feed_item_nid)
+      )");
+      db_query("CREATE INDEX {feedapi_node_item_feed}_feed_nid_idx ON {feedapi_node_item_feed}(feed_nid)");
+      db_query("CREATE INDEX {feedapi_node_item_feed}_feed_item_nid_idx ON {feedapi_node_item_feed}(feed_item_nid)");
       break;
   }
-  // Creating the content-types for the FeedAPI
+
+  // Create the content type.
   $info->type = 'feedapi_node';
   $info->name = t('Feed');
   $info->description = t('Aggregates RSS or Atom feeds. Items from these feeds will be turned into nodes.');
@@ -60,11 +62,10 @@ function feedapi_node_install() {
   $info->min_word_count = 0;
   $info->custom = TRUE;
   node_type_save($info);
-  // Adding default FeedAPI settings
+
+  // Add default FeedAPI settings.
   $preset = unserialize('a:3:{s:7:"enabled";s:1:"1";s:12:"items_delete";s:1:"0";s:10:"processors";a:1:{s:12:"feedapi_node";a:7:{s:7:"enabled";s:1:"1";s:6:"weight";s:1:"0";s:12:"content_type";s:5:"story";s:9:"node_date";s:4:"feed";s:7:"promote";s:1:"0";s:9:"list_feed";s:1:"3";s:4:"user";s:5:"admin";}}}');
-  if (is_array(variable_get('feedapi_settings_feedapi_node', FALSE))) {
-    $preset = array_merge($preset, variable_get('feedapi_settings_feedapi_node', FALSE));
-  }
+  $preset = array_merge($preset, variable_get('feedapi_settings_feedapi_node', array()));
   variable_set('feedapi_settings_feedapi_node', $preset);
 }
 
@@ -119,29 +120,27 @@ function feedapi_node_update_2() {
 
 /**
  * Create and populate feed_nid / feed_item_nid table.
- *
  */
 function feedapi_node_update_3() {
   switch ($GLOBALS['db_type']) {
   case 'mysqli':
   case 'mysql':
     $ret[] = update_sql("CREATE TABLE IF NOT EXISTS {feedapi_node_item_feed} (
-      `feed_nid` int(10) unsigned NOT NULL default '0',
-      `feed_item_nid` int(10) unsigned NOT NULL default '0',
-      PRIMARY KEY  (`feed_nid`,`feed_item_nid`),
-      KEY `feed_nid` (`feed_nid`),
-      KEY `feed_item_nid` (`feed_item_nid`)
-      ) DEFAULT CHARSET=latin1;
-    ");
+      feed_nid int(10) unsigned NOT NULL default '0',
+      feed_item_nid int(10) unsigned NOT NULL default '0',
+      PRIMARY KEY  (feed_nid, feed_item_nid),
+      KEY feed_nid (feed_nid),
+      KEY feed_item_nid (feed_item_nid)
+    ) /*!40100 DEFAULT CHARACTER SET utf8 */");
     $ret[] = update_sql("REPLACE INTO {feedapi_node_item_feed} (feed_nid, feed_item_nid) SELECT feed_nid, nid FROM {feedapi_node_item}");
-    $ret[] = update_sql("ALTER TABLE {feedapi_node_item} DROP `feed_nid`");
+    $ret[] = update_sql("ALTER TABLE {feedapi_node_item} DROP feed_nid");
     break;
   case 'pgsql':
     $ret[] = update_sql("CREATE TABLE {feedapi_node_item_feed} (
       feed_nid integer NOT NULL default '0',
       feed_item_nid integer NOT NULL default '0',
-      PRIMARY KEY  (feed_nid,feed_item_nid))
-    ");
+      PRIMARY KEY (feed_nid, feed_item_nid)
+    )");
     $ret[] = update_sql("CREATE INDEX feed_item_nid_index on {feedapi_node_item_feed}(feed_item_nid)");
     $ret[] = update_sql("INSERT INTO {feedapi_node_item_feed} (feed_nid, feed_item_nid) SELECT feed_nid, nid FROM {feedapi_node_item}");
     $ret[] = update_sql("ALTER TABLE {feedapi_node_item} DROP feed_nid");
@@ -151,7 +150,7 @@ function feedapi_node_update_3() {
 }
 
 /**
- * Drop unwanted fiid field
+ * Drop unwanted fiid field.
  */
 function feedapi_node_update_4() {
   $ret = array();
@@ -160,30 +159,65 @@ function feedapi_node_update_4() {
 }
 
 /**
- * Fix missing index in the case of postgres database
+ * Fix missing index for postgres.
  */
 function feedapi_node_update_5() {
   $ret = array();
   switch ($GLOBALS['db_type']) {
-    case 'mysqli':
-    case 'mysql':
-      break;
     case 'pgsql':
-      db_query("CREATE INDEX {feedapi_node_item}_arrived_idx ON {feedapi_node_item} (arrived)");
+      db_query("CREATE INDEX {feedapi_node_item}_arrived_idx ON {feedapi_node_item}(arrived)");
       break;
   }
   return $ret;
 }
 
-function feedapi_node_uninstall() {
+/**
+ * Fix index names for postgres.
+ */
+function feedapi_node_update_6() {
+  $ret = array();
   switch ($GLOBALS['db_type']) {
-    case 'mysqli':
-    case 'mysql':
     case 'pgsql':
-      db_query("DROP TABLE {feedapi_node_item}");
-      db_query("DROP TABLE {feedapi_node_item_feed}");
+      $ret[] = update_sql("ALTER INDEX url_index RENAME TO {feedapi_node_item}_url_idx");
+      $ret[] = update_sql("ALTER INDEX guid_index RENAME TO {feedapi_node_item}_guid_idx");
+      $ret[] = update_sql("ALTER INDEX feed_nid_index RENAME TO {feedapi_node_item}_feed_nid_idx");
+      $ret[] = update_sql("ALTER INDEX feed_item_nid_index RENAME TO {feedapi_node_item}_feed_item_nid_idx");
       break;
   }
+  return $ret;
+}
+
+/**
+ * Fix table character encoding.
+ */
+function feedapi_node_update_7() {
+  // _system_update_utf8() won't do anything when the database already uses
+  // UTF-8. Since we know that the tables have been created using the wrong
+  // encoding, we need to manually convert them, if the database supports it.
+  switch ($GLOBALS['db_type']) {
+    case 'mysqli':
+      break;
+    case 'mysql':
+      if (version_compare(mysql_get_server_info($GLOBALS['active_db']), '4.1.0', '<')) {
+        return array();
+      }
+      break;
+    case 'pgsql':
+      return array();
+  }
+  $ret = array();
+  foreach (array('feedapi_node_item', 'feedapi_node_item_feed') as $table) {
+    $ret = array_merge($ret, update_convert_table_utf8($table));
+  }
+  return $ret;
+}
+
+/**
+ * Implementation of hook_uninstall().
+ */
+function feedapi_node_uninstall() {
+  db_query("DROP TABLE {feedapi_node_item}");
+  db_query("DROP TABLE {feedapi_node_item_feed}");
   node_type_delete('feedapi_node');
   variable_del('feedapi_settings_feedapi_node');
   menu_rebuild();
