Skip to content

Session Loading#

The SQLRace API can load sessions either locally, from an SSNDB, or from an SQLRace database.

SSN File Loading

SSN files are read-only.

Session States#

Session States are used to identify whether a session is currently live and having data recorded to it or historical where data is loaded from the database.

Session State Description
Created The session has been indexed and exists within the database. However, it is not available yet to be loaded either live or historical. This is a temporary state and should not be used to find and load sessions.
Exporting The (SQLite) session is exporting.
Historical The session is historical.
Indexed The session has been added to the database waiting to be indexed.
Live Indicates a session which is live and available within an SQLRace server.
LiveNotInServer Indicates a session which is live, but not available within an SQLRace server.

LiveNotInServer

Sessions with this session state should not be loaded until its state has changed to historical. This is due to the data in the database not being up-to-date until the recording has ended and all data has been flushed.

Examples#

Loading a Local SSN File#

const string pathToFile = @"C:\Path\To\Session\File.ssn";
var fileSessionManager = FileSessionManager.CreateFileSessionManager();
var clientSession = fileSessionManager.Load(pathToFile);
path_to_file = r"C:\Path\To\Session\File.ssn"
file_session_manager = FileSessionManager.CreateFileSessionManager()
client_session = file_session_manager.Load(path_to_file)
pathToFile = sprintf("C:\\Path\\To\\Session\\File.ssn);
fileSessionManager = FileSessionManager.CreateFileSessionManager();
clientSession = fileSessionManager.Load(pathToFile);

Loading a Local SSN2 File#

const string pathToFile = @"C:\Path\To\Session\File.ssn2";
var connectionString = $@"DbEngine=SQLite;Data Source={pathToFile}";
var sessionManager = SessionManager.CreateSessionManager();
var sessionSummaries = sessionManager.FindBySessionState(SessionState.Historical, connectionString);
var sessionKey = sessionSummaries.get_Item(0).Key.ToString();
var clientSession = sessionManager.Load(sessionKey, connectionString);
path_to_file = r"C:\Path\To\File.ssn2"
connection_string = f"DbEngine=SQLite;Data Source={path_to_file}"
session_manager = SessionManager.CreateSessionManager()
session_summaries = session_manager.FindBySessionState(SessionState.Historical, connection_string)
session_key = session_summaries.get_Item(0).Key.ToString()
client_session = session_manager.Load(session_key, connection_string)
pathToFile = sprintf("C:\\Path\\To\\Session\\File.ssn2");
connectionString = sprintf("DbEngine=SQLite;Data Source=%s", pathToFile);
sessionManager = SessionManager.CreateSessionManager();
sessionSummaries = sessionManager.FindBySessionState(SessionState.Historical, connectionString);
sessionKey = sessionSummaries.Item(0).Key;
clientSession = sessionManager.Load(sessionKey, connectionString);

Loading a Session From an SSNDB#

const string pathToFile = @"C:\Path\To\Session\File.ssndb";
var connectionString = $@"DbEngine=SQLite;Data Source={pathToFile}";
var sessionManager = SessionManager.CreateSessionManager();
var sessionSummaries = sessionManager.FindBySessionState(SessionState.Historical, connectionString);
var sessionKey = sessionSummaries.get_Item(0).Key.ToString();
var clientSession = sessionManager.Load(sessionKey, connectionString);
path_to_file = r"C:\Path\To\File.ssndb"
connection_string = f"DbEngine=SQLite;Data Source={path_to_file}"
session_manager = SessionManager.CreateSessionManager()
session_summaries = session_manager.FindBySessionState(SessionState.Historical, connection_string)
session_key = session_summaries.get_Item(0).Key.ToString()
client_session = session_manager.Load(session_key, connection_string)
pathToFile = sprintf("C:\\Path\\To\\Session\\File.ssndb");
connectionString = sprintf("DbEngine=SQLite;Data Source=%s", pathToFile);
sessionManager = SessionManager.CreateSessionManager();
sessionSummaries = sessionManager.FindBySessionState(SessionState.Historical, connectionString);
sessionKey = sessionSummaries.Item(0).Key;
clientSession = sessionManager.Load(sessionKey, connectionString);

Loading a Session From an SQLRaceDB#

var serverName = @"SQLServer\InstanceName";
var databaseName = "DatabaseName";
var connectionString = $@"server={serverName};Initial Catalog={databaseName};Trusted_Connection=True";
var sessionManager = SessionManager.CreateSessionManager();
var sessionSummaries = sessionManager.FindBySessionState(SessionState.Historical, connectionString);
var sessionKey = sessionSummaries.get_Item(0).Key.ToString();
var clientSession = sessionManager.Load(sessionKey, connectionString);
server_name = r"SQLServer\InstanceName"
database_name = "DatabaseName"
connection_string = f"server={serverName};Initial Catalog={databaseName};Trusted_Connection=True"
session_manager = SessionManager.CreateSessionManager()
session_summaries = session_manager.FindBySessionState(SessionState.Historical, connection_string)
session_key = session_summaries.get_Item(0).Key.ToString()
client_session = session_manager.Load(session_key, connection_string)
serverName = "SQLServer\InstanceName";
databaseName = "DatabaseName";
connectionString = sprintf("server=%s;Initial Catalog=%s;Trusted_Connection=True", serverName, databaseName);
sessionManager = SessionManager.CreateSessionManager();
sessionSummaries = sessionManager.FindBySessionState(SessionState.Historical, connectionString);
sessionKey = sessionSummaries.Item(0).Key;
clientSession = sessionManager.Load(sessionKey, connectionString);

Loading a Session via GUID#

const string serverName = @"SQLServer\InstanceName";
const string dbName = "DatabaseName";
const string connectionString = $@"server={serverName};Initial Catalog={dbName};Trusted_Connection=True";
string sessionKeyGUID = "c5668a15-a996-444b-8cd4-0895e0bd11b3";
var sessionManager = SessionManager.CreateSessionManager();
clientSession = sessionManager.Load(SessionKey.Parse(sessionKeyGUID), connectionString);
server_name = r"SQLServer\InstanceName"
db_name = "DatabaseName"
connection_string = rf"server={serverName};Initial Catalog={dbName};Trusted_Connection=True"
session_key_guid = "c5668a15-a996-444b-8cd4-0895e0bd11b3"
session_manager = SessionManager.CreateSessionManager()
client_session = sessionManager.Load(SessionKey.Parse(session_key_guid), connectionString)
serverName = "SQLServer\InstanceName";
databaseName = "DatabaseName";
connectionString = sprintf("server=%s;Initial Catalog=%s;Trusted_Connection=True", serverName, databaseName);
sessionKeyGUID = "c5668a15-a996-444b-8cd4-0895e0bd11b3";
sessionManager = SessionManager.CreateSessionManager();
clientSession = sessionManager.Load(SessionKey.Parse(sessionKeyGUID), connectionString);

Filter Sessions with QueryManager and Load#

const string serverName = @"SQLServer\InstanceName";
const string dbName = "DatabaseName";
const string connectionString = $@"server={serverName};Initial Catalog={dbName};Trusted_Connection=True";

var filter = new ScalarFilter("Car", MatchingRule.EqualTo, "1", true);

var compositeFilter = new CompositeFilter(CombineType.AND);
compositeFilter.Add(new ScalarFilter(SessionFieldIdentifiers.SessionStartDateTime, MatchingRule.GreaterThanOrEquals, "2025-07-14 00:00:00.000", true));
compositeFilter.Add(new ScalarFilter(SessionFieldIdentifiers.SessionStartDateTime, MatchingRule.LessThan, "2025-07-18 23:00:00.000", true));

var qm = QueryManager.CreateQueryManager(connectionString);
qm.Filter = filter;
var queryResult = qm.ExecuteQuery();

var sessionManager = SessionManager.CreateSessionManager();

foreach (var sessionSummary in queryResult)
{
    var clientSession = sessionManager.Load(sessionSummary.Key, connectionString);
}
server_name = r"SQLServer\InstanceName"
db_name = "DatabaseName"
connection_string = rf"server={serverName};Initial Catalog={dbName};Trusted_Connection=True"

# filter by session data item
item_filter = ScalarFilter("Car", MatchingRule.EqualTo, "1", True)

# Using a composite filter
composite_filter = CompositeFilter(CombineType.AND)
composite_filter.Add(ScalarFilter(SessionFieldIdentifiers.SessionStartDateTime, MatchingRule.GreaterThanOrEquals, "2025-07-14 00:00:00.000", True))
composite_filter.Add(ScalarFilter(SessionFieldIdentifiers.SessionStartDateTime, MatchingRule.LessThan, "2025-07-18 23:00:00.000", True))

qm = QueryManager.CreateQueryManager(connection_string)
qm.Filter = item_filter
queryResult = qm.ExecuteQuery()  # Returns a list of Session Summaries

session_manager = SessionManager.CreateSessionManager()

for session_summary in queryResult:
    client_session = session_manager.Load(session_summary.Key, connection_string)
serverName = "SQLServer\InstanceName";
dbName = "DatabaseName";
connectionString = sprintf('server=%s;Initial Catalog=%s;Trusted_Connection=True;', serverName, dbName);

filter = ScalarFilter("Car", MatchingRule.EqualTo, "1", true);

compositeFilter = CompositeFilter(CombineType.AND);
compositeFilter.Add(ScalarFilter(SessionFieldIdentifiers.SessionStartDateTime, MatchingRule.GreaterThanOrEquals, "2025-07-14 00:00:00.000", true));
compositeFilter.Add(ScalarFilter(SessionFieldIdentifiers.SessionStartDateTime, MatchingRule.LessThan, "2025-07-18 23:00:00.000", true));

qm = QueryManager.CreateQueryManager(connectionString);
qm.Filter = filter;
queryResult = qm.ExecuteQuery();

% Get IEnumerable.GetEnumerator() via reflection and invoke it
t = queryResult.GetType();
ienumIface = t.GetInterface('System.Collections.IEnumerable'); % the non-generic interface
assert(~isempty(ienumIface), 'Object does not implement System.Collections.IEnumerable');

miGetEnum = ienumIface.GetMethod('GetEnumerator'); % MethodInfo
emptyArgs = NET.createArray('System.Object', 0);
en = miGetEnum.Invoke(queryResult, emptyArgs); % returns an IEnumerator (explicit impl)

% Prepare reflection handles for IEnumerator.MoveNext and IEnumerator.Current
ienumeratorT = System.Type.GetType('System.Collections.IEnumerator');
miMoveNext = ienumeratorT.GetMethod('MoveNext'); % MethodInfo for bool MoveNext()
propCurrent = ienumeratorT.GetProperty('Current'); % PropertyInfo for object Current {get;}
miGetCurrent = propCurrent.GetGetMethod(); % MethodInfo for getter

% Walk the sequence using interface methods
summaries = {}; % MATLAB cell array to collect MESL.SqlRace.Domain.SessionSummary objects

while miMoveNext.Invoke(en, emptyArgs) % calls IEnumerator.MoveNext()
    curr = miGetCurrent.Invoke(en, emptyArgs); % calls IEnumerator.get_Current()
    summaries{end+1} = curr;
end

sessionManager = SessionManager.CreateSessionManager();

for j = 1:numel(summaries)
    ss = summaries{j};  % MESL.SqlRace.Domain.SessionSummary
    clientSession = sessionManager.Load(ss.Key, connectionString);
end