Ejemplo n.º 1
0
    def test_select_from_timeout(self):
        from relstorage.tests import mock
        from relstorage.adapters.interfaces import AggregateOperationTimeoutError
        cursor = MockCursor()
        cursor.sort_sequence_params = True
        cursor.many_results = [[(1, 1)], [(2, 1)], [(3, 1)], []]
        batcher = self.getClass()(cursor)
        batcher.bind_limit = 1
        batcher.perf_counter = mock.Mock()
        # These will be the time values returned from perf_counter()
        batcher.perf_counter.side_effect = (
            12345,  # Begin
            12346,  # First batch
            12347,  # Second batch
        )

        gener = batcher.select_from((
            'zoid',
            'tid',
        ),
                                    'object_state',
                                    timeout=2,
                                    oids=[1, 2, 3, 4, 5])
        rows = []
        with self.assertRaises(AggregateOperationTimeoutError):
            for row in gener:
                rows.append(row)

        # We ran exactly twice before the perf_counter exceeded the timeout.
        self.assertEqual(rows, [
            (1, 1),
            (2, 1),
        ])
Ejemplo n.º 2
0
 def test_select_multiple_one_batch(self):
     cursor = MockCursor()
     cursor.sort_sequence_params = True
     batcher = self.getClass()(cursor)
     list(
         batcher.select_from(('zoid', 'tid'),
                             'object_state',
                             oids=(1, 2, 3, 4)))
     self.assertEqual(
         cursor.executed,
         [(self.select_multiple_one_batch, self._in(1, 2, 3, 4))])
Ejemplo n.º 3
0
 def test_delete_auto_flush(self):
     cursor = MockCursor()
     cursor.sort_sequence_params = True
     batcher = self.getClass()(cursor, 2)
     batcher.sorted_deletes = True
     batcher.delete_from("mytable", id=2)
     batcher.delete_from("mytable", id=1)
     self.assertEqual(cursor.executed,
                      [(self.delete_auto_flush, self._in(1, 2))])
     self.assertEqual(batcher.rows_added, 0)
     self.assertEqual(batcher.size_added, 0)
     self.assertEqual(batcher.deletes, {})
     self.assertEqual(batcher.total_rows_inserted, 0)
     self.assertEqual(batcher.total_rows_deleted, 2)
     self.assertEqual(batcher.total_size_inserted, 0)
Ejemplo n.º 4
0
    def test_select_multiple_many_batch(self, batch_limit_attr='row_limit'):
        cursor = MockCursor()
        cursor.sort_sequence_params = True
        cursor.many_results = [[(1, 1)], [(3, 1)], []]
        batcher = self.getClass()(cursor)
        setattr(batcher, batch_limit_attr, 2)
        rows = batcher.select_from(('zoid', 'tid'),
                                   'object_state',
                                   oids=iter((1, 2, 3, 4, 5)))
        rows = list(rows)

        self.assertEqual(cursor.executed, [
            (self.select_multiple_many_batch, self._in(1, 2)),
            (self.select_multiple_many_batch, self._in(3, 4)),
            (self.select_one, self._in(5)),
        ])

        self.assertEqual(rows, [(1, 1), (3, 1)])