mirror of
https://github.com/simonw/datasette.git
synced 2025-12-10 16:51:24 +01:00
_sort= works even if sort column not selected, closes #1773
This commit is contained in:
parent
8eb699de7b
commit
df4fd2d7dd
2 changed files with 23 additions and 1 deletions
|
|
@ -630,7 +630,27 @@ class TableView(DataView):
|
|||
next_value = path_from_row_pks(rows[-2], pks, use_rowid)
|
||||
# If there's a sort or sort_desc, add that value as a prefix
|
||||
if (sort or sort_desc) and not is_view:
|
||||
prefix = rows[-2][sort or sort_desc]
|
||||
try:
|
||||
prefix = rows[-2][sort or sort_desc]
|
||||
except IndexError:
|
||||
# sort/sort_desc column missing from SELECT - look up value by PK instead
|
||||
prefix_where_clause = " and ".join(
|
||||
"[{}] = :pk{}".format(pk, i) for i, pk in enumerate(pks)
|
||||
)
|
||||
prefix_lookup_sql = "select [{}] from [{}] where {}".format(
|
||||
sort or sort_desc, table_name, prefix_where_clause
|
||||
)
|
||||
prefix = (
|
||||
await db.execute(
|
||||
prefix_lookup_sql,
|
||||
{
|
||||
**{
|
||||
"pk{}".format(i): rows[-2][pk]
|
||||
for i, pk in enumerate(pks)
|
||||
}
|
||||
},
|
||||
)
|
||||
).single_value()
|
||||
if isinstance(prefix, dict) and "value" in prefix:
|
||||
prefix = prefix["value"]
|
||||
if prefix is None:
|
||||
|
|
|
|||
|
|
@ -288,6 +288,8 @@ def test_paginate_compound_keys_with_extra_filters(app_client):
|
|||
),
|
||||
# text column contains '$null' - ensure it doesn't confuse pagination:
|
||||
("_sort=text", lambda row: row["text"], "sorted by text"),
|
||||
# Still works if sort column removed using _col=
|
||||
("_sort=text&_col=content", lambda row: row["text"], "sorted by text"),
|
||||
],
|
||||
)
|
||||
def test_sortable(app_client, query_string, sort_key, human_description_en):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue