CRM-12056 - Avoid SQL error during pre-install check on older version of MySQL
authorTim Otten <totten@civicrm.org>
Fri, 8 Mar 2013 12:11:40 +0000 (07:11 -0500)
committerTim Otten <totten@civicrm.org>
Fri, 8 Mar 2013 12:17:21 +0000 (07:17 -0500)
CRM/Core/DAO.php
CRM/Upgrade/Form.php
install/index.php

index e54678e1a0fbf55c70073e1e13797c3b2050a92b..1eb3f9e89510efeb6f4d48610bd38951d1d342d2 100644 (file)
@@ -743,7 +743,7 @@ FROM   civicrm_domain
    * @static
    * @access public
    */
-  static function getFieldValue($daoName, $searchValue, $returnColumn = 'name', $searchColumn = 'id', $force = false) {
+  static function getFieldValue($daoName, $searchValue, $returnColumn = 'name', $searchColumn = 'id', $force = FALSE) {
     if (
       empty($searchValue) ||
       trim(strtolower($searchValue)) == 'null'
@@ -1315,7 +1315,7 @@ SELECT contact_id
             }
             if(in_array($FKClassName, CRM_Core_DAO::$_testEntitiesToSkip)){
               $depObject = new $FKClassName();
-              $depObject->find(true);
+              $depObject->find(TRUE);
             } elseif ($daoName == 'CRM_Member_DAO_MembershipType' && $name == 'member_of_contact_id') {
               // FIXME: the fields() metadata is not specific enough
               $depObject = CRM_Core_DAO::createTestObject($FKClassName, array('contact_type' => 'Organization'));
@@ -1712,5 +1712,24 @@ SELECT contact_id
 
     return (empty($errors)) ? FALSE : TRUE;
   }
+
+  /**
+   * Lookup the value of a MySQL global configuration variable.
+   *
+   * @param string $name e.g. "thread_stack"
+   * @param mixed $default
+   * @return mixed
+   */
+  public static function getGlobalSetting($name, $default = NULL) {
+    // Alternatively, SELECT @@GLOBAL.thread_stack, but
+    // that has been reported to fail under MySQL 5.0 for OS X
+    $escapedName = self::escapeString($name);
+    $dao = CRM_Core_DAO::executeQuery("SHOW VARIABLES LIKE '$escapedName'");
+    if ($dao->fetch()) {
+      return $dao->Value;
+    } else {
+      return $default;
+    }
+  }
 }
 
index 035265cb31b7d986e192b662318b88d7c9714776..d14e918b4bc9917b7efdc08b556cca59d06efc30 100644 (file)
@@ -403,8 +403,8 @@ SET    version = '$version'
       $error = ts('CiviCRM %1 requires MySQL trigger privileges.',
                array(1 => $latestVer));
     }
-    
-    if (CRM_Core_DAO::singleValueQuery('SELECT @@GLOBAL.thread_stack') < (1024*self::MINIMUM_THREAD_STACK)) {
+
+    if (CRM_Core_DAO::getGlobalSetting('thread_stack', 0) < (1024*self::MINIMUM_THREAD_STACK)) {
       $error = ts('CiviCRM %1 requires MySQL thread stack >= %2k', array(
         1 => $latestVer,
         2 => self::MINIMUM_THREAD_STACK,
index 8d744247e088925ed38aae4479ae4f83575dfff6..8272ac4bd1c88e3b399d4e146ef68a1ef7f522dc 100644 (file)
@@ -904,14 +904,14 @@ class InstallRequirements {
       return;
     }
 
-    $result = mysql_query('SELECT @@GLOBAL.thread_stack', $conn); // bytes => kb
+    $result = mysql_query("SHOW VARIABLES LIKE 'thread_stack'", $conn); // bytes => kb
     if (!$result) {
       $testDetails[2] = 'Could not query thread_stack.';
       $this->error($testDetails);
     } else {
       $values = mysql_fetch_row($result);
-      if ($values[0] < (1024*$minValueKB)) {
-        $testDetails[2] = 'MySQL "thread_stack" is ' . ($values[0]/1024) . 'k';
+      if ($values[1] < (1024*$minValueKB)) {
+        $testDetails[2] = 'MySQL "thread_stack" is ' . ($values[1]/1024) . 'k';
         $this->error($testDetails);
       }
     }