kopia lustrzana https://github.com/simonw/datasette
rodzic
ab32bd6427
commit
a53d09d919
|
@ -572,6 +572,7 @@ class TableView(RowTableShared):
|
||||||
# _group_count=col1&_group_count=col2
|
# _group_count=col1&_group_count=col2
|
||||||
group_count = special_args_lists.get('_group_count') or []
|
group_count = special_args_lists.get('_group_count') or []
|
||||||
if group_count:
|
if group_count:
|
||||||
|
count_sql = None
|
||||||
sql = 'select {group_cols}, count(*) as "count" from {table_name} {where} group by {group_cols} order by "count" desc limit 100'.format(
|
sql = 'select {group_cols}, count(*) as "count" from {table_name} {where} group by {group_cols} order by "count" desc limit 100'.format(
|
||||||
group_cols=', '.join('"{}"'.format(group_count_col) for group_count_col in group_count),
|
group_cols=', '.join('"{}"'.format(group_count_col) for group_count_col in group_count),
|
||||||
table_name=escape_sqlite_table_name(table),
|
table_name=escape_sqlite_table_name(table),
|
||||||
|
@ -579,6 +580,10 @@ class TableView(RowTableShared):
|
||||||
)
|
)
|
||||||
is_view = True
|
is_view = True
|
||||||
else:
|
else:
|
||||||
|
count_sql = 'select count(*) from {table_name} {where}'.format(
|
||||||
|
table_name=escape_sqlite_table_name(table),
|
||||||
|
where=where_clause,
|
||||||
|
)
|
||||||
sql = 'select {select} from {table_name} {where}{order_by}limit {limit}{offset}'.format(
|
sql = 'select {select} from {table_name} {where}{order_by}limit {limit}{offset}'.format(
|
||||||
select=select,
|
select=select,
|
||||||
table_name=escape_sqlite_table_name(table),
|
table_name=escape_sqlite_table_name(table),
|
||||||
|
@ -620,6 +625,23 @@ class TableView(RowTableShared):
|
||||||
'_next': next_value,
|
'_next': next_value,
|
||||||
}))
|
}))
|
||||||
|
|
||||||
|
# Number of filtered rows in whole set:
|
||||||
|
filtered_table_rows = None
|
||||||
|
if not where_clauses and not is_view:
|
||||||
|
# Use the pre-calculated total
|
||||||
|
filtered_table_rows = table_rows
|
||||||
|
elif not truncated and len(rows) < self.page_size:
|
||||||
|
filtered_table_rows = len(rows)
|
||||||
|
else:
|
||||||
|
# Attempt a full count, if we can do it in < X ms
|
||||||
|
if count_sql:
|
||||||
|
try:
|
||||||
|
count_rows = list(await self.execute(name, count_sql, params))
|
||||||
|
filtered_table_rows = count_rows[0][0]
|
||||||
|
except sqlite3.OperationalError:
|
||||||
|
# Almost certainly hit the timeout
|
||||||
|
pass
|
||||||
|
|
||||||
async def extra_template():
|
async def extra_template():
|
||||||
return {
|
return {
|
||||||
'database_hash': hash,
|
'database_hash': hash,
|
||||||
|
@ -641,6 +663,7 @@ class TableView(RowTableShared):
|
||||||
'rows': rows[:self.page_size],
|
'rows': rows[:self.page_size],
|
||||||
'truncated': truncated,
|
'truncated': truncated,
|
||||||
'table_rows': table_rows,
|
'table_rows': table_rows,
|
||||||
|
'filtered_table_rows': filtered_table_rows,
|
||||||
'columns': columns,
|
'columns': columns,
|
||||||
'primary_keys': pks,
|
'primary_keys': pks,
|
||||||
'query': {
|
'query': {
|
||||||
|
|
Ładowanie…
Reference in New Issue