else:
query = parsed_sql['where']
+ # Sort by column
+ orderby = ''
+ if 'orderby' in parsed_sql:
+ orderby = parsed_sql['orderby']
+ if type(orderby) is list:
+ orderby = orderby[0]
+ orderby = orderby['value']
+ if orderby == 'rowid':
+ orderby = ''
+
# Limit number of rows
limit = None
if 'limit' in parsed_sql:
# Execute query
if query:
table_rows = table.where(query, params, start, end)
+ elif orderby:
+ table_rows = table.itersorted(orderby, start=start, stop=end)
else:
table_rows = table.iterrows(start, end)
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'])
- colnames = ['value']
- if type(table) is tables.table.Table:
- colnames = table.colnames
- row = Row()
- row['sql'] = 'CREATE TABLE {} ({})'.format(params['n'], ", ".join(colnames))
- return [row]
- except:
+ if sql == 'select sql from sqlite_master where name = :n and type=:t':
+ if params['t'] == 'view':
return []
+ else:
+ try:
+ table = self.h5file.get_node(params['n'])
+ colnames = ['value']
+ if type(table) is tables.table.Table:
+ colnames = table.colnames
+ row = Row()
+ row['sql'] = 'CREATE TABLE {} ({})'.format(params['n'], ", ".join(colnames))
+ return [row]
+ except:
+ return []
else:
- raise Exception("SQLite queries cannot be executed with this connector")
+ raise Exception("SQLite queries cannot be executed with this connector: %s, %s" % (sql, params))
class Row(list):