Perform buffered select queries :return: list of list of query results
(self)
| 622 | self._select_statements_and_parameters_with_decoders.extend(statements_and_parameters_with_decoders) |
| 623 | |
| 624 | def collect_select_buffer(self): |
| 625 | """ |
| 626 | Perform buffered select queries |
| 627 | |
| 628 | :return: list of list of query results |
| 629 | """ |
| 630 | if not self._select_statements_and_parameters_with_decoders: |
| 631 | return [] |
| 632 | # copy the underlying list in a python2/3 compatible way |
| 633 | buffer = list(self._select_statements_and_parameters_with_decoders) |
| 634 | # delete the actual elements in a python2/3 compatible way |
| 635 | del self._select_statements_and_parameters_with_decoders[:] |
| 636 | statements_and_parameters, decoders = zip(*buffer) |
| 637 | |
| 638 | ret = collections.defaultdict(list) |
| 639 | query_results = self._select(statements_and_parameters) |
| 640 | for rows, (key_decoder, val_decoder) in zip(query_results, decoders): |
| 641 | for row in rows: |
| 642 | ret[key_decoder(row.key)].append((val_decoder(row.value), row.ts)) |
| 643 | return [ |
| 644 | [x[0] for x in sorted(v, key=operator.itemgetter(1))] for v in ret.values() |
| 645 | ] |
| 646 | |
| 647 | def select(self, keys): |
| 648 | """ |