Class JavaValueNode

    • Field Detail

      • mustCastToPrimitive

        private boolean mustCastToPrimitive
      • forCallStatement

        protected boolean forCallStatement
      • valueReturnedToSQLDomain

        private boolean valueReturnedToSQLDomain
      • returnValueDiscarded

        private boolean returnValueDiscarded
      • collationType

        private int collationType
    • Method Detail

      • setJavaTypeName

        final void setJavaTypeName​(java.lang.String javaTypeName)
      • castToPrimitive

        final void castToPrimitive​(boolean booleanValue)
        Toggles whether the code generator should add a cast to extract a primitive value from an object.
        Parameters:
        booleanValue - true if we want the code generator to add a cast false otherwise
      • mustCastToPrimitive

        final boolean mustCastToPrimitive()
        Reports whether the code generator should add a cast to extract a primitive value from an object.
        Returns:
        true if we want the code generator to add a cast false otherwise
      • getJSQLType

        JSQLType getJSQLType()
                      throws StandardException
        Get the JSQLType that corresponds to this node. Could be a SQLTYPE, a Java primitive, or a Java class.
        Returns:
        the corresponding JSQLType
        Throws:
        StandardException
      • mapToTypeID

        static TypeId mapToTypeID​(JSQLType jsqlType)
                           throws StandardException
        Map a JSQLType to a compilation type id.
        Parameters:
        jsqlType - the universal type to map
        Returns:
        the corresponding compilation type id
        Throws:
        StandardException
      • markForCallStatement

        final void markForCallStatement()
        Mark this node as being for a CALL Statement. (void methods are only okay for CALL Statements)
      • generateReceiver

        boolean generateReceiver​(ExpressionClassBuilder acb,
                                 MethodBuilder mb)
                          throws StandardException
        Generate the expression that evaluates to the receiver. This is for the case where a java expression is being returned to the SQL domain, and we need to check whether the receiver is null (if so, the SQL value should be set to null, and this Java expression not evaluated). Instance method calls and field references have receivers, while class method calls and calls to constructors do not. If this Java expression does not have a receiver, this method returns null. The implementation of this method should only generate the receiver once and cache it in a field. This is because there will be two references to the receiver, and we want to evaluate it only once.
        Parameters:
        acb - The ExpressionClassBuilder for the class being built
        mb - the method the expression will go into
        Returns:
        True if has compiled receiver.
        Throws:
        StandardException - Thrown on error
      • getOrderableVariantType

        int getOrderableVariantType()
                             throws StandardException
        Return the variant type for the underlying expression. The variant type can be: VARIANT - variant within a scan (method calls and 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)
        Returns:
        The variant type for the underlying expression.
        Throws:
        StandardException
      • generateExpression

        abstract void generateExpression​(ExpressionClassBuilder acb,
                                         MethodBuilder mb)
                                  throws StandardException
        General logic shared by Core compilation and by the Replication Filter compiler. Every child of ValueNode must implement one of these methods.
        Parameters:
        acb - The ExpressionClassBuilder for the class being built
        mb - the method the expression will go into
        Throws:
        StandardException - Thrown on error
      • generateReceiver

        final boolean generateReceiver​(ExpressionClassBuilder acb,
                                       MethodBuilder mb,
                                       JavaValueNode receiver)
                                throws StandardException
        Generate the expression that evaluates to the receiver. This is for the case where a java expression is being returned to the SQL domain, and we need to check whether the receiver is null (if so, the SQL value should be set to null, and this Java expression not evaluated). Instance method calls and field references have receivers, while class method calls and calls to constructors do not. If this Java expression does not have a receiver, this method returns null. This also covers the case where a java expression is being returned to the Java domain. In this case, we need to check whether the receiver is null only if the value returned by the Java expression is an object (not a primitive type). We don't want to generate the expression here if we are returning a primitive type to the Java domain, because there's no point in checking whether the receiver is null in this case (we can't make the expression return a null value). Only generate the receiver once and cache it in a field. This is because there will be two references to the receiver, and we want to evaluate it only once.
        Parameters:
        acb - The ActivationClassBuilder for the class being built
        mb - the method the expression will go into
        receiver - The query tree form of the receiver expression
        Returns:
        The compiled receiver, if any.
        Throws:
        StandardException - Thrown on error
      • getReceiverExpression

        final void getReceiverExpression​(ExpressionClassBuilder acb,
                                         MethodBuilder mb,
                                         JavaValueNode receiver)
                                  throws StandardException
        Get an expression that has the value of the receiver. If a field holding the receiver value was already generated, use that. If not, generate the receiver value.
        Parameters:
        acb - The ExpressionClassBuilder for the class we're generating
        mb - the method the expression will go into
        receiver - The query tree form of the receiver expression
        Throws:
        StandardException - Thrown on error
      • returnValueToSQLDomain

        void returnValueToSQLDomain()
        Inform this node that it returns its value to the SQL domain
      • valueReturnedToSQLDomain

        boolean valueReturnedToSQLDomain()
        Tell whether this node returns its value to the SQL domain
      • markReturnValueDiscarded

        void markReturnValueDiscarded()
        Tell this node that nothing is done with the returned value
      • returnValueDiscarded

        boolean returnValueDiscarded()
        Tell whether the return value from this node is discarded
      • getCollationType

        int getCollationType()
        Returns:
        collationType as set by setCollationType
      • setCollationType

        void setCollationType​(int type)
        Set the collation type. This will be used to determine the collation type for the SQLToJavaValueNode.
        Parameters:
        type - one of StringDataValue.COLLATION_TYPE_UCS_BASIC or StringDataValue.COLLATION_TYPE_TERRITORY_BASED