Just as an update,  I think I have all of this working, almost.   I
wouldn't have guessed it would involve rewriting so much of
QualifierTranslator when I started.

The only thing currently failing unit testing is
DataContextPrefetchTst.testPrefetch9, which is generating sql with a
missing column name.

SELECT t0.ESTIMATED_PRICE, t0.PAINTING_DESCRIPTION, t0.PAINTING_TITLE,
t0.ARTIST_ID, t0.GALLERY_ID, t0.PAINTING_ID FROM PAINTING t0 WHERE ((
IS NULL) OR t0.ARTIST_ID <> ?)



On 8/22/06, Mike Kienenberger <[EMAIL PROTECTED]> wrote:
I'm trying to build the ((exp is null) or (exp <> 'Y')) sql for an inequality.

My thought was to stick the following code at the top of startNode,
essentially calling the part of Expression.traverse(Expression,
TraversalHandler) that generates the left-hand-side twice.  Calling
the code twice turns out to have bad side effects, like creating
multiple joins.

        if (handleNullInequalityComparison)
        {
            qualBuf.append("((");

            Object child = node.getOperand(0);
            if (child instanceof Expression) {
                Expression childExp = (Expression) child;
                childExp.traverse(node, this);
            }
            else {
                this.objectNode(child, node);
            }

            qualBuf.append(" IS NULL) OR ");
        }

So I guess what I need to do is call it once and then cache the value.
   I'm trying to figure out the best way to do this as well as how to
share the cached value since I can't store it in the Expression or the
TraversalHandler instance.

Reply via email to