fix(mcp): fix crashes in list tools, dataset info, chart preview, and add owner/favorite filters (#38277)

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Amin Ghadersohi
2026-03-13 12:46:52 +01:00
committed by GitHub
parent f458e2d484
commit d5cf77cd60
25 changed files with 297 additions and 72 deletions

View File

@@ -702,6 +702,41 @@ class TestExecuteSql:
with pytest.raises(ToolError, match="less than or equal to 10000"):
await client.call_tool("execute_sql", {"request": request})
@patch("superset.security_manager")
@patch("superset.db")
@pytest.mark.asyncio
async def test_execute_sql_no_limit_respects_sql(
self, mock_db, mock_security_manager, mcp_server
):
"""Test that omitting limit lets the SQL LIMIT clause be respected."""
mock_database = _mock_database()
mock_database.execute.return_value = _create_select_result(
rows=[{"id": i} for i in range(5)],
columns=["id"],
original_sql="SELECT id FROM users LIMIT 5",
)
mock_db.session.query.return_value.filter_by.return_value.first.return_value = (
mock_database
)
mock_security_manager.can_access_database.return_value = True
# No 'limit' key — should default to None (no override)
request = {
"database_id": 1,
"sql": "SELECT id FROM users LIMIT 5",
}
async with Client(mcp_server) as client:
result = await client.call_tool("execute_sql", {"request": request})
data = result.structured_content
assert data["success"] is True
# Verify limit=None was passed to QueryOptions (no override)
call_args = mock_database.execute.call_args
options = call_args[0][1]
assert options.limit is None
@patch("superset.security_manager")
@patch("superset.db")
@pytest.mark.asyncio