OK, I came across this in some UDF sample code and welcome the "best
practices" update. :)

Thank you,
 -Stefan

On Tue, Jan 12, 2016 at 3:16 PM, Jacques Nadeau <[email protected]> wrote:

> Inside Drill we generally don't use that method for anything but debugging.
> I'm working on some other fixes and will roll in a change to correct this
> as well. You should be able to track it via DRILL-4246. In the meantime, a
> workaround is using the ByteBufUtil that Drill uses internally for this
> kind of thing:
>
> DrillBuf myBuf = ...
> String bufAsString = ByteBufUtil.decodeString(myBuf.nioBuffer(),
> Charsets.UTF_8);
>
>
>
> --
> Jacques Nadeau
> CTO and Co-Founder, Dremio
>
> On Fri, Jan 8, 2016 at 12:04 PM, Stefán Baxter <[email protected]>
> wrote:
>
> > So,
> >
> > This is happening due to changes made to DrillBuffer as a part of
> > Drill-4134 (53dcabeb83f53c8e29aff9c9282eaaa20a8b27ee)
> >
> > @Override
> >
> > public String toString(int index, int length, Charset charset) {
> >   final String basics =
> >       String.format("{DrillBuf[%d], udle identityHashCode == %d,
> > identityHashCode == %d}",
> >           id, System.identityHashCode(byteBuf),
> > System.identityHashCode(refCnt));
> >
> >   if (length == 0) {
> >     return basics;
> >   }
> >
> >   final ByteBuffer nioBuffer;
> >   if (nioBufferCount() == 1) {
> >     nioBuffer = nioBuffer(index, length);
> >   } else {
> >     nioBuffer = ByteBuffer.allocate(length);
> >     getBytes(index, nioBuffer);
> >     nioBuffer.flip();
> >   }
> >
> >   return basics + '\n' + ByteBufUtil.decodeString(nioBuffer, charset);
> > }
> >
> > Now the returned value is prefixed with the *basics* part.
> >
> > I have no idea what the intention is here but it must be breaking more
> > code than just mine.
> >
> > Its also interesting that this signature is formatted/created every
> > time a value is fetched.
> >
> > Regards,
> >  -Stefán
> >
> >
> >
> >
> > On Fri, Jan 8, 2016 at 7:48 PM, Stefán Baxter <[email protected]
> >
> > wrote:
> >
> > > Hi again,
> > >
> > > This code can be used to reproduce this behavior:
> > >
> > > @FunctionTemplate(name = "asEcho", scope =
> > FunctionTemplate.FunctionScope.SIMPLE, nulls =
> > FunctionTemplate.NullHandling.NULL_IF_NULL)
> > > public static class asEcho implements DrillSimpleFunc {
> > >
> > >     @Param
> > >     VarCharHolder input1;
> > >
> > >     @Output
> > >     VarCharHolder output;
> > >
> > >     @Inject
> > >     DrillBuf buffer;
> > >
> > >     public void setup() { }
> > >
> > >     public void eval() {
> > >         String someValue = input1.buffer.toString(input1.start,
> > input1.end-input1.start, java.nio.charset.Charset.defaultCharset());
> > >         output.buffer = buffer.reallocIfNeeded(someValue.length());
> > >         for (Byte aByte : someValue.toString().getBytes())
> > output.buffer.setByte(output.end ++, aByte);
> > >     }
> > > }
> > >
> > >
> > >
> > >
> > >
> > > On Fri, Jan 8, 2016 at 7:43 PM, Stefán Baxter <
> [email protected]
> > >
> > > wrote:
> > >
> > >> Hi,
> > >>
> > >> This seems to have something to do with reading string values from a
> > >> VarCharHolder.
> > >>
> > >> Here is the code that has stopped working:
> > >>
> > >> String someValue = input2.buffer.toString(input2.start,
> > input2.end-input2
> > >> .start, java.nio.charset.Charset.defaultCharset())
> > >>
> > >>
> > >> It used to return only the string value but now it returns:
> > >>
> > >> {DrillBuf[77], udle identityHashCode == 1660956802, identityHashCode
> ==
> > >> 343154168}
> > >> PT1H
> > >>
> > >>
> > >> The value is there in the second line (Seems to include a newline
> > >> character)
> > >>
> > >> Any ideas?
> > >>
> > >> Regards,
> > >>  -Stefan
> > >>
> > >>
> > >> On Fri, Jan 8, 2016 at 7:24 PM, Stefán Baxter <
> > [email protected]>
> > >> wrote:
> > >>
> > >>> Hi,
> > >>>
> > >>> My UDFs have stopped working with the latest version of 1.5-SNAPSHOT
> > >>> (pulled just now).
> > >>>
> > >>> The error is:
> > >>> SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for
> > >>> further details.
> > >>> Error: SYSTEM ERROR: IllegalArgumentException: Invalid format:
> > >>> "{DrillBuf[74], udle identityHash..."
> > >>>
> > >>> Fragment 1:5
> > >>>
> > >>> [Error Id: 17b0165d-8ff3-4101-961a-0e40fdff0392 on Lightning:31010]
> > >>> (state=,code=0)
> > >>>
> > >>>
> > >>> Does anyone know what might be causing this?
> > >>>
> > >>> (The UDFs are compiled using the same target)
> > >>>
> > >>> Regards,
> > >>>  -Stefán
> > >>>
> > >>
> > >>
> > >
> >
>

Reply via email to