@@ -62,10 +62,6 @@ newtype PayloadId = PayloadId { unPayloadId :: Int64 }
6262data Payload a = Payload
6363 { pId :: PayloadId
6464 , pState :: State
65- -- TODO do I need this?
66- , pAttempts :: Int
67- , pModifiedAt :: Int
68- -- TODO rename. I don't need this either.
6965 , pValue :: a
7066 } deriving (Show , Eq )
7167
@@ -75,8 +71,6 @@ payloadDecoder thePayloadDecoder
7571 = Payload
7672 <$> payloadIdRow
7773 <*> D. column (D. nonNullable stateDecoder)
78- <*> D. column (D. nonNullable $ fromIntegral <$> D. int4)
79- <*> D. column (D. nonNullable $ fromIntegral <$> D. int4)
8074 <*> D. column (D. nonNullable thePayloadDecoder)
8175
8276payloadIdEncoder :: E. Value PayloadId
@@ -92,9 +86,7 @@ payloadIdRow = D.column (D.nonNullable payloadIdDecoder)
9286enqueuePayload :: E. Value a -> [a ] -> Session [PayloadId ]
9387enqueuePayload theEncoder values = do
9488 let theQuery = [here |
95- INSERT INTO payloads (attempts, value)
96- SELECT 0, * FROM unnest($1)
97- RETURNING id
89+ SELECT id FROM enqueue_payload($1)
9890 |]
9991 encoder = E. param $ E. nonNullable $ E. foldableArray $ E. nonNullable theEncoder
10092 decoder = D. rowList (D. column (D. nonNullable payloadIdDecoder))
@@ -105,30 +97,15 @@ enqueuePayload theEncoder values = do
10597dequeuePayload :: D. Value a -> Int -> Session [Payload a ]
10698dequeuePayload valueDecoder count = do
10799 let multipleQuery = [here |
108- DELETE FROM payloads
109- WHERE id in
110- ( SELECT p1.id
111- FROM payloads AS p1
112- WHERE p1.state='enqueued'
113- ORDER BY p1.modified_at ASC
114- FOR UPDATE SKIP LOCKED
115- LIMIT $1
116- )
117- RETURNING id, state, attempts, modified_at, value
100+ SELECT id, state, value
101+ FROM dequeue_payload($1)
118102 |]
103+
119104 multipleEncoder = E. param $ E. nonNullable $ fromIntegral >$< E. int4
120105
121106 singleQuery = [here |
122- DELETE FROM payloads
123- WHERE id =
124- ( SELECT p1.id
125- FROM payloads AS p1
126- WHERE p1.state='enqueued'
127- ORDER BY p1.modified_at ASC
128- FOR UPDATE SKIP LOCKED
129- LIMIT 1
130- )
131- RETURNING id, state, attempts, modified_at, value
107+ SELECT id, state, value
108+ FROM dequeue_payload(1)
132109 |]
133110
134111 singleEncoder = mempty
@@ -144,7 +121,7 @@ dequeuePayload valueDecoder count = do
144121getPayload :: D. Value a -> PayloadId -> Session (Maybe (Payload a ))
145122getPayload decoder payloadId = do
146123 let theQuery = [here |
147- SELECT id, state, attempts, modified_at, value
124+ SELECT id, state, value
148125 FROM payloads
149126 WHERE id = $1
150127 |]
@@ -168,10 +145,7 @@ getCount = do
168145incrementAttempts :: Int -> [PayloadId ] -> Session ()
169146incrementAttempts retryCount pids = do
170147 let theQuery = [here |
171- UPDATE payloads
172- SET state=CASE WHEN attempts >= $1 THEN 'failed' :: state_t ELSE 'enqueued' END
173- , attempts=attempts+1
174- WHERE id = ANY($2)
148+ SELECT increment_payload_attempts($1, $2)
175149 |]
176150 encoder = (fst >$< E. param (E. nonNullable E. int4)) <>
177151 (snd >$< E. param (E. nonNullable $ E. foldableArray $ E. nonNullable payloadIdEncoder))
0 commit comments