[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)) {