From 875117c343e454221ef023be6ad977fdaea3ceda Mon Sep 17 00:00:00 2001 From: Simon Willison Date: Sat, 9 Oct 2021 18:14:56 -0700 Subject: [PATCH] Fix bug with ?_next=x&_sort=rowid, closes #1470 --- datasette/views/table.py | 6 ++++-- tests/test_html.py | 6 ++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/datasette/views/table.py b/datasette/views/table.py index 83f7c7cb..e8c66d3c 100644 --- a/datasette/views/table.py +++ b/datasette/views/table.py @@ -588,13 +588,15 @@ class TableView(RowTableShared): _next = _next or special_args.get("_next") offset = "" if _next: + sort_value = None if is_view: # _next is an offset offset = f" offset {int(_next)}" else: components = urlsafe_components(_next) - # If a sort order is applied, the first of these is the sort value - if sort or sort_desc: + # If a sort order is applied and there are multiple components, + # the first of these is the sort value + if (sort or sort_desc) and (len(components) > 1): sort_value = components[0] # Special case for if non-urlencoded first token was $null if _next.split(",")[0] == "$null": diff --git a/tests/test_html.py b/tests/test_html.py index e73ccd2f..c22d87da 100644 --- a/tests/test_html.py +++ b/tests/test_html.py @@ -1817,3 +1817,9 @@ def test_facet_total_shown_if_facet_max_size(use_facet_size_max): assert fragment in response.text else: assert fragment not in response.text + + +def test_sort_rowid_with_next(app_client): + # https://github.com/simonw/datasette/issues/1470 + response = app_client.get("/fixtures/binary_data?_size=1&_next=1&_sort=rowid") + assert response.status == 200