I don't think we need to do that - we want to be able to lookup a value in
two array dereferences - one to get the offset (and next offset), and the
second one to locate the value. With the way we'd be writing nulls, the
offsets would work out fine. It's ok if they get repeated.

Note also, we're ignoring null values at the end which is what we want.


On Thu, Feb 20, 2014 at 11:43 PM, ramkrish86 <notifications@github.com>wrote:

> In
> phoenix-core/src/main/java/org/apache/phoenix/expression/ArrayConstructorExpression.java:
>
> > +            int noOfElements =  children.size();
> > +            int elementLength = 0;
> > +            byteStream = new TrustedByteArrayOutputStream(estimatedSize);
> > +            oStream = new DataOutputStream(byteStream);
> > +            for (int i = position >= 0 ? position : 0; i < elements.length; i++) {
> > +                Expression child = children.get(i);
> > +                if (!child.evaluate(tuple, ptr)) {
> > +                    if (tuple != null && !tuple.isImmutable()) {
> > +                        if (position >= 0) position = i;
> > +                        return false;
> > +                    }
> > +                } else {
> > +                    // track the offset position here from the size of the byteStream
> > +                    if (!baseType.isFixedWidth()) {
> > +                        offset = byteStream.size();
> > +                        offsetPos[i] = offset;
>
> So may be while writing the offset of this null counter, we could negate
> the offset so that on seeing a negative offset we could understand that
> that is a count of null. What do you think?
>
> --
> Reply to this email directly or view it on GitHub<https://github.com/apache/incubator-phoenix/pull/8/files#r9938328>
> .
>