Class PhysTypeImpl

  • All Implemented Interfaces:
    PhysType

    public class PhysTypeImpl
    extends java.lang.Object
    implements PhysType
    Implementation of PhysType.
    • Field Detail

      • javaRowClass

        private final java.lang.reflect.Type javaRowClass
      • fieldClasses

        private final java.util.List<java.lang.Class> fieldClasses
    • Method Detail

      • project

        public PhysType project​(java.util.List<java.lang.Integer> integers,
                                JavaRowFormat format)
        Description copied from interface: PhysType
        Projects a given collection of fields from this input record, into a particular preferred output format. The output format is optimized if there are 0 or 1 fields.
        Specified by:
        project in interface PhysType
      • project

        public PhysType project​(java.util.List<java.lang.Integer> integers,
                                boolean indicator,
                                JavaRowFormat format)
        Description copied from interface: PhysType
        Projects a given collection of fields from this input record, optionally with indicator fields, into a particular preferred output format.

        The output format is optimized if there are 0 or 1 fields and indicators are disabled.

        Specified by:
        project in interface PhysType
      • generateSelector

        public Expression generateSelector​(ParameterExpression parameter,
                                           java.util.List<java.lang.Integer> fields)
        Description copied from interface: PhysType
        Generates a selector for the given fields from an expression, with the default row format.
        Specified by:
        generateSelector in interface PhysType
      • generateSelector

        public Expression generateSelector​(ParameterExpression parameter,
                                           java.util.List<java.lang.Integer> fields,
                                           java.util.List<java.lang.Integer> usedFields,
                                           JavaRowFormat targetFormat)
        Description copied from interface: PhysType
        Generates a lambda expression that is a selector for the given fields from an expression.

        usedFields must be a subset of fields. For each field, there is a corresponding indicator field. If a field is used, its value is assigned and its indicator is left false. If a field is not used, its value is not assigned and its indicator is set to true; This will become a value of 1 when GROUPING(field) is called.

        Specified by:
        generateSelector in interface PhysType
      • selector

        public Pair<java.lang.reflect.Type,​java.util.List<Expression>> selector​(ParameterExpression parameter,
                                                                                      java.util.List<java.lang.Integer> fields,
                                                                                      JavaRowFormat targetFormat)
        Description copied from interface: PhysType
        Generates a selector for the given fields from an expression. Only used by EnumerableWindow.
        Specified by:
        selector in interface PhysType
      • makeNullable

        public PhysType makeNullable​(boolean nullable)
        Description copied from interface: PhysType
        Returns a copy of this type that allows nulls if nullable is true.
        Specified by:
        makeNullable in interface PhysType
      • convertTo

        public Expression convertTo​(Expression exp,
                                    PhysType targetPhysType)
        Description copied from interface: PhysType
        Converts an enumerable of this physical type to an enumerable that uses a given physical type for its rows.
        Specified by:
        convertTo in interface PhysType
      • record

        public Expression record​(java.util.List<Expression> expressions)
        Description copied from interface: PhysType
        Generates an expression that creates a record for a row, initializing its fields with the given expressions. There must be one expression per field.
        Specified by:
        record in interface PhysType
        Parameters:
        expressions - Expression to initialize each field
        Returns:
        Expression to create a row
      • getJavaRowType

        public java.lang.reflect.Type getJavaRowType()
        Description copied from interface: PhysType
        Returns the Java type (often a Class) that represents a row. For example, in one row format, always returns Object[].class.
        Specified by:
        getJavaRowType in interface PhysType
      • getJavaFieldType

        public java.lang.reflect.Type getJavaFieldType​(int index)
        Description copied from interface: PhysType
        Returns the Java class that is used to store the field with the given ordinal.

        For instance, when the java row type is Object[], the java field type is Object even if the field is not nullable.

        Specified by:
        getJavaFieldType in interface PhysType
      • component

        public PhysType component​(int fieldOrdinal)
        Description copied from interface: PhysType
        Returns the physical type of a given field's component type.
        Specified by:
        component in interface PhysType
      • field

        public PhysType field​(int ordinal)
        Description copied from interface: PhysType
        Returns the physical type of a field.
        Specified by:
        field in interface PhysType
      • comparer

        public Expression comparer()
        Description copied from interface: PhysType
        Returns a expression that yields a comparer, or null if this type is comparable.
        Specified by:
        comparer in interface PhysType
      • fieldReferences

        private java.util.List<Expression> fieldReferences​(Expression parameter,
                                                           java.util.List<java.lang.Integer> fields)
      • fieldClass

        public java.lang.Class fieldClass​(int field)
        Description copied from interface: PhysType
        Returns the Java class of the field with the given ordinal.
        Specified by:
        fieldClass in interface PhysType
      • fieldNullable

        public boolean fieldNullable​(int field)
        Description copied from interface: PhysType
        Returns whether a given field allows null values.
        Specified by:
        fieldNullable in interface PhysType
      • generateAccessor

        public Expression generateAccessor​(java.util.List<java.lang.Integer> fields)
        Description copied from interface: PhysType
        Generates an accessor function for a given list of fields. The resulting object is a List (implementing Object.hashCode() and Object.equals(Object) per that interface) and also implements Comparable.

        For example:

         new Function1<Employee, Object[]> {
            public Object[] apply(Employee v1) {
                return FlatLists.of(v1.<fieldN>, v1.<fieldM>);
            }
         }
         }
        Specified by:
        generateAccessor in interface PhysType
      • fieldReference

        public Expression fieldReference​(Expression expression,
                                         int field)
        Description copied from interface: PhysType
        Generates a reference to a given field in an expression.

        For example given expression=employee and field=2, generates

        employee.deptno
        Specified by:
        fieldReference in interface PhysType
        Parameters:
        expression - Expression
        field - Ordinal of field
        Returns:
        Expression to access the field of the expression
      • fieldReference

        public Expression fieldReference​(Expression expression,
                                         int field,
                                         java.lang.reflect.Type storageType)
        Description copied from interface: PhysType
        Generates a reference to a given field in an expression.

        This method optimizes for the target storage type (i.e. avoids casts).

        For example given expression=employee and field=2, generates

        employee.deptno
        Specified by:
        fieldReference in interface PhysType
        Parameters:
        expression - Expression
        field - Ordinal of field
        storageType - optional hint for storage class
        Returns:
        Expression to access the field of the expression