Esempio n. 1
0
 def test_read_1_record(self):
     pr = PageRange(5)
     columns = [20, 21, 22, 23, 24]
     pr.add_record(0, columns)
     self.assertTrue(pr.num_base_records == 1)
     data = pr.get_record(0, [1, 1, 1, 1, 1])
     self.assertTrue(columns == data)
Esempio n. 2
0
    def test_add_8192_records(self):
        pr = PageRange(5)
        columns = []
        for i in range(8192):
            columns.append([20 + i, 21 + i, 22 + i, 23 + i, 24 + i])
            pr.add_record(i, columns[i])

        self.assertTrue(pr.num_base_records == 8192)
Esempio n. 3
0
    def test_read_8192_records(self):
        pr = PageRange(5)
        columns = []
        for i in range(8192):
            columns.append([20 + i, 21 + i, 22 + i, 23 + i, 24 + i])
            pr.add_record(i, columns[i])

        read_data = []
        for i in range(8192):
            read_data.append(pr.get_record(i, [1, 1, 1, 1, 1]))

        self.assertTrue(columns == read_data)
Esempio n. 4
0
 def test_update_twice_1_record_2(self):
     pr = PageRange(5)
     update = [0, 1, 2, 3, 4]
     pr.add_record(0, [20, 21, 22, 23, 24])
     pr.update_record(0, 0, update)
     self.assertTrue(pr.num_tail_records == 1)
     update = [500, None, 700, None, 900]
     pr.update_record(0, 1, update)
     data = pr.get_record(0, [1, 1, 1, 1, 1])
     self.assertTrue(pr.num_base_records == 1)
     self.assertTrue(pr.num_tail_records == 2)
     self.assertTrue(data == [500, 1, 700, 3, 900])
Esempio n. 5
0
    def __load_record_from_disk(self, rid, page_range_index, set_type):
        block_start_index = self.brid_block_start[
            rid] if set_type == BASE_RID_TYPE else self.trid_block_start[rid]

        if set_type == BASE_RID_TYPE:
            page_set_index = block_start_index // (self.num_columns +
                                                   META_DATA_PAGES)
            page_set, brids, times, schema, indir, indir_t = BUFFER_POOL.get_page_set(
                self.name, self.num_columns, self.disk, page_range_index,
                page_set_index, set_type, block_start_index)
            if self.page_ranges.get(
                    page_range_index) is None:  # check if page range exists
                self.page_ranges[page_range_index] = PageRange(
                    self.num_columns)

            self.__add_brids_to_page_directory(brids, indir, indir_t,
                                               page_range_index,
                                               page_set_index)
            self.page_ranges[page_range_index].add_base_page_set_from_disk(
                page_set, page_set_index, brids, times, schema, indir, indir_t)
        else:
            page_set_index = len(
                self.page_ranges[page_range_index].tail_page_sets)
            page_set, trids, times, schema, indir, indir_t = BUFFER_POOL.get_page_set(
                self.name, self.num_columns, self.disk, page_range_index,
                page_set_index, set_type, block_start_index)
            # this implementation will first be in mem
            self.page_ranges[page_range_index].add_tail_page_set_from_disk(
                page_set, page_set_index, trids, times, schema, indir, indir_t)

            # new_block_start_index = self.__get_tail_block(page_range_index, page_set_index)
            self.__add_trids_to_key_directory_info(trids, block_start_index)
        LOCK_MANAGER.build_rid_lock(rid, set_type)
Esempio n. 6
0
 def test_update_one_column_1_record(self):
     pr = PageRange(5)
     update = [0, None, None, None, None]
     pr.add_record(0, [20, 21, 22, 23, 24])
     pr.update_record(0, 0, update)
     update = [0, 21, 22, 23, 24]
     data = pr.get_record(0, [1, 1, 1, 1, 1])
     self.assertTrue(data == update)
Esempio n. 7
0
    def __get_next_available_page_range(self, new_rid):

        # For optimization purposes, we must lessen the how often we use latches
        page_range_index = new_rid // (RECORDS_PER_PAGE * PAGE_SETS)
        LOCK_MANAGER.latches[AVAILABLE_PAGE_RANGE].acquire()
        if self.page_ranges.get(
                page_range_index) is None:  # page range doesn't exist
            new_page_range = PageRange(self.num_columns)
            page_range_index = new_rid // (RECORDS_PER_PAGE * PAGE_SETS)
            self.page_ranges[page_range_index] = new_page_range

        LOCK_MANAGER.latches[AVAILABLE_PAGE_RANGE].release()
        return page_range_index
Esempio n. 8
0
    def test_update_once_8192_records(self):
        pr = PageRange(5)
        columns = []
        for i in range(8192):
            columns.append([20 + i, 21 + i, 22 + i, 23 + i, 24 + i])
            pr.add_record(i, columns[i])

        updated_columns = []
        for i in range(8192):
            updated_columns.append([i, i * 2, i * 3, i * 4, i * 5])
            pr.update_record(i, i, updated_columns[i])

        data = []
        for i in range(8192):
            data.append(pr.get_record(i, [1, 1, 1, 1, 1]))

        self.assertTrue(data == updated_columns)
Esempio n. 9
0
 def test_add_1_record(self):
     pr = PageRange(5)
     pr.add_record(0, [20, 21, 22, 23, 24])
     self.assertTrue(pr.num_base_records == 1)
Esempio n. 10
0
 def test_update_once_1_record(self):
     pr = PageRange(5)
     pr.add_record(0, [20, 21, 22, 23, 24])
     pr.update_record(0, 0, [0, 1, 2, 3, 4])
     data = pr.get_record(0, [1, 1, 1, 1, 1])
     self.assertTrue(data == [0, 1, 2, 3, 4])
Esempio n. 11
0
 def test_create_page_range(self):
     pr = PageRange(5)
     self.assertTrue(pr.num_base_records == 0)
Esempio n. 12
0
 def test_update_different_columns_1_record(self):
     pr = PageRange(5)
     update = [0, None, None, None, None]
     pr.add_record(0, [20, 21, 22, 23, 24])
     pr.update_record(0, 0, update)
     data = pr.get_record(0, [1, 1, 1, 1, 1])
     self.assertTrue(pr.num_base_records == 1)
     self.assertTrue(pr.num_tail_records == 1)
     self.assertTrue(data == [0, 21, 22, 23, 24])
     update = [0, 1, 2, 3, None]
     pr.update_record(0, 1, update)
     data = pr.get_record(0, [1, 1, 1, 1, 1])
     self.assertTrue(pr.num_base_records == 1)
     self.assertTrue(pr.num_tail_records == 2)
     self.assertTrue(data == [0, 1, 2, 3, 24])
     update = [None, None, None, None, 100]
     pr.update_record(0, 2, update)
     data = pr.get_record(0, [1, 1, 1, 1, 1])
     self.assertTrue(pr.num_base_records == 1)
     self.assertTrue(pr.num_tail_records == 3)
     self.assertTrue(data == [0, 1, 2, 3, 100])