Interface PhysType

  • All Known Implementing Classes:
    PhysTypeImpl

    public interface PhysType
    Physical type of a row.

    Consists of the SQL row type (returned by getRowType()), the Java type of the row (returned by getJavaRowType()), and methods to generate expressions to access fields, generate records, and so forth. Together, the records encapsulate how the logical type maps onto the physical type.

    • Method Detail

      • getJavaRowType

        java.lang.reflect.Type getJavaRowType()
        Returns the Java type (often a Class) that represents a row. For example, in one row format, always returns Object[].class.
      • getJavaFieldType

        java.lang.reflect.Type getJavaFieldType​(int field)
        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.

      • field

        PhysType field​(int ordinal)
        Returns the physical type of a field.
      • component

        PhysType component​(int field)
        Returns the physical type of a given field's component type.
      • getRowType

        RelDataType getRowType()
        Returns the SQL row type.
      • fieldClass

        java.lang.Class fieldClass​(int field)
        Returns the Java class of the field with the given ordinal.
      • fieldNullable

        boolean fieldNullable​(int index)
        Returns whether a given field allows null values.
      • fieldReference

        Expression fieldReference​(Expression expression,
                                  int field)
        Generates a reference to a given field in an expression.

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

        employee.deptno
        Parameters:
        expression - Expression
        field - Ordinal of field
        Returns:
        Expression to access the field of the expression
      • fieldReference

        Expression fieldReference​(Expression expression,
                                  int field,
                                  java.lang.reflect.Type storageType)
        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
        Parameters:
        expression - Expression
        field - Ordinal of field
        storageType - optional hint for storage class
        Returns:
        Expression to access the field of the expression
      • generateAccessor

        Expression generateAccessor​(java.util.List<java.lang.Integer> fields)
        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>);
            }
         }
         }
      • generateSelector

        Expression generateSelector​(ParameterExpression parameter,
                                    java.util.List<java.lang.Integer> fields)
        Generates a selector for the given fields from an expression, with the default row format.
      • generateSelector

        Expression generateSelector​(ParameterExpression parameter,
                                    java.util.List<java.lang.Integer> fields,
                                    JavaRowFormat targetFormat)
        Generates a lambda expression that is a selector for the given fields from an expression.
      • generateSelector

        Expression generateSelector​(ParameterExpression parameter,
                                    java.util.List<java.lang.Integer> fields,
                                    java.util.List<java.lang.Integer> usedFields,
                                    JavaRowFormat targetFormat)
        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.

      • selector

        Pair<java.lang.reflect.Type,​java.util.List<Expression>> selector​(ParameterExpression parameter,
                                                                               java.util.List<java.lang.Integer> fields,
                                                                               JavaRowFormat targetFormat)
        Generates a selector for the given fields from an expression. Only used by EnumerableWindow.
      • project

        PhysType project​(java.util.List<java.lang.Integer> integers,
                         JavaRowFormat format)
        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.
      • project

        PhysType project​(java.util.List<java.lang.Integer> integers,
                         boolean indicator,
                         JavaRowFormat format)
        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.

      • generateCollationKey

        Pair<Expression,​Expression> generateCollationKey​(java.util.List<RelFieldCollation> collations)
        Returns a lambda to create a collation key and a comparator. The comparator is sometimes null.
      • comparer

        Expression comparer()
        Returns a expression that yields a comparer, or null if this type is comparable.
      • record

        Expression record​(java.util.List<Expression> expressions)
        Generates an expression that creates a record for a row, initializing its fields with the given expressions. There must be one expression per field.
        Parameters:
        expressions - Expression to initialize each field
        Returns:
        Expression to create a row
      • accessors

        java.util.List<Expression> accessors​(Expression parameter,
                                             java.util.List<java.lang.Integer> argList)
      • makeNullable

        PhysType makeNullable​(boolean nullable)
        Returns a copy of this type that allows nulls if nullable is true.
      • convertTo

        @Deprecated
        Expression convertTo​(Expression expression,
                             PhysType targetPhysType)
        Deprecated.
        Use convertTo(Expression, JavaRowFormat). The use of PhysType as a second parameter is misleading since only the row format of the expression is affected by the conversion. Moreover it requires to have at hand a PhysType object which is not really necessary for achieving the desired result.
        Converts an enumerable of this physical type to an enumerable that uses a given physical type for its rows.
      • convertTo

        Expression convertTo​(Expression expression,
                             JavaRowFormat targetFormat)
        Converts an enumerable of this physical type to an enumerable that uses the targetFormat for representing its rows.