Thank you very much, This helped me a lot. On Nov 30, 2015 8:26 PM, "K.P." <[email protected]> wrote:
> Try to reallocate the buffer. > Replace: > > outDate.buffer = buffer; > > with: > > buffer = outDate.buffer = buffer.reallocIfNeeded(valueDecoded.length); > > Regards, > Karol Potocki > > > 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; > > } > > > > > > } >
