X-Git-Url: https://git.jsancho.org/?p=datasette-pytables.git;a=blobdiff_plain;f=datasette_pytables%2F__init__.py;h=b857ee179bb744a1e64dca0fa09834fb8ee35b53;hp=0bbb25f9cd63eb55c4ab37212984d0aaea1a221a;hb=3fd7cb84292466fee240a896079d9a0c8d6be2d8;hpb=ab2cd56eb3c5b15410fecdc19e037ff3b6ff6a63 diff --git a/datasette_pytables/__init__.py b/datasette_pytables/__init__.py index 0bbb25f..b857ee1 100644 --- a/datasette_pytables/__init__.py +++ b/datasette_pytables/__init__.py @@ -97,26 +97,39 @@ class Connection: table_rows = [] fields = parsed_sql['select'].split(',') + query = '' + start = 0 + end = table.nrows + # Use 'where' statement or get all the rows if 'where' in parsed_sql: - 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) - if query: - query = ') & ('.join(query) - query = '(' + query + ')' - table_rows = table.where(query, params, start, end) - else: - table_rows = table.iterrows(start, end) + 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 + + # Limit number of rows + if 'limit' in parsed_sql: + max_rows = int(parsed_sql['limit']) + if end - start > max_rows: + end = start + max_rows + + # Execute query + if query: + table_rows = table.where(query, params, start, end) else: - table_rows = table.iterrows() + table_rows = table.iterrows(start, end) # Prepare rows if len(fields) == 1 and fields[0] == 'count(*)':