From fd6cd6a911d1d99e79c14b9796c6a2e918a1291a Mon Sep 17 00:00:00 2001 From: Javier Sancho Date: Tue, 15 May 2018 12:56:57 +0200 Subject: [PATCH] Support queries in PyTables style --- datasette_pytables/__init__.py | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/datasette_pytables/__init__.py b/datasette_pytables/__init__.py index 0bbb25f..50628e7 100644 --- a/datasette_pytables/__init__.py +++ b/datasette_pytables/__init__.py @@ -99,19 +99,26 @@ class Connection: # Use 'where' statement or get all the rows if 'where' in parsed_sql: - query = [] + query = '' start = 0 end = table.nrows - for condition in parsed_sql['where'].get_sublists(): - if str(condition) == '"rowid"=:p0': - start = int(params['p0']) - end = start + 1 - else: - translated, params = _translate_condition(table, condition, params) - query.append(translated) + try: + conditions = [] + for condition in parsed_sql['where'].get_sublists(): + if str(condition) == '"rowid"=:p0': + start = int(params['p0']) + end = start + 1 + else: + translated, params = _translate_condition(table, condition, params) + conditions.append(translated) + if conditions: + query = ') & ('.join(conditions) + query = '(' + query + ')' + except: + # Probably it's a PyTables query + query = str(parsed_sql['where'])[6:] # without where keyword + if query: - query = ') & ('.join(query) - query = '(' + query + ')' table_rows = table.where(query, params, start, end) else: table_rows = table.iterrows(start, end) -- 2.39.2