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;
> > }
> >
> >
> > }
>

Reply via email to