@@ -48,9 +48,11 @@ void processTransaction(Transaction_t *t, Journal_t** journal_array) {
48
48
void processValidationQueries (ValidationQueries_t * v , Journal_t * * journal_array , ValidationList_t * validation_list ) {
49
49
ValidationQueries_t * val_query = v ;
50
50
char * reader = v -> queries ;
51
- uint32_t i ;
51
+ uint32_t i , j ;
52
52
for (i = 0 ; i < v -> queryCount ; i ++ ) {
53
53
Query_t * query = (Query_t * )reader ;
54
+ Journal_t * journal = journal_array [query -> relationId ];
55
+ /*Bring C0==X first*/
54
56
// uint32_t j;
55
57
// for(j = 0; j<query->columnCount; j++){
56
58
// if(query->columns[j].column == 0 && query->columns[j].op == Equal){
@@ -60,7 +62,18 @@ void processValidationQueries(ValidationQueries_t *v, Journal_t** journal_array,
60
62
// break;
61
63
// }
62
64
// }
65
+ /*Bring C0==X first*/
66
+
67
+
63
68
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
+
64
77
reader += sizeof (Query_t ) + (sizeof (Column_t ) * query -> columnCount );
65
78
}
66
79
// printValidation(val_query);
@@ -94,7 +107,7 @@ void processFlush(Flush_t *fl, Journal_t** journal_array, ValidationList_t* vali
94
107
}
95
108
96
109
void processForget (Forget_t * fo , Journal_t * * journal_array ,int relation_count ) {
97
- // Unimplemented ;
110
+ return ;
98
111
uint32_t i ;
99
112
for (i = 0 ; i < relation_count ; i ++ ){
100
113
Journal_t * journal = journal_array [i ];
@@ -173,18 +186,40 @@ bool checkQueryHash(Journal_t** journal_array, Query_t* query, uint64_t from, ui
173
186
} else { /*Else check all the records in the range [from,to]*/
174
187
for (j = 0 , offset = first_offset ; j < record_count ; j ++ , offset ++ ){
175
188
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 ){
177
215
setBit (j ,predicate_bit_set );
178
216
}
179
217
}
180
218
}
181
219
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 );
186
222
}
187
-
188
223
if (i == 0 ) {
189
224
intersection = createBitSet (predicate_bit_set -> bit_size ); /*Bit set of the whole query*/
190
225
copyBitSet (intersection , predicate_bit_set );
@@ -260,7 +295,31 @@ bool checkSingleQuery(Journal_t** journal_array, Query_t* query, uint64_t from,
260
295
bool record_result = true;
261
296
for (j = 1 ; j < query -> columnCount ; j ++ ) { /* check all column constraints */
262
297
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 ;
264
323
record_result = record_result && partial_result ;
265
324
if (partial_result == false){
266
325
break ;
@@ -280,7 +339,31 @@ bool checkSingleQuery(Journal_t** journal_array, Query_t* query, uint64_t from,
280
339
bool record_result = true;
281
340
for (j = 0 ; j < query -> columnCount ; j ++ ){
282
341
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 ;
284
367
record_result = record_result && partial_result ;
285
368
if (partial_result == false){
286
369
break ;
0 commit comments