[272171] Index the string value for faster syncup
diff --git a/babel-setup.sql b/babel-setup.sql
index 08fdf35..379835c 100644
--- a/babel-setup.sql
+++ b/babel-setup.sql
@@ -228,6 +228,7 @@
   CONSTRAINT `strings_ibfk_2` FOREIGN KEY (`userid`) REFERENCES `users` (`userid`) ON UPDATE CASCADE
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 
+CREATE INDEX idx_value ON strings(value(40));
 
 DELIMITER ;;
 CREATE TRIGGER `upd_string` AFTER UPDATE ON `strings` FOR EACH ROW 
diff --git a/classes/export/generate1.php b/classes/export/generate1.php
index b42a8f4..c021813 100755
--- a/classes/export/generate1.php
+++ b/classes/export/generate1.php
@@ -110,12 +110,14 @@
 	exec("mkdir ${output_dir_for_train}plugins/");
 
 	fwrite($language_pack_links_file, "\n\t<h3>Release Train: $train_id</h3>\n\t<ul>");
-
-	$language_result = mysql_query("SELECT language_id, iso_code, IF(locale <> '', CONCAT(CONCAT(CONCAT(name, ' ('), locale), ')'), name) as name, is_active, IF(language_id = 1,1,0) AS sorthack FROM languages ORDER BY sorthack, name ASC");
+	
+	$sql = "SELECT language_id, iso_code, IF(locale <> '', CONCAT(CONCAT(CONCAT(name, ' ('), locale), ')'), name) as name, is_active, IF(language_id = 1,1,0) AS sorthack FROM languages ORDER BY sorthack, name ASC";
+	$language_result = mysql_query($sql);
 	if($language_result === FALSE) {
 		# we may have lost the database connection.with our shell-outs
 		# bug 271685
 		$dbh = $dbc->connect();
+		$language_result = mysql_query($sql);
 	}
 	while (($language_row = mysql_fetch_assoc($language_result)) != null) {
 		$language_name = $language_row['name'];
diff --git a/classes/export/import_from_csv.php b/classes/export/import_from_csv.php
index 80a210e..fde7ec6 100644
--- a/classes/export/import_from_csv.php
+++ b/classes/export/import_from_csv.php
@@ -69,7 +69,7 @@
 $handle = fopen($csv_file, "r");
 while (($data = fgetcsv($handle)) !== FALSE) {
 	$sql = <<<SQL
-SELECT s.string_id FROM files AS f INNER JOIN strings AS s ON f.file_id = s.file_id INNER JOIN release_train_projects as v ON (f.project_id = v.project_id AND f.version = v.version) WHERE f.is_active AND s.non_translatable <> 1 AND s.name = '$data[0]' AND BINARY s.value = '$data[1]' AND v.train_id = '$release_train_id'
+SELECT s.string_id FROM files AS f INNER JOIN strings AS s ON f.file_id = s.file_id INNER JOIN release_train_projects as v ON (f.project_id = v.project_id AND f.version = v.version) WHERE f.is_active AND s.non_translatable <> 1 AND s.name = '$data[0]' AND s.value = BINARY '$data[1]' AND v.train_id = '$release_train_id'
 
 SQL;
     $values = mysql_query($sql);
diff --git a/classes/export/syncup.php b/classes/export/syncup.php
index 44aa55d..4823559 100644
--- a/classes/export/syncup.php
+++ b/classes/export/syncup.php
@@ -47,7 +47,7 @@
     	$count++;
     	
     	if($count % 100 == 0) {
-    		echo "Processed " . $count . " strings...\n";
+    		echo "Processed " . $count . " strings (language_id=$language_id)... \n";
     	}
     	
 		$untranslated_value = $string_row['value'];
@@ -56,7 +56,8 @@
 		# This query split in two for added performance.
 		# See bug 270485
 		$string_ids = "";
-		$rs = mysql_query( "SELECT s.string_id FROM strings AS s WHERE BINARY s.value = '" . addslashes($untranslated_value) . "'");
+		# BINARY the lookup value instead of the field to support an index
+		$rs = mysql_query( "SELECT s.string_id FROM strings AS s WHERE s.value = BINARY '" . addslashes($untranslated_value) . "'");
 		while ( ($row = mysql_fetch_assoc($rs)) != null) {
 			if(strlen($string_ids) > 0) {
 				$string_ids .= ",";
diff --git a/classes/string/string.class.php b/classes/string/string.class.php
index 6ba826b..d4ae683 100755
--- a/classes/string/string.class.php
+++ b/classes/string/string.class.php
@@ -84,7 +84,7 @@
 				FROM 
 					strings
 				WHERE file_id = " . sqlSanitize($_file_id, $dbh) . "
-					AND BINARY(name) = " . returnQuotedString(sqlSanitize($_name, $dbh));	
+					AND name = BINARY " . returnQuotedString(sqlSanitize($_name, $dbh));	
 
 			$result = mysql_query($sql, $dbh);
 			if($result && mysql_num_rows($result) > 0) {
diff --git a/html/query.php b/html/query.php
index 7698839..39c53da 100644
--- a/html/query.php
+++ b/html/query.php
@@ -35,7 +35,7 @@
 	"SELECT t.value 
 		from strings As s inner join translations AS t on s.string_id = t.string_id
 					inner join languages As l on l.language_id = t.language_id
-					where BINARY s.value = '" . addslashes($value) . "' 
+					where s.value = BINARY '" . addslashes($value) . "' 
 					and l.iso_code = '" . addslashes($nl) . "' ");
 		
 if ($possible_translations and (($translation_row = mysql_fetch_assoc($possible_translations)) != null)) {