-
-
Notifications
You must be signed in to change notification settings - Fork 824
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
(REF) CRM_Queue_Queue_Sql* - Extract trait for common functions
Most of the methods in CRM/Queue/Queue/Sql.php and CRM/Queue/Queue/SqlParallel.php are identical. Move them to a common trait so that they're easier to patch.
- Loading branch information
Showing
3 changed files
with
118 additions
and
127 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,114 @@ | ||
<?php | ||
|
||
/* | ||
+--------------------------------------------------------------------+ | ||
| Copyright CiviCRM LLC. All rights reserved. | | ||
| | | ||
| This work is published under the GNU AGPLv3 license with some | | ||
| permitted exceptions and without any warranty. For full license | | ||
| and copyright information, see https://civicrm.org/licensing | | ||
+--------------------------------------------------------------------+ | ||
*/ | ||
|
||
/** | ||
* Trait defines methods that are commonly used to implement a SQL-backed queue. | ||
*/ | ||
trait CRM_Queue_Queue_SqlTrait { | ||
|
||
/** | ||
* Perform any registation or resource-allocation for a new queue | ||
*/ | ||
public function createQueue() { | ||
// nothing to do -- just start CRUDing items in the appropriate table | ||
} | ||
|
||
/** | ||
* Perform any loading or pre-fetch for an existing queue. | ||
*/ | ||
public function loadQueue() { | ||
// nothing to do -- just start CRUDing items in the appropriate table | ||
} | ||
|
||
/** | ||
* Release any resources claimed by the queue (memory, DB rows, etc) | ||
*/ | ||
public function deleteQueue() { | ||
return CRM_Core_DAO::singleValueQuery(" | ||
DELETE FROM civicrm_queue_item | ||
WHERE queue_name = %1 | ||
", [ | ||
1 => [$this->getName(), 'String'], | ||
]); | ||
} | ||
|
||
/** | ||
* Check if the queue exists. | ||
* | ||
* @return bool | ||
*/ | ||
public function existsQueue() { | ||
return ($this->numberOfItems() > 0); | ||
} | ||
|
||
/** | ||
* Determine number of items remaining in the queue. | ||
* | ||
* @return int | ||
*/ | ||
public function numberOfItems() { | ||
return CRM_Core_DAO::singleValueQuery(" | ||
SELECT count(*) | ||
FROM civicrm_queue_item | ||
WHERE queue_name = %1 | ||
", [ | ||
1 => [$this->getName(), 'String'], | ||
]); | ||
} | ||
|
||
/** | ||
* Remove an item from the queue. | ||
* | ||
* @param CRM_Core_DAO|stdClass $dao | ||
* The item returned by claimItem. | ||
*/ | ||
public function deleteItem($dao) { | ||
$dao->delete(); | ||
$dao->free(); | ||
} | ||
|
||
/** | ||
* Get the full data for an item. | ||
* | ||
* This is a passive peek - it does not claim/steal/release anything. | ||
* | ||
* @param int|string $id | ||
* The unique ID of the task within the queue. | ||
* @return CRM_Queue_DAO_QueueItem|object|null $dao | ||
*/ | ||
public function fetchItem($id) { | ||
$dao = new CRM_Queue_DAO_QueueItem(); | ||
$dao->id = $id; | ||
$dao->queue_name = $this->getName(); | ||
if (!$dao->find(TRUE)) { | ||
return NULL; | ||
} | ||
$dao->data = unserialize($dao->data); | ||
return $dao; | ||
} | ||
|
||
/** | ||
* Return an item that could not be processed. | ||
* | ||
* @param CRM_Core_DAO $dao | ||
* The item returned by claimItem. | ||
*/ | ||
public function releaseItem($dao) { | ||
$sql = "UPDATE civicrm_queue_item SET release_time = NULL WHERE id = %1"; | ||
$params = [ | ||
1 => [$dao->id, 'Integer'], | ||
]; | ||
CRM_Core_DAO::executeQuery($sql, $params); | ||
$dao->free(); | ||
} | ||
|
||
} |