Ok, quindi non ho avuto molte risposte da questo, quindi ho iniziato a scavare intorno a me stesso, sono in grado di rispondere a metà della domanda che ho posto.
Ha fatto un semplice "grep" e ho trovato la seguente classe nascosta nella cartella lib: lib/Magento/Db/Sql/Trigger.php
È piuttosto semplice ed ecco cosa ho escogitato che funziona (può essere inserito nello script di installazione / aggiornamento):
<?php
/** @var $installer Mage_Core_Model_Resource_Setup */
$installer = $this;
$installer->startSetup();
// Trigger
$trigger = new Magento_Db_Sql_Trigger();
// Set time SQL_TIME_BEFORE / SQL_TIME_AFTER
$trigger->setTime($trigger::SQL_TIME_BEFORE);
// Set time SQL_EVENT_INSERT / SQL_EVENT_UPDATE / SQL_EVENT_DELETE
$trigger->setEvent($trigger::SQL_EVENT_INSERT);
// Set target table name
$trigger->setTarget($installer->getTable('fontera_trader/leaderboards_global_tmp'));
// Set Body
$trigger->setBody(
'INSERT INTO '.$installer->getTable('fontera_trader/leaderboards_global').'
(entity_id, customer_id , credit_value, prize_value, games_played, rank, prev_rank)
VALUES
(NEW.entity_id, NEW.customer_id, NEW.credit_value, NEW.prize_value, NEW.games_played, NEW.rank, NEW.prev_rank)
ON DUPLICATE KEY UPDATE
customer_id = NEW.customer_id,
credit_value = NEW.credit_value,
prize_value = NEW.prize_value,
games_played = NEW.games_played,
rank = NEW.rank,
prev_rank = NEW.prev_rank;
SET @r = 0;
UPDATE '.$installer->getTable('fontera_trader/leaderboards_global').'
SET
prev_rank = rank,
rank = @r:= (@r+1)
ORDER BY
credit_value
DESC;
'
);
// Assemble query, returns direct SQL for trigger
$triggerCreateQuery = $trigger->assemble();
// Adapter initiates query
$this->getConnection()->query($triggerCreateQuery);
$installer->endSetup();
Ho aggiunto commenti per dare un'idea di base di ciò che può essere utilizzato, altrimenti è meglio controllare la classe da soli. Il corpo è fondamentalmente SQL grezzo ma può essere compilato utilizzando i metodi convenzionali di Magento. Ho usato SQL grezzo a scopo dimostrativo.
A parte questo, sto ancora cercando di trovare un modo per attuare PROCEDURE MEMORIZZATE senza successo. Qualcuno ha trovato qualcosa del genere in Magento che potrebbe essere nascosto per un uso futuro?
.sql
file di versione con la procedura memorizzata. Maggiori dettagli: alanstorm.com/magento_setup_resources