Class DefaultUDF

All Implemented Interfaces:
ADQLObject, ADQLOperand, UnknownType

public final class DefaultUDF extends UserDefinedFunction
It represents any function which is not managed by ADQL.
Version:
2.0 (08/2020)
Author:
Grégory Mantelet (CDS;ARI)
  • Field Details

    • definition

      protected FunctionDef definition
      Define/Describe this user defined function. This object gives the return type and the number and type of all parameters.
    • parameters

      protected final ADQLList<ADQLOperand> parameters
      Its parsed parameters.
    • functionName

      protected final String functionName
      Parsed name of this UDF.
  • Constructor Details

  • Method Details

    • getDefinition

      public final FunctionDef getDefinition()
      Get the signature/definition/description of this user defined function. The returned object provides information on the return type and the number and type of parameters.
      Returns:
      Definition of this function. (MAY be NULL)
    • setDefinition

      public final void setDefinition(FunctionDef def) throws IllegalArgumentException
      Let set the signature/definition/description of this user defined function.

      IMPORTANT: No particular checks are done here except on the function name which MUST be the same (case insensitive) as the name of the given definition. Advanced checks must have been done before calling this setter.

      Parameters:
      def - The definition applying to this parsed UDF, or NULL if none has been found.
      Throws:
      IllegalArgumentException - If the name in the given definition does not match the name of this parsed function.
      Since:
      1.3
    • isNumeric

      public final boolean isNumeric()
      Description copied from interface: ADQLOperand
      Tell whether this operand is numeric or not.
      Returns:
      true if this operand is numeric, false otherwise.
    • isString

      public final boolean isString()
      Description copied from interface: ADQLOperand
      Tell whether this operand is a string or not.
      Returns:
      true if this operand is a string, false otherwise.
    • isGeometry

      public final boolean isGeometry()
      Description copied from interface: ADQLOperand
      Tell whether this operand is a geometrical region or not.
      Returns:
      true if this operand is a geometry, false otherwise.
    • getCopy

      public ADQLObject getCopy() throws Exception
      Description copied from interface: ADQLObject
      Gets a (deep) copy of this ADQL object.
      Returns:
      The copy of this ADQL object.
      Throws:
      Exception - If there is any error during the copy.
    • getName

      public final String getName()
      Description copied from interface: ADQLObject
      Gets the name of this object in ADQL.
      Returns:
      The name of this ADQL object.
    • getParameters

      public final ADQLOperand[] getParameters()
      Description copied from class: ADQLFunction
      Gets the list of all parameters of this function.
      Specified by:
      getParameters in class ADQLFunction
      Returns:
      Its parameters list.
    • getNbParameters

      public final int getNbParameters()
      Description copied from class: ADQLFunction
      Gets the number of parameters this function has.
      Specified by:
      getNbParameters in class ADQLFunction
      Returns:
      Number of parameters.
    • getParameter

      public final ADQLOperand getParameter(int index) throws ArrayIndexOutOfBoundsException
      Description copied from class: ADQLFunction
      Gets the index-th parameter.
      Specified by:
      getParameter in class ADQLFunction
      Parameters:
      index - Parameter number.
      Returns:
      The corresponding parameter.
      Throws:
      ArrayIndexOutOfBoundsException - If the index is incorrect (index < 0 || index >= getNbParameters()).
    • setParameter

      public ADQLOperand setParameter(int index, ADQLOperand replacer) throws ArrayIndexOutOfBoundsException, NullPointerException, Exception
      Function to override if you want to check the parameters of this user defined function.
      Specified by:
      setParameter in class ADQLFunction
      Parameters:
      index - Index of the parameter to replace.
      replacer - The replacer.
      Returns:
      The replaced parameter.
      Throws:
      ArrayIndexOutOfBoundsException - If the index is incorrect (index < 0 || index >= getNbParameters()).
      NullPointerException - If a required parameter must be replaced by a NULL object.
      Exception - If another error occurs.
      See Also:
    • translate

      public String translate(ADQLTranslator caller) throws TranslationException
      Description copied from class: UserDefinedFunction

      Translate this User Defined Function into the language supported by the given translator.

      VERY IMPORTANT: This function MUST NOT use ADQLTranslator.translate(UserDefinedFunction) to translate itself. The given ADQLTranslator must be used ONLY to translate UDF's operands.

      Implementation example (extract of translate(ADQLTranslator)):

       public String translate(final ADQLTranslator caller) throws TranslationException{
              StringBuffer sql = new StringBuffer(functionName);
              sql.append('(');
              for(int i = 0; i < parameters.size(); i++){
                      if (i > 0)
                              sql.append(',').append(' ');
                      sql.append(caller.translate(parameters.get(i)));
              }
              sql.append(')');
              return sql.toString();
       }
       
      Specified by:
      translate in class UserDefinedFunction
      Parameters:
      caller - Translator to use in order to translate ONLY function parameters.
      Returns:
      The translation of this UDF into the language supported by the given translator.
      Throws:
      TranslationException - If one of the parameters can not be translated.