public static Expression createExpression()

in core/src/main/java/org/apache/calcite/runtime/rtti/RuntimeTypeInformation.java [135:253]


  public static Expression createExpression(RelDataType type) {
    switch (type.getSqlTypeName()) {
    case BOOLEAN:
      return Expressions.new_(BasicSqlTypeRtti.class,
          Expressions.constant(RuntimeSqlTypeName.BOOLEAN));
    case TINYINT:
      return Expressions.new_(BasicSqlTypeRtti.class,
          Expressions.constant(RuntimeSqlTypeName.TINYINT));
    case SMALLINT:
      return Expressions.new_(BasicSqlTypeRtti.class,
          Expressions.constant(RuntimeSqlTypeName.SMALLINT));
    case INTEGER:
      return Expressions.new_(BasicSqlTypeRtti.class,
          Expressions.constant(RuntimeSqlTypeName.INTEGER));
    case BIGINT:
      return Expressions.new_(BasicSqlTypeRtti.class,
          Expressions.constant(RuntimeSqlTypeName.BIGINT));
    case DECIMAL:
      return Expressions.new_(BasicSqlTypeRtti.class,
          Expressions.constant(RuntimeSqlTypeName.DECIMAL));
    case REAL:
      return Expressions.new_(BasicSqlTypeRtti.class,
          Expressions.constant(RuntimeSqlTypeName.REAL));
    case FLOAT:
    case DOUBLE:
      return Expressions.new_(BasicSqlTypeRtti.class,
          Expressions.constant(RuntimeSqlTypeName.DOUBLE));
    case DATE:
      return Expressions.new_(BasicSqlTypeRtti.class,
          Expressions.constant(RuntimeSqlTypeName.DATE));
    case TIME:
      return Expressions.new_(BasicSqlTypeRtti.class,
          Expressions.constant(RuntimeSqlTypeName.TIME));
    case TIME_WITH_LOCAL_TIME_ZONE:
      return Expressions.new_(BasicSqlTypeRtti.class,
          Expressions.constant(RuntimeSqlTypeName.TIME_WITH_LOCAL_TIME_ZONE));
    case TIME_TZ:
      return Expressions.new_(BasicSqlTypeRtti.class,
          Expressions.constant(RuntimeSqlTypeName.TIME_TZ));
    case TIMESTAMP:
      return Expressions.new_(BasicSqlTypeRtti.class,
          Expressions.constant(RuntimeSqlTypeName.TIMESTAMP));
    case TIMESTAMP_WITH_LOCAL_TIME_ZONE:
      return Expressions.new_(BasicSqlTypeRtti.class,
          Expressions.constant(RuntimeSqlTypeName.TIMESTAMP_WITH_LOCAL_TIME_ZONE));
    case TIMESTAMP_TZ:
      return Expressions.new_(BasicSqlTypeRtti.class,
          Expressions.constant(RuntimeSqlTypeName.TIMESTAMP_TZ));
    case INTERVAL_YEAR:
    case INTERVAL_YEAR_MONTH:
    case INTERVAL_MONTH:
      return Expressions.new_(BasicSqlTypeRtti.class,
          Expressions.constant(RuntimeSqlTypeName.INTERVAL_LONG));
    case INTERVAL_DAY:
    case INTERVAL_DAY_HOUR:
    case INTERVAL_DAY_MINUTE:
    case INTERVAL_DAY_SECOND:
    case INTERVAL_HOUR:
    case INTERVAL_HOUR_MINUTE:
    case INTERVAL_HOUR_SECOND:
    case INTERVAL_MINUTE:
    case INTERVAL_MINUTE_SECOND:
    case INTERVAL_SECOND:
      return Expressions.new_(BasicSqlTypeRtti.class,
          Expressions.constant(RuntimeSqlTypeName.INTERVAL_SHORT));
    case CHAR:
    case VARCHAR:
      return Expressions.new_(BasicSqlTypeRtti.class,
          Expressions.constant(RuntimeSqlTypeName.VARCHAR));
    case BINARY:
    case VARBINARY:
      return Expressions.new_(BasicSqlTypeRtti.class,
          Expressions.constant(RuntimeSqlTypeName.VARBINARY));
    case NULL:
      return Expressions.new_(BasicSqlTypeRtti.class,
          Expressions.constant(RuntimeSqlTypeName.NULL));
    case MULTISET: {
      Expression comp = createExpression(requireNonNull(type.getComponentType()));
      return Expressions.new_(GenericSqlTypeRtti.class,
          Expressions.constant(RuntimeSqlTypeName.MULTISET), comp);
    }
    case ARRAY: {
      Expression comp = createExpression(requireNonNull(type.getComponentType()));
      return Expressions.new_(GenericSqlTypeRtti.class,
          Expressions.constant(RuntimeSqlTypeName.ARRAY), comp);
    }
    case MAP: {
      Expression key = createExpression(requireNonNull(type.getKeyType()));
      Expression value = createExpression(requireNonNull(type.getValueType()));
      return Expressions.new_(GenericSqlTypeRtti.class,
          Expressions.constant(RuntimeSqlTypeName.MAP), key, value);
    }
    case ROW: {
      Expression[] fields = new Expression[type.getFieldCount()];
      int index = 0;
      for (RelDataTypeField field : type.getFieldList()) {
        String name = field.getName();
        RelDataType fieldType = field.getType();
        Expression fieldTypeExpression = createExpression(fieldType);
        Expression nameExpression = Expressions.constant(name);
        Expression entry =
            Expressions.new_(AbstractMap.SimpleEntry.class, nameExpression, fieldTypeExpression);
        fields[index++] = entry;
      }
      return Expressions.new_(RowSqlTypeRtti.class, fields);
    }
    case GEOMETRY:
      return Expressions.new_(BasicSqlTypeRtti.class,
          Expressions.constant(RuntimeSqlTypeName.GEOMETRY));
    case VARIANT:
      return Expressions.new_(BasicSqlTypeRtti.class,
          Expressions.constant(RuntimeSqlTypeName.VARIANT));
    case UUID:
      return Expressions.new_(BasicSqlTypeRtti.class,
          Expressions.constant(RuntimeSqlTypeName.UUID));
    default:
      throw new RuntimeException("Unexpected type " + type);
    }
  }