Skip to content

Commit 7e38051

Browse files
committed
Merge with zombieList and fix conflicts
2 parents 0154a39 + be13080 commit 7e38051

File tree

7 files changed

+355
-39
lines changed

7 files changed

+355
-39
lines changed

report.txt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
zombie_list: 5:15.52
2+
| 4GB
3+
4+
σειριακη forget: 4:45.43
5+
| 3GB
6+
7+
χωρις forget: 2:28.75
8+
| 4.5GB

src/journal.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,6 @@ uint64_t findRangeEnd(Journal_t* journal, uint64_t first, uint64_t last, uint64_
222222
return first_appearance_end;
223223
}
224224

225-
226225
uint64_t findRangeStart(Journal_t* journal, uint64_t first, uint64_t last, uint64_t key, uint64_t* first_offset, bool* found){
227226
uint64_t middle = (first+last)/2;
228227
bool not_found = false;

src/journal.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
#define __JOURNAL__
33
#include <inttypes.h>
44
#include <stdbool.h>
5-
#include <assert.h>
65
#include "PKeyHash.h"
76
#include "tidHash.h"
87
#include "predicateHash.h"

src/parser.c

Lines changed: 93 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,11 @@ void processTransaction(Transaction_t *t, Journal_t** journal_array) {
4848
void processValidationQueries(ValidationQueries_t *v, Journal_t** journal_array, ValidationList_t* validation_list) {
4949
ValidationQueries_t* val_query = v;
5050
char* reader = v->queries;
51-
uint32_t i;
51+
uint32_t i,j;
5252
for (i = 0; i < v->queryCount; i++) {
5353
Query_t* query = (Query_t*)reader;
54+
Journal_t* journal = journal_array[query->relationId];
55+
/*Bring C0==X first*/
5456
// uint32_t j;
5557
// for(j = 0; j<query->columnCount; j++){
5658
// if(query->columns[j].column == 0 && query->columns[j].op == Equal){
@@ -60,7 +62,18 @@ void processValidationQueries(ValidationQueries_t *v, Journal_t** journal_array,
6062
// break;
6163
// }
6264
// }
65+
/*Bring C0==X first*/
66+
67+
6368
qsort(query->columns, query->columnCount, sizeof(Column_t), cmp_col);
69+
if (journal->predicate_index != NULL) {
70+
for(j = 0; j < query->columnCount; j++) {
71+
Column_t* predicate = &query->columns[j];
72+
// predicateSubBucket* predicateSubBucket = createPredicateSubBucket(val_query->from, val_query->to, predicate->column, predicate->op, predicate->value);
73+
predicateInsertHashRecord(journal->predicate_index,val_query->from, val_query->to, predicate->column, predicate->op, predicate->value, val_query->validationId);
74+
}
75+
}
76+
6477
reader += sizeof(Query_t) + (sizeof(Column_t) * query->columnCount);
6578
}
6679
// printValidation(val_query);
@@ -94,7 +107,7 @@ void processFlush(Flush_t *fl, Journal_t** journal_array, ValidationList_t* vali
94107
}
95108

96109
void processForget(Forget_t *fo, Journal_t** journal_array,int relation_count) {
97-
// Unimplemented;
110+
return;
98111
uint32_t i;
99112
for(i = 0; i < relation_count; i++){
100113
Journal_t* journal = journal_array[i];
@@ -173,18 +186,40 @@ bool checkQueryHash(Journal_t** journal_array, Query_t* query, uint64_t from, ui
173186
} else { /*Else check all the records in the range [from,to]*/
174187
for(j = 0, offset = first_offset; j < record_count; j++, offset++){
175188
JournalRecord_t* record = &journal->records[offset];
176-
if(checkConstraint(record, predicate)){
189+
// if(checkConstraint(record, predicate)){
190+
uint32_t column = predicate->column;
191+
Op_t operator = predicate->op;
192+
uint64_t value = predicate->value;
193+
bool cond = false;
194+
switch(operator){
195+
case Equal:
196+
cond = (record->column_values[column] == value);
197+
break;
198+
case NotEqual:
199+
cond = (record->column_values[column] != value);
200+
break;
201+
case Less:
202+
cond = (record->column_values[column] < value);
203+
break;
204+
case LessOrEqual:
205+
cond = (record->column_values[column] <= value);
206+
break;
207+
case Greater:
208+
cond = (record->column_values[column] > value);
209+
break;
210+
case GreaterOrEqual:
211+
cond = (record->column_values[column] >= value);
212+
break;
213+
}
214+
if(cond){
177215
setBit(j,predicate_bit_set);
178216
}
179217
}
180218
}
181219

182-
//Insert predicate in the hash table.
183-
predicateSubBucket* predicateSubBucket = createPredicateSubBucket(from, to, predicate->column, predicate->op, predicate->value);
184-
predicateSubBucket->bit_set = predicate_bit_set;
185-
predicateInsertHashRecord(journal->predicate_index,predicateSubBucket);
220+
//Insert bit_set in the hash table.
221+
predicateInsertBitSet(journal->predicate_index,from, to, predicate->column, predicate->op, predicate->value, predicate_bit_set);
186222
}
187-
188223
if(i == 0) {
189224
intersection = createBitSet(predicate_bit_set->bit_size); /*Bit set of the whole query*/
190225
copyBitSet(intersection, predicate_bit_set);
@@ -260,7 +295,31 @@ bool checkSingleQuery(Journal_t** journal_array, Query_t* query, uint64_t from,
260295
bool record_result = true;
261296
for (j = 1 ; j < query->columnCount ; j++) { /* check all column constraints */
262297
Column_t* constraint = &query->columns[j];
263-
bool partial_result = checkConstraint(record,constraint);
298+
uint32_t column = constraint->column;
299+
Op_t operator = constraint->op;
300+
uint64_t value = constraint->value;
301+
bool cond = false;
302+
switch(operator){
303+
case Equal:
304+
cond = (record->column_values[column] == value);
305+
break;
306+
case NotEqual:
307+
cond = (record->column_values[column] != value);
308+
break;
309+
case Less:
310+
cond = (record->column_values[column] < value);
311+
break;
312+
case LessOrEqual:
313+
cond = (record->column_values[column] <= value);
314+
break;
315+
case Greater:
316+
cond = (record->column_values[column] > value);
317+
break;
318+
case GreaterOrEqual:
319+
cond = (record->column_values[column] >= value);
320+
break;
321+
}
322+
bool partial_result = cond;
264323
record_result = record_result && partial_result;
265324
if(partial_result == false){
266325
break;
@@ -280,7 +339,31 @@ bool checkSingleQuery(Journal_t** journal_array, Query_t* query, uint64_t from,
280339
bool record_result = true;
281340
for(j = 0; j < query->columnCount; j++){
282341
Column_t* constraint = &query->columns[j];
283-
bool partial_result = checkConstraint(record,constraint);
342+
uint32_t column = constraint->column;
343+
Op_t operator = constraint->op;
344+
uint64_t value = constraint->value;
345+
bool cond = false;
346+
switch(operator){
347+
case Equal:
348+
cond = (record->column_values[column] == value);
349+
break;
350+
case NotEqual:
351+
cond = (record->column_values[column] != value);
352+
break;
353+
case Less:
354+
cond = (record->column_values[column] < value);
355+
break;
356+
case LessOrEqual:
357+
cond = (record->column_values[column] <= value);
358+
break;
359+
case Greater:
360+
cond = (record->column_values[column] > value);
361+
break;
362+
case GreaterOrEqual:
363+
cond = (record->column_values[column] >= value);
364+
break;
365+
}
366+
bool partial_result = cond;
284367
record_result = record_result && partial_result;
285368
if(partial_result == false){
286369
break;

0 commit comments

Comments
 (0)