NFC Test using ONLY_FULL_GROUP_BY sqlmode as well
authorSeamus Lee <seamuslee001@gmail.com>
Fri, 1 Sep 2017 22:56:57 +0000 (08:56 +1000)
committerSeamus Lee <seamuslee001@gmail.com>
Fri, 27 Oct 2017 09:54:37 +0000 (20:54 +1100)
CRM/Core/DAO.php

index c6d3156b8027863cca04740767d549ab844c24d5..60ab91ab6430f71259dc6679a546ce6aca8b03d8 100644 (file)
@@ -119,7 +119,12 @@ class CRM_Core_DAO extends DB_DataObject {
     $factory = new CRM_Contact_DAO_Factory();
     CRM_Core_DAO::setFactory($factory);
     if (CRM_Utils_Constant::value('CIVICRM_MYSQL_STRICT', CRM_Utils_System::isDevelopment())) {
-      CRM_Core_DAO::executeQuery('SET SESSION sql_mode = STRICT_TRANS_TABLES');
+      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'");
+      }
     }
     CRM_Core_DAO::executeQuery('SET NAMES utf8');
     CRM_Core_DAO::executeQuery('SET @uniqueID = %1', array(1 => array(CRM_Utils_Request::id(), 'String')));
@@ -402,6 +407,14 @@ class CRM_Core_DAO extends DB_DataObject {
     }
   }
 
+  /**
+   * Does this System support the MYSQL mode ONLY_FULL_GROUP_BY
+   * @return mixed
+   */
+  public static function supportsFullGroupBy() {
+    return version_compare(CRM_Core_DAO::singleValueQuery('SELECT VERSION()'), '5.7.0', '>=');
+  }
+
   /**
    * Defines the default key as 'id'.
    *