X-Git-Url: https://git.jsancho.org/?p=datasette-pytables.git;a=blobdiff_plain;f=datasette_pytables%2F__init__.py;h=93cc1f082fd6eef31e0250ef644080cf4474303c;hp=5d9fb22f78a88601900a08396b40541267f967c1;hb=6e8ac54ac9cc83d82ae2482dcec518a1f09991fa;hpb=a0ba326e2827753049cf411967bea0503c30154a diff --git a/datasette_pytables/__init__.py b/datasette_pytables/__init__.py index 5d9fb22..93cc1f0 100644 --- a/datasette_pytables/__init__.py +++ b/datasette_pytables/__init__.py @@ -71,7 +71,7 @@ class Connection: self.path = path self.h5file = tables.open_file(path) - def execute(self, sql, params=None, truncate=False, page_size=None): + def execute(self, sql, params=None, truncate=False, page_size=None, max_returned_rows=None): if params is None: params = {} rows = [] @@ -145,9 +145,11 @@ class Connection: end = start + max_rows # Truncate if needed - if page_size and truncate: - if end - start > page_size: - end = start + page_size + if page_size and max_returned_rows and truncate: + if max_returned_rows == page_size: + max_returned_rows += 1 + if end - start > max_returned_rows: + end = start + max_returned_rows truncated = True # Execute query @@ -232,12 +234,29 @@ class Connection: else: raise Exception("SQLite queries cannot be executed with this connector") -class Row(OrderedDict): - def __getitem__(self, label): - if type(label) is int: - return super(OrderedDict, self).__getitem__(list(self.keys())[label]) +class Row(list): + def __init__(self, values=None): + self.labels = [] + self.values = [] + if values: + for idx in values: + self.__setitem__(idx, values[idx]) + + def __setitem__(self, idx, value): + if type(idx) is str: + if idx in self.labels: + self.values[self.labels.index(idx)] = value + else: + self.labels.append(idx) + self.values.append(value) + else: + self.values[idx] = value + + def __getitem__(self, idx): + if type(idx) is str: + return self.values[self.labels.index(idx)] else: - return super(OrderedDict, self).__getitem__(label) + return self.values[idx] def __iter__(self): - return self.values().__iter__() + return self.values.__iter__()