Congrats! Nice job! - Paul
> On Jan 14, 2017, at 5:52 AM, Nagarajan Chinnasamy > <[email protected]> wrote: > > Success :) I could invoke SESSION_ID without parenthesis. Following did the > trick: > > 1. In DrillSqlOperator, overriding getSyntax method to return > SqlSyntax.FUNCTION_ID > 2. In DrillOperatorTable, adding operator when SqlSyntax is (FUNCTION || > FUNCTION_ID) > > Thanks for your inputs. > > Best Regards, > Nagu. > > On Fri, Jan 13, 2017 at 1:30 AM, Nagarajan Chinnasamy < > [email protected]> wrote: > >> The CURRENT_DATE is constructed using the SqlFunction constructor: >> >> public SqlFunction(String name, >> SqlKind kind, >> SqlReturnTypeInference returnTypeInference, >> SqlOperandTypeInference operandTypeInference, >> SqlOperandTypeChecker operandTypeChecker, SqlFunctionCategory >> category) >> >> Whereas the DrillSqlOperator (derived from SqlFunction) is using the >> following constructor variation: >> >> super(new SqlIdentifier(name, SqlParserPos.ZERO), >> sqlReturnTypeInference, >> null, >> Checker.getChecker(argCountMin, argCountMax), // >> SqlOperandTypeChecker >> null, >> SqlFunctionCategory.USER_DEFINED_FUNCTION); >> >> In DrillSqlOperator (derived from SqlFunction), I tried: >> >> 1. setting OperandTypeChecker value to OperandTypes.NILADIC >> 2. Overriding getSyntax method to return SqlSyntax.FUNCTION_ID >> >> Both of the above did not help. >> >> When invoked without parenthesis, I get the following exception: >> >> 0: jdbc:drill:zk=local> select session_id from (values(1)); >> Jan 13, 2017 12:58:00 AM >> org.apache.calcite.sql.validate.SqlValidatorException >> <init> >> SEVERE: org.apache.calcite.sql.validate.SqlValidatorException: Column >> 'session_id' not found in any table >> Jan 13, 2017 12:58:00 AM org.apache.calcite.runtime.CalciteException >> <init> >> SEVERE: org.apache.calcite.runtime.CalciteContextException: From line 1, >> column 8 to line 1, column 17: Column 'session_id' not found in any table >> Error: VALIDATION ERROR: From line 1, column 8 to line 1, column 17: >> Column 'session_id' not found in any table >> >> Looking for your inputs to resolve this issue... >> >> Best Regards, >> Nagu. >> >> On Wed, Dec 21, 2016 at 1:20 AM, Jinfeng Ni <[email protected]> wrote: >> >>> For function without parentheses, Calcite validator checks a >>> SqlIdentifier against validator's operatorTable. If such identifier >>> appears in the operatorTable, the SqlIdentifier is converted to a >>> SqlCall. For your use case, you probably need add such function into >>> operatorTable. You may follow Julian's suggestion of looking at >>> CURRENT_DATE function. >>> >>> 1. https://github.com/apache/calcite/blob/master/core/src/main/ >>> java/org/apache/calcite/sql/SqlIdentifier.java#L302-L308 >>> >>> On Tue, Dec 20, 2016 at 11:19 AM, Julian Hyde <[email protected]> wrote: >>>> I don’t think you need to change the parser, just the validator (the >>> changes to SqlOperator.getSyntax I described already). The parser will >>> parse an identifier, and the validator will recognize that it is a call to >>> a function with no arguments. >>>> >>>> Unless Drill has diverged further from Calcite than I imagine it has. >>>> >>>> Julian >>>> >>>> >>>>> On Dec 20, 2016, at 10:51 AM, Sudheesh Katkam <[email protected]> >>> wrote: >>>>> >>>>> I do not know the exact answer. >>>>> >>>>> Quite likely the Calcite parser needs to be changed, this blob: >>>>> >>>>> https://github.com/apache/calcite/blob/master/core/src/main/ >>> codegen/templates/Parser.jj#L4765 <https://github.com/apache/cal >>> cite/blob/master/core/src/main/codegen/templates/Parser.jj#L4765> >>>>> >>>>> Drill extends the Calcite parser, not sure if the change can be made >>> here: >>>>> >>>>> https://github.com/apache/drill/blob/master/exec/java-exec/ >>> src/main/codegen/includes/parserImpls.ftl <https://github.com/apache/dri >>> ll/blob/master/exec/java-exec/src/main/codegen/includes/parserImpls.ftl> >>>>> >>>>> Thank you, >>>>> Sudheesh >>>>> >>>>>> On Dec 19, 2016, at 3:00 PM, Nagarajan Chinnasamy < >>> [email protected]> wrote: >>>>>> >>>>>> Hi Julian Hyde, >>>>>> >>>>>> Thanks for your response. I am looking for the Drill way of doing it. >>>>>> >>>>>> In fact I have coded session_id function exactly as one of other >>>>>> ContextFunctions of Drill. I seem to be missing something :( >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> Best Regards, >>>>>> Nagu. >>>>>> >>>>>> On Mon, Dec 19, 2016 at 1:30 PM, Nagarajan Chinnasamy < >>>>>> [email protected]> wrote: >>>>>> >>>>>>> Hi, >>>>>>> >>>>>>> Am developing a UDF called SESSION_ID as detailed in issue: >>>>>>> >>>>>>> https://issues.apache.org/jira/browse/DRILL-5043 >>>>>>> >>>>>>> It does not take any input parameters. Now, I can only invoke it >>> using >>>>>>> parenthesis as in: >>>>>>> >>>>>>> SELECT SESSION_ID() FROM (Values(1)); >>>>>>> >>>>>>> I would like to know what do I need to do if I need to invoke it >>> without >>>>>>> paranthesis like: >>>>>>> >>>>>>> SELECT SESSION_ID FROM (Values(1)); >>>>>>> >>>>>>> Appreciate your input. >>>>>>> >>>>>>> Best Regards, >>>>>>> Nagu. >>>>>>> >>>>> >>>> >>> >> >>
