Introducing a new term "path" to APIs like
"getShortPath(Identifier)/getLongPath(Identifier)" would be confusing to
users, thus I feel "getSimpleName/getIdentifier" is fine.

To summarize the discussion result.

   - categorize functions into 2 dimensions - system v.s. catalog, non-temp
   v.s. temp - and that give us 4 combinations
   - definition of FunctionIdentifier

                     @PublicEvolving

Class FunctionIdentifier {

    String name;

    ObjectIdentifier oi;

        // for temporary/non-temporary system function
    public FunctionIdentifier of(String name) {  }
    // for temporary/non-temporary catalog function
    public FunctionIdentifier of(ObjectIdentifier identifier) {  }


    Optional<ObjectIdentifier> getIdentifier() {}

    Optional<String> getSimpleName() {}

}


I've updated them to FLIP wiki. Please take a final look. I'll close the
voting if there's no other concern raised within 24 hours.

Cheers

On Wed, Oct 2, 2019 at 4:54 AM Dawid Wysakowicz <dwysakow...@apache.org>
wrote:

> Hi,
>
> I very much agree with Xuefu's summary of the two points, especially on
> the "functionIdentifier doesn't need to reflect the categories".
>
> For the factory methods I think methods of should be enough:
>
>   // for temporary/non-temporary system function
>     public FunctionIdentifier of(String name) {  }
>   // for temporary/non-temporary catalog function
>     public FunctionIdentifier of(ObjectIdentifier identifier){  }
>
> In case of the getters I did not like the method name `getName` in the
> original proposal, as in my opinion it could imply that it can return
> also just the name part of an ObjectIdentifier, which should not be the
> case.
>
> I'm fine with getSimpleName/getIdentifier, but want to throw in few
> other suggestions:
>
> * getShortPath(Identifier)/getLongPath(Identifier),
>
> * getSystemPath(Identifier)/getCatalogPath(Identifier)
>
> +1 to any of the 3 options.
>
> One additional thing the FunctionIdentifier should be a PublicEvolving
> class, as it is part of a PublicEvolving APIs e.g. CallExpression, which
> user might need to access e.g. in a filter pushdown.
>
> I also support the Xuefu's suggestion not to support the "ALL" keyword
> in the "SHOW [TEMPORARY] FUNCTIONS" statement, but as the exact design
> of it  is not part of the FLIP-57, we do not need to agree on that in
> this thread.
>
> Overall I think after updating the FLIP with the outcome of the
> discussion I vote +1 for it.
>
> Best,
>
> Dawid
>
>
> On 02/10/2019 00:21, Xuefu Z wrote:
> > Here are some of my thoughts on the minor debates above:
> >
> > 1. +1 for 4 categories of functions. They are categorized along two
> > dimensions of binary values: X: *temporary* vs non-temporary
> (persistent);
> > Y: *system* vs non-system (so said catalog).
> > 2. In my opinion, class functionIdentifier doesn't really need to reflect
> > the categories of the functions. Instead, we should decouple them to make
> > the API more stable. Thus, my suggestion is:
> >
> > @Internal
> > class FunctionIdentifier {
> >   // for temporary/non-temporary system function
> >     public FunctionIdentifier ofSimpleName(String name) {  }
> >   // for temporary/non-temporary catalog function
> >     public FunctionIdentifier ofIdentifier(ObjectIdentifier
> > identifier){  }
> >     public Optional<String> getSimpleName() {  }
> >     public Optional<ObjectIdentifier> getIdentifier() {  }
> > }
> > 3. DDLs -- I don't think we need "ALL" keyword. The grammar can just be:
> >
> > SHOW [TEMPORARY] [SYSTEM] FUNCTIONS.
> >
> > When either keyword is missing, "ALL" is implied along that dimension. We
> > should always limit the search to the system function catalog and the
> > current catalog/DB. I don't see a need of listing functions across
> > different catalogs and databases. (It can be added later if that arises.)
> >
> > Thanks,
> > Xuefu
> >
> > On Tue, Oct 1, 2019 at 11:12 AM Bowen Li <bowenl...@gmail.com> wrote:
> >
> >> Hi Dawid,
> >>
> >> Thanks for bringing the suggestions up. I was prototyping yesterday and
> >> found out those places exactly as what you suggested.
> >>
> >> For CallExpression and UnresolvedCallExpression, I've added them to
> >> FLIP-57. We will replace ObjectIdentifier with FunctionIdentifier and
> mark
> >> that as a breaking change
> >>
> >> For FunctionIdentifier, the suggested changes LGTM. Just want to bring
> up
> >> an issue on naming. It seems to me how we now name functions categories
> is
> >> a bit unclear and confusing, which is reflected on the suggested APIs -
> in
> >> FunctionIdentifier you lay out, "builtin function" would include builtin
> >> functions and temporary system functions as we are kind of using
> "system"
> >> and "built-in" interchangeably, and "catalog function" would include
> >> catalog functions and temporary functions. I currently can see two
> >> approaches to make it clearer to users.
> >>
> >> 1) Simplify FunctionIdentifier to be the following. As it's internal, we
> >> add comments and explanation to devs on which case the APIs support.
> >> However, I feel this approach would be somehow a bit conflicting to what
> >> you want to achieve for the clarity of APIs
> >>
> >> @Internal
> >> class FunctionIdentifier {
> >>   // for built-in function and temporary system function
> >>     public FunctionIdentifier of(String name) {  }
> >>   // for temporary function and catalog function
> >>     public FunctionIdentifier of(ObjectIdentifier identifier){  }
> >>     public Optional<String> getFunctionName() {  }
> >>     public Optional<ObjectIdentifier> getObjectIdentifier() {  }
> >> }
> >>
> >> 2) We can rename our function categories as following so there'll be
> mainly
> >> just two categories of functions, "system functions" and "catalog
> >> functions", either of which can have temporary ones
> >>
> >>   - built-in functions -> officially rename to "system functions" and
> note
> >> to users that "system" and "built-in" can be used interchangeably. We
> >> prefer "system" because that's the keyword we decided to use in DDL that
> >> creates its temporary peers ("CREATE TEMPORARY SYSTEM FUNCTION")
> >>   - temporary system functions
> >>   - catalog functions
> >>   - temporary functions  -> rename to "temporary catalog function"
> >>
> >> @Internal
> >> class FunctionIdentifier {
> >>   // for temporary/non-temporary system function
> >>     public FunctionIdentifier ofSystemFunction(String name) {  }
> >>   // for temporary/non-temporary catalog function
> >>     public FunctionIdentifier ofCatalogFunction(ObjectIdentifier
> >> identifier){  }
> >>     public Optional<String> getSystemFunctionName() {  }
> >>     public Optional<ObjectIdentifier> getCatalogFunctionIdentifier() {
> }
> >> }
> >>
> >> WDYT?
> >>
> >>
> >> On Tue, Oct 1, 2019 at 5:48 AM Fabian Hueske <fhue...@gmail.com> wrote:
> >>
> >>> Thanks for the summary Bowen!
> >>>
> >>> Looks good to me.
> >>>
> >>> Cheers,
> >>> Fabian
> >>>
> >>> Am Mo., 30. Sept. 2019 um 23:24 Uhr schrieb Bowen Li <
> >> bowenl...@gmail.com
> >>>> :
> >>>> Hi all,
> >>>>
> >>>> I've updated the FLIP wiki with the following changes:
> >>>>
> >>>> - Lifespan of temp functions are not tied to those of catalogs and
> >>>> databases. Users can create temp functions even though catalogs/dbs in
> >>>> their fully qualified names don't even exist.
> >>>> - some new SQL commands
> >>>>     - "SHOW FUNCTIONS" - list names of temp and non-temp
> >> system/built-in
> >>>> functions, and names of temp and catalog functions in the current
> >> catalog
> >>>> and db
> >>>>     - "SHOW ALL FUNCTIONS" - list names of temp and non-temp
> >> system/built
> >>>> functions, and fully qualified names of temp and catalog functions in
> >> all
> >>>> catalogs and dbs
> >>>>     - "SHOW ALL TEMPORARY FUNCTIONS" - list fully qualified names of
> >> temp
> >>>> functions in all catalog and db
> >>>>     - "SHOW ALL TEMPORARY SYSTEM FUNCTIONS" - list names of all temp
> >>> system
> >>>> functions
> >>>>
> >>>> Let me know if you have any questions.
> >>>>
> >>>> Seems we have resolved all concerns. If there's no more ones, I'd like
> >> to
> >>>> close the vote by this time tomorrow.
> >>>>
> >>>> Cheers,
> >>>> Bowen
> >>>>
> >>>> On Mon, Sep 30, 2019 at 11:59 AM Bowen Li <bowenl...@gmail.com>
> wrote:
> >>>>
> >>>>> Hi,
> >>>>>
> >>>>> I think above are some valid points, and we can adopt the
> >> suggestions.
> >>>>> To elaborate a bit on the new SQL syntax, it would imply that, unlike
> >>>>> "SHOW FUNCTION" which only return function names, "SHOW ALL
> >> [TEMPORARY]
> >>>>> FUNCTIONS" would return functions' fully qualified names with catalog
> >>> and
> >>>>> db names.
> >>>>>
> >>>>>
> >>>>>
> >>>>> On Mon, Sep 30, 2019 at 6:38 AM Timo Walther <twal...@apache.org>
> >>> wrote:
> >>>>>> Hi all,
> >>>>>>
> >>>>>> I support Fabian's arguments. In my opinion, temporary objects
> >> should
> >>>>>> just be an additional layer on top of the regular catalog/database
> >>>>>> lookup logic. Thus, a temporary table or function has always highest
> >>>>>> precedence and should be stable within the local session. Otherwise
> >> it
> >>>>>> could magically disappear while someone else is performing
> >>> modifications
> >>>>>> in the catalog.
> >>>>>>
> >>>>>> Furthermore, this feature is very useful for prototyping as users
> >> can
> >>>>>> simply express that a catalog/database is present even through they
> >>>>>> might not have access to it currently.
> >>>>>>
> >>>>>> Regards,
> >>>>>> Timo
> >>>>>>
> >>>>>>
> >>>>>> On 30.09.19 14:57, Fabian Hueske wrote:
> >>>>>>> Hi all,
> >>>>>>>
> >>>>>>> Sorry for the late reply.
> >>>>>>>
> >>>>>>> I think it might lead to confusing situations if temporary
> >> functions
> >>>> (or
> >>>>>>> any temporary db objects for that matter) are bound to the life
> >>> cycle
> >>>>>> of an
> >>>>>>> (external) db/catalog.
> >>>>>>> Imaging a situation where you create a temp function in a db in an
> >>>>>> external
> >>>>>>> catalog and use it but at some point it does not work anymore
> >>> because
> >>>>>> some
> >>>>>>> other dropped the database from the external catalog.
> >>>>>>> Shouldn't temporary objects be only controlled by the owner of a
> >>>>>> session?
> >>>>>>> I agree that creating temp objects in non-existing db/catalogs
> >>> sounds
> >>>> a
> >>>>>> bit
> >>>>>>> strange, but IMO the opposite (the db/catalog must exist for a
> >> temp
> >>>>>>> function to be created/exist) can have significant implications
> >> like
> >>>> the
> >>>>>>> one I described.
> >>>>>>> I think it would be quite easy for users to understand that
> >>> temporary
> >>>>>>> objects are solely owned by them (and their session).
> >>>>>>> The problem of listing temporary objects could be solved by
> >> adding a
> >>>> ALL
> >>>>>>> [TEMPORARY] clause:
> >>>>>>>
> >>>>>>> SHOW ALL FUNCTIONS; could show all functions regardless of the
> >>>>>>> catalog/database including temporary functions.
> >>>>>>> SHOW ALL TEMPORARY FUNCTIONS; could show all temporary functions
> >>>>>> regardless
> >>>>>>> of the catalog/database.
> >>>>>>>
> >>>>>>> Best,
> >>>>>>> Fabian
> >>>>>>>
> >>>>>>> Am Sa., 28. Sept. 2019 um 02:21 Uhr schrieb Bowen Li <
> >>>>>> bowenl...@gmail.com>:
> >>>>>>>> @Dawid, do you have any other concerns? If not, I hope we can
> >> close
> >>>> the
> >>>>>>>> voting.
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> On Thu, Sep 26, 2019 at 8:14 PM Rui Li <lirui.fu...@gmail.com>
> >>>> wrote:
> >>>>>>>>> I'm not sure how much benefit #1 can bring us. If users just
> >> want
> >>> to
> >>>>>> try
> >>>>>>>>> out temporary functions, they can create temporary system
> >>> functions
> >>>>>> which
> >>>>>>>>> don't require a catalog/DB. IIUC, the main reason why we allow
> >>>>>> temporary
> >>>>>>>>> catalog function is to let users override permanent catalog
> >>>> functions.
> >>>>>>>>> Therefore a temporary function in a non-existing catalog won't
> >>> serve
> >>>>>> that
> >>>>>>>>> purpose. Besides, each session is provided with a default
> >> catalog
> >>>> and
> >>>>>> DB.
> >>>>>>>>> So even if users simply want to create some catalog functions
> >> they
> >>>> can
> >>>>>>>>> forget about after the session, wouldn't the default catalog/DB
> >> be
> >>>>>> enough
> >>>>>>>>> for such experiments?
> >>>>>>>>>
> >>>>>>>>> On Thu, Sep 26, 2019 at 4:38 AM Bowen Li <bowenl...@gmail.com>
> >>>> wrote:
> >>>>>>>>>> Re 1) As described in the FLIP, a temp function lookup will
> >> first
> >>>>>> make
> >>>>>>>>> sure
> >>>>>>>>>> the db exists. If the db doesn't exist, a lazy drop is
> >> triggered
> >>> to
> >>>>>>>>> remove
> >>>>>>>>>> that temp function.
> >>>>>>>>>>
> >>>>>>>>>> I agree Hive doesn't handle it consistently, and we are not
> >>> copying
> >>>>>>>> Hive.
> >>>>>>>>>> IMHO, allowing registering temp functions in nonexistent
> >>> catalog/db
> >>>>>> is
> >>>>>>>>>> hacky and problematic. For instance, "SHOW FUNCTIONS" would
> >> list
> >>>>>> system
> >>>>>>>>>> functions and functions in the current catalog/db, since users
> >>>> cannot
> >>>>>>>>>> designate a nonexistent catalog/db as current ones, how can
> >> they
> >>>> list
> >>>>>>>>>> functions in nonexistent catalog/db? They may end up never
> >>> knowing
> >>>>>> what
> >>>>>>>>>> temp functions they've created unless trying out with queries
> >> or
> >>> we
> >>>>>>>>>> introducing some more nonstandard SQL statements. The same
> >>> applies
> >>>> to
> >>>>>>>>> other
> >>>>>>>>>> temp objects like temp tables.
> >>>>>>>>>>
> >>>>>>>>>> Re 2) A standalone FunctionIdentifier sounds good to me
> >>>>>>>>>>
> >>>>>>>>>> On Wed, Sep 25, 2019 at 4:46 AM Dawid Wysakowicz <
> >>>>>>>>>> wysakowicz.da...@gmail.com>
> >>>>>>>>>> wrote:
> >>>>>>>>>>
> >>>>>>>>>>> Ad. 1
> >>>>>>>>>>> I wouldn't say it is hacky.
> >>>>>>>>>>> Moreover, how do you want ensure that the dB always exists
> >> when
> >>> a
> >>>>>>>>>> temporary
> >>>>>>>>>>> object is used?( in this particular case function). Do you
> >> want
> >>> to
> >>>>>>>>> query
> >>>>>>>>>>> for the database existence whenever e.g a temporary function
> >> is
> >>>>>>>> used? I
> >>>>>>>>>>> think important aspect here is that the database can be
> >> dropped
> >>>> from
> >>>>>>>>>>> external system, not just flink or a different flink session.
> >>>>>>>>>>>
> >>>>>>>>>>> E.g in case of hive, you cannot create a temporary table in a
> >>>>>>>> database
> >>>>>>>>>> that
> >>>>>>>>>>> does not exist, that's true. But if you create a temporary
> >> table
> >>>> in
> >>>>>> a
> >>>>>>>>>>> database and drop that database from a different session, you
> >>> can
> >>>>>>>> still
> >>>>>>>>>>> query the previously created temporary table from the original
> >>>>>>>> session.
> >>>>>>>>>> It
> >>>>>>>>>>> does not sound like a consistent behaviour to me. Why don't we
> >>>> make
> >>>>>>>>> this
> >>>>>>>>>>> behaviour of not binding a temporary objects to the lifetime
> >> of
> >>> a
> >>>>>>>>>> database
> >>>>>>>>>>> explicit as part of the temporary objects contract? In the end
> >>>> they
> >>>>>>>>> exist
> >>>>>>>>>>> in different layers. Permanent objects & databases in a
> >> catalog
> >>>> (in
> >>>>>>>>> case
> >>>>>>>>>> of
> >>>>>>>>>>> hive megastore) whereas temporary objects in flink sessions.
> >>>> That's
> >>>>>>>>> also
> >>>>>>>>>>> true for the original hive client. The temporary objects live
> >> in
> >>>> the
> >>>>>>>>> hive
> >>>>>>>>>>> client whereas databases are created in the metastore.
> >>>>>>>>>>>
> >>>>>>>>>>> Ad.2
> >>>>>>>>>>> I'm open for suggestions here. The one thing I wanted to
> >> achieve
> >>>>>> here
> >>>>>>>>> is
> >>>>>>>>>> so
> >>>>>>>>>>> that we do not change the contract of ObjectIdentifier. One
> >>>>>> important
> >>>>>>>>>> thing
> >>>>>>>>>>> to remember here is that we need the function identifier to be
> >>>> part
> >>>>>>>> of
> >>>>>>>>>> the
> >>>>>>>>>>> FunctionDefinition object and not only as the result of the
> >>>> function
> >>>>>>>>>>> lookup. At some point we want to be able to store
> >>> QueryOperations
> >>>> in
> >>>>>>>>> the
> >>>>>>>>>>> catalogs. They can contain function calls within which we need
> >>> to
> >>>>>>>> have
> >>>>>>>>>> the
> >>>>>>>>>>> identifier.
> >>>>>>>>>>>
> >>>>>>>>>>> I agree my initial suggestion is over complicated. How about
> >> we
> >>>> have
> >>>>>>>>> just
> >>>>>>>>>>> the FunctionIdentifier as top level class without making the
> >>>>>>>>>>> ObjectIdentifier extend from it? I think it's pretty much the
> >>> same
> >>>>>>>> what
> >>>>>>>>>> you
> >>>>>>>>>>> suggested. The only difference is that it would be a top level
> >>>> class
> >>>>>>>>>> with a
> >>>>>>>>>>> more descriptive name.
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> On Wed, 25 Sep 2019, 13:57 Bowen Li, <bowenl...@gmail.com>
> >>> wrote:
> >>>>>>>>>>>> Sorry, I missed some parts of the solution. The complete
> >>>>>>>> alternative
> >>>>>>>>> is
> >>>>>>>>>>> the
> >>>>>>>>>>>> following, basically having separate APIs in FunctionLookup
> >> for
> >>>>>>>>>> ambiguous
> >>>>>>>>>>>> and precise function lookup since planner is able to tell
> >> which
> >>>> API
> >>>>>>>>> to
> >>>>>>>>>>> call
> >>>>>>>>>>>> with parsed queries, and have a unified result:
> >>>>>>>>>>>>
> >>>>>>>>>>>> ```
> >>>>>>>>>>>> class FunctionLookup {
> >>>>>>>>>>>>
> >>>>>>>>>>>> Optional<Result> lookupAmbiguousFunction(String name);
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>> Optional<Result> lookupPreciseFunction(ObjectIdentifier oi);
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>> class Result {
> >>>>>>>>>>>>      Optional<ObjectIdentifier>  getObjectIdentifier() { ...
> >> }
> >>>>>>>>>>>>      String getName() { ... }
> >>>>>>>>>>>>      // ...
> >>>>>>>>>>>> }
> >>>>>>>>>>>>
> >>>>>>>>>>>> }
> >>>>>>>>>>>> ```
> >>>>>>>>>>>>
> >>>>>>>>>>>> Thanks,
> >>>>>>>>>>>> Bowen
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>> On Tue, Sep 24, 2019 at 9:42 PM Bowen Li <
> >> bowenl...@gmail.com>
> >>>>>>>>> wrote:
> >>>>>>>>>>>>> Hi Dawid,
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Re 1): I agree making it easy for users to run experiments
> >> is
> >>>>>>>>>>> important.
> >>>>>>>>>>>>> However, I'm not sure allowing users to register temp
> >>> functions
> >>>>>>>> in
> >>>>>>>>>>>>> nonexistent catalog/db is the optimal way. It seems a bit
> >>> hacky,
> >>>>>>>>> and
> >>>>>>>>>>>> breaks
> >>>>>>>>>>>>> the current contract between Flink and users that catalog/db
> >>>> must
> >>>>>>>>> be
> >>>>>>>>>>>> valid
> >>>>>>>>>>>>> in order to operate on.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> How about we instead focus on making it convenient to create
> >>>>>>>>>> catalogs?
> >>>>>>>>>>>>> Users actually can already do it with ease via program or
> >> SQL
> >>>> CLI
> >>>>>>>>>> yaml
> >>>>>>>>>>>> file
> >>>>>>>>>>>>> for an in-memory catalog which has neither extra dependency
> >>> nor
> >>>>>>>>>>> external
> >>>>>>>>>>>>> connections. What we can further improve is DDL for
> >> catalogs,
> >>>>>>>> and I
> >>>>>>>>>>>> raised
> >>>>>>>>>>>>> it in discussion of [FLIP 69 - Flink SQL DDL Enhancement]
> >>> driven
> >>>>>>>> by
> >>>>>>>>>>> Terry
> >>>>>>>>>>>>> now.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> In that case, if users would like to experiment via SQL,
> >> they
> >>>> can
> >>>>>>>>>>> easily
> >>>>>>>>>>>>> create an in memory catalog/database using DDL, then play
> >> with
> >>>>>>>> temp
> >>>>>>>>>>>>> functions.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Re 2): For the assumption, IIUIC, function ObjectIdentifier
> >>> has
> >>>>>>>> not
> >>>>>>>>>>> been
> >>>>>>>>>>>>> resolved when stack call reaches
> >>>>>>>> FunctionCatalog#lookupFunction(),
> >>>>>>>>>> but
> >>>>>>>>>>>> only
> >>>>>>>>>>>>> been parsed?
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> I agree keeping ObjectIdentifier as-is would be good. I'm ok
> >>>> with
> >>>>>>>>> the
> >>>>>>>>>>>>> suggested classes, though making ObjectIdentifier a subclass
> >>> of
> >>>>>>>>>>>>> FunctionIdentifier seem a bit counter intuitive.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Another potentially simpler way is:
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> ```
> >>>>>>>>>>>>> // in class FunctionLookup
> >>>>>>>>>>>>> class Result {
> >>>>>>>>>>>>>      Optional<ObjectIdentifier>  getObjectIdentifier() {
> >> ... }
> >>>>>>>>>>>>>      String getName() { ... }
> >>>>>>>>>>>>>      ...
> >>>>>>>>>>>>> }
> >>>>>>>>>>>>> ```
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> WDYT?
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> On Tue, Sep 24, 2019 at 3:41 PM Dawid Wysakowicz <
> >>>>>>>>>>>>> wysakowicz.da...@gmail.com> wrote:
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>> Hi,
> >>>>>>>>>>>>>> I really like the flip and think it clarifies important
> >>> aspects
> >>>>>>>> of
> >>>>>>>>>> the
> >>>>>>>>>>>>>> system.
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> I have two, I hope small suggestions, which will not take
> >>> much
> >>>>>>>>> time
> >>>>>>>>>> to
> >>>>>>>>>>>>>> agree on.
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> 1. Could we follow the MySQL approach in regards to the
> >>>>>>>> existence
> >>>>>>>>> of
> >>>>>>>>>>>>>> cat/db
> >>>>>>>>>>>>>> for temporary functions? That means not to check it, so
> >> e.g.
> >>>>>>>> it's
> >>>>>>>>>>>> possible
> >>>>>>>>>>>>>> to create a temporary function in a database that does not
> >>>>>>>> exist.
> >>>>>>>>> I
> >>>>>>>>>>>> think
> >>>>>>>>>>>>>> it's really useful e.g in cases when user wants to perform
> >>>>>>>>>> experiments
> >>>>>>>>>>>> but
> >>>>>>>>>>>>>> does not have access to the db yet or temporarily does not
> >>> have
> >>>>>>>>>>>> connection
> >>>>>>>>>>>>>> to a catalog.
> >>>>>>>>>>>>>> 2. Could we not change the ObjectIdentifier? Could we not
> >>>> loosen
> >>>>>>>>> the
> >>>>>>>>>>>>>> requirements for all catalog objects such as tables, views,
> >>>>>>>> types
> >>>>>>>>>> just
> >>>>>>>>>>>> for
> >>>>>>>>>>>>>> the functions? It's really important later on from e.g the
> >>>>>>>>>>>> serializability
> >>>>>>>>>>>>>> perspective. The important aspect of the ObjectIdentifier
> >> is
> >>>>>>>> that
> >>>>>>>>> we
> >>>>>>>>>>>> know
> >>>>>>>>>>>>>> that it has been resolved. The suggested changes break that
> >>>>>>>>>>> assumption.
> >>>>>>>>>>>>>> What do you think about adding an interface
> >>> FunctionIdentifier
> >>>> {
> >>>>>>>>>>>>>> String getName();
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> /**
> >>>>>>>>>>>>>>    Return 3-part identifier. Empty in case of a built-in
> >>>>>>>> function.
> >>>>>>>>>>>>>> */
> >>>>>>>>>>>>>> Optional<ObjectIdentifier> getObjectIdentifier()
> >>>>>>>>>>>>>> }
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> class ObjectIdentifier implements FunctionIdentifier {
> >>>>>>>>>>>>>> Optional<ObjectIdentifier> getObjectIdentifier() {
> >>>>>>>>>>>>>>   return Optional.of(this);
> >>>>>>>>>>>>>> }
> >>>>>>>>>>>>>> }
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> class SystemFunctionIdentifier implements
> >> FunctionIdentifier
> >>>>>>>> {...}
> >>>>>>>>>>>>>> WDYT?
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> On Wed, 25 Sep 2019, 04:50 Xuefu Z, <usxu...@gmail.com>
> >>> wrote:
> >>>>>>>>>>>>>>> +1. LGTM
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> On Tue, Sep 24, 2019 at 6:09 AM Terry Wang <
> >>>>>>>> zjuwa...@gmail.com>
> >>>>>>>>>>>> wrote:
> >>>>>>>>>>>>>>>> +1
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> Best,
> >>>>>>>>>>>>>>>> Terry Wang
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> 在 2019年9月24日,上午10:42,Kurt Young <ykt...@gmail.com> 写道:
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> +1
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> Best,
> >>>>>>>>>>>>>>>>> Kurt
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> On Tue, Sep 24, 2019 at 2:30 AM Bowen Li <
> >>>>>>>>> bowenl...@gmail.com
> >>>>>>>>>>>>>> wrote:
> >>>>>>>>>>>>>>>>>> Hi all,
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> I'd like to start a voting thread for FLIP-57 [1],
> >> which
> >>>>>>>>>> we've
> >>>>>>>>>>>>>> reached
> >>>>>>>>>>>>>>>>>> consensus in [2].
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> This voting will be open for minimum 3 days till 6:30pm
> >>>>>>>>> UTC,
> >>>>>>>>>>> Sep
> >>>>>>>>>>>>>> 26.
> >>>>>>>>>>>>>>>>>> Thanks,
> >>>>>>>>>>>>>>>>>> Bowen
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> [1]
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>
> >>
> https://cwiki.apache.org/confluence/display/FLINK/FLIP-57%3A+Rework+FunctionCatalog
> >>>>>>>>>>>>>>>>>> [2]
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>
> >>
> http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/DISCUSS-FLIP-57-Rework-FunctionCatalog-td32291.html#a32613
> >>>>>>>>>>>>>>> --
> >>>>>>>>>>>>>>> Xuefu Zhang
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> "In Honey We Trust!"
> >>>>>>>>>>>>>>>
> >>>>>>>>> --
> >>>>>>>>> Best regards!
> >>>>>>>>> Rui Li
> >>>>>>>>>
> >>>>>>
> >
>
>

Reply via email to