I tried but I am getting below issue.

*Code:*

@FunctionTemplate(name = "UTMFuncGen", scope =
FunctionTemplate.FunctionScope.SIMPLE, nulls =
FunctionTemplate.NullHandling.INTERNAL)
public class UTMFuncGen implements DrillSimpleFunc {

    @Param
    NullableVarCharHolder key;
    @Param
    NullableVarCharHolder value;
    @Param
    NullableVarCharHolder endPoint;
    @Output
    VarCharHolder outValue;
    @Inject
    DrillBuf buffer;

    public void setup() {
        // TODO Auto-generated method stub

    }

    public void eval() {
        String stringOutValue = "null";
        if(value.isSet == 0){
            stringOutValue = "null";
        }
        try {
            String stringKey =
org.apache.drill.exec.expr.fn.impl.StringFunctionHelpers.toStringFromUTF8(key.start,
key.end, key.buffer);
            String stringValue =
org.apache.drill.exec.expr.fn.impl.StringFunctionHelpers.toStringFromUTF8(value.start,
value.end, value.buffer);
            String stringEndPoint =
org.apache.drill.exec.expr.fn.impl.StringFunctionHelpers.toStringFromUTF8(endPoint.start,
endPoint.end, endPoint.buffer);
//            String stringNullHandle =
org.apache.drill.exec.expr.fn.impl.StringFunctionHelpers.toStringFromUTF8(nullHandle.start,
nullHandle.end, nullHandle.buffer);
            int verOffset, verOffset1;
            System.out.println("string value"+stringValue);
                if ((verOffset = stringValue.indexOf(stringKey)) != -1) {
                    if ((verOffset1 = stringValue.indexOf(stringEndPoint,
verOffset + 1)) != -1) {
                        stringOutValue = stringValue.substring(verOffset +
stringKey.length(), verOffset1);
                        System.out.println("parsed"+stringOutValue);
                    } else {
                        verOffset1 = stringValue.length();
                        stringOutValue = stringValue.substring(verOffset +
stringKey.length(), verOffset1);
                    }




*.....*

*Error:*
Error: SYSTEM ERROR: DrillRuntimeException: Failure while materializing
expression in constant expression evaluator [UTMFUNCGEN('cid=', '
https://www.rummycircle.com/rummy-for-cash-is-fun.html?utm_sm_campaign=CT-FTM',
'&', 'cid=null')].  Errors:
Error in expression at index -1.  Error: Missing function implementation:
[utmfuncgen(VARCHAR-REQUIRED, VARCHAR-REQUIRED, VARCHAR-REQUIRED,
VARCHAR-REQUIRED)].  Full expression: --UNKNOWN EXPRESSION--.




*My Requirement:*
I want to return Null as null not as string in all the cases but
1) When input is null it returns null
2) when input is there but not valid as per business logic need to return
null, I am not able to return null.

Regards,
Nirav



On Wed, Jan 6, 2016 at 11:23 AM, Nirav Shah <[email protected]>
wrote:

> Thanks Jacques. Appreciate your response.
>
> On Tue, Jan 5, 2016 at 10:59 PM, Jacques Nadeau <[email protected]>
> wrote:
>
>> The default behavior of Drill UDFs is NullHandling.NULL_IF_NULL semantics.
>> This means that a the Drill engine manages checking nullability on inputs.
>> If one or more inputs is null, then the output is null. You can also
>> implement NullHandling.INTERNAL as your null semantics in a UDF. This
>> allows you to set nullability on your output independent of the
>> nullability
>> of the inputs. An example is the isNull functions [1]. Note that the
>> complexity with using internal handling if you have to create
>> implementations for all variations of null inputs and outputs. This is the
>> cartesian product of variations when you have multiple parameters. As
>> such,
>> we generally use freemarker templates (per the example below) to create
>> the
>> variations.
>>
>> [1]
>>
>> https://github.com/apache/drill/blob/master/exec/java-exec/src/main/codegen/templates/NullOperator.java
>>
>> --
>> Jacques Nadeau
>> CTO and Co-Founder, Dremio
>>
>> On Mon, Jan 4, 2016 at 8:04 PM, Nirav Shah <[email protected]>
>> wrote:
>>
>> > Hi,
>> > May be this is silly question, Please let me know how to return null
>> string
>> > from drill custom function.
>> >
>> >
>> > Regards,
>> > Nirav
>> >
>>
>
>

Reply via email to