public void PopulateCache()
{
string queryString = string.Empty;
queryString = "SELECT creation_time, incoming_seqnum, outgoing_seqnum FROM " + sessions_table + " WHERE " +
"beginstring=" + "'" + _sessionID.BeginString + "' and " +
"sendercompid=" + "'" + _sessionID.SenderCompID + "' and " +
"targetcompid=" + "'" + _sessionID.TargetCompID + "' and " +
"session_qualifier=" + "'" + _sessionID.SessionQualifier + "'";
using (OdbcConnection odbc = GetODBCConnection())
{
OdbcCommand cmd = new OdbcCommand(queryString, odbc);
OdbcDataReader reader = cmd.ExecuteReader();
int rows = 0;
if (reader.HasRows)
{
while (reader.Read())
{
rows++;
if (rows > 1)
{
throw new ConfigError("Multiple entries found for session in database");
}
cache_.CreationTime = DateTime.SpecifyKind((DateTime)reader[0], DateTimeKind.Utc);
//DateTime.SpecifyKind(cache_.CreationTime.Value, DateTimeKind.Utc);
cache_.SetNextTargetMsgSeqNum((int)reader[1]);
cache_.SetNextSenderMsgSeqNum((int)reader[2]);
}
}
else
{
DateTime createTime = cache_.CreationTime.HasValue ? cache_.CreationTime.Value : DateTime.UtcNow;
string insertQuery = "INSERT INTO " + sessions_table + " (beginstring, sendercompid, targetcompid, session_qualifier," +
"creation_time, incoming_seqnum, outgoing_seqnum) VALUES(" +
"'" + _sessionID.BeginString + "'," +
"'" + _sessionID.SenderCompID + "'," +
"'" + _sessionID.TargetCompID + "'," +
"'" + _sessionID.SessionQualifier + "'," +
"{ts '" + ODBCHelper.DateTimeToODBCConverter(createTime) + "'}," +
cache_.GetNextTargetMsgSeqNum() + "," +
cache_.GetNextSenderMsgSeqNum() + ")";
OdbcCommand cmdInsert = new OdbcCommand(insertQuery, odbc);
if (0 == cmdInsert.ExecuteNonQuery())
{
throw new ConfigError("Unable to create session in database");
}
}
}
}