Class ExpressionUtils


  • public class ExpressionUtils
    extends Object
    Utility methods for working with SQL expressions.
    • Method Detail

      • getNumericExpression

        public static NumericExpression getNumericExpression​(SQLExpression expr)
        Method to return a numeric expression for the supplied SQL expression. Makes use of the RDBMS function to convert to a numeric.
        Parameters:
        expr - The expression
        Returns:
        The numeric expression for this SQL expression
      • getLiteralForOne

        public static SQLExpression getLiteralForOne​(SQLStatement stmt)
        Convenience accessor for a literal for the number 1.
        Parameters:
        stmt - The SQL statement
        Returns:
        The literal
      • getEscapedPatternExpression

        public static SQLExpression getEscapedPatternExpression​(SQLExpression patternExpr)
        The pattern string for representing one character. Most of databases will use the underscore character.
        Parameters:
        patternExpr - The expression that represents one character for a matcher/parser in the database
        Returns:
        the pattern string.
      • populatePrimaryKeyMappingsValuesForPCMapping

        public static int populatePrimaryKeyMappingsValuesForPCMapping​(JavaTypeMapping[] pkMappings,
                                                                       Object[] pkFieldValues,
                                                                       int position,
                                                                       PersistableMapping pcMapping,
                                                                       org.datanucleus.metadata.AbstractClassMetaData cmd,
                                                                       org.datanucleus.metadata.AbstractMemberMetaData mmd,
                                                                       Object fieldValue,
                                                                       RDBMSStoreManager storeMgr,
                                                                       org.datanucleus.ClassLoaderResolver clr)
        Convenience method to populate PK mappings/values allowing for recursion where a PK field is itself a PCMapping, that itself has PK mappings, which in turn may include PCMappings. The pkMappings/pkFieldValues arrays are already created and we populate from "position".
        Parameters:
        pkMappings - The array of pk mappings to be populated
        pkFieldValues - The array of pk field values to be populated
        position - The current position needing populating
        pcMapping - The PC mapping we are processing
        cmd - ClassMetaData for the owning class with this PCMapping field
        mmd - Field metadata for the field that this PCMapping represents
        fieldValue - The value for the PCMapping field in the owning object
        storeMgr - Store Manager
        clr - ClassLoader resolver
        Returns:
        The current position (after our processing)
      • getValueForMemberOfObject

        public static Object getValueForMemberOfObject​(org.datanucleus.ExecutionContext ec,
                                                       org.datanucleus.metadata.AbstractMemberMetaData mmd,
                                                       Object object)
        Get the value of a managed field/property in the provided object.
        Parameters:
        ec - execution context
        mmd - metadata for the field/property
        object - the pc object
        Returns:
        The field value
      • getAppIdEqualityExpression

        public static BooleanExpression getAppIdEqualityExpression​(Object id,
                                                                   SQLExpression expr,
                                                                   RDBMSStoreManager storeMgr,
                                                                   org.datanucleus.ClassLoaderResolver clr,
                                                                   org.datanucleus.metadata.AbstractClassMetaData acmd,
                                                                   Integer index,
                                                                   BooleanExpression bExpr)
        Create an equality expression "(expr == id)" for an application identity using reflection to retrieve values and generate the mappings.
        Parameters:
        id - the identity to compare against
        expr - the object expression
        storeMgr - the StoreManager
        clr - the ClassLoaderResolver
        acmd - MetaData for the class the object id represents
        index - the current index in the source expression (internal)
        bExpr - the boolean equals expression (internal)
        Returns:
        the equality expression
      • getEqualityExpressionForObjectExpressions

        public static BooleanExpression getEqualityExpressionForObjectExpressions​(ObjectExpression expr1,
                                                                                  ObjectExpression expr2,
                                                                                  boolean equals)
        Method to generate an equality/inequality expression between two ObjectExpressions. Either or both of the expressions can be ObjectLiterals.
        Parameters:
        expr1 - First expression
        expr2 - Second expression
        equals - Whether it is equality (otherwise inequality)
        Returns:
        The expression
      • checkAndCorrectExpressionMappingsForBooleanComparison

        public static void checkAndCorrectExpressionMappingsForBooleanComparison​(SQLExpression expr1,
                                                                                 SQLExpression expr2)
        Convenience method that compares the mappings used by the two expressions for compatibility for use in a boolean comparison (eq, noteq, gt, gteq, lt, lteq) and, if necessary, updates the mapping if one of them is a SQLLiteral and is deemed inconsistent with the other expression. Additionally, if both sides of the comparison are parameters, this will swap one to be its literal value.
        Parameters:
        expr1 - First expression
        expr2 - Second expression
      • checkAndCorrectLiteralForConsistentMappingsForBooleanComparison

        protected static void checkAndCorrectLiteralForConsistentMappingsForBooleanComparison​(SQLLiteral lit,
                                                                                              SQLExpression expr)