/** * Initialize the DAO object. * * @param string $dsn * The database connection string. */ public static function init($dsn) { Civi::$statics[__CLASS__]['init'] = 1; $options =& PEAR::getStaticProperty('DB_DataObject', 'options'); $options['database'] = $dsn; if (defined('CIVICRM_DAO_DEBUG')) { self::DebugLevel(CIVICRM_DAO_DEBUG); } CRM_Core_DAO::setFactory(new CRM_Contact_DAO_Factory()); if (CRM_Utils_Constant::value('CIVICRM_MYSQL_STRICT', CRM_Utils_System::isDevelopment())) { 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'))); }
/** * @return NULL|string */ public function getFile() { if ($this->file === NULL) { $prefix = 'trigger' . \CRM_Utils_Request::id(); $config = \CRM_Core_Config::singleton(); $this->file = "{$config->configAndLogDir}CiviCRM." . $prefix . md5($config->dsn) . '.sql'; } return $this->file; }
/** * @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>"; } } } } }