Example #1
0
 protected function checkMySQLConfigurations(ConnectionWrapper $con)
 {
     // todo add cache for this test
     $result = $con->query("SELECT VERSION() as version, @@SESSION.sql_mode as session_sql_mode");
     if ($result && ($data = $result->fetch(\PDO::FETCH_ASSOC))) {
         $sessionSqlMode = explode(',', $data['session_sql_mode']);
         if (empty($sessionSqlMode[0])) {
             unset($sessionSqlMode[0]);
         }
         $canUpdate = false;
         // MariaDB is not impacted by this problem
         if (false === strpos($data['version'], 'MariaDB')) {
             // MySQL 5.6+ compatibility
             if (version_compare($data['version'], '5.6.0', '>=')) {
                 // add NO_ENGINE_SUBSTITUTION
                 if (!in_array('NO_ENGINE_SUBSTITUTION', $sessionSqlMode)) {
                     $sessionSqlMode[] = 'NO_ENGINE_SUBSTITUTION';
                     $canUpdate = true;
                     Tlog::getInstance()->addWarning("Add sql_mode NO_ENGINE_SUBSTITUTION. Please configure your MySQL server.");
                 }
                 // remove STRICT_TRANS_TABLES
                 if (($key = array_search('STRICT_TRANS_TABLES', $sessionSqlMode)) !== false) {
                     unset($sessionSqlMode[$key]);
                     $canUpdate = true;
                     Tlog::getInstance()->addWarning("Remove sql_mode STRICT_TRANS_TABLES. Please configure your MySQL server.");
                 }
                 // remove ONLY_FULL_GROUP_BY
                 if (($key = array_search('ONLY_FULL_GROUP_BY', $sessionSqlMode)) !== false) {
                     unset($sessionSqlMode[$key]);
                     $canUpdate = true;
                     Tlog::getInstance()->addWarning("Remove sql_mode ONLY_FULL_GROUP_BY. Please configure your MySQL server.");
                 }
             }
         }
         if (!empty($canUpdate)) {
             if (null === $con->query("SET SESSION sql_mode='" . implode(',', $sessionSqlMode) . "';")) {
                 throw new \RuntimeException('Failed to set MySQL global and session sql_mode');
             }
         }
     } else {
         Tlog::getInstance()->addWarning("Failed to get MySQL version and sql_mode");
     }
 }