Ejemplo n.º 1
0
 /**
  * @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>";
                 }
             }
         }
     }
 }