Skip to content

Commit c6c3cbf

Browse files
Merge pull request #67 from JakeRoggenbuck/update
Update
2 parents 5df83be + ac235c2 commit c6c3cbf

File tree

5 files changed

+319
-98
lines changed

5 files changed

+319
-98
lines changed

python/lstore/query.py

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@
22
from .lstore import RQuery, RTable
33

44

5+
class ReturnRecord:
6+
def __init__(self, columns: List[int]):
7+
self.columns = columns[3:]
8+
9+
510
class Query:
611
def __init__(self, table: RTable):
712
"""Creates a Query object that can perform different queries on the
@@ -43,11 +48,17 @@ def select(
4348
Returns False if record locked by TPL
4449
Assume that select will never be called on a key that doesn't exist
4550
"""
46-
return self.rquery.select(
47-
search_key,
48-
search_key_index,
49-
projected_columns_index,
50-
)
51+
return [
52+
ReturnRecord(
53+
list(
54+
self.rquery.select(
55+
search_key,
56+
search_key_index,
57+
projected_columns_index,
58+
)
59+
)
60+
)
61+
]
5162

5263
def select_version(
5364
self,
@@ -65,7 +76,18 @@ def select_version(
6576
Returns False if record locked by TPL
6677
Assume that select will never be called on a key that doesn't exist
6778
"""
68-
pass
79+
return [
80+
ReturnRecord(
81+
list(
82+
self.rquery.select_version(
83+
search_key,
84+
search_key_index,
85+
projected_columns_index,
86+
relative_version,
87+
)
88+
)
89+
)
90+
]
6991

7092
def update(self, primary_key: int, *columns):
7193
"""Update a record with specified key and columns
@@ -109,7 +131,7 @@ def sum_version(
109131
Returns the summation of the given range upon success
110132
Returns False if no record exists in the given range
111133
"""
112-
pass
134+
return self.rquery.sum_version(start_range, end_range, aggregate_column_index, relative_version)
113135

114136
def increment(self, key, column):
115137
"""Incremenets one column of the record this implementation should work

src/container.rs

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@ pub struct BaseContainer {
99
pub physical_pages: Vec<Arc<Mutex<PhysicalPage>>>,
1010

1111
// number of additional columns
12-
pub num_cols: u64,
12+
pub num_cols: i64,
1313

1414
// reserved columns
15-
pub rid_column: u64,
16-
pub schema_encoding_column: u64,
17-
pub indirection_column: u64,
15+
pub rid_column: i64,
16+
pub schema_encoding_column: i64,
17+
pub indirection_column: i64,
1818
}
1919

2020
/// A container that manages physical pages for storing data in columns
@@ -43,7 +43,7 @@ impl BaseContainer {
4343
/// # Returns
4444
///
4545
/// A new `BaseContainer` instance
46-
pub fn new(num_cols: u64) -> Self {
46+
pub fn new(num_cols: i64) -> Self {
4747
BaseContainer {
4848
physical_pages: Vec::new(),
4949
num_cols,
@@ -105,11 +105,11 @@ impl BaseContainer {
105105
/// ### Arguments
106106
///
107107
/// - `col_idx`: The index of the column
108-
pub fn column_page(&self, col_idx: u64) -> Arc<Mutex<PhysicalPage>> {
108+
pub fn column_page(&self, col_idx: i64) -> Arc<Mutex<PhysicalPage>> {
109109
self.physical_pages[(col_idx + 3) as usize].clone()
110110
}
111111

112-
pub fn insert_record(&mut self, rid: u64, values: Vec<u64>) -> Record {
112+
pub fn insert_record(&mut self, rid: i64, values: Vec<i64>) -> Record {
113113
if values.len() != self.num_cols as usize {
114114
panic!("Number of values does not match number of columns");
115115
}
@@ -167,8 +167,8 @@ impl BaseContainer {
167167
}
168168
}
169169

170-
pub fn read_record(&self, record: Record) -> Vec<u64> {
171-
let mut values = Vec::<u64>::new();
170+
pub fn read_record(&self, record: Record) -> Vec<i64> {
171+
let mut values = Vec::<i64>::new();
172172

173173
let addrs = record.addresses.lock().unwrap();
174174
let addrs_clone = addrs.clone();
@@ -188,12 +188,12 @@ pub struct TailContainer {
188188
pub physical_pages: Vec<Arc<Mutex<PhysicalPage>>>,
189189

190190
// number of additional columns
191-
pub num_cols: u64,
191+
pub num_cols: i64,
192192

193193
// reserved columns
194-
pub rid_column: u64,
195-
pub schema_encoding_column: u64,
196-
pub indirection_column: u64,
194+
pub rid_column: i64,
195+
pub schema_encoding_column: i64,
196+
pub indirection_column: i64,
197197
}
198198

199199
/// A container that manages physical pages for storing data in columns
@@ -222,7 +222,7 @@ impl TailContainer {
222222
/// # Returns
223223
///
224224
/// A new `TailContainer` instance
225-
pub fn new(num_cols: u64) -> Self {
225+
pub fn new(num_cols: i64) -> Self {
226226
TailContainer {
227227
physical_pages: Vec::new(),
228228
num_cols,
@@ -279,11 +279,11 @@ impl TailContainer {
279279
}
280280

281281
/// Returns a reference to the specified column page
282-
pub fn column_page(&self, col_idx: u64) -> Arc<Mutex<PhysicalPage>> {
282+
pub fn column_page(&self, col_idx: i64) -> Arc<Mutex<PhysicalPage>> {
283283
self.physical_pages[(col_idx + 3) as usize].clone()
284284
}
285285

286-
pub fn insert_record(&mut self, rid: u64, indirection_rid: u64, values: Vec<u64>) -> Record {
286+
pub fn insert_record(&mut self, rid: i64, indirection_rid: i64, values: Vec<i64>) -> Record {
287287
if values.len() != self.num_cols as usize {
288288
panic!("Number of values does not match number of columns");
289289
}
@@ -300,12 +300,12 @@ impl TailContainer {
300300
let indirection_page = self.indirection_page();
301301
let mut ip = indirection_page.lock().unwrap();
302302

303-
ip.write(indirection_rid);
303+
ip.write(indirection_rid as i64);
304304

305305
for i in 0..self.num_cols {
306306
let col_page = self.column_page(i);
307307
let mut col_page = col_page.lock().unwrap();
308-
col_page.write(values[i as usize]);
308+
col_page.write(values[i as usize] as i64);
309309
}
310310

311311
let addresses: Arc<Mutex<Vec<RecordAddress>>> = Arc::new(Mutex::new(Vec::new()));
@@ -341,8 +341,8 @@ impl TailContainer {
341341
}
342342
}
343343

344-
pub fn read_record(&self, record: Record) -> Vec<u64> {
345-
let mut values = Vec::<u64>::new();
344+
pub fn read_record(&self, record: Record) -> Vec<i64> {
345+
let mut values = Vec::<i64>::new();
346346

347347
let addrs = record.addresses.lock().unwrap();
348348
let addrs_clone = addrs.clone();

0 commit comments

Comments
 (0)