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