[ https://issues.apache.org/jira/browse/FLINK-9742?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Fabian Hueske reopened FLINK-9742: ---------------------------------- > Expose Expression.resultType to public > -------------------------------------- > > Key: FLINK-9742 > URL: https://issues.apache.org/jira/browse/FLINK-9742 > Project: Flink > Issue Type: Improvement > Components: Table API & SQL > Affects Versions: 1.5.0 > Reporter: Jungtaek Lim > Priority: Major > Labels: pull-request-available > > I have use case of TableSource which requires custom implementation of > TimestampExtractor. To ensure new TimestampExtractor to cover more general > use cases, accessing Expression.resultType is necessary, but its scope is now > defined as package private for "org.apache.flink". > Below is the implementation of custom TimestampExtractor which leverages > Expression.resultType, hence had to place it to org.apache.flink package > (looks like a hack). > {code:java} > class IsoDateStringAwareExistingField(val field: String) extends > TimestampExtractor { > override def getArgumentFields: Array[String] = Array(field) > override def validateArgumentFields(argumentFieldTypes: > Array[TypeInformation[_]]): Unit = { > val fieldType = argumentFieldTypes(0) > fieldType match { > case Types.LONG => // OK > case Types.SQL_TIMESTAMP => // OK > case Types.STRING => // OK > case _: TypeInformation[_] => > throw ValidationException( > s"Field '$field' must be of type Long or Timestamp or String but is > of type $fieldType.") > } > } > override def getExpression(fieldAccesses: Array[ResolvedFieldReference]): > Expression = { > val fieldAccess: Expression = fieldAccesses(0) > fieldAccess.resultType match { > case Types.LONG => > // access LONG field > fieldAccess > case Types.SQL_TIMESTAMP => > // cast timestamp to long > Cast(fieldAccess, Types.LONG) > case Types.STRING => > Cast(Cast(fieldAccess, SqlTimeTypeInfo.TIMESTAMP), Types.LONG) > } > } > }{code} > It would be better to just make Expression.resultType public to cover other > cases as well. (I'm not sure other methods would be also better to be public > as well.) -- This message was sent by Atlassian JIRA (v7.6.3#76005)