redash-query-runner-extensibility-pattern

Redash’s extensibility crown jewel is BaseQueryRunner in redash/query_runner/init.py requiring 4 methods: run_query(query, user), get_schema(), test_connection(), configuration_schema() → JSON Schema dict. BaseSQLQueryRunner adds limit injection via sqlparse; BaseHTTPQueryRunner adds SSRF defense via advocate library. New connectors register via module-level register(cls) and are enabled by listing in REDASH_ENABLED_QUERY_RUNNERS env var — no core changes needed.