Cleaned up view_definition/table_definition code in table view

Also moved those out of standard JSON into just the HTML template context
asgi-first-attempt
Simon Willison 2018-06-16 10:33:17 -07:00
rodzic 7e0caa1e62
commit 0c22fa8f09
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 17E2DEA2588B7F52
2 zmienionych plików z 21 dodań i 33 usunięć

Wyświetl plik

@ -171,6 +171,21 @@ class Datasette:
if query:
return {"name": query_name, "sql": query}
async def get_table_definition(self, database_name, table, type_="table"):
table_definition_rows = list(
await self.execute(
database_name,
'select sql from sqlite_master where name = :n and type=:t',
{"n": table, "t": type_},
)
)
if not table_definition_rows:
return None
return table_definition_rows[0][0]
def get_view_definition(self, database_name, view):
return self.get_table_definition(database_name, view, 'view')
def asset_urls(self, key):
# Flatten list-of-lists from plugins:
seen_urls = set()

Wyświetl plik

@ -243,39 +243,12 @@ class TableView(RowTableShared):
canned_query=table,
)
is_view = bool(
list(
await self.ds.execute(
name,
"SELECT count(*) from sqlite_master WHERE type = 'view' and name=:n",
{"n": table},
)
)[0][0]
)
view_definition = None
table_definition = None
if is_view:
view_definition = list(
await self.ds.execute(
name,
'select sql from sqlite_master where name = :n and type="view"',
{"n": table},
)
)[0][0]
else:
table_definition_rows = list(
await self.ds.execute(
name,
'select sql from sqlite_master where name = :n and type="table"',
{"n": table},
)
)
if not table_definition_rows:
raise NotFound("Table not found: {}".format(table))
table_definition = table_definition_rows[0][0]
is_view = bool(await self.ds.get_view_definition(name, table))
info = self.ds.inspect()
table_info = info[name]["tables"].get(table) or {}
if not is_view and not table_info:
raise NotFound("Table not found: {}".format(table))
pks = table_info.get("primary_keys") or []
use_rowid = not pks and not is_view
if use_rowid:
@ -749,14 +722,14 @@ class TableView(RowTableShared):
"_rows_and_columns.html",
],
"metadata": metadata,
"view_definition": await self.ds.get_view_definition(name, table),
"table_definition": await self.ds.get_table_definition(name, table),
}
return {
"database": name,
"table": table,
"is_view": is_view,
"view_definition": view_definition,
"table_definition": table_definition,
"human_description_en": human_description_en,
"rows": rows[:page_size],
"truncated": results.truncated,