Add hash to Subject

The hash gives us a new column in our table, which we can
use to query a specific combination of args and key more
efficient

[MAILPOET-4966]
This commit is contained in:
David Remer
2023-02-16 07:15:25 +02:00
committed by Aschepikov
parent 230c9f183d
commit 9e016bfc07
3 changed files with 9 additions and 2 deletions

View File

@ -27,10 +27,15 @@ class Subject {
return $this->args; return $this->args;
} }
public function hash(): string {
return md5($this->getKey() . Json::encode($this->getArgs()));
}
public function toArray(): array { public function toArray(): array {
return [ return [
'key' => $this->getKey(), 'key' => $this->getKey(),
'args' => Json::encode($this->getArgs()), 'args' => Json::encode($this->getArgs()),
'hash' => $this->hash(),
]; ];
} }

View File

@ -39,10 +39,10 @@ class AutomationRunStorage {
return $automationRunId; return $automationRunId;
} }
$sql = 'insert into ' . esc_sql($this->subjectTable) . ' (`automation_run_id`, `key`, `args`) values %s'; $sql = 'insert into ' . esc_sql($this->subjectTable) . ' (`automation_run_id`, `key`, `args`, `hash`) values %s';
$values = []; $values = [];
foreach ($subjectTableData as $entry) { foreach ($subjectTableData as $entry) {
$values[] = (string)$this->wpdb->prepare("(%d,%s,%s)", $automationRunId, $entry['key'], $entry['args']); $values[] = (string)$this->wpdb->prepare("(%d,%s,%s,%s)", $automationRunId, $entry['key'], $entry['args'], $entry['hash']);
} }
$sql = sprintf($sql, implode(',', $values)); $sql = sprintf($sql, implode(',', $values));
$result = $this->wpdb->query($sql); $result = $this->wpdb->query($sql);

View File

@ -25,7 +25,9 @@ class Migration_20230215_050813 extends Migration {
'`automation_run_id` int(11) unsigned NOT NULL', '`automation_run_id` int(11) unsigned NOT NULL',
'`key` varchar(191)', '`key` varchar(191)',
'`args` longtext', '`args` longtext',
'`hash` varchar(191)',
'index (automation_run_id)', 'index (automation_run_id)',
'index (hash)',
]); ]);
$this->moveSubjectData(); $this->moveSubjectData();
$this->dropSubjectColumn(); $this->dropSubjectColumn();