function system_update_6005

6.x system.install system_update_6005()

Add language to url_alias table and modify indexes.

Related topics

File

drupal-6.x/modules/system/system.install, line 1280

Code

function system_update_6005() {
  $ret = array();
  switch ($GLOBALS['db_type']) {
    case 'pgsql':
      db_add_column($ret, 'url_alias', 'language', 'varchar(12)', array('default' => "''", 'not null' => TRUE));

      // As of system.install:1.85 (before the new language
      // subsystem), new installs got a unique key named
      // url_alias_dst_key on url_alias.dst.  Unfortunately,
      // system_update_162 created a unique key inconsistently named
      // url_alias_dst_idx on url_alias.dst (keys should have the _key
      // suffix, indexes the _idx suffix).  Therefore, sites installed
      // before system_update_162 have a unique key with a different
      // name than sites installed after system_update_162().  Now, we
      // want to drop the unique key on dst which may have either one
      // of two names and create a new unique key on (dst, language).
      // There is no way to know which key name exists so we have to
      // drop both, causing an SQL error.  Thus, we just hide the
      // error and only report the update_sql results that work.
      $err = error_reporting(0);
      $ret1 = update_sql('DROP INDEX {url_alias}_dst_idx');
      if ($ret1['success']) {
        $ret[] = $ret1;
      }
      $ret1 = array();
      db_drop_unique_key($ret, 'url_alias', 'dst');
      foreach ($ret1 as $r) {
        if ($r['success']) {
          $ret[] = $r;
        }
      }
      error_reporting($err);

      $ret[] = update_sql('CREATE UNIQUE INDEX {url_alias}_dst_language_idx ON {url_alias}(dst, language)');
      break;
    case 'mysql':
    case 'mysqli':
      $ret[] = update_sql("ALTER TABLE {url_alias} ADD language varchar(12) NOT NULL default ''");
      $ret[] = update_sql("ALTER TABLE {url_alias} DROP INDEX dst");
      $ret[] = update_sql("ALTER TABLE {url_alias} ADD UNIQUE dst_language (dst, language)");
      break;
  }
  return $ret;
}