fix: execute_query now handles positional tuple params directly

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Lizandro Guarnizo
2026-07-21 16:26:22 -05:00
co-authored by Claude Sonnet 4.6
parent 329157ca7a
commit 0a234f056c
+5 -4
View File
@@ -78,16 +78,17 @@ class FirebirdService:
try: try:
cur = self.conn.cursor() cur = self.conn.cursor()
if params: if params:
# fdb no soporta :name — convertir a positional ? if isinstance(params, (list, tuple)):
# Parámetros posicionales directos (?)
cur.execute(query, params)
else:
# Parámetros nombrados (:name) → convertir a positional
param_names = re.findall(r':([a-zA-Z_][a-zA-Z0-9_]*)', query) param_names = re.findall(r':([a-zA-Z_][a-zA-Z0-9_]*)', query)
if param_names:
positional_sql = re.sub(r':[a-zA-Z_][a-zA-Z0-9_]*', '?', query) positional_sql = re.sub(r':[a-zA-Z_][a-zA-Z0-9_]*', '?', query)
positional_vals = [params[n] for n in param_names] positional_vals = [params[n] for n in param_names]
cur.execute(positional_sql, positional_vals) cur.execute(positional_sql, positional_vals)
else: else:
cur.execute(query) cur.execute(query)
else:
cur.execute(query)
columns = [desc[0] for desc in cur.description] if cur.description else [] columns = [desc[0] for desc in cur.description] if cur.description else []
rows = cur.fetchall() rows = cur.fetchall()
return True, "", [{c: _safe(v) for c, v in zip(columns, row)} for row in rows] return True, "", [{c: _safe(v) for c, v in zip(columns, row)} for row in rows]