in src/SimpleReplay/replay.py [0:0]
def parse_transaction(sql_filename, sql_file_text):
queries = []
time_interval = True
database_name = None
username = None
pid = None
xid = None
query_start_time = ""
query_end_time = ""
query_text = ""
for line in sql_file_text.splitlines():
if line.startswith("--Time interval"):
time_interval = line.split("--Time interval: ")[1].strip()
elif line.startswith("--Record time"):
if query_text.strip():
query = Query(query_start_time, query_end_time, query_text.strip())
queries.append(query)
query_text = ""
query_start_time = dateutil.parser.isoparse(line.split(": ")[1].strip())
query_end_time = query_start_time
elif line.startswith("--Start time"):
query_start_time = dateutil.parser.isoparse(line.split(": ")[1].strip())
elif line.startswith("--End time"):
query_end_time = dateutil.parser.isoparse(line.split(": ")[1].strip())
elif line.startswith("--Database"):
database_name = line.split(": ")[1].strip()
elif line.startswith("--Username"):
username = line.split(": ")[1].strip()
elif line.startswith("--Pid"):
pid = line.split(": ")[1].strip()
elif line.startswith("--Xid"):
xid = line.split(": ")[1].strip()
# remove all other comments
elif not line.startswith("--"):
query_text += " " + line
# fallback to using the filename to retrieve the query details. This should only happen if
# replay is run over an old extraction.
if not all([database_name, username, pid, xid]):
database_name, username, pid, xid = parse_filename(sql_filename)
if not all([database_name, username, pid, xid]):
logger.error(f"Failed to parse filename {sql_filename}")
queries.append(Query(query_start_time, query_end_time, query_text.strip()))
queries.sort(key=lambda query: query.start_time)
transaction_key = get_connection_key(database_name, username, pid)
return Transaction(time_interval, database_name, username, pid, xid, queries, transaction_key)