);
$sql = "CREATE TEMPORARY TABLE {$activityTempTable} ( ";
- $insertValueSQL = array();
+ $insertValueSQL = $selectColumns = array();
// The activityTempTable contains the sorted rows
// so in order to maintain the sort order as-is we add an auto_increment
// field; we can sort by this later to ensure the sort order stays correct.
foreach ($tableFields as $name => $desc) {
$sql .= "$name $desc,\n";
$insertValueSQL[] = $name;
+ if ($name == 'source_contact_name' && CRM_Utils_SQL::supportsFullGroupBy()) {
+ $selectColumns[] = "ANY_VALUE(tbl.$name)";
+ }
+ else {
+ $selectColumns[] = "tbl.$name";
+ }
}
// add unique key on activity_id just to be sure
CRM_Core_DAO::executeQuery($sql);
- $insertSQL = "INSERT INTO {$activityTempTable} (" . implode(',', $insertValueSQL) . " ) ";
+ $insertSQL = "INSERT IGNORE INTO {$activityTempTable} (" . implode(',', $insertValueSQL) . " ) ";
$order = $limit = $groupBy = '';
$groupBy = " GROUP BY tbl.activity_id, tbl.activity_type, tbl.case_id, tbl.case_subject ";
$input['count'] = FALSE;
list($sqlClause, $params) = self::deprecatedGetActivitySQLClause($input);
- $query = "{$insertSQL}
- SELECT DISTINCT tbl.* from ( {$sqlClause} )
-as tbl ";
+ $query = sprintf("{$insertSQL} \n SELECT DISTINCT %s from ( %s ) \n as tbl ", implode(', ', $selectColumns), $sqlClause);
// Filter case activities - CRM-5761.
$components = self::activityComponents();
$query .= $groupBy;
- $orderBy = "sort_name ASC, {$open}.time_stamp DESC";
+ $orderBy = "sort_name ASC";
+ if (!$is_distinct) {
+ $orderBy .= ", {$open}.time_stamp DESC";
+ }
if ($sort) {
if (is_string($sort)) {
$sort = CRM_Utils_Type::escape($sort, 'String');
foreach ($useCases as $case) {
$query = new CRM_Contact_BAO_Query(CRM_Contact_BAO_Query::convertFormValues($case['form_value']));
list($select, $from, $where, $having) = $query->query();
- $groupContacts = CRM_Core_DAO::executeQuery("SELECT DISTINCT contact_a.id $from $where ORDER BY contact_a.first_name")->fetchAll();
+ $groupContacts = CRM_Core_DAO::executeQuery("SELECT DISTINCT contact_a.id, contact_a.first_name $from $where ORDER BY contact_a.first_name")->fetchAll();
foreach ($groupContacts as $key => $value) {
$groupContacts[$key] = $value['id'];
}
$this->callAPISuccess('Mailing', 'create', array('name' => 'CiviMail', 'hash' => 'abx'));
$result = $this->callAPISuccess('MailingProviderData', 'get', array('return' => array('mailing_identifier.name', 'contact_identifier', 'mailing_identifier')));
$this->assertEquals(1, $result['count']);
- $this->assertEquals('xyzabx0000-00-00 00:00:00', $result['id']);
- $this->assertEquals('xyzabx0000-00-00 00:00:00', $result['id']);
+ $this->assertEquals('xyzabx2017-01-01 00:00:00', $result['id']);
+ $this->assertEquals('xyzabx2017-01-01 00:00:00', $result['id']);
$this->assertEquals(array(
'contact_identifier' => 'xyz',
'mailing_identifier' => 'abx',
`mailing_identifier` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`email` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`event_type` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
- `recipient_action_datetime` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `recipient_action_datetime` timestamp NOT NULL DEFAULT '2017-01-01 00:00:00',
`contact_id` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`is_civicrm_updated` TINYINT(4) DEFAULT '0',
PRIMARY KEY (`contact_identifier`,`recipient_action_datetime`,`event_type`),