Skip to content

Commit be13080

Browse files
committed
Inline CheckConstraint
1 parent 37a651f commit be13080

File tree

1 file changed

+78
-3
lines changed

1 file changed

+78
-3
lines changed

src/parser.c

Lines changed: 78 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ void processFlush(Flush_t *fl, Journal_t** journal_array, ValidationList_t* vali
107107
}
108108

109109
void processForget(Forget_t *fo, Journal_t** journal_array,int relation_count) {
110+
return;
110111
uint32_t i;
111112
for(i = 0; i < relation_count; i++){
112113
Journal_t* journal = journal_array[i];
@@ -185,7 +186,32 @@ bool checkQueryHash(Journal_t** journal_array, Query_t* query, uint64_t from, ui
185186
} else { /*Else check all the records in the range [from,to]*/
186187
for(j = 0, offset = first_offset; j < record_count; j++, offset++){
187188
JournalRecord_t* record = &journal->records[offset];
188-
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){
189215
setBit(j,predicate_bit_set);
190216
}
191217
}
@@ -269,7 +295,32 @@ bool checkSingleQuery(Journal_t** journal_array, Query_t* query, uint64_t from,
269295
bool record_result = true;
270296
for (j = 1 ; j < query->columnCount ; j++) { /* check all column constraints */
271297
Column_t* constraint = &query->columns[j];
272-
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;
323+
273324
record_result = record_result && partial_result;
274325
if(partial_result == false){
275326
break;
@@ -289,7 +340,31 @@ bool checkSingleQuery(Journal_t** journal_array, Query_t* query, uint64_t from,
289340
bool record_result = true;
290341
for(j = 0; j < query->columnCount; j++){
291342
Column_t* constraint = &query->columns[j];
292-
bool partial_result = checkConstraint(record,constraint);
343+
uint32_t column = constraint->column;
344+
Op_t operator = constraint->op;
345+
uint64_t value = constraint->value;
346+
bool cond = false;
347+
switch(operator){
348+
case Equal:
349+
cond = (record->column_values[column] == value);
350+
break;
351+
case NotEqual:
352+
cond = (record->column_values[column] != value);
353+
break;
354+
case Less:
355+
cond = (record->column_values[column] < value);
356+
break;
357+
case LessOrEqual:
358+
cond = (record->column_values[column] <= value);
359+
break;
360+
case Greater:
361+
cond = (record->column_values[column] > value);
362+
break;
363+
case GreaterOrEqual:
364+
cond = (record->column_values[column] >= value);
365+
break;
366+
}
367+
bool partial_result = cond;
293368
record_result = record_result && partial_result;
294369
if(partial_result == false){
295370
break;

0 commit comments

Comments
 (0)