Index: includes/path.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/path.inc,v retrieving revision 1.19.2.2 diff -u -p -r1.19.2.2 path.inc --- includes/path.inc 16 Dec 2009 17:35:11 -0000 1.19.2.2 +++ includes/path.inc 3 Jan 2010 22:09:18 -0000 @@ -66,7 +66,7 @@ function drupal_lookup_path($action, $pa return $map[$path_language][$path]; } // Get the most fitting result falling back with alias without language - $alias = db_result(db_query("SELECT dst FROM {url_alias} WHERE src = '%s' AND language IN('%s', '') ORDER BY language DESC", $path, $path_language)); + $alias = db_result(db_query("SELECT dst FROM {url_alias} WHERE src = '%s' AND language IN('%s', '') ORDER BY language DESC, pid DESC", $path, $path_language)); $map[$path_language][$path] = $alias; return $alias; } @@ -77,7 +77,7 @@ function drupal_lookup_path($action, $pa $src = ''; if (!isset($map[$path_language]) || !($src = array_search($path, $map[$path_language]))) { // Get the most fitting result falling back with alias without language - if ($src = db_result(db_query("SELECT src FROM {url_alias} WHERE dst = '%s' AND language IN('%s', '') ORDER BY language DESC", $path, $path_language))) { + if ($src = db_result(db_query("SELECT src FROM {url_alias} WHERE dst = '%s' AND language IN('%s', '') ORDER BY language DESC, pid DESC", $path, $path_language))) { $map[$path_language][$src] = $path; } else { Index: modules/system/system.install =================================================================== RCS file: /cvs/drupal/drupal/modules/system/system.install,v retrieving revision 1.238.2.19 diff -u -p -r1.238.2.19 system.install --- modules/system/system.install 6 Nov 2009 08:39:46 -0000 1.238.2.19 +++ modules/system/system.install 3 Jan 2010 22:09:19 -0000 @@ -1100,9 +1100,9 @@ function system_schema() { 'not null' => TRUE, 'default' => '') ), - 'unique keys' => array('dst_language' => array('dst', 'language')), + 'unique keys' => array('dst_language_pid' => array('dst', 'language', 'pid')), 'primary key' => array('pid'), - 'indexes' => array('src_language' => array('src', 'language')), + 'indexes' => array('src_language_pid' => array('src', 'language', 'pid')), ); return $schema; @@ -2623,6 +2623,18 @@ function system_update_6053() { } /** + * Improve indexes on the {url_alias} table. + */ +function system_update_6054() { + $ret = array(); + db_drop_index($ret, 'url_alias', 'src_language'); + db_drop_unique_key($ret, 'url_alias', 'dst_language'); + db_add_index($ret, 'url_alias', 'src_language_pid', array('src', 'language', 'pid')); + db_add_unique_key($ret, 'url_alias', 'dst_language_pid', array('dst', 'language', 'pid')); + return $ret; +} + +/** * @} End of "defgroup updates-6.x-extra" * The next series of updates should start at 7000. */