New _nocount=1 option, used to speed up CSVs - closes #1353

This commit is contained in:
Simon Willison 2021-06-01 09:12:32 -07:00
commit fd368d3b2c
5 changed files with 34 additions and 5 deletions

View file

@ -263,12 +263,19 @@ class DataView(BaseView):
async def as_csv(self, request, database, hash, **kwargs):
stream = request.args.get("_stream")
# Do not calculate facets:
if not request.args.get("_nofacet"):
# Do not calculate facets or counts:
extra_parameters = [
"{}=1".format(key)
for key in ("_nofacet", "_nocount")
if not request.args.get(key)
]
if extra_parameters:
if not request.query_string:
new_query_string = "_nofacet=1"
new_query_string = "&".join(extra_parameters)
else:
new_query_string = request.query_string + "&_nofacet=1"
new_query_string = (
request.query_string + "&" + "&".join(extra_parameters)
)
new_scope = dict(
request.scope, query_string=new_query_string.encode("latin-1")
)

View file

@ -697,7 +697,11 @@ class TableView(RowTableShared):
except KeyError:
pass
if count_sql and filtered_table_rows_count is None:
if (
count_sql
and filtered_table_rows_count is None
and not request.args.get("_nocount")
):
try:
count_rows = list(await db.execute(count_sql, from_sql_params))
filtered_table_rows_count = count_rows[0][0]