version 1.1.2.2, 2004/11/17 20:23:27
|
version 1.1.2.3, 2004/11/17 22:48:19
|
|
|
break; | break; |
} | } |
| |
case CQL_EQ: expOp = EQ; |
case CQL_EQ: |
case CQL_NE: expOp = NE; |
case CQL_NE: |
case CQL_LT: expOp = LT; |
case CQL_LT: |
case CQL_LE: expOp = LE; |
case CQL_LE: |
case CQL_GT: expOp = GT; |
case CQL_GT: |
case CQL_GE: expOp = GE; |
case CQL_GE: |
{ | { |
PEGASUS_ASSERT(_operands.size() >= 2); | PEGASUS_ASSERT(_operands.size() >= 2); |
| |
|
|
| |
CQLExpression rhs = _operands[j++]; | CQLExpression rhs = _operands[j++]; |
| |
CQLSimplePredicate sp(lhs,rhs,expOp); |
CQLSimplePredicate sp(lhs,rhs,_convertOpType(op)); |
|
printf("****** pushing simplepredicate on terminal heap %s\n",(const char*)sp.toString().getCString()); |
terminal_heap.push(term_el(false, sp)); | terminal_heap.push(term_el(false, sp)); |
| |
stack.push(stack_el(terminal_heap.size()-1, true)); | stack.push(stack_el(terminal_heap.size()-1, true)); |
|
|
} | } |
} | } |
| |
|
ExpressionOpType Cql2Dnf::_convertOpType(OperationType op){ |
|
switch(op){ |
|
case CQL_EQ: return EQ; |
|
case CQL_NE: return NE; |
|
case CQL_GT: return GT; |
|
case CQL_LT: return LT; |
|
case CQL_GE: return GE; |
|
case CQL_LE: return LE; |
|
case CQL_IS_NULL: return IS_NULL; |
|
case CQL_IS_NOT_NULL: return IS_NOT_NULL; |
|
default: break; |
|
} |
|
} |
|
|
void Cql2Dnf::_destruct(CQLPredicate& _p){ | void Cql2Dnf::_destruct(CQLPredicate& _p){ |
if(_p.isSimple()){ | if(_p.isSimple()){ |
CQLSimplePredicate _sp = _p.getSimplePredicate(); | CQLSimplePredicate _sp = _p.getSimplePredicate(); |
|
|
// CQLPredicate((e==f v !c==d) ^ a==b) [index = 2] (the rebuilt tree) | // CQLPredicate((e==f v !c==d) ^ a==b) [index = 2] (the rebuilt tree) |
// | // |
| |
|
if(eval_heap.size() > 0){ |
|
printf("**** eval_heap.size = %d\n",eval_heap.size()); |
|
printf("**** terminal_heap.size = %d\n",terminal_heap.size()); |
Array<CQLPredicate> _preds; | Array<CQLPredicate> _preds; |
for(Uint32 i=0;i<eval_heap.size();i++){ | for(Uint32 i=0;i<eval_heap.size();i++){ |
eval_el eval = eval_heap[i]; | eval_el eval = eval_heap[i]; |
|
|
} | } |
case CQL_AND: | case CQL_AND: |
{ | { |
CQLPredicate p(terminal_heap[eval.opn1]._simplePredicate,false); |
CQLPredicate p; |
p.appendPredicate(CQLPredicate(terminal_heap[eval.opn2]._simplePredicate,AND)); |
CQLPredicate p1(terminal_heap[eval.opn2]._simplePredicate,false); |
|
p.appendPredicate(p1); |
|
CQLPredicate p2(terminal_heap[eval.opn1]._simplePredicate,false); |
|
p.appendPredicate(p2,AND); |
_preds.append(p); | _preds.append(p); |
break; | break; |
} | } |
case CQL_OR: | case CQL_OR: |
{ | { |
CQLPredicate p(terminal_heap[eval.opn1]._simplePredicate,false); |
CQLPredicate p; |
p.appendPredicate(CQLPredicate(terminal_heap[eval.opn2]._simplePredicate,OR)); |
CQLPredicate p1(terminal_heap[eval.opn2]._simplePredicate,false); |
|
p.appendPredicate(p1); |
|
CQLPredicate p2(terminal_heap[eval.opn1]._simplePredicate,false); |
|
p.appendPredicate(p2,OR); |
_preds.append(p); | _preds.append(p); |
break; | break; |
} | } |
|
|
} | } |
case CQL_AND: | case CQL_AND: |
{ | { |
CQLPredicate p(terminal_heap[eval.opn1]._simplePredicate,false); |
CQLPredicate p; |
p.appendPredicate(_preds[eval.opn2],AND); |
CQLPredicate p1(terminal_heap[eval.opn1]._simplePredicate,false); |
|
p.appendPredicate(_preds[eval.opn2]); |
|
p.appendPredicate(p1,AND); |
_preds.append(p); | _preds.append(p); |
break; | break; |
} | } |
case CQL_OR: | case CQL_OR: |
{ | { |
CQLPredicate p(terminal_heap[eval.opn1]._simplePredicate,false); |
CQLPredicate p; |
p.appendPredicate(_preds[eval.opn2],OR); |
CQLPredicate p1(terminal_heap[eval.opn1]._simplePredicate,false); |
|
p.appendPredicate(_preds[eval.opn2]); |
|
p.appendPredicate(p1,OR); |
_preds.append(p); | _preds.append(p); |
break; | break; |
} | } |
|
|
} | } |
case CQL_AND: | case CQL_AND: |
{ | { |
CQLPredicate p(_preds[eval.opn1]); |
CQLPredicate p; |
p.appendPredicate(CQLPredicate(terminal_heap[eval.opn2]._simplePredicate,AND)); |
CQLPredicate p1(terminal_heap[eval.opn2]._simplePredicate,false); |
|
p.appendPredicate(_preds[eval.opn1]); |
|
p.appendPredicate(p1,AND); |
_preds.append(p); | _preds.append(p); |
break; | break; |
} | } |
case CQL_OR: | case CQL_OR: |
{ | { |
CQLPredicate p(_preds[eval.opn1]); |
CQLPredicate p; |
p.appendPredicate(CQLPredicate(terminal_heap[eval.opn2]._simplePredicate,OR)); |
CQLPredicate p1(terminal_heap[eval.opn2]._simplePredicate,false); |
|
p.appendPredicate(_preds[eval.opn1]); |
|
p.appendPredicate(p1,OR); |
_preds.append(p); | _preds.append(p); |
break; | break; |
} | } |
|
|
} | } |
case CQL_AND: | case CQL_AND: |
{ | { |
CQLPredicate p(_preds[eval.opn1]); |
CQLPredicate p = _preds[eval.opn2]; |
p.appendPredicate(_preds[eval.opn2],AND); |
p.appendPredicate(_preds[eval.opn1],AND); |
_preds.append(p); | _preds.append(p); |
break; | break; |
} | } |
case CQL_OR: | case CQL_OR: |
{ | { |
CQLPredicate p(_preds[eval.opn1],false); |
CQLPredicate p = _preds[eval.opn2]; |
p.appendPredicate(_preds[eval.opn2],OR); |
p.appendPredicate(_preds[eval.opn1],OR); |
_preds.append(p); | _preds.append(p); |
break; | break; |
} | } |
|
|
} // end for(...) | } // end for(...) |
| |
_dnfPredicate = _preds[_preds.size()-1]; | _dnfPredicate = _preds[_preds.size()-1]; |
|
|
|
} // end if |
|
else{ // we just have a CQLSimplePredicate on the terminal_heap |
|
PEGASUS_ASSERT(terminal_heap.size() == 1); |
|
_dnfPredicate = CQLPredicate(terminal_heap[0]._simplePredicate,false); |
|
} |
} | } |
| |
CQLPredicate Cql2Dnf::getDnfPredicate(){ | CQLPredicate Cql2Dnf::getDnfPredicate(){ |