thanks Sergey, sounds good. You can add in FLIP ticket[1]. [1] https://issues.apache.org/jira/browse/FLINK-31256
Best Regards, Ran Tao https://github.com/chucheng92 Sergey Nuyanzin <snuyan...@gmail.com> 于2023年2月28日周二 19:44写道: > >>Currently I think we can load from the jar and check the services file to > >> get the connector type. but is it necessary we may continue to discuss. > >>Hi, Sergey, WDYT? > > Another idea is FactoryUtil#discoverFactories and > check if it implements DynamicTableSourceFactory or DynamicTableSinkFactory > with versions it could be trickier... > Moreover it seems the version could be a part of the name sometimes[1]. > I think name and type could be enough or please correct me if I'm wrong > > >>or can we open a single ticket under this FLIP? > I have a relatively old jira issue[2] for showing connectors with a poc pr. > Could I propose to move this jira issue as a subtask under the FLIP one and > revive it? > > [1] > > https://github.com/apache/flink/blob/161014149e803bfd1d3653badb230b2ed36ce3cb/flink-table/flink-table-common/src/main/java/org/apache/flink/table/factories/Factory.java#L65-L69 > [2] https://issues.apache.org/jira/browse/FLINK-25788 > > On Tue, Feb 28, 2023 at 11:56 AM Ran Tao <chucheng...@gmail.com> wrote: > > > Hi, Jark. thanks. > > > About ILIKE > > I have updated the FLIP for ILIKE support (Including existing showTables > & > > showColumns how to change). > > > > > About show connectors @Sergey, > > Currently I think we can load from the jar and check the services file to > > get the connector type. but is it necessary we may continue to discuss. > > Hi, Sergey, WDYT?or can we open a single ticket under this FLIP? > > > > > > Best Regards, > > Ran Tao > > > > > > Jark Wu <imj...@gmail.com> 于2023年2月28日周二 17:45写道: > > > > > Besides, if we introduce the ILIKE, we should also add this feature for > > > the previous SHOW with LIKE statements. They should be included in this > > > FLIP. > > > > > > Best, > > > Jark > > > > > > > 2023年2月28日 17:40,Jark Wu <imj...@gmail.com> 写道: > > > > > > > > Hi Ran, > > > > > > > > Could you add descriptions about what’s the behavior and differences > > > between the LIKE and ILIKE? > > > > > > > > Besides, I don’t see the SHOW CONNECTOR syntax and description and > how > > > it works in the FLIP. Is it intended to be included in this FLIP? > > > > > > > > Best, > > > > Jark > > > > > > > > > > > >> 2023年2月28日 10:58,Ran Tao <chucheng...@gmail.com> 写道: > > > >> > > > >> Hi, guys. thanks for advices. > > > >> > > > >> allow me to make a small summary: > > > >> > > > >> 1.Support ILIKE > > > >> 2.Using catalog api to support show operations > > > >> 3.Need a dedicated FLIP try to support INFORMATION_SCHEMA > > > >> 4.Support SHOW CONNECTORS > > > >> > > > >> If there are no other questions, i will try to start a VOTE for this > > > FLIP. > > > >> WDYT? > > > >> > > > >> Best Regards, > > > >> Ran Tao > > > >> > > > >> > > > >> Sergey Nuyanzin <snuyan...@gmail.com> 于2023年2月27日周一 21:12写道: > > > >> > > > >>> Hi Jark, > > > >>> > > > >>> thanks for your comment. > > > >>> > > > >>>> Considering they > > > >>>> are orthogonal and information schema requires more complex design > > and > > > >>>> discussion, it deserves a separate FLIP > > > >>> I'm ok with a separate FLIP for INFORMATION_SCHEMA. > > > >>> > > > >>>> Sergey, are you willing to contribute this FLIP? > > > >>> Seems I need to have more research done for that. > > > >>> I would try to help/contribute here > > > >>> > > > >>> > > > >>> On Mon, Feb 27, 2023 at 3:46 AM Ran Tao <chucheng...@gmail.com> > > wrote: > > > >>> > > > >>>> HI, Jing. thanks. > > > >>>> > > > >>>> @about ILIKE, from my collections of some popular engines founds > > that > > > >>> just > > > >>>> snowflake has this syntax in show with filtering. > > > >>>> do we need to support it? if yes, then current some existed show > > > >>> operations > > > >>>> need to be addressed either. > > > >>>> @about ShowOperation with like. it's a good idea. yes, two > > parameters > > > for > > > >>>> constructor can work. thanks for your advice. > > > >>>> > > > >>>> > > > >>>> Best Regards, > > > >>>> Ran Tao > > > >>>> > > > >>>> > > > >>>> Jing Ge <j...@ververica.com.invalid> 于2023年2月27日周一 06:29写道: > > > >>>> > > > >>>>> Hi, > > > >>>>> > > > >>>>> @Aitozi > > > >>>>> > > > >>>>> This is exactly why LoD has been introduced: to avoid exposing > > > internal > > > >>>>> structure(2nd and lower level API). > > > >>>>> > > > >>>>> @Jark > > > >>>>> > > > >>>>> IMHO, there is no conflict between LoD and "High power-to-weight > > > ratio" > > > >>>>> with the given example, List.subList() returns List interface > > itself, > > > >>> no > > > >>>>> internal or further interface has been exposed. After offering > > > >>>>> tEvn.getCatalog(), "all" methods in Catalog Interface have been > > > >>> provided > > > >>>> by > > > >>>>> TableEnvironment(via getCatalog()). From user's perspective and > > > >>>> maintenance > > > >>>>> perspective there is no/less difference between providing them > > > directly > > > >>>> via > > > >>>>> TableEnvironment or via getCatalog(). They are all exposed. Using > > > >>>>> getCatalog() will reduce the number of boring wrapper methods, > but > > on > > > >>> the > > > >>>>> other hand not every method in Catalog needs to be exposed, so > the > > > >>> number > > > >>>>> of wrapper methods would be limited/less, if we didn't expose > > > Catalog. > > > >>>>> Nevertheless, since we already offered getCatalog(), it makes > sense > > > to > > > >>>>> continue using it. The downside is the learning effort for users > - > > > they > > > >>>>> have to know that listDatabases() is hidden in Catalog, go to > > another > > > >>>>> haystack and then find the needle in there. > > > >>>>> > > > >>>>> +1 for Information schema with a different FLIP. From a design > > > >>>> perspective, > > > >>>>> information schema should be the first choice for most cases and > > easy > > > >>> to > > > >>>>> use. Catalog, on the other hand, will be more powerful and offer > > more > > > >>>>> advanced features. > > > >>>>> > > > >>>>> Best regards, > > > >>>>> Jing > > > >>>>> > > > >>>>> > > > >>>>> On Sat, Feb 25, 2023 at 3:57 PM Jark Wu <imj...@gmail.com> > wrote: > > > >>>>> > > > >>>>>> Hi Sergey, > > > >>>>>> > > > >>>>>> I think INFORMATION_SCHEMA is a very interesting idea, and I > hope > > we > > > >>>> can > > > >>>>>> support it. However, it doesn't conflict with the idea of > > auxiliary > > > >>>>>> statements. I can see different benefits of them. The > information > > > >>>> schema > > > >>>>>> provides powerful and flexible capabilities but needs to learn > the > > > >>>>> complex > > > >>>>>> entity relationship[1]. The auxiliary SQL statements are super > > handy > > > >>>> and > > > >>>>>> can resolve most problems, but they offer limited features. > > > >>>>>> > > > >>>>>> I can see almost all the mature systems support both of them. I > > > think > > > >>>> it > > > >>>>>> also makes sense to support both of them in Flink. Considering > > they > > > >>>>>> are orthogonal and information schema requires more complex > design > > > >>> and > > > >>>>>> discussion, it deserves a separate FLIP. Sergey, are you willing > > to > > > >>>>>> contribute this FLIP? > > > >>>>>> > > > >>>>>> Best, > > > >>>>>> Jark > > > >>>>>> > > > >>>>>> [1]: > > > >>>>>> > > > >>>>>> > > > >>>>> > > > >>>> > > > >>> > > > > > > https://docs.databricks.com/sql/language-manual/sql-ref-information-schema.html > > > >>>>>> > > > >>>>>> > > > >>>>>> On Fri, 24 Feb 2023 at 22:43, Ran Tao <chucheng...@gmail.com> > > > wrote: > > > >>>>>> > > > >>>>>>> Thanks John. > > > >>>>>>> > > > >>>>>>> It seems that most people prefer the information_schema > > > >>>> implementation. > > > >>>>>>> information_schema does have more benefits (however, the show > > > >>>> operation > > > >>>>>> is > > > >>>>>>> also an option and supplement). > > > >>>>>>> Otherwise, the sql syntax and keywords may be changed > frequently. > > > >>>>>>> Of course, it will be more complicated than the extension of > the > > > >>> show > > > >>>>>>> operation. > > > >>>>>>> It is necessary to design various tables in information_schema, > > > >>>> which > > > >>>>>> may > > > >>>>>>> take a period of effort. > > > >>>>>>> > > > >>>>>>> I will try to design the information_schema and integrate it > with > > > >>>>> flink. > > > >>>>>>> This may be a relatively big feature for me. I hope you guys > can > > > >>> give > > > >>>>>>> comments and opinions later. > > > >>>>>>> Thank you all. > > > >>>>>>> > > > >>>>>>> Best Regards, > > > >>>>>>> Ran Tao > > > >>>>>>> > > > >>>>>>> > > > >>>>>>> John Roesler <vvcep...@apache.org> 于2023年2月24日周五 21:53写道: > > > >>>>>>> > > > >>>>>>>> Hello Ran, > > > >>>>>>>> > > > >>>>>>>> Thanks for the FLIP! > > > >>>>>>>> > > > >>>>>>>> Do you mind if we revisit the topic of doing this by adding an > > > >>>>>>> Information > > > >>>>>>>> schema? The SHOW approach requires modifying the > parser/language > > > >>>> for > > > >>>>>>> every > > > >>>>>>>> gap we identify. On the flip side, an Information schema is > much > > > >>>>> easier > > > >>>>>>> to > > > >>>>>>>> discover and remember how to use, and the ability to run > queries > > > >>> on > > > >>>>> it > > > >>>>>> is > > > >>>>>>>> quite valuable for admins. It’s also better for Flink > > > >>> maintainers, > > > >>>>>>> because > > > >>>>>>>> the information tables’ schemas can be evolved over time just > > > >>> like > > > >>>>>>> regular > > > >>>>>>>> tables, whereas every change to a SHOW statement would be a > > > >>>> breaking > > > >>>>>>>> change. > > > >>>>>>>> > > > >>>>>>>> I understand that it may seem like a big effort, but we’re > > > >>>> proposing > > > >>>>>>> quite > > > >>>>>>>> a big extension to the space of SHOW statement, so it seems > > > >>>>> appropriate > > > >>>>>>> to > > > >>>>>>>> take the opportunity and migrate to a better framework rather > > > >>> than > > > >>>>>>>> incrementally building on (and tying us even more firmly to) > the > > > >>>>>> existing > > > >>>>>>>> approach. > > > >>>>>>>> > > > >>>>>>>> Thanks for your consideration, > > > >>>>>>>> John > > > >>>>>>>> > > > >>>>>>>> On Fri, Feb 24, 2023, at 05:58, Sergey Nuyanzin wrote: > > > >>>>>>>>> thanks for explanation > > > >>>>>>>>> > > > >>>>>>>>>> But it's not clear to me what exactly > > > >>>>>>>>>> you want to display? Is it the name of the plugin? > > > >>>>>>>>> > > > >>>>>>>>> I was thinking about name, type (source/sink) and may be > > > >>> version > > > >>>>> (not > > > >>>>>>>> sure > > > >>>>>>>>> if it's possible right now) > > > >>>>>>>>> > > > >>>>>>>>> On Fri, Feb 24, 2023 at 12:46 PM Ran Tao < > > > >>> chucheng...@gmail.com> > > > >>>>>>> wrote: > > > >>>>>>>>> > > > >>>>>>>>>> Hi, Sergey. thanks. first step we can support filtering for > > > >>> show > > > >>>>>>>> operations > > > >>>>>>>>>> in this FLIP try to align other engines. > > > >>>>>>>>>> If we want to support describe other objects, of course we > > > >>> need > > > >>>> to > > > >>>>>>>> design > > > >>>>>>>>>> how to get these metadatas or informations and printAsStyle. > > > >>> (So > > > >>>>> it > > > >>>>>>>> maybe > > > >>>>>>>>>> need another FLIP for more details). > > > >>>>>>>>>> > > > >>>>>>>>>>> Does it make sense to add support for connectors e.g. show > > > >>>>>>>>>>> {sink|source|all} connectors? > > > >>>>>>>>>> I think we can support it, currently flink do support some > > > >>>>>> operations > > > >>>>>>>> only > > > >>>>>>>>>> for flink itself such as showJobs. But it's not clear to me > > > >>> what > > > >>>>>>> exactly > > > >>>>>>>>>> you want to display? Is it the name of the plugin? > > > >>>>>>>>>> Just Like: > > > >>>>>>>>>> Kafka > > > >>>>>>>>>> Hudi > > > >>>>>>>>>> Files > > > >>>>>>>>>> > > > >>>>>>>>>> Best Regards, > > > >>>>>>>>>> Ran Tao > > > >>>>>>>>>> > > > >>>>>>>>>> > > > >>>>>>>>>> Sergey Nuyanzin <snuyan...@gmail.com> 于2023年2月24日周五 > 19:11写道: > > > >>>>>>>>>> > > > >>>>>>>>>>> Thanks for driving the FLIP > > > >>>>>>>>>>> > > > >>>>>>>>>>> I have a couple of questions > > > >>>>>>>>>>> Am I right that INFORMATION_SCHEMA mentioned by Timo[1] is > > > >>>> out > > > >>>>> of > > > >>>>>>>> scope > > > >>>>>>>>>> of > > > >>>>>>>>>>> this FLIP? > > > >>>>>>>>>>> I noticed there are some support of it in > > > >>>>>>>> Spark[2]/Hive[3]/Snowflake[4] > > > >>>>>>>>>> and > > > >>>>>>>>>>> others > > > >>>>>>>>>>> > > > >>>>>>>>>>> Does it make sense to add support for connectors e.g. show > > > >>>>>>>>>>> {sink|source|all} connectors? > > > >>>>>>>>>>> > > > >>>>>>>>>>> [1] > > > >>>>>>> > https://lists.apache.org/thread/2g108qlfwbhb56wnoc5qj0yq29dvq1vv > > > >>>>>>>>>>> [2] https://issues.apache.org/jira/browse/SPARK-16452 > > > >>>>>>>>>>> [3] https://issues.apache.org/jira/browse/HIVE-1010 > > > >>>>>>>>>>> [4] > https://docs.snowflake.com/en/sql-reference/info-schema > > > >>>>>>>>>>> > > > >>>>>>>>>>> > > > >>>>>>>>>>> On Fri, Feb 24, 2023 at 4:19 AM Jark Wu <imj...@gmail.com> > > > >>>>> wrote: > > > >>>>>>>>>>> > > > >>>>>>>>>>>> Hi Jing, > > > >>>>>>>>>>>> > > > >>>>>>>>>>>>> we'd better reduce the dependency chain and follow the > > > >>> Law > > > >>>>> of > > > >>>>>>>>>>>> Demeter(LoD, clean code). > > > >>>>>>>>>>>>> Adding a new method in TableEnvironment is therefore > > > >>>> better > > > >>>>>> than > > > >>>>>>>>>>> calling > > > >>>>>>>>>>>> an API chain > > > >>>>>>>>>>>> > > > >>>>>>>>>>>> I think I don't fully agree that LoD is a good practice. > > > >>>>>>> Actually, I > > > >>>>>>>>>>> would > > > >>>>>>>>>>>> prefer to keep the API clean and concise. > > > >>>>>>>>>>>> This is also the Java Collection Framework design > > > >>> principle > > > >>>>> [1]: > > > >>>>>>>> "High > > > >>>>>>>>>>>> power-to-weight ratio". Otherwise, > > > >>>>>>>>>>>> it will explode the API interfaces with different > > > >>>> combinations > > > >>>>>> of > > > >>>>>>>>>>> methods. > > > >>>>>>>>>>>> Currently, TableEnvironment > > > >>>>>>>>>>>> already provides 60+ methods. > > > >>>>>>>>>>>> > > > >>>>>>>>>>>> IMO, with the increasing methods of accessing and > > > >>>> manipulating > > > >>>>>>>>>> metadata, > > > >>>>>>>>>>>> they can be extracted to > > > >>>>>>>>>>>> a separate interface, where we can add richer methods. > > > >>> This > > > >>>>> work > > > >>>>>>>> can be > > > >>>>>>>>>>>> aligned with the > > > >>>>>>>>>>>> CatalogManager interface (FLIP-295) [2]. > > > >>>>>>>>>>>> > > > >>>>>>>>>>>> Best, > > > >>>>>>>>>>>> Jark > > > >>>>>>>>>>>> > > > >>>>>>>>>>>> [1]: > > > >>>>>>>>>>>> > > > >>>>>>>>>>>> > > > >>>>>>>>>>> > > > >>>>>>>>>> > > > >>>>>>>> > > > >>>>>>> > > > >>>>>> > > > >>>>> > > > >>>> > > > >>> > > > > > > https://stackoverflow.com/questions/7568819/why-no-tail-or-head-method-in-list-to-get-last-or-first-element > > > >>>>>>>>>>>> [2]: > > > >>>>>>>> > > https://lists.apache.org/thread/9bnjblgd9wvrl75lkm84oo654c4lqv70 > > > >>>>>>>>>>>> > > > >>>>>>>>>>>> > > > >>>>>>>>>>>> On Fri, 24 Feb 2023 at 10:38, Aitozi < > > > >>> gjying1...@gmail.com> > > > >>>>>>> wrote: > > > >>>>>>>>>>>> > > > >>>>>>>>>>>>> Hi, > > > >>>>>>>>>>>>> Thanks for the nice proposal, Ran. > > > >>>>>>>>>>>>> Regarding this api usage, I have some discussion > > > >>> with > > > >>>>>>> @twalthr > > > >>>>>>>>>>> before > > > >>>>>>>>>>>>> as here < > > > >>>>>>>>>>>>> > > > >>>>>>>> > > > >>> https://github.com/apache/flink/pull/15137#issuecomment-1356124138 > > > >>>>> > > > >>>>>>>>>>>>> Personally, I think leaking the Catalog to the user side > > > >>>> is > > > >>>>>> not > > > >>>>>>>>>>> suitable, > > > >>>>>>>>>>>>> since there are some read/write operations in the > > > >>> Catalog, > > > >>>>> the > > > >>>>>>>>>>>>> TableEnvironment#getCatalog will expose all of them to > > > >>> the > > > >>>>>> user > > > >>>>>>>> side. > > > >>>>>>>>>>> So > > > >>>>>>>>>>>> I > > > >>>>>>>>>>>>> learned to add a new api in TableEnvironment to reduce > > > >>>>>> reliance > > > >>>>>>> on > > > >>>>>>>>>> the > > > >>>>>>>>>>>>> current TableEnvironment#getCatalog. > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>>> Thanks, > > > >>>>>>>>>>>>> Aitozi > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>>> Ran Tao <chucheng...@gmail.com> 于2023年2月23日周四 23:44写道: > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>>>> Hi, JingSong, Jing. > > > >>>>>>>>>>>>>> > > > >>>>>>>>>>>>>> thank for sharing your opinions. > > > >>>>>>>>>>>>>> > > > >>>>>>>>>>>>>> What you say makes sense, both approaches have pros > > > >>> and > > > >>>>>> cons. > > > >>>>>>>>>>>>>> > > > >>>>>>>>>>>>>> If it is a modification of `TableEnvrionment`, such as > > > >>>>>>>>>>>>>> listDatabases(catalog). It is actually consistent with > > > >>>> the > > > >>>>>>> other > > > >>>>>>>>>>>>> overloaded > > > >>>>>>>>>>>>>> methods before, > > > >>>>>>>>>>>>>> and defining this method means that TableEnvrionment > > > >>>> does > > > >>>>>>>> provide > > > >>>>>>>>>>> this > > > >>>>>>>>>>>>>> capability (rather than relying on the functionality > > > >>> of > > > >>>>>>> another > > > >>>>>>>>>>> class). > > > >>>>>>>>>>>>>> The disadvantage is that api changes may be required, > > > >>>> and > > > >>>>>> may > > > >>>>>>>>>>> continue > > > >>>>>>>>>>>> to > > > >>>>>>>>>>>>>> be modified in the future. > > > >>>>>>>>>>>>>> But from the TableEnvrionment itself, it really > > > >>> doesn't > > > >>>>> pay > > > >>>>>>>>>> attention > > > >>>>>>>>>>>> to > > > >>>>>>>>>>>>>> how the underlying layer is implemented. > > > >>>>>>>>>>>>>> (Although it is actually taken from the catalogManager > > > >>>> at > > > >>>>>>>> present, > > > >>>>>>>>>>> this > > > >>>>>>>>>>>>> is > > > >>>>>>>>>>>>>> another question) > > > >>>>>>>>>>>>>> > > > >>>>>>>>>>>>>> Judging from the current dependencies, > > > >>>>> flink-table-api-java > > > >>>>>>>>>> strongly > > > >>>>>>>>>>>>> relies > > > >>>>>>>>>>>>>> on flink-table-common to use various common classes > > > >>> and > > > >>>>>>>> interfaces, > > > >>>>>>>>>>>>>> especially the catalog interface. > > > >>>>>>>>>>>>>> So we can extract various metadata information in the > > > >>>>>> catalog > > > >>>>>>>>>> through > > > >>>>>>>>>>>>>> `tEnv.getCatalog`. > > > >>>>>>>>>>>>>> The advantage is that it will not cause api > > > >>>> modification, > > > >>>>>> but > > > >>>>>>>> this > > > >>>>>>>>>>>> method > > > >>>>>>>>>>>>>> of use breaks LoD. > > > >>>>>>>>>>>>>> In fact, the current flink-table-api-java design is > > > >>>>>> completely > > > >>>>>>>>>> bound > > > >>>>>>>>>>> to > > > >>>>>>>>>>>>> the > > > >>>>>>>>>>>>>> catalog interface. > > > >>>>>>>>>>>>>> > > > >>>>>>>>>>>>>> If the mandatory modification of PublicApi is > > > >>>> constrained > > > >>>>>> (may > > > >>>>>>>> be > > > >>>>>>>>>>>>> modified > > > >>>>>>>>>>>>>> again and later), I tend to use `tEnv.getCatalog` > > > >>>>> directly, > > > >>>>>>>>>> otherwise > > > >>>>>>>>>>>>>> It would actually be more standard to add overloaded > > > >>>>> methods > > > >>>>>>> to > > > >>>>>>>>>>>>>> `TableEnvrionment`. > > > >>>>>>>>>>>>>> > > > >>>>>>>>>>>>>> Another question, can the later capabilities of > > > >>>>>>>> TableEnvrionment be > > > >>>>>>>>>>>>>> implemented through SupportXXX? > > > >>>>>>>>>>>>>> In order to solve the problem that the method needs to > > > >>>> be > > > >>>>>>> added > > > >>>>>>>> in > > > >>>>>>>>>>> the > > > >>>>>>>>>>>>>> future. This kind of usage occurs frequently in flink. > > > >>>>>>>>>>>>>> > > > >>>>>>>>>>>>>> Looking forward to your other considerations, > > > >>>>>>>>>>>>>> and also try to wait to see if there are other > > > >>> relevant > > > >>>>> API > > > >>>>>>>>>> designers > > > >>>>>>>>>>>> or > > > >>>>>>>>>>>>>> committers to provide comments. > > > >>>>>>>>>>>>>> > > > >>>>>>>>>>>>>> > > > >>>>>>>>>>>>>> Best Regards, > > > >>>>>>>>>>>>>> Ran Tao > > > >>>>>>>>>>>>>> > > > >>>>>>>>>>>>>> Jing Ge <j...@ververica.com.invalid> 于2023年2月23日周四 > > > >>>>> 18:58写道: > > > >>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>> Hi Jingson, > > > >>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>> Thanks for sharing your thoughts. Please see my > > > >>> reply > > > >>>>>> below. > > > >>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>> On Thu, Feb 23, 2023 at 10:16 AM Jingsong Li < > > > >>>>>>>>>>> jingsongl...@gmail.com > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>>>>> wrote: > > > >>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>> Hi Jing Ge, > > > >>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>> First, flink-table-common contains all common > > > >>>> classes > > > >>>>> of > > > >>>>>>>> Flink > > > >>>>>>>>>>>> Table, > > > >>>>>>>>>>>>>>>> I think it is hard to bypass its dependence. > > > >>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>> If any time when we use flink-table-api-java, we > > > >>> have > > > >>>> to > > > >>>>>>> cross > > > >>>>>>>>>>>> through > > > >>>>>>>>>>>>>>> flink-table-api-java and use flink-table-common, we > > > >>>>> should > > > >>>>>>>>>>> reconsider > > > >>>>>>>>>>>>> the > > > >>>>>>>>>>>>>>> design of these two modules and how > > > >>> interfaces/classes > > > >>>>> are > > > >>>>>>>>>>> classified > > > >>>>>>>>>>>>>> into > > > >>>>>>>>>>>>>>> those modules. > > > >>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>> Secondly, almost all methods in Catalog looks > > > >>> useful > > > >>>>> to > > > >>>>>>> me, > > > >>>>>>>> so > > > >>>>>>>>>> if > > > >>>>>>>>>>>> we > > > >>>>>>>>>>>>>>>> are following LoD, we should add all methods again > > > >>>> to > > > >>>>>>>>>>>>>>>> TableEnvironment. I think it is redundant. > > > >>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>> That is the enlarged issue I mentioned previously. A > > > >>>>>> simple > > > >>>>>>>>>>> solution > > > >>>>>>>>>>>> is > > > >>>>>>>>>>>>>> to > > > >>>>>>>>>>>>>>> move Catalog to the top level API. The fact is that > > > >>> a > > > >>>>>>> catalog > > > >>>>>>>>>>> package > > > >>>>>>>>>>>>>>> already exists in flink-table-api-java but the > > > >>> Catalog > > > >>>>>>>> interface > > > >>>>>>>>>> is > > > >>>>>>>>>>>> in > > > >>>>>>>>>>>>>>> flink-table-common. I don't know the historical > > > >>>> context > > > >>>>> of > > > >>>>>>>> this > > > >>>>>>>>>>>> design. > > > >>>>>>>>>>>>>>> Maybe you could share some insight with us? Thanks > > > >>> in > > > >>>>>>> advance. > > > >>>>>>>>>>> Beyond > > > >>>>>>>>>>>>>> that, > > > >>>>>>>>>>>>>>> there should be other AOP options but need more time > > > >>>> to > > > >>>>>>>> figure it > > > >>>>>>>>>>>> out. > > > >>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>> And, this API chain does not look deep. > > > >>>>>>>>>>>>>>>> - > > > >>>>>>>>>>> > > > >>>>> "tEnv.getCatalog(tEnv.getCurrentCatalog()).get().listDatabases()" > > > >>>>>>>>>>>>>>>> looks a little complicated. The complex part is > > > >>>> ahead. > > > >>>>>>>>>>>>>>>> - If we have a method to get Catalog directly, can > > > >>>> be > > > >>>>>>>> simplify > > > >>>>>>>>>> to > > > >>>>>>>>>>>>>>>> "tEnv.catalog().listDatabase()", this is simple. > > > >>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>> Commonly, it will need more effort to always follow > > > >>>> LoD, > > > >>>>>> but > > > >>>>>>>> for > > > >>>>>>>>>>> the > > > >>>>>>>>>>>>> top > > > >>>>>>>>>>>>>>> level facade API like TableEnvironment, both the API > > > >>>>>>>> developer, > > > >>>>>>>>>> API > > > >>>>>>>>>>>>>>> consumer and the project itself from a long-term > > > >>>>>> perspective > > > >>>>>>>> will > > > >>>>>>>>>>>>> benefit > > > >>>>>>>>>>>>>>> from sticking to LoD. Since we already have the > > > >>>>>>>> getCatalog(String > > > >>>>>>>>>>>>>> catalog) > > > >>>>>>>>>>>>>>> method in TableEnvironment, it also makes sense to > > > >>>>> follow > > > >>>>>>> your > > > >>>>>>>>>>>>>> suggestion, > > > >>>>>>>>>>>>>>> if we only want to limit/avoid public API changes. > > > >>> But > > > >>>>>>> please > > > >>>>>>>> be > > > >>>>>>>>>>>> aware > > > >>>>>>>>>>>>>> that > > > >>>>>>>>>>>>>>> we will have all known long-term drawbacks because > > > >>> of > > > >>>>> LoD > > > >>>>>>>>>>>>>>> violation, especially the cross modules violation. I > > > >>>>> just > > > >>>>>>>> checked > > > >>>>>>>>>>> all > > > >>>>>>>>>>>>>>> usages of getCatalog(String catalog) in the master > > > >>>>> branch. > > > >>>>>>>>>>> Currently > > > >>>>>>>>>>>>>> there > > > >>>>>>>>>>>>>>> are very limited calls. It is better to pay > > > >>> attention > > > >>>> to > > > >>>>>> it > > > >>>>>>>>>> before > > > >>>>>>>>>>> it > > > >>>>>>>>>>>>>> goes > > > >>>>>>>>>>>>>>> worse. Just my 2 cents. :) > > > >>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>> Best, > > > >>>>>>>>>>>>>>>> Jingsong > > > >>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>> On Thu, Feb 23, 2023 at 4:47 PM Jing Ge > > > >>>>>>>>>>> <j...@ververica.com.invalid > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>> wrote: > > > >>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>> Hi Jingson, > > > >>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>> Thanks for the knowledge sharing. IMHO, it looks > > > >>>>> more > > > >>>>>>>> like a > > > >>>>>>>>>>>> design > > > >>>>>>>>>>>>>>>>> guideline question than just avoiding public API > > > >>>>>> change. > > > >>>>>>>>>> Please > > > >>>>>>>>>>>>>> correct > > > >>>>>>>>>>>>>>>> me > > > >>>>>>>>>>>>>>>>> if I'm wrong. > > > >>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>> Catalog is in flink-table-common module and > > > >>>>>>>> TableEnvironment > > > >>>>>>>>>> is > > > >>>>>>>>>>>> in > > > >>>>>>>>>>>>>>>>> flink-table-api-java. Depending on how and where > > > >>>>> those > > > >>>>>>>>>> features > > > >>>>>>>>>>>>>>> proposed > > > >>>>>>>>>>>>>>>> in > > > >>>>>>>>>>>>>>>>> this FLIP will be used, we'd better reduce the > > > >>>>>>> dependency > > > >>>>>>>>>> chain > > > >>>>>>>>>>>> and > > > >>>>>>>>>>>>>>>> follow > > > >>>>>>>>>>>>>>>>> the Law of Demeter(LoD, clean code) [1]. Adding > > > >>> a > > > >>>>> new > > > >>>>>>>> method > > > >>>>>>>>>> in > > > >>>>>>>>>>>>>>>>> TableEnvironment is therefore better than > > > >>> calling > > > >>>> an > > > >>>>>> API > > > >>>>>>>>>> chain. > > > >>>>>>>>>>>> It > > > >>>>>>>>>>>>> is > > > >>>>>>>>>>>>>>>> also > > > >>>>>>>>>>>>>>>>> more user friendly for the caller, because there > > > >>>> is > > > >>>>> no > > > >>>>>>>> need > > > >>>>>>>>>> to > > > >>>>>>>>>>>>>>> understand > > > >>>>>>>>>>>>>>>>> the internal structure of the called API. The > > > >>>>> downside > > > >>>>>>> of > > > >>>>>>>>>> doing > > > >>>>>>>>>>>>> this > > > >>>>>>>>>>>>>> is > > > >>>>>>>>>>>>>>>>> that we might have another issue with the > > > >>> current > > > >>>>>>>>>>>> TableEnvironment > > > >>>>>>>>>>>>>>>> design - > > > >>>>>>>>>>>>>>>>> the TableEnvironment interface got enlarged with > > > >>>>> more > > > >>>>>>>> wrapper > > > >>>>>>>>>>>>>> methods. > > > >>>>>>>>>>>>>>>> This > > > >>>>>>>>>>>>>>>>> is a different issue that could be solved with > > > >>>>>> improved > > > >>>>>>>>>>>> abstraction > > > >>>>>>>>>>>>>>>> design > > > >>>>>>>>>>>>>>>>> in the future. After considering pros and cons, > > > >>> if > > > >>>>> we > > > >>>>>>>> want to > > > >>>>>>>>>>> add > > > >>>>>>>>>>>>>> those > > > >>>>>>>>>>>>>>>>> features now, I would prefer following LoD than > > > >>>> API > > > >>>>>>> chain > > > >>>>>>>>>>> calls. > > > >>>>>>>>>>>>>> WDYT? > > > >>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>> Best regards, > > > >>>>>>>>>>>>>>>>> Jing > > > >>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>> [1] > > > >>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>> > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>> > > > >>>>>>>>>>> > > > >>>>>>>>>> > > > >>>>>>>> > > > >>>>>>> > > > >>>>>> > > > >>>>> > > > >>>> > > > >>> > > > > > > https://hackernoon.com/object-oriented-tricks-2-law-of-demeter-4ecc9becad85 > > > >>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>> On Thu, Feb 23, 2023 at 6:26 AM Ran Tao < > > > >>>>>>>>>> chucheng...@gmail.com > > > >>>>>>>>>>>> > > > >>>>>>>>>>>>>> wrote: > > > >>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>> Hi Jingsong. thanks. i got it. > > > >>>>>>>>>>>>>>>>>> In this way, there is no need to introduce new > > > >>>> API > > > >>>>>>>> changes. > > > >>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>> Best Regards, > > > >>>>>>>>>>>>>>>>>> Ran Tao > > > >>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>> Jingsong Li <jingsongl...@gmail.com> > > > >>>>> 于2023年2月23日周四 > > > >>>>>>>>>> 12:26写道: > > > >>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>> Hi Ran, > > > >>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>> I mean we can just use > > > >>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>> > > > >>>>>>>>>>> > > > >>>>>>> > > > >>> > TableEnvironment.getCatalog(getCurrentCatalog).get().listDatabases(). > > > >>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>> We don't need to provide new apis just for > > > >>>>> utils. > > > >>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>> Best, > > > >>>>>>>>>>>>>>>>>>> Jingsong > > > >>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>> On Thu, Feb 23, 2023 at 12:11 PM Ran Tao < > > > >>>>>>>>>>>>> chucheng...@gmail.com> > > > >>>>>>>>>>>>>>>> wrote: > > > >>>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>> Hi Jingsong, thanks. > > > >>>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>> The implementation of these statements in > > > >>>>>>>>>>>>> TableEnvironmentImpl > > > >>>>>>>>>>>>>> is > > > >>>>>>>>>>>>>>>>>> called > > > >>>>>>>>>>>>>>>>>>>> through the catalog api. > > > >>>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>> but it does support some new override > > > >>>> methods > > > >>>>> on > > > >>>>>>> the > > > >>>>>>>>>>>> catalog > > > >>>>>>>>>>>>>> api > > > >>>>>>>>>>>>>>>> side, > > > >>>>>>>>>>>>>>>>>>> and > > > >>>>>>>>>>>>>>>>>>>> I will update it later. Thank you. > > > >>>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>> e.g. > > > >>>>>>>>>>>>>>>>>>>> TableEnvironmentImpl > > > >>>>>>>>>>>>>>>>>>>> @Override > > > >>>>>>>>>>>>>>>>>>>> public String[] listDatabases() { > > > >>>>>>>>>>>>>>>>>>>> return catalogManager > > > >>>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>> .getCatalog(catalogManager.getCurrentCatalog()) > > > >>>>>>>>>>>>>>>>>>>> .get() > > > >>>>>>>>>>>>>>>>>>>> .listDatabases() > > > >>>>>>>>>>>>>>>>>>>> .toArray(new String[0]); > > > >>>>>>>>>>>>>>>>>>>> } > > > >>>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>> Best Regards, > > > >>>>>>>>>>>>>>>>>>>> Ran Tao > > > >>>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>> Jingsong Li <jingsongl...@gmail.com> > > > >>>>>>> 于2023年2月23日周四 > > > >>>>>>>>>>>> 11:47写道: > > > >>>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>>> Thanks for the proposal. > > > >>>>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>>> +1 for the proposal. > > > >>>>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>>> I am confused about "Proposed > > > >>>>> TableEnvironment > > > >>>>>>> SQL > > > >>>>>>>>>> API > > > >>>>>>>>>>>>>>> Changes", > > > >>>>>>>>>>>>>>>> can > > > >>>>>>>>>>>>>>>>>>>>> we just use catalog api for this > > > >>>>> requirement? > > > >>>>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>>> Best, > > > >>>>>>>>>>>>>>>>>>>>> Jingsong > > > >>>>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>>> On Thu, Feb 23, 2023 at 10:48 AM Jacky > > > >>>> Lau < > > > >>>>>>>>>>>>>>> liuyong...@gmail.com > > > >>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>> wrote: > > > >>>>>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>>>> Hi Ran: > > > >>>>>>>>>>>>>>>>>>>>>> Thanks for driving the FLIP. the > > > >>> google > > > >>>>> doc > > > >>>>>>>> looks > > > >>>>>>>>>>>> really > > > >>>>>>>>>>>>>>> good. > > > >>>>>>>>>>>>>>>> it > > > >>>>>>>>>>>>>>>>>> is > > > >>>>>>>>>>>>>>>>>>>>>> important to improve user interactive > > > >>>>>>>> experience. > > > >>>>>>>>>> +1 > > > >>>>>>>>>>> to > > > >>>>>>>>>>>>>>> support > > > >>>>>>>>>>>>>>>>>> this > > > >>>>>>>>>>>>>>>>>>>>>> feature. > > > >>>>>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>>>> Jing Ge <j...@ververica.com.invalid> > > > >>>>>>>> 于2023年2月23日周四 > > > >>>>>>>>>>>>>> 00:51写道: > > > >>>>>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>>>>> Hi Ran, > > > >>>>>>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>>>>> Thanks for driving the FLIP. It > > > >>> looks > > > >>>>>>> overall > > > >>>>>>>>>>> good. > > > >>>>>>>>>>>>>> Would > > > >>>>>>>>>>>>>>>> you > > > >>>>>>>>>>>>>>>>>>> like to > > > >>>>>>>>>>>>>>>>>>>>> add > > > >>>>>>>>>>>>>>>>>>>>>>> a description of useLike and > > > >>> notLike? > > > >>>> I > > > >>>>>>> guess > > > >>>>>>>>>>> useLike > > > >>>>>>>>>>>>>> true > > > >>>>>>>>>>>>>>>> is for > > > >>>>>>>>>>>>>>>>>>>>> "LIKE" > > > >>>>>>>>>>>>>>>>>>>>>>> and notLike true is for "NOT LIKE" > > > >>>> but I > > > >>>>>> am > > > >>>>>>>> not > > > >>>>>>>>>>> sure > > > >>>>>>>>>>>>> if I > > > >>>>>>>>>>>>>>>>>>> understood it > > > >>>>>>>>>>>>>>>>>>>>>>> correctly. Furthermore, does it make > > > >>>>> sense > > > >>>>>>> to > > > >>>>>>>>>>> support > > > >>>>>>>>>>>>>>> "ILIKE" > > > >>>>>>>>>>>>>>>>>> too? > > > >>>>>>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>>>>> Best regards, > > > >>>>>>>>>>>>>>>>>>>>>>> Jing > > > >>>>>>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>>>>> On Wed, Feb 22, 2023 at 1:17 PM Ran > > > >>>> Tao > > > >>>>> < > > > >>>>>>>>>>>>>>>> chucheng...@gmail.com> > > > >>>>>>>>>>>>>>>>>>> wrote: > > > >>>>>>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>>>>>> Currently flink sql auxiliary > > > >>>>> statements > > > >>>>>>> has > > > >>>>>>>>>>>>> supported > > > >>>>>>>>>>>>>>> some > > > >>>>>>>>>>>>>>>>>> good > > > >>>>>>>>>>>>>>>>>>>>> features > > > >>>>>>>>>>>>>>>>>>>>>>>> such as catalog/databases/table > > > >>>>> support. > > > >>>>>>>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>>>>>> But these features are not very > > > >>>>> complete > > > >>>>>>>>>> compared > > > >>>>>>>>>>>>> with > > > >>>>>>>>>>>>>>>> other > > > >>>>>>>>>>>>>>>>>>> popular > > > >>>>>>>>>>>>>>>>>>>>>>>> engines such as spark, presto, > > > >>> hive > > > >>>>> and > > > >>>>>>>>>>> commercial > > > >>>>>>>>>>>>>>> engines > > > >>>>>>>>>>>>>>>> such > > > >>>>>>>>>>>>>>>>>>> as > > > >>>>>>>>>>>>>>>>>>>>>>>> snowflake. > > > >>>>>>>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>>>>>> For example, many engines support > > > >>>> show > > > >>>>>>>>>> operation > > > >>>>>>>>>>>> with > > > >>>>>>>>>>>>>>>> filtering > > > >>>>>>>>>>>>>>>>>>>>> except > > > >>>>>>>>>>>>>>>>>>>>>>>> flink, and support describe other > > > >>>>>>>> object(flink > > > >>>>>>>>>>> only > > > >>>>>>>>>>>>>>> support > > > >>>>>>>>>>>>>>>>>>> describe > > > >>>>>>>>>>>>>>>>>>>>>>>> table). > > > >>>>>>>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>>>>>> I wonder can we add these useful > > > >>>>>> features > > > >>>>>>>> for > > > >>>>>>>>>>>> flink? > > > >>>>>>>>>>>>>>>>>>>>>>>> You can find details in this > > > >>> doc.[1] > > > >>>>> or > > > >>>>>>>>>> FLIP.[2] > > > >>>>>>>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>>>>>> Also, please let me know if there > > > >>>> is a > > > >>>>>>>> mistake. > > > >>>>>>>>>>>>> Looking > > > >>>>>>>>>>>>>>>> forward > > > >>>>>>>>>>>>>>>>>>> to > > > >>>>>>>>>>>>>>>>>>>>> your > > > >>>>>>>>>>>>>>>>>>>>>>>> reply. > > > >>>>>>>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>>>>>> [1] > > > >>>>>>>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>> > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>> > > > >>>>>>>>>>> > > > >>>>>>>>>> > > > >>>>>>>> > > > >>>>>>> > > > >>>>>> > > > >>>>> > > > >>>> > > > >>> > > > > > > https://docs.google.com/document/d/1hAiOfPx14VTBTOlpyxG7FA2mB1k5M31VnKYad2XpJ1I/ > > > >>>>>>>>>>>>>>>>>>>>>>>> [2] > > > >>>>>>>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>> > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>> > > > >>>>>>>>>>> > > > >>>>>>>>>> > > > >>>>>>>> > > > >>>>>>> > > > >>>>>> > > > >>>>> > > > >>>> > > > >>> > > > > > > https://cwiki.apache.org/confluence/display/FLINK/FLIP-297%3A+Improve+Auxiliary+Sql+Statements > > > >>>>>>>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>>>>>> Best Regards, > > > >>>>>>>>>>>>>>>>>>>>>>>> Ran Tao > > > >>>>>>>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>> > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>> > > > >>>>>>>>>>> > > > >>>>>>>>>>> > > > >>>>>>>>>>> -- > > > >>>>>>>>>>> Best regards, > > > >>>>>>>>>>> Sergey > > > >>>>>>>>>>> > > > >>>>>>>>>> > > > >>>>>>>>> > > > >>>>>>>>> > > > >>>>>>>>> -- > > > >>>>>>>>> Best regards, > > > >>>>>>>>> Sergey > > > >>>>>>>> > > > >>>>>>> > > > >>>>>> > > > >>>>> > > > >>>> > > > >>> > > > >>> > > > >>> -- > > > >>> Best regards, > > > >>> Sergey > > > >>> > > > > > > > > > > > > > > > -- > Best regards, > Sergey >