|
14 | 14 |
|
15 | 15 | RECOMMENDED_CHECKSUM_DURATION = 20 |
16 | 16 |
|
| 17 | +def _make_range(col, min_value=None, max_value=None): |
| 18 | + if min_value is not None: |
| 19 | + yield min_value <= col |
| 20 | + if max_value is not None: |
| 21 | + yield col < max_value |
| 22 | + |
17 | 23 |
|
18 | 24 | @dataclass |
19 | 25 | class TableSegment: |
@@ -78,28 +84,25 @@ def with_schema(self) -> "TableSegment": |
78 | 84 |
|
79 | 85 | return self._with_raw_schema(self.database.query_table_schema(self.table_path)) |
80 | 86 |
|
81 | | - def _make_key_range(self): |
82 | | - if self.min_key is not None: |
83 | | - assert len(self.key_columns) == 1 |
84 | | - (k,) = self.key_columns |
85 | | - yield self.min_key <= this[k] |
86 | | - if self.max_key is not None: |
| 87 | + def _make_where(self): |
| 88 | + # min_key <= x < max_key |
| 89 | + if self.min_key is not None and self.max_key is not None: |
87 | 90 | assert len(self.key_columns) == 1 |
88 | 91 | (k,) = self.key_columns |
89 | | - yield this[k] < self.max_key |
| 92 | + yield from _make_range(this[k], self.min_key, self.max_key) |
| 93 | + |
| 94 | + # min_update <= x < max_update |
| 95 | + yield from _make_range(this[self.update_column], self.min_update, self.max_update) |
90 | 96 |
|
91 | | - def _make_update_range(self): |
92 | | - if self.min_update is not None: |
93 | | - yield self.min_update <= this[self.update_column] |
94 | | - if self.max_update is not None: |
95 | | - yield this[self.update_column] < self.max_update |
| 97 | + # user-defined where |
| 98 | + yield self.where or SKIP |
96 | 99 |
|
97 | 100 | @property |
98 | 101 | def source_table(self): |
99 | 102 | return table(*self.table_path, schema=self._schema) |
100 | 103 |
|
101 | 104 | def make_select(self): |
102 | | - return self.source_table.where(*self._make_key_range(), *self._make_update_range(), self.where or SKIP) |
| 105 | + return self.source_table.where(*self._make_where()) |
103 | 106 |
|
104 | 107 | def get_values(self) -> list: |
105 | 108 | "Download all the relevant values of the segment from the database" |
|
0 commit comments