Skip to content

Commit 7e25cd8

Browse files
Get database read working fully in Python
1 parent 40856c0 commit 7e25cd8

File tree

5 files changed

+44
-10
lines changed

5 files changed

+44
-10
lines changed

python/lstore/query.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ def delete(self, primary_key: int):
3333
"""
3434

3535
def insert(self, *columns):
36-
self.rquery.insert(columns)
36+
return self.rquery.insert(columns)
3737

3838
"""
3939
# Read matching record with specified search key
@@ -48,7 +48,7 @@ def insert(self, *columns):
4848
def select(
4949
self, search_key: Any, search_key_index: int, projected_columns_index: int
5050
):
51-
self.rquery.select(search_key, search_key_index, projected_columns_index)
51+
return self.rquery.select(search_key, search_key_index, projected_columns_index)
5252

5353
"""
5454
# Read matching record with specified search key

simple_tester.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,12 @@
55
grades_table = db.create_table('Grades', 5, 0)
66
query = Query(grades_table)
77

8+
recs = []
9+
810
for i in range(0, 10):
9-
query.insert(10 + i, 93, 0, 0, 0)
11+
rec = query.insert(10 + i, 93, 0, 0, 0)
12+
recs.append(rec)
13+
14+
for rec in recs:
15+
vals = query.select(rec.rid, 0, 0)
16+
print(vals)

src/container.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,20 @@ impl BaseContainer {
166166
addresses: addresses.clone(),
167167
}
168168
}
169+
170+
pub fn read_record(&self, record: Record) -> Vec<u64> {
171+
let mut values = Vec::<u64>::new();
172+
173+
let addrs = record.addresses.lock().unwrap();
174+
let addrs_clone = addrs.clone();
175+
for addr in addrs_clone {
176+
let a = addr.page.lock().unwrap();
177+
let b = a.read(addr.offset as usize);
178+
values.push(b.expect("Value should be there"));
179+
}
180+
181+
values
182+
}
169183
}
170184

171185
#[derive(Clone)]

src/database.rs

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,19 +28,21 @@ impl PageRange {
2828
self.base_container.insert_record(new_rid, values)
2929
}
3030

31-
fn read(&self, rid: u64) -> Option<Vec<u64>> {
32-
// self.base_container.read(rid);
33-
Some(vec![])
31+
fn read(&self, record: Record) -> Option<Vec<u64>> {
32+
Some(self.base_container.read_record(record))
3433
}
3534
}
3635

36+
#[derive(Debug, Clone)]
3737
pub struct RecordAddress {
3838
pub page: Arc<Mutex<PhysicalPage>>,
3939
pub offset: u64,
4040
}
4141

42+
#[derive(Debug, Clone)]
4243
#[pyclass]
4344
pub struct Record {
45+
#[pyo3(get)]
4446
pub rid: u64,
4547
pub addresses: Arc<Mutex<Vec<RecordAddress>>>,
4648
}
@@ -52,8 +54,8 @@ pub struct RTable {
5254
pub primary_key_column: i64,
5355
pub page_range: PageRange,
5456

55-
// TODO: Fix this to be the correct usage
56-
pub page_directory: HashMap<i64, i64>,
57+
// Map RIDs to Records
58+
pub page_directory: HashMap<u64, Record>,
5759
pub num_records: u64,
5860

5961
#[pyo3(get)]
@@ -63,12 +65,22 @@ pub struct RTable {
6365
impl RTable {
6466
pub fn write(&mut self, values: Vec<u64>) -> Record {
6567
let rec = self.page_range.write(self.num_records, values);
68+
69+
// Save the RID -> Record so it can later be read
70+
self.page_directory.insert(self.num_records, rec.clone());
71+
6672
self.num_records += 1;
6773
return rec;
6874
}
6975

7076
pub fn read(&self, rid: u64) -> Option<Vec<u64>> {
71-
self.page_range.read(rid)
77+
let rec = self.page_directory.get(&rid);
78+
79+
// If the rec exists in the page_directory, return the read values
80+
match rec {
81+
Some(r) => self.page_range.read(r.clone()),
82+
None => None,
83+
}
7284
}
7385

7486
fn _merge() {

src/query.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ impl RQuery {
2626
&mut self,
2727
search_key: i64,
2828
_search_key_index: i64,
29-
projected_columns_index: Vec<i64>,
29+
// TODO: I think this should be a vec, but I'm not sure
30+
projected_columns_index: i64,
3031
) -> Vec<u64> {
3132
self.table.read(search_key as u64).unwrap()
3233
}

0 commit comments

Comments
 (0)