Propel 1.2: как сделать job queue?

Wicked

Новичок
Propel 1.2: как сделать job queue?

Пытаюсь сделать разборщик приоретизированных задач на пропеле 1.2.

Понял, что ни один честный способ не работает:
1) Можно было бы стартовать транзакцию, выбирать задачу "order by priority desc limit 1 for update", потом ее удалять и коммитать транзакцию.
Но есть одна проблема - propel не поддерживает SELECT ... FOR UPDATE запросы, и не будет поддерживать до версии 2.0.

2) Можно было бы делать BasePeer::doUpdate() с доп. условием "order by priority desc limit 1", выставляя какой-то уникальный флаг, потом забирать эту задачу селектом по флагу, и т.д.
Но тут возникает другая проблема: такой update не умеет обрабатывать эти самые "order by priority desc limit 1" :)

В итоге сделал хаком: в классе JobPeer завел такие методы: doSelectOneForUpdate, doSelectForUpdate, doSelectRSForUpdate, BasePeerDoSelectForUpdate, вроде работает.

Интересует, как бы выкрутились Вы :)

PS: перейти на Доктрину в данном случае не предлагать :)
 

Wicked

Новичок
Я бы сказал, ты доработал его до версии 2.0
эх... если бы :)

ПС: В итоге итогов сделал вообще один метод с hardcoded запросом, который запускается через $con->executeQuery(), а его result set пихается в гидратор.
 

Wicked

Новичок
fixxxer
дык я насчет пропела никогда иллюзий не испытывал :)
 
Сверху