[
https://issues.apache.org/jira/browse/FLINK-9742?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16532793#comment-16532793
]
ASF GitHub Bot commented on FLINK-9742:
---------------------------------------
GitHub user HeartSaVioR opened a pull request:
https://github.com/apache/flink/pull/6252
[FLINK-9742][Table API & SQL] Widen scope of Expression.resultType to
'public'
## What is the purpose of the change
This patch proposes widen scope of Expression.resultType to 'public', to
enable custom TimestampExtractor outside of Flink acessing
Expression.resultType.
There is some use cases of TableSource which requires custom implementation
of TimestampExtractor, and 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". It would be better to
just make Expression.resultType public to cover other cases as well.
Please refer https://issues.apache.org/jira/browse/FLINK-9742 for more
details.
## Brief change log
* widen scope of Expression.resultType to 'public'
* also change the scope of resultType from all subclasses
## Verifying this change
This change is a trivial rework / code cleanup without any test coverage.
## Does this pull request potentially affect one of the following parts:
- Dependencies (does it add or upgrade a dependency): (no)
- The public API, i.e., is any changed class annotated with
`@Public(Evolving)`: (no)
- The serializers: no
- The runtime per-record code paths (performance sensitive): (no)
- Anything that affects deployment or recovery: JobManager (and its
components), Checkpointing, Yarn/Mesos, ZooKeeper: (no)
- The S3 file system connector: (no)
## Documentation
- Does this pull request introduce a new feature? (no)
- If yes, how is the feature documented? (not applicable)
You can merge this pull request into a Git repository by running:
$ git pull https://github.com/HeartSaVioR/flink FLINK-9742
Alternatively you can review and apply these changes as the patch at:
https://github.com/apache/flink/pull/6252.patch
To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:
This closes #6252
----
commit abb3c965febb5c5b4110b68c59b509fcf9747d38
Author: Jungtaek Lim <kabhwan@...>
Date: 2018-07-04T13:51:45Z
FLINK-9742 Widen scope of Expression.resultType to 'public'
Widen scope of Expression.resultType to 'public', to enable custom
TimestampExtractor
outside of Flink acessing Expression.resultType.
----
> Widen scope of 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)