display_columns_and_rows() no longer uses inspect, refs #420

This commit is contained in:
Simon Willison 2019-04-06 20:11:08 -07:00
commit c882e9262f
3 changed files with 20 additions and 21 deletions

View file

@ -3,6 +3,7 @@ import hashlib
from .utils import (
detect_spatialite,
detect_fts,
detect_primary_keys,
escape_sqlite,
get_all_foreign_keys,
table_columns,
@ -31,19 +32,6 @@ def inspect_views(conn):
return [v[0] for v in conn.execute('select name from sqlite_master where type = "view"')]
def detect_primary_keys(conn, table):
" Figure out primary keys for a table. "
table_info_rows = [
row
for row in conn.execute(
'PRAGMA table_info("{}")'.format(table)
).fetchall()
if row[-1]
]
table_info_rows.sort(key=lambda row: row[-1])
return [str(r[1]) for r in table_info_rows]
def inspect_tables(conn, database_metadata):
" List tables and their row counts, excluding uninteresting tables. "
tables = {}

View file

@ -475,6 +475,19 @@ def temporary_heroku_directory(
os.chdir(saved_cwd)
def detect_primary_keys(conn, table):
" Figure out primary keys for a table. "
table_info_rows = [
row
for row in conn.execute(
'PRAGMA table_info("{}")'.format(table)
).fetchall()
if row[-1]
]
table_info_rows.sort(key=lambda row: row[-1])
return [str(r[1]) for r in table_info_rows]
def get_outbound_foreign_keys(conn, table):
infos = conn.execute(
'PRAGMA foreign_key_list([{}])'.format(table)

View file

@ -11,6 +11,7 @@ from datasette.utils import (
InterruptedError,
append_querystring,
compound_keys_after_sql,
detect_primary_keys,
escape_sqlite,
filters_should_redirect,
is_url,
@ -110,19 +111,16 @@ class RowTableShared(BaseView):
):
"Returns columns, rows for specified table - including fancy foreign key treatment"
table_metadata = self.ds.table_metadata(database, table)
info = self.ds.inspect()[database]
sortable_columns = await self.sortable_columns_for_table(database, table, True)
columns = [
{"name": r[0], "sortable": r[0] in sortable_columns} for r in description
]
tables = info["tables"]
table_info = tables.get(table) or {}
pks = table_info.get("primary_keys") or []
pks = await self.ds.execute_against_connection_in_thread(
database, lambda conn: detect_primary_keys(conn, table)
)
column_to_foreign_key_table = {
fk["column"]: fk["other_table"]
for fk in table_info.get(
"foreign_keys", {}
).get("outgoing", None) or []
for fk in await self.ds.foreign_keys_for_table(database, table)
}
cell_rows = []
@ -600,7 +598,7 @@ class TableView(RowTableShared):
if columns_to_expand:
expanded_labels = {}
for fk, label_column in expandable_columns:
for fk, _ in expandable_columns:
column = fk["column"]
if column not in columns_to_expand:
continue