@@ -274,6 +274,54 @@ func (store *sqlStore) SaveMessage(seqNum int, msg []byte) error {
274274 return err
275275}
276276
277+ func (store * sqlStore ) SaveMessageAndIncrNextSenderMsgSeqNum (seqNum int , msg []byte ) error {
278+ s := store .sessionID
279+
280+ tx , err := store .db .Begin ()
281+ if err != nil {
282+ return err
283+ }
284+ defer tx .Rollback ()
285+
286+ _ , err = tx .Exec (sqlString (`INSERT INTO messages (
287+ msgseqnum, message,
288+ beginstring, session_qualifier,
289+ sendercompid, sendersubid, senderlocid,
290+ targetcompid, targetsubid, targetlocid)
291+ VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)` , store .placeholder ),
292+ seqNum , string (msg ),
293+ s .BeginString , s .Qualifier ,
294+ s .SenderCompID , s .SenderSubID , s .SenderLocationID ,
295+ s .TargetCompID , s .TargetSubID , s .TargetLocationID )
296+ if err != nil {
297+ return err
298+ }
299+
300+ next := store .cache .NextSenderMsgSeqNum () + 1
301+ _ , err = tx .Exec (sqlString (`UPDATE sessions SET outgoing_seqnum = ?
302+ WHERE beginstring=? AND session_qualifier=?
303+ AND sendercompid=? AND sendersubid=? AND senderlocid=?
304+ AND targetcompid=? AND targetsubid=? AND targetlocid=?` , store .placeholder ),
305+ next , s .BeginString , s .Qualifier ,
306+ s .SenderCompID , s .SenderSubID , s .SenderLocationID ,
307+ s .TargetCompID , s .TargetSubID , s .TargetLocationID )
308+ if err != nil {
309+ return err
310+ }
311+
312+ err = tx .Commit ()
313+ if err != nil {
314+ return err
315+ }
316+
317+ err = store .cache .SetNextSenderMsgSeqNum (next )
318+ if err != nil {
319+ return err
320+ }
321+
322+ return nil
323+ }
324+
277325func (store * sqlStore ) GetMessages (beginSeqNum , endSeqNum int ) ([][]byte , error ) {
278326 s := store .sessionID
279327 var msgs [][]byte
0 commit comments