/** * @param string|NULL $dsn * Use NULL to load the default/active connection from CRM_Core_DAO. * Otherwise, give a full DSN string. * @param string $fileName * @param null $prefix * @param bool $isQueryString * @param bool $dieOnErrors */ public static function sourceSQLFile($dsn, $fileName, $prefix = NULL, $isQueryString = FALSE, $dieOnErrors = TRUE) { if ($dsn === NULL) { $db = CRM_Core_DAO::getConnection(); } else { require_once 'DB.php'; $db = DB::connect($dsn); } if (PEAR::isError($db)) { die("Cannot open {$dsn}: " . $db->getMessage()); } if (CRM_Utils_Constant::value('CIVICRM_MYSQL_STRICT', CRM_Utils_System::isDevelopment())) { $db->query('SET SESSION sql_mode = STRICT_TRANS_TABLES'); } $db->query('SET NAMES utf8'); $transactionId = CRM_Utils_Type::escape(CRM_Utils_Request::id(), 'String'); $db->query('SET @uniqueID = ' . "'{$transactionId}'"); if (!$isQueryString) { $string = $prefix . file_get_contents($fileName); } else { // use filename as query string $string = $prefix . $fileName; } // get rid of comments starting with # and -- $string = preg_replace("/^#[^\n]*\$/m", "\n", $string); $string = preg_replace("/^(--[^-]).*/m", "\n", $string); $queries = preg_split('/;\\s*$/m', $string); foreach ($queries as $query) { $query = trim($query); if (!empty($query)) { CRM_Core_Error::debug_query($query); $res =& $db->query($query); if (PEAR::isError($res)) { if ($dieOnErrors) { die("Cannot execute {$query}: " . $res->getMessage()); } else { echo "Cannot execute {$query}: " . $res->getMessage() . "<p>"; } } } } }