changeset 0ba81785b8a7 in trytond:5.6
details: https://hg.tryton.org/trytond?cmd=changeset;node=0ba81785b8a7
description:
Use different table instance for ir.queue sub-queries
It is cleaner and safer to use different instances for sub-queries.
issue9682
review294671002
(grafted from 913a232cf7c205c589a49d0f2f558804a9cd48f3)
diffstat:
trytond/ir/queue.py | 34 ++++++++++++++++++----------------
1 files changed, 18 insertions(+), 16 deletions(-)
diffs (48 lines):
diff -r dd6a4f74bf6d -r 0ba81785b8a7 trytond/ir/queue.py
--- a/trytond/ir/queue.py Sun Oct 18 20:21:24 2020 +0200
+++ b/trytond/ir/queue.py Mon Oct 12 13:01:14 2020 +0200
@@ -82,26 +82,28 @@
def pull(cls, database, connection, name=None):
cursor = connection.cursor()
queue = cls.__table__()
+ queue_c = cls.__table__()
+ queue_s = cls.__table__()
candidates = With('id', 'scheduled_at', 'expected_at',
- query=queue.select(
- queue.id,
- queue.scheduled_at,
- queue.expected_at,
- where=((queue.name == name) if name else Literal(True))
- & (queue.dequeued_at == Null),
+ query=queue_c.select(
+ queue_c.id,
+ queue_c.scheduled_at,
+ queue_c.expected_at,
+ where=((queue_c.name == name) if name else Literal(True))
+ & (queue_c.dequeued_at == Null),
order_by=[
- queue.scheduled_at.nulls_first,
- queue.expected_at.nulls_first]))
- selected = queue.select(
- queue.id,
- where=((queue.name == name) if name else Literal(True))
- & (queue.dequeued_at == Null)
- & ((queue.scheduled_at <= CurrentTimestamp())
- | (queue.scheduled_at == Null)),
+ queue_c.scheduled_at.nulls_first,
+ queue_c.expected_at.nulls_first]))
+ selected = queue_s.select(
+ queue_s.id,
+ where=((queue_s.name == name) if name else Literal(True))
+ & (queue_s.dequeued_at == Null)
+ & ((queue_s.scheduled_at <= CurrentTimestamp())
+ | (queue_s.scheduled_at == Null)),
order_by=[
- queue.scheduled_at.nulls_first,
- queue.expected_at.nulls_first],
+ queue_s.scheduled_at.nulls_first,
+ queue_s.expected_at.nulls_first],
limit=1)
if database.has_select_for():
For = database.get_select_for_skip_locked()