From a0ba326e2827753049cf411967bea0503c30154a Mon Sep 17 00:00:00 2001 From: Javier Sancho Date: Thu, 24 May 2018 12:24:52 +0200 Subject: [PATCH] Process some sqlite standard queries for obtaining tables info --- datasette_pytables/__init__.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/datasette_pytables/__init__.py b/datasette_pytables/__init__.py index 74c72b1..5d9fb22 100644 --- a/datasette_pytables/__init__.py +++ b/datasette_pytables/__init__.py @@ -79,6 +79,10 @@ class Connection: description = [] parsed_sql = _parse_sql(sql, params) + + if parsed_sql['from'] == 'sqlite_master': + return self._execute_datasette_query(sql, params) + table = self.h5file.get_node(parsed_sql['from']) table_rows = [] fields = parsed_sql['select'] @@ -211,6 +215,23 @@ class Connection: else: return rows + def _execute_datasette_query(self, sql, params): + "Datasette special queries for getting tables info" + if sql == "SELECT count(*) from sqlite_master WHERE type = 'view' and name=:n": + row = Row() + row['count(*)'] = 0 + return [row] + elif sql == 'select sql from sqlite_master where name = :n and type="table"': + try: + table = self.h5file.get_node(params['n']) + row = Row() + row['sql'] = 'CREATE TABLE {} ()'.format(params['n']) + return [row] + except: + return [] + else: + raise Exception("SQLite queries cannot be executed with this connector") + class Row(OrderedDict): def __getitem__(self, label): if type(label) is int: -- 2.39.5