Index: modules/taxonomy/taxonomy.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/taxonomy/taxonomy.module,v
retrieving revision 1.427
diff -u -p -r1.427 taxonomy.module
--- modules/taxonomy/taxonomy.module	19 Sep 2008 20:25:03 -0000	1.427
+++ modules/taxonomy/taxonomy.module	24 Sep 2008 17:56:48 -0000
@@ -893,9 +893,26 @@ function taxonomy_get_synonyms($tid) {
 
 /**
  * Return the term object that has the given string as a synonym.
+ *
+ * @param $synonym
+ *   The string to compare against.
+ *
+ * @param $reset
+ *   Whether to reset the internal cache for this synonym.
+ *
+ * @return
+ *   A term object, or FALSE if no matching term is found.
  */
-function taxonomy_get_synonym_root($synonym) {
-  return db_fetch_object(db_query("SELECT * FROM {term_synonym} s, {term_data} t WHERE t.tid = s.tid AND s.name = '%s'", $synonym));
+function taxonomy_get_synonym_root($synonym, $reset = FALSE) {
+  static $synonyms = array();
+
+  if ($reset) {
+    unset($synonyms[$synonym]);
+  }
+  if (!isset($synonyms[$synonym])) {
+    $synonyms[$synonym] = db_query("SELECT * FROM {term_synonym} s, {term_data} t WHERE t.tid = s.tid AND s.name = :name", array(':name' => $synonym))->fetch();
+  }
+  return $synonyms[$synonym];
 }
 
 /**
