in src/dma/lib/db/adapters/oracledb.py [0:0]
def process_sql(self, query_name: str, op_type: SQLOperationType, sql: str) -> str:
adj = 0
for match in VAR_REF.finditer(sql):
gd = match.groupdict()
# Do nothing if the match is found within quotes.
if gd["dquote"] is not None or gd["squote"] is not None:
continue
var_name = gd["var_name"]
if var_name in self.var_sorted[query_name]:
replacement = f"${self.var_sorted[query_name].index(var_name) + 1}"
else:
replacement = f"${len(self.var_sorted[query_name]) + 1}"
self.var_sorted[query_name].append(var_name)
# Determine the offset of the start and end of the original
# variable that we are replacing, taking into account an adjustment
# factor based on previous replacements (see the note below).
start = match.start() + len(gd["lead"]) + adj
end = match.end() + adj
sql = sql[:start] + replacement + sql[end:]
# If the replacement and original variable were different lengths,
# then the offsets of subsequent matches will be wrong by the
# difference. Calculate an adjustment to apply to reconcile those
# offsets with the modified string.
#
# The "- 1" is to account for the leading ":" character in the
# original string.
adj += len(replacement) - len(var_name) - 1
return sql