diff --git a/datasette/app.py b/datasette/app.py index 4262e615..19d708f4 100644 --- a/datasette/app.py +++ b/datasette/app.py @@ -243,27 +243,26 @@ class DatabaseView(BaseView): template = 'database.html' async def data(self, request, name, hash): - sql = 'select * from sqlite_master' - custom_sql = False - params = {} - if request.args.get('sql'): - params = request.raw_args - sql = params.pop('sql') - validate_sql_select(sql) - custom_sql = True - rows = await self.execute(name, sql, params) - columns = [r[0] for r in rows.description] + tables = [] + table_metadata = self.ds.metadata()[name]['tables'] + for table_name, table_rows in table_metadata.items(): + rows = await self.execute( + name, + 'PRAGMA table_info({});'.format(table_name) + ) + tables.append({ + 'name': table_name, + 'columns': [r[1] for r in rows], + 'table_rows': table_rows, + }) + tables.sort(key=lambda t: t['name']) + views = await self.execute(name, 'select name from sqlite_master where type = "view"') return { 'database': name, - 'rows': rows, - 'columns': columns, - 'query': { - 'sql': sql, - 'params': params, - } + 'tables': tables, + 'views': [v[0] for v in views], }, { 'database_hash': hash, - 'custom_sql': custom_sql, } diff --git a/datasette/static/app.css b/datasette/static/app.css index 82e2b109..fa8e6fde 100644 --- a/datasette/static/app.css +++ b/datasette/static/app.css @@ -64,3 +64,12 @@ th { .hd :link { text-decoration: none; } + +.db-table p { + margin-top: 0; + margin-bottom: 0.3em; +} +.db-table h2 { + margin-top: 1em; + margin-bottom: 0; +} diff --git a/datasette/templates/database.html b/datasette/templates/database.html index 58cc5748..adaa8fd9 100644 --- a/datasette/templates/database.html +++ b/datasette/templates/database.html @@ -13,6 +13,23 @@
{% endif %} +{% for table in tables %} +{% for column in table.columns[:9] %}{{ column }}{% if not loop.last %}, {% endif %}{% endfor %}{% if table.columns|length > 9 %}...{% endif %}
+{{ "{:,}".format(table.table_rows) }} row{% if table.table_rows == 1 %}{% else %}s{% endif %}
+