Class MethodCallNode

    • Constructor Detail

      • MethodCallNode

        MethodCallNode​(java.lang.String methodName,
                       ContextManager cm)
    • Method Detail

      • getMethodName

        java.lang.String getMethodName()
      • getFullName

        TableName getFullName()

        Get the schema-qualified name of the the routine. Is non-null only for StaticMethodCallNodes.

      • getJavaClassName

        public java.lang.String getJavaClassName()
        Returns:
        the name of the class that contains the method, null if not known. It may not be known until this node has been bound.
      • getResolvedMethod

        public java.lang.reflect.Member getResolvedMethod()
        Returns:
        get the Java method or constructor determined during the bind() phase.
      • getRoutineInfo

        public RoutineAliasInfo getRoutineInfo()
        Get the details on the invoked routines.
      • addParms

        void addParms​(java.util.List<ValueNode> parameterList)
               throws StandardException
        Add the parameter list
        Parameters:
        parameterList - A list of the parameters
        Throws:
        StandardException - Thrown on error
      • getMethodParameterClasses

        java.lang.Class<?>[] getMethodParameterClasses()
        Get the resolved Classes of our parameters
        Returns:
        the Classes of our parameters
      • getCorrelationTables

        void getCorrelationTables​(JBitSet correlationMap)
                           throws StandardException
        Build a JBitSet of all of the tables that we are correlated with.
        Parameters:
        correlationMap - The JBitSet of the tables that we are correlated with.
        Throws:
        StandardException
      • printSubNodes

        void printSubNodes​(int depth)
        Prints the sub-nodes of this object. See QueryTreeNode.java for how tree printing is supposed to work.
        Overrides:
        printSubNodes in class QueryTreeNode
        Parameters:
        depth - The depth of this node in the tree
      • toString

        public java.lang.String toString()
        Convert this object to a String. See comments in QueryTreeNode.java for how this should be done for tree printing.
        Overrides:
        toString in class QueryTreeNode
        Returns:
        This object as a String
      • bindParameters

        final void bindParameters​(FromList fromList,
                                  SubqueryList subqueryList,
                                  java.util.List<AggregateNode> aggregates)
                           throws StandardException
        Bind this expression. This means binding the sub-expressions, as well as figuring out what the return type is for this expression.
        Parameters:
        fromList - The FROM list for the query this expression is in, for binding columns.
        subqueryList - The subquery list being built as we find SubqueryNodes
        aggregates - The aggregate list being built as we find AggregateNodes
        Throws:
        StandardException - Thrown on error
      • areParametersQueryInvariant

        protected boolean areParametersQueryInvariant()
                                               throws StandardException
        Return whether or not all of the parameters to this node are QUERY_INVARIANT or CONSTANT. This is useful for VTIs - a VTI is a candidate for materialization if all of its parameters are QUERY_INVARIANT or CONSTANT
        Returns:
        Whether or not all of the parameters to this node are QUERY_INVARIANT or CONSTANT
        Throws:
        StandardException - thrown on error
      • throwNoMethodFound

        void throwNoMethodFound​(java.lang.String receiverTypeName,
                                java.lang.String[] parmTypeNames,
                                java.lang.String[] primParmTypeNames)
                         throws StandardException
        Build parameters for error message and throw the exception when there is no matching signature found.
        Parameters:
        receiverTypeName - Type name for receiver
        parmTypeNames - Type names for parameters as object types
        primParmTypeNames - Type names for parameters as primitive types
        Throws:
        StandardException - Thrown on error
      • getVarargTypeName

        private java.lang.String getVarargTypeName​(java.lang.String arrayTypeName)
        Turn an array type name into the corresponding vararg type name
      • categorize

        boolean categorize​(JBitSet referencedTabs,
                           boolean simplePredsOnly)
                    throws StandardException
        Categorize this predicate. Initially, this means building a bit map of the referenced tables for each predicate. If the source of this ColumnReference (at the next underlying level) is not a ColumnReference or a VirtualColumnNode then this predicate will not be pushed down. For example, in: select * from (select 1 from s) a (x) where x = 1 we will not push down x = 1. NOTE: It would be easy to handle the case of a constant, but if the inner SELECT returns an arbitrary expression, then we would have to copy that tree into the pushed predicate, and that tree could contain subqueries and method calls. RESOLVE - revisit this issue once we have views.
        Specified by:
        categorize in class JavaValueNode
        Parameters:
        referencedTabs - JBitSet with bit map of referenced FromTables
        simplePredsOnly - Whether or not to consider method calls, field references and conditional nodes when building bit map
        Returns:
        boolean Whether or not source.expression is a ColumnReference or a VirtualColumnNode.
        Throws:
        StandardException - Thrown on error
        See Also:
        ValueNode.categorize(org.apache.derby.iapi.util.JBitSet, boolean)
      • hasVarargs

        public boolean hasVarargs()
        Return true if the routine has varargs
      • getFirstVarargIdx

        public int getFirstVarargIdx()
        Get the index of the first vararg if this is a varargs method
      • isVararg

        public boolean isVararg​(int parameterNumber)
        Return true if the parameter is a vararg
      • generateParameters

        public int generateParameters​(ExpressionClassBuilder acb,
                                      MethodBuilder mb)
                               throws StandardException
        Generate the parameters to the given method call
        Parameters:
        acb - The ExpressionClassBuilder for the class we're generating
        mb - the method the expression will go into
        Returns:
        Count of arguments to the method.
        Throws:
        StandardException - Thrown on error
      • getRoutineArgIdx

        protected int getRoutineArgIdx​(int invocationArgIdx)

        Get the offset into the routine arguments corresponding to the index of the invocation parameter. The two indexes may be different in the case of varargs methods. There may be more invocation args than declared routine args. For a varargs routine, all of the trailing invocation parameters correspond to the last argument declared by the CREATE FUNCTION/PROCEDURE statement.

      • getRoutineArgIdx

        protected int getRoutineArgIdx​(RoutineAliasInfo rai,
                                       int invocationArgIdx)
      • generateOneParameter

        void generateOneParameter​(ExpressionClassBuilder acb,
                                  MethodBuilder mb,
                                  int parameterNumber)
                           throws StandardException
        Generate one parameter to the given method call. This method is overriden by RepStaticMethodCallNode.
        Parameters:
        acb - The ExpressionClassBuilder for the class we're generating
        mb - the method the expression will go into
        parameterNumber - Identifies which parameter to generate. 0 based.
        Throws:
        StandardException - Thrown on error
      • setNullParameterInfo

        void setNullParameterInfo​(java.lang.String[] parmTypeNames)
                           throws StandardException
        Set the appropriate type information for a null passed as a parameter. This method is called after method resolution, when a signature was successfully matched.
        Parameters:
        parmTypeNames - String[] with the java type names for the parameters as declared by the method
        Throws:
        StandardException - Thrown on error
      • stripOneArrayLevel

        protected java.lang.String stripOneArrayLevel​(java.lang.String typeName)
        Strip the trailing [] from a type name
      • parseValidateSignature

        private java.lang.String[] parseValidateSignature​(java.lang.String externalName,
                                                          int offset,
                                                          boolean hasDynamicResultSets)
                                                   throws StandardException
        Parse the user supplied signature for a method and validate it, need to match the number of parameters passed in and match the valid types for the parameter.
        Parameters:
        offset - Character offset of first paren
        hasDynamicResultSets - Can ResultSet[] parameters be specified.
        Returns:
        The valid array of types for resolution.
        Throws:
        StandardException
      • someParametersAreNull

        protected boolean someParametersAreNull()
        Return true if some parameters are null, false otherwise.
      • getObjectSignature

        protected java.lang.String[] getObjectSignature()
                                                 throws StandardException
        Build an array of names of the argument types. These types are biased toward Java objects. That is, if an argument is of SQLType, then we map it to the corresponding Java synonym class (e.g., SQLINT is mapped to 'java.lang.Integer').
        Returns:
        array of type names
        Throws:
        StandardException - Thrown on error
      • getIsParam

        protected boolean[] getIsParam()
        Build an array of booleans denoting whether or not a given method parameter is a ?.
        Returns:
        array of booleans denoting wheter or not a given method parameter is a ?.
      • getOrderableVariantType

        int getOrderableVariantType()
                             throws StandardException
        Return the variant type for the underlying expression. The variant type can be: VARIANT - variant within a scan (non-static field access) SCAN_INVARIANT - invariant within a scan (column references from outer tables) QUERY_INVARIANT - invariant within the life of a query (constant expressions)
        Overrides:
        getOrderableVariantType in class JavaValueNode
        Returns:
        The variant type for the underlying expression.
        Throws:
        StandardException
      • getMethodParms

        JavaValueNode[] getMethodParms()
        Get the method parameters.
        Returns:
        The method parameters