@@ -274,6 +274,53 @@ 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+ if err := store .cache .IncrNextSenderMsgSeqNum (); err != nil {
301+ return errors .Wrap (err , "cache incr next" )
302+ }
303+
304+ next := store .cache .NextSenderMsgSeqNum ()
305+ _ , err = store .db .Exec (sqlString (`UPDATE sessions SET outgoing_seqnum = ?
306+ WHERE beginstring=? AND session_qualifier=?
307+ AND sendercompid=? AND sendersubid=? AND senderlocid=?
308+ AND targetcompid=? AND targetsubid=? AND targetlocid=?` , store .placeholder ),
309+ next , s .BeginString , s .Qualifier ,
310+ s .SenderCompID , s .SenderSubID , s .SenderLocationID ,
311+ s .TargetCompID , s .TargetSubID , s .TargetLocationID )
312+ if err != nil {
313+ return err
314+ }
315+
316+ err = store .cache .SetNextSenderMsgSeqNum (next )
317+ if err != nil {
318+ return err
319+ }
320+
321+ return tx .Commit ()
322+ }
323+
277324func (store * sqlStore ) GetMessages (beginSeqNum , endSeqNum int ) ([][]byte , error ) {
278325 s := store .sessionID
279326 var msgs [][]byte
0 commit comments