Refactor sqlMode setting to be checking if 'STRICT_TRANS_TABLES' is present or not
authorSeamus Lee <seamuslee001@gmail.com>
Sat, 2 Sep 2017 04:12:53 +0000 (14:12 +1000)
committerSeamus Lee <seamuslee001@gmail.com>
Fri, 27 Oct 2017 09:54:37 +0000 (20:54 +1100)
CRM/Core/DAO.php

index 60ab91ab6430f71259dc6679a546ce6aca8b03d8..1f16248a9d4f9da207e11f8b965258873834a134 100644 (file)
@@ -118,12 +118,12 @@ class CRM_Core_DAO extends DB_DataObject {
     }
     $factory = new CRM_Contact_DAO_Factory();
     CRM_Core_DAO::setFactory($factory);
+    $currentSqlMode = CRM_Core_DAO::singleValueQuery("SELECT @@GLOBAL.sql_mode");
+    $currentModes = explode(',', $currentSqlMode);
     if (CRM_Utils_Constant::value('CIVICRM_MYSQL_STRICT', CRM_Utils_System::isDevelopment())) {
-      if (self::supportsFullGroupBy()) {
-        CRM_Core_DAO::executeQuery("SET SESSION sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES'");
-      }
-      else {
-        CRM_Core_DAO::executeQuery("SET SESSION sql_mode = 'STRICT_TRANS_TABLES'");
+      if (!in_array('STRICT_TRANS_TABLES', $currentModes)) {
+        $modes = array_merge(array('STRICT_TRANS_TABLES'), $currentModes);
+        CRM_Core_DAO::executeQuery("SET SESSION sql_mode = %1", array(1 => array(implode(',', $modes), 'String')));
       }
     }
     CRM_Core_DAO::executeQuery('SET NAMES utf8');
@@ -412,7 +412,7 @@ class CRM_Core_DAO extends DB_DataObject {
    * @return mixed
    */
   public static function supportsFullGroupBy() {
-    return version_compare(CRM_Core_DAO::singleValueQuery('SELECT VERSION()'), '5.7.0', '>=');
+    return version_compare(CRM_Core_DAO::singleValueQuery('SELECT VERSION()'), '5.7', '>=');
   }
 
   /**