int dbt_row_match(dbt_table_p _dtp, dbt_row_p _drp, int* _lkey, db_op_t* _op, db_val_t* _v, int _n) { int i, res; if(!_dtp || !_drp) return 0; if(!_lkey) return 1; for(i=0; i<_n; i++) { res = dbt_cmp_val(&_drp->fields[_lkey[i]], &_v[i]); if(!_op || !strcmp(_op[i], OP_EQ)) { if(res!=0) return 0; }else{ if(!strcmp(_op[i], OP_NEQ)) { if(res==0) return 0; }else{ if(!strcmp(_op[i], OP_LT)) { if(res!=-1) return 0; }else{ if(!strcmp(_op[i], OP_GT)) { if(res!=1) return 0; }else{ if(!strcmp(_op[i], OP_LEQ)) { if(res==1) return 0; }else{ if(!strcmp(_op[i], OP_GEQ)) { if(res==-1) return 0; }else{ return 0; }}}}}} } return 1; }
/* comparison function for qsort */ int dbt_qsort_compar(const void *_a, const void *_b) { int _i, _j, _r; for (_i=0; _i<dbt_sort_o_n; _i++) { _j = dbt_sort_o_l[_i]; _r = dbt_cmp_val(&(*(dbt_row_p *)_a)->fields[_j], &(*(dbt_row_p *)_b)->fields[_j]); if (_r == 0) continue; /* no result yet, compare next column */ if (_r == +1 || _r == -1) return (dbt_sort_o_op[_i] == '<') ? _r : -_r; /* ASC OR DESC */ /* error */ longjmp(dbt_sort_jmpenv, _r); } /* no result after comparing all columns, same */ return 0; }