@@ -81,6 +81,84 @@ func (suite *SQLStoreTestSuite) TestSqlPlaceholderReplacement() {
8181 suite .Equal ("A $1 B $2 C $3" , got )
8282}
8383
84+ func (suite * SQLStoreTestSuite ) TestStoreTableRenameOverride () {
85+ sqlDriver := "sqlite3"
86+ sqlDsn := path .Join (suite .sqlStoreRootPath , fmt .Sprintf ("rename-override-%d.db" , time .Now ().UnixNano ()))
87+
88+ // Create DB with original schema
89+ db , err := sql .Open (sqlDriver , sqlDsn )
90+ require .NoError (suite .T (), err )
91+
92+ ddlFnames , err := filepath .Glob (fmt .Sprintf ("../../_sql/%s/*.sql" , sqlDriver ))
93+ require .NoError (suite .T (), err )
94+ for _ , fname := range ddlFnames {
95+ sqlBytes , err := os .ReadFile (fname )
96+ require .NoError (suite .T (), err )
97+ _ , err = db .Exec (string (sqlBytes ))
98+ require .NoError (suite .T (), err )
99+ }
100+
101+ // Rename tables
102+ _ , err = db .Exec (`ALTER TABLE sessions RENAME TO renamed_sessions` )
103+ require .NoError (suite .T (), err )
104+ _ , err = db .Exec (`ALTER TABLE messages RENAME TO renamed_messages` )
105+ require .NoError (suite .T (), err )
106+
107+ // Set config to use renamed tables
108+ sessionID := quickfix.SessionID {BeginString : "FIX.4.4" , SenderCompID : "SENDER" , TargetCompID : "TARGET" }
109+ settings , err := quickfix .ParseSettings (strings .NewReader (fmt .Sprintf (`
110+ [DEFAULT]
111+ SQLStoreDriver=%s
112+ SQLStoreDataSourceName=%s
113+ SQLStoreSessionsTableName=renamed_sessions
114+ SQLStoreMessagesTableName=renamed_messages
115+
116+ [SESSION]
117+ BeginString=%s
118+ SenderCompID=%s
119+ TargetCompID=%s
120+ ` , sqlDriver , sqlDsn , sessionID .BeginString , sessionID .SenderCompID , sessionID .TargetCompID )))
121+ require .NoError (suite .T (), err )
122+
123+ // Create store with renamed table config
124+ store , err := NewStoreFactory (settings ).Create (sessionID )
125+ require .NoError (suite .T (), err )
126+ defer store .Close ()
127+
128+ // SaveMessage + SetNextSenderMsgSeqNum
129+ msg := []byte ("8=FIX.4.4\x01 9=12\x01 35=0\x01 " )
130+ require .NoError (suite .T (), store .SaveMessage (1 , msg ))
131+ require .NoError (suite .T (), store .SetNextSenderMsgSeqNum (2 ))
132+ require .NoError (suite .T (), store .SetNextTargetMsgSeqNum (2 ))
133+
134+ // SaveMessageAndIncrNextSenderMsgSeqNum
135+ require .NoError (suite .T (), store .SaveMessageAndIncrNextSenderMsgSeqNum (2 , msg ))
136+
137+ // Get and check sequence numbers
138+ nextSender := store .NextSenderMsgSeqNum ()
139+ suite .Equal (3 , nextSender )
140+ nextTarget := store .NextTargetMsgSeqNum ()
141+ suite .Equal (2 , nextTarget )
142+
143+ // IterateMessages
144+ count := 0
145+ err = store .IterateMessages (1 , 2 , func (m []byte ) error {
146+ count ++
147+ return nil
148+ })
149+ require .NoError (suite .T (), err )
150+ suite .Equal (2 , count )
151+
152+ // Reset
153+ require .NoError (suite .T (), store .Reset ())
154+
155+ // After reset, sequence numbers should be 1
156+ nextSender = store .NextSenderMsgSeqNum ()
157+ suite .Equal (1 , nextSender )
158+ nextTarget = store .NextTargetMsgSeqNum ()
159+ suite .Equal (1 , nextTarget )
160+ }
161+
84162func (suite * SQLStoreTestSuite ) TearDownTest () {
85163 suite .MsgStore .Close ()
86164 os .RemoveAll (suite .sqlStoreRootPath )
0 commit comments