@@ -10,6 +10,7 @@ module Control.Task.Scheduler.Query
12import Colog
12import Colog
13import Control.Monad.IO.Unlift
14import Control.Monad.IO.Unlift
14import Control.Squeal
15import Control.Squeal
15import Control.Task
16import Control.Task
@@ -38,6 +39,7 @@ scheduleTaskQuery task = do
38 Set (param @1) `as` #task
39 Set (param @1) `as` #task
39 :* Set (param @2) `as` #payload
40 :* Set (param @2) `as` #payload
40 :* Default `as` #creation_time
41 :* Default `as` #creation_time
42+ :* Default `as` #started
42 ( OnConflict
44 ( OnConflict
43 (OnConstraint #pk_task_payload)
45 (OnConstraint #pk_task_payload)
@@ -82,7 +84,9 @@ rescheduleTaskQuery payload = do
85− (Default `as` #creation_time)
87+ ( Default `as` #creation_time
88+ :* Default `as` #started
86 (param @1 .== #task .&& param @2 .== #payload)
90 (param @1 .== #task .&& param @2 .== #payload)
87 dbWrite (const $ return ()) $
91 dbWrite (const $ return ()) $
88 manipulateParams_
92 manipulateParams_
@@ -106,11 +110,20 @@ pickTasksQuery tasks limitCount = do
107 ( from (table #tasks)
111 ( from (table #tasks)
108 & where_ (#task `in_` (literal <$> tasks))
112 & where_ (#task `in_` (literal <$> tasks))
109− & orderBy [#creation_time & Asc]
113+ & where_ (not_ . notNull $ #started)
110 & limit limitCount
114 & limit limitCount
116+ startedMan :: Manipulation_ Schema (String, Jsonb Value) ()
120+ ( Set true `as` #started
122+ (param @1 .== #task .&& param @2 .== #payload)
112− dbRead (const $ return []) $
123+ dbWrite (const $ return []) $ do
113− runQuery query >>= getRows
124+ pickedTasks <- runQuery query >>= getRows
125+ traversePrepared_ startedMan $ (task &&& payload) <$> pickedTasks
115data PickedTask
128data PickedTask
116 = PickedTask
129 = PickedTask