The setup here is a virtual table with two columns
and a query of the form:

select c1,c2 from test where c1<c2;

The code in exprAnalyze that used to say this:

 if( pLeft->op==TK_COLUMN ){
      pTerm->leftCursor = pLeft->iTable;
      pTerm->u.leftColumn = pLeft->iColumn;
      pTerm->eOperator = operatorMask(op);
    }

now says this:

    u16 opMask = (pTerm->prereqRight & prereqLeft)==0 ? WO_ALL : WO_EQUIV;
    if( pLeft->op==TK_COLUMN ){
      pTerm->leftCursor = pLeft->iTable;
      pTerm->u.leftColumn = pLeft->iColumn;
      pTerm->eOperator = operatorMask(op) & opMask;
    }


with the result that pTerm->eOperator is 0

This assertion in allocateIndexInfo then fails:

assert( pTerm->eOperator & (WO_IN|WO_EQ|WO_LT|WO_LE|WO_GT|WO_GE|WO_MATCH) );

Any advice on a patch for this?

I can, of course, remove the assertion and treat a 0 operator in my bestIndex method as
an unusable constraint, but is there a better approach?

//Mary

_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to