Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def scroll_trough_iter(it):
- while True:
- try:
- yield next(it)
- except StopIteration:
- break
- class OuterJoiner(Joiner):
- """Join with outer strategy"""
- def __call__(self, keys: Sequence[str], rows_a: Iterable[Row], rows_b: Iterable[Row]) -> OperationResult:
- a_iter = iter(rows_a)
- b_iter = iter(rows_b)
- try:
- row_a = next(a_iter)
- row_b = next(b_iter)
- while True:
- indx_a = self._perform_index(row_a, keys)
- indx_b = self._perform_index(row_b, keys)
- if indx_a == indx_b:
- yield self._concat_rows(row_a, row_b, keys)
- try:
- row_a = next(a_iter)
- except StopIteration:
- break
- try:
- row_b = next(b_iter)
- except StopIteration:
- yield row_a
- break
- if indx_a < indx_b:
- yield row_a
- row_a = next(a_iter)
- if indx_a > indx_b:
- yield row_b
- row_b = next(b_iter)
- except StopIteration:
- scroll_trough_iter(a_iter)
- scroll_trough_iter(b_iter)
- class LeftJoiner(Joiner):
- """Join with left strategy"""
- def __call__(self, keys: Sequence[str], rows_a: Iterable[Row], rows_b: Iterable[Row]) -> OperationResult:
- a_iter = iter(rows_a)
- b_iter = iter(rows_b)
- try:
- row_a = next(a_iter)
- row_b = next(b_iter)
- while True:
- indx_a = self._perform_index(row_a, keys)
- indx_b = self._perform_index(row_b, keys)
- if indx_a == indx_b:
- yield self._concat_rows(row_a, row_b, keys)
- try:
- row_a = next(a_iter)
- except StopIteration:
- break
- if indx_a < indx_b:
- yield row_a
- row_a = next(a_iter)
- if indx_a > indx_b:
- try:
- row_b = next(b_iter)
- except StopIteration:
- yield row_a
- break
- except StopIteration:
- scroll_trough_iter(a_iter)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement