From 33092c897f267588ef7401f860908b033d594a34 Mon Sep 17 00:00:00 2001 From: Steve Binkowski Date: Fri, 8 Jan 2016 15:19:13 -0500 Subject: [PATCH] CRM-17748 Expose options['result_buffering'] to CRM_Core_DAO --- CRM/Contact/BAO/Query.php | 6 ++++- CRM/Contact/Selector.php | 9 +++---- CRM/Core/DAO.php | 49 +++++++++++++++++++++++++++++++++++++-- 3 files changed, 57 insertions(+), 7 deletions(-) diff --git a/CRM/Contact/BAO/Query.php b/CRM/Contact/BAO/Query.php index 2eb403bbd7..86824678e5 100644 --- a/CRM/Contact/BAO/Query.php +++ b/CRM/Contact/BAO/Query.php @@ -42,6 +42,7 @@ class CRM_Contact_BAO_Query { * @var int */ const + NO_RETURN_PROPERTIES = 'CRM_Contact_BAO_Query::NO_RETURN_PROPERTIES', MODE_CONTACTS = 1, MODE_CONTRIBUTE = 2, MODE_MEMBER = 8, @@ -419,7 +420,10 @@ class CRM_Contact_BAO_Query { $this->_params = array(); } - if (empty($returnProperties)) { + if ($returnProperties === self::NO_RETURN_PROPERTIES) { + $this->_returnProperties = array(); + } + elseif (empty($returnProperties)) { $this->_returnProperties = self::defaultReturnProperties($mode); } else { diff --git a/CRM/Contact/Selector.php b/CRM/Contact/Selector.php index ec7d494423..70159ee552 100644 --- a/CRM/Contact/Selector.php +++ b/CRM/Contact/Selector.php @@ -1221,15 +1221,16 @@ SELECT DISTINCT 'civicrm_contact', contact_a.id, contact_a.id, '$cacheKey', cont if (!$displayRelationshipType) { $query = new CRM_Contact_BAO_Query($params, - $this->_returnProperties, - NULL, FALSE, FALSE, 1, + CRM_Contact_BAO_Query::NO_RETURN_PROPERTIES, + array('contact_id'), FALSE, FALSE, 1, FALSE, TRUE, TRUE, NULL, $queryOperator ); } else { - $query = new CRM_Contact_BAO_Query($params, $this->_returnProperties, - NULL, FALSE, FALSE, 1, + $query = new CRM_Contact_BAO_Query($params, + CRM_Contact_BAO_Query::NO_RETURN_PROPERTIES, + array('contact_id'), FALSE, FALSE, 1, FALSE, TRUE, TRUE, $displayRelationshipType, $queryOperator ); diff --git a/CRM/Core/DAO.php b/CRM/Core/DAO.php index dd77b7fb23..631df91cf9 100644 --- a/CRM/Core/DAO.php +++ b/CRM/Core/DAO.php @@ -71,6 +71,12 @@ class CRM_Core_DAO extends DB_DataObject { static $_checkedSqlFunctionsExist = FALSE; + /** + * https://issues.civicrm.org/jira/browse/CRM-17748 + * internal variable for DAO to hold per-query settings + */ + protected $_options = array(); + /** * Class constructor. * @@ -315,12 +321,20 @@ class CRM_Core_DAO extends DB_DataObject { */ public function query($query, $i18nRewrite = TRUE) { // rewrite queries that should use $dbLocale-based views for multi-language installs - global $dbLocale; + global $dbLocale, $_DB_DATAOBJECT; + + $conn = &$_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]; + $orig_options = $conn->options; + $this->_setDBOptions($this->_options); + if ($i18nRewrite and $dbLocale) { $query = CRM_Core_I18n_Schema::rewriteQuery($query); } - return parent::query($query); + $ret = parent::query($query); + + $this->_setDBOptions($orig_options); + return $ret; } /** @@ -2401,6 +2415,37 @@ SELECT contact_id } /** + * https://issues.civicrm.org/jira/browse/CRM-17748 + * Sets the internal options to be used on a query + * + * @param array $options + * + */ + function setOptions($options) { + if (is_array($options)) { + $this->_options = $options; + } + } + + /** + * https://issues.civicrm.org/jira/browse/CRM-17748 + * wrapper to pass internal DAO options down to DB_mysql/DB_Common level + * + * @param array $options + * + */ + protected function _setDBOptions($options) { + global $_DB_DATAOBJECT; + + if (is_array($options) && count($options)) { + $conn = &$_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]; + foreach ($options as $option_name => $option_value) { + $conn->setOption($option_name, $option_value); + } + } + } + + /** * @param array $params */ public function setApiFilter(&$params) { -- 2.25.1