From 434e2e0e0c6d60bea1c4e44670fe1e27c119d1db Mon Sep 17 00:00:00 2001 From: Seamus Lee Date: Mon, 17 Apr 2017 09:52:39 +1000 Subject: [PATCH] CRM-20427 Fix regex issue with I18n query rewrite --- CRM/Core/I18n/Schema.php | 2 +- tests/phpunit/CRM/Core/I18n/SchemaTest.php | 29 +++++++++++++--------- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/CRM/Core/I18n/Schema.php b/CRM/Core/I18n/Schema.php index a1fd8be68d..06a4ab9ae5 100644 --- a/CRM/Core/I18n/Schema.php +++ b/CRM/Core/I18n/Schema.php @@ -368,7 +368,7 @@ class CRM_Core_I18n_Schema { // CRM-19093 // should match the civicrm table name such as: civicrm_event // but must not match the table name if it's a substring of another table: civicrm_events_in_cart - $query = preg_replace("/([^'\"])({$table})([^a-z_'\"])/", "\\1\\2{$dbLocale}\\3", $query); + $query = preg_replace("/([^'\"])({$table})($|[^a-z_'\"])/", "\\1\\2{$dbLocale}\\3", $query); } // uncomment the below to rewrite the civicrm_value_* queries // $query = preg_replace("/(civicrm_value_[a-z0-9_]+_\d+)([^_])/", "\\1{$dbLocale}\\2", $query); diff --git a/tests/phpunit/CRM/Core/I18n/SchemaTest.php b/tests/phpunit/CRM/Core/I18n/SchemaTest.php index d040a6f9ec..12e1ee7bfb 100644 --- a/tests/phpunit/CRM/Core/I18n/SchemaTest.php +++ b/tests/phpunit/CRM/Core/I18n/SchemaTest.php @@ -25,10 +25,10 @@ +--------------------------------------------------------------------+ */ /** - * Class CRM_Member_BAO_MembershipTypeTest + * Class CRM_Core_I18n_SchemaTest * @group headless */ -class CRM_Core_118n_SchemaTest extends CiviUnitTestCase { +class CRM_Core_I18n_SchemaTest extends CiviUnitTestCase { /** * Test tables to translate @@ -49,7 +49,7 @@ class CRM_Core_118n_SchemaTest extends CiviUnitTestCase { public function tearDown() { CRM_Core_I18n_Schema::makeSinglelingual('en_US'); parent::tearDown(); - } + } /** * @param string $table @@ -57,14 +57,19 @@ class CRM_Core_118n_SchemaTest extends CiviUnitTestCase { * * @dataProvider translateTables */ - public function testI18nSchemaRewrite($table, $expectedRewrite) { - CRM_Core_I18n_Schema::makeMultilingual('en_US'); - $query = "Select * FROM {$table}"; - $new_query = CRM_Core_I18n_Schema::rewriteQuery($query); - $this->assertEquals("Select * FROM {$expectedRewrite}", $new_query); - $query2 = "Select * FROM {$table} LIMIT 1"; - $new_query2 = CRM_Core_I18n_Schema::rewriteQuery($query2); - $this->assertEquals("Select * FROM {$expectedRewrite} LIMIT 1", $new_query2); - } + public function testI18nSchemaRewrite($table, $expectedRewrite) { + CRM_Core_I18n_Schema::makeMultilingual('en_US'); + global $dbLocale; + $dbLocale = '_en_US'; + $query = "Select * FROM {$table}"; + $new_query = CRM_Core_I18n_Schema::rewriteQuery($query); + $this->assertEquals("Select * FROM {$expectedRewrite}", $new_query); + $query2 = "Select * FROM {$table} LIMIT 1"; + $new_query2 = CRM_Core_I18n_Schema::rewriteQuery($query2); + $this->assertEquals("Select * FROM {$expectedRewrite} LIMIT 1", $new_query2); + $query3 = "SELECT * FROM {$table} JOIN civicrm_contact LIMIT 1"; + $new_query3 = CRM_Core_I18n_Schema::rewriteQuery($query3); + $this->assertEquals("SELECT * FROM {$expectedRewrite} JOIN civicrm_contact LIMIT 1", $new_query3); + } } -- 2.25.1