Implemented custom SQL via textarea

Closes #65
This commit is contained in:
Simon Willison 2017-11-11 18:35:35 -08:00
commit 59580d02da
4 changed files with 92 additions and 1 deletions

View file

@ -243,6 +243,8 @@ class DatabaseView(BaseView):
template = 'database.html'
async def data(self, request, name, hash):
if request.args.get('sql'):
return await self.custom_sql(request, name, hash)
tables = []
table_metadata = self.ds.metadata()[name]['tables']
for table_name, table_rows in table_metadata.items():
@ -265,6 +267,25 @@ class DatabaseView(BaseView):
'database_hash': hash,
}
async def custom_sql(self, request, name, hash):
params = request.raw_args
sql = params.pop('sql')
validate_sql_select(sql)
rows = await self.execute(name, sql, params)
columns = [r[0] for r in rows.description]
return {
'database': name,
'rows': rows,
'columns': columns,
'query': {
'sql': sql,
'params': params,
}
}, {
'database_hash': hash,
'custom_sql': True,
}
class DatabaseDownload(BaseView):
async def view_get(self, request, name, hash, **kwargs):