Skip to content

Commit

Permalink
dev/core#183 Convert creating of temporary tables in CRM/Mailing file…
Browse files Browse the repository at this point in the history
…s to using CRM_Utils_SQL_TempTable
  • Loading branch information
seamuslee001 committed Nov 12, 2019
1 parent 33c3ad9 commit cc06bec
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 31 deletions.
20 changes: 6 additions & 14 deletions CRM/Mailing/BAO/Mailing.php
Original file line number Diff line number Diff line change
Expand Up @@ -190,13 +190,8 @@ public static function getRecipients($mailingID) {
}

// Create a temp table for contact exclusion.
$excludeTempTablename = "excluded_recipients_temp" . substr(sha1(rand()), 0, 4);
$includedTempTablename = "included_recipients_temp" . substr(sha1(rand()), 0, 4);
$mailingGroup->query(
"CREATE TEMPORARY TABLE $excludeTempTablename
(contact_id int primary key)
ENGINE=HEAP"
);
$excludeTempTable = CRM_Utils_SQL_TempTable::build()->setCategory('exrecipient')->setMemory()->createWithColumns('contact_id int primary key');
$excludeTempTablename = $excludeTempTable->getName();
// populate exclude temp-table with recipients to be excluded from the list
// on basis of selected recipients groups and/or previous mailing
if (!empty($recipientsGroup['Exclude'])) {
Expand Down Expand Up @@ -237,11 +232,8 @@ public static function getRecipients($mailingID) {
$entityColumn = $isSMSmode ? 'phone_id' : 'email_id';
$entityTable = $isSMSmode ? CRM_Core_DAO_Phone::getTableName() : CRM_Core_DAO_Email::getTableName();
// Get all the group contacts we want to include.
$mailingGroup->query(
"CREATE TEMPORARY TABLE $includedTempTablename
(contact_id int primary key, $entityColumn int)
ENGINE=HEAP"
);
$includedTempTable = CRM_Utils_SQL_TempTable::build()->setCategory('inrecipient')->setMemory()->createWithColumns('contact_id int primary key, ' . $entityColumn . ' int');
$includedTempTablename = $includedTempTable->getName();

if ($isSMSmode) {
$criteria = [
Expand Down Expand Up @@ -405,8 +397,8 @@ public static function getRecipients($mailingID) {

// Delete the temp table.
$mailingGroup->reset();
$mailingGroup->query(" DROP TEMPORARY TABLE $excludeTempTablename ");
$mailingGroup->query(" DROP TEMPORARY TABLE $includedTempTablename ");
$excludeTempTable->drop();
$includedTempTable->drop();

CRM_Utils_Hook::alterMailingRecipients($mailingObj, $criteria, 'post');
}
Expand Down
16 changes: 8 additions & 8 deletions CRM/Mailing/BAO/Recipients.php
Original file line number Diff line number Diff line change
Expand Up @@ -115,14 +115,13 @@ public static function updateRandomRecipients($sourceMailingId, $newMailingID, $
if ($totalLimit) {
$limitString = "LIMIT 0, $totalLimit";
}
CRM_Core_DAO::executeQuery("DROP TEMPORARY TABLE IF EXISTS srcMailing_$sourceMailingId");
$temporaryTable = CRM_Utils_SQL_TempTable::build()
->setCategory('srcmailing' . $sourceMailingId)
->setMemory()
->createWithColumns("mailing_recipient_id int unsigned, id int PRIMARY KEY AUTO_INCREMENT, INDEX(mailing_recipient_id)");
$temporaryTableName = $temporaryTable->getName();
$sql = "
CREATE TEMPORARY TABLE srcMailing_$sourceMailingId
(mailing_recipient_id int unsigned, id int PRIMARY KEY AUTO_INCREMENT, INDEX(mailing_recipient_id))
ENGINE=HEAP";
CRM_Core_DAO::executeQuery($sql);
$sql = "
INSERT INTO srcMailing_$sourceMailingId (mailing_recipient_id)
INSERT INTO {$temporaryTableName} (mailing_recipient_id)
SELECT mr.id
FROM civicrm_mailing_recipients mr
WHERE mr.mailing_id = $sourceMailingId
Expand All @@ -132,10 +131,11 @@ public static function updateRandomRecipients($sourceMailingId, $newMailingID, $
CRM_Core_DAO::executeQuery($sql);
$sql = "
UPDATE civicrm_mailing_recipients mr
INNER JOIN srcMailing_$sourceMailingId temp_mr ON temp_mr.mailing_recipient_id = mr.id
INNER JOIN {$temporaryTableName} temp_mr ON temp_mr.mailing_recipient_id = mr.id
SET mr.mailing_id = $newMailingID
";
CRM_Core_DAO::executeQuery($sql);
$temporaryTable->drop();
}

/**
Expand Down
17 changes: 8 additions & 9 deletions CRM/Mailing/Event/BAO/Delivered.php
Original file line number Diff line number Diff line change
Expand Up @@ -282,16 +282,14 @@ public static function bulkCreate($eventQueueIDs, $time = NULL) {
public static function updateEmailResetDate($minDays = 3, $maxDays = 7) {
$dao = new CRM_Core_DAO();

$query = "
CREATE TEMPORARY TABLE civicrm_email_temp_values (
id int primary key,
reset_date datetime
) ENGINE = HEAP;
";
CRM_Core_DAO::executeQuery($query);
$temporaryTable = CRM_Utils_SQL_TempTable::build()
->setCategory('mailingemail')
->setMemory()
->createWithColumns('id int primary key, reset_date datetime');
$temporaryTableName = $temporaryTable->getName();

$query = "
INSERT INTO civicrm_email_temp_values (id, reset_date)
INSERT INTO {$temporaryTableName} (id, reset_date)
SELECT civicrm_email.id as email_id,
max(civicrm_mailing_event_delivered.time_stamp) as reset_date
FROM civicrm_mailing_event_queue
Expand All @@ -309,12 +307,13 @@ public static function updateEmailResetDate($minDays = 3, $maxDays = 7) {

$query = "
UPDATE civicrm_email e
INNER JOIN civicrm_email_temp_values et ON e.id = et.id
INNER JOIN {$temporaryTableName} et ON e.id = et.id
SET e.on_hold = 0,
e.hold_date = NULL,
e.reset_date = et.reset_date
";
CRM_Core_DAO::executeQuery($query);
$temporaryTable->drop();
}

}

0 comments on commit cc06bec

Please sign in to comment.