Try to reallocate the buffer.
Instead of:

outDate.buffer = buffer;

do:

buffer = outDate.buffer = buffer.reallocIfNeeded(valueDecoded.length);

Regards,
Karol


On Mon, Nov 30, 2015 at 8:56 AM, Nirav Shah <[email protected]> wrote:

> I have written custom function to decode base64 string.
> I am getting issue if string is large it says "Index out of bound, max
> length is 256"
> 
> It seems I can return only 256 characters.
> Kindly help, Thanks in advance.
> 
> Code : for reference
> 
> @FunctionTemplate(
> name = "Base64Conv",
> scope = FunctionTemplate.FunctionScope.SIMPLE,
> nulls = FunctionTemplate.NullHandling.NULL_IF_NULL
> )
> public class Base64Conv implements DrillSimpleFunc{
> 
> @Param
> NullableVarCharHolder input;
> @Output
> VarCharHolder outDate;
> @Inject
> DrillBuf buffer;
> public void setup() {
> // TODO Auto-generated method stub
> 
> }
> 
> public void eval() {
> // TODO Auto-generated method stub
> try
> {
> String stringValue =
> org.apache.drill.exec.expr.fn.impl.StringFunctionHelpers.toStringFromUTF8(
input.start,
> input.end, input.buffer);
> byte[] valueDecoded=
> javax.xml.bind.DatatypeConverter.parseBase64Binary(stringValue);
> outDate.buffer = buffer;
> outDate.start = 0;
> outDate.end = valueDecoded.length;
> buffer.setBytes(0, valueDecoded);
> 
> }
> catch(Exception e)
> {
> // return null;
> }
> 
> 
> }

Reply via email to