public UnnestArrayResultIterator(ResultIterator iterator) { super(iterator); this.elemRefExpression = new UnnestArrayElemRefExpression(arrayExpression); this.elemIndexExpression = withOrdinality ? new UnnestArrayElemIndexExpression() : null; this.projector = new TupleProjector(withOrdinality ? new Expression[] {elemRefExpression, elemIndexExpression} : new Expression[] {elemRefExpression}); this.arrayPtr = new ImmutableBytesWritable(); this.length = 0; this.index = 0; this.closed = false; }
@Override public Tuple next() throws SQLException { if (closed) return null; while (index >= length) { this.current = super.next(); if (current == null) { this.closed = true; return null; } if (arrayExpression.evaluate(current, arrayPtr)) { this.length = PArrayDataType.getArrayLength(arrayPtr, elemRefExpression.getDataType(), arrayExpression.getMaxLength()); this.index = 0; this.elemRefExpression.setArrayPtr(arrayPtr); } } elemRefExpression.setIndex(index); if (elemIndexExpression != null) { elemIndexExpression.setIndex(index); } index++; return projector.projectResults(current); }
@Override public boolean evaluate(Tuple tuple, ImmutableBytesWritable ptr) { ptr.set(arrayPtr.get(), arrayPtr.getOffset(), arrayPtr.getLength()); PArrayDataTypeDecoder.positionAtArrayElement(ptr, index++, getDataType(), getMaxLength()); return true; }
@Override public Tuple next() throws SQLException { if (closed) return null; while (index >= length) { this.current = super.next(); if (current == null) { this.closed = true; return null; } if (arrayExpression.evaluate(current, arrayPtr)) { this.length = PArrayDataType.getArrayLength(arrayPtr, elemRefExpression.getDataType(), arrayExpression.getMaxLength()); this.index = 0; this.elemRefExpression.setArrayPtr(arrayPtr); } } elemRefExpression.setIndex(index); if (elemIndexExpression != null) { elemIndexExpression.setIndex(index); } index++; return projector.projectResults(current); }
public UnnestArrayResultIterator(ResultIterator iterator) { super(iterator); this.elemRefExpression = new UnnestArrayElemRefExpression(arrayExpression); this.elemIndexExpression = withOrdinality ? new UnnestArrayElemIndexExpression() : null; this.projector = new TupleProjector(withOrdinality ? new Expression[] {elemRefExpression, elemIndexExpression} : new Expression[] {elemRefExpression}); this.arrayPtr = new ImmutableBytesWritable(); this.length = 0; this.index = 0; this.closed = false; }
@Override public boolean evaluate(Tuple tuple, ImmutableBytesWritable ptr) { ptr.set(arrayPtr.get(), arrayPtr.getOffset(), arrayPtr.getLength()); PArrayDataTypeDecoder.positionAtArrayElement(ptr, index++, getDataType(), getMaxLength()); return true; }
@Override public Tuple next() throws SQLException { if (closed) return null; while (index >= length) { this.current = super.next(); if (current == null) { this.closed = true; return null; } if (arrayExpression.evaluate(current, arrayPtr)) { this.length = PArrayDataType.getArrayLength(arrayPtr, elemRefExpression.getDataType(), arrayExpression.getMaxLength()); this.index = 0; this.elemRefExpression.setArrayPtr(arrayPtr); } } elemRefExpression.setIndex(index); if (elemIndexExpression != null) { elemIndexExpression.setIndex(index); } index++; return projector.projectResults(current); }
@Override public boolean evaluate(Tuple tuple, ImmutableBytesWritable ptr) { ptr.set(arrayPtr.get(), arrayPtr.getOffset(), arrayPtr.getLength()); PArrayDataTypeDecoder.positionAtArrayElement(ptr, index++, getDataType(), getMaxLength()); return true; }
public UnnestArrayResultIterator(ResultIterator iterator) { super(iterator); this.elemRefExpression = new UnnestArrayElemRefExpression(arrayExpression); this.elemIndexExpression = withOrdinality ? new UnnestArrayElemIndexExpression() : null; this.projector = new TupleProjector(withOrdinality ? new Expression[] {elemRefExpression, elemIndexExpression} : new Expression[] {elemRefExpression}); this.arrayPtr = new ImmutableBytesWritable(); this.length = 0; this.index = 0; this.closed = false; }