"""Shared database access for Thinker and Expert nodes.""" import logging log = logging.getLogger("runtime") DB_HOST = "mariadb-eras" DB_USER = "root" DB_PASS = "root" ALLOWED_DATABASES = ("eras2_production", "plankiste_test") def run_db_query(query: str, database: str = "eras2_production", host: str = DB_HOST, user: str = DB_USER, password: str = DB_PASS) -> str: """Execute a read-only SQL query against MariaDB. Returns tab-separated results.""" import pymysql trimmed = query.strip().upper() if not (trimmed.startswith("SELECT") or trimmed.startswith("DESCRIBE") or trimmed.startswith("SHOW")): return "Error: Only SELECT/DESCRIBE/SHOW queries allowed" if database not in ALLOWED_DATABASES: return f"Error: Unknown database '{database}'" conn = pymysql.connect(host=host, user=user, password=password, database=database, connect_timeout=5, read_timeout=15) try: with conn.cursor() as cur: cur.execute(query) rows = cur.fetchall() if not rows: return "(no results)" cols = [d[0] for d in cur.description] lines = ["\t".join(cols)] for row in rows: lines.append("\t".join(str(v) if v is not None else "" for v in row)) return "\n".join(lines) finally: conn.close()