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()

Reply via email to