Sure. https://issues.apache.org/jira/browse/IGNITE-3595
Sergi 2016-07-27 22:51 GMT+03:00 Dmitriy Setrakyan <dsetrak...@gridgain.com>: > Sorry, Sergi. What I meant is to file a ticket with the design you > suggested > > Dmitriy > > > > > On Jul 27, 2016, at 9:18 AM, Sergi Vladykin <sergi.vlady...@gmail.com> > wrote: > > > > I don't see how this can work to file a ticket, could you please give > more > > details? > > > > Sergi > > > > 2016-07-27 15:50 GMT+03:00 Dmitriy Setrakyan <dsetrak...@apache.org>: > > > >> Sergi, I still thinks my solution works or can be made to work. In the > >> example you provided, you can choose to return either String or Enum as > the > >> query result. However, this is not a clean solution, I agree, but could > be > >> a quick one. > >> > >> I don't mind breaking compatibility on this issue, given that it never > >> worked properly anyway. Can you please file a ticket? > >> > >> D. > >> > >> On Wed, Jul 27, 2016 at 3:01 AM, Sergi Vladykin < > sergi.vlady...@gmail.com> > >> wrote: > >> > >>> Nope. This will not work. Because take for example the following query: > >>> > >>> select my_enum_field from my_table where my_enum_field = 'BLA' > >>> > >>> Field well be evaluated only once here, but it must be a Sting and Enum > >> at > >>> the same time. > >> > >> > >>> Probably we could contribute to H2 `User defined value types` and > handle > >>> this stuff in our own Enum value types, which will support comparison > >> with > >>> String. But this requires bug H2 Modification and is a compatibility > >>> breaking change. > >>> > >>> Sergi > >>> > >>> > >>> > >>> 2016-07-27 9:23 GMT+03:00 Dmitriy Setrakyan <dsetrak...@apache.org>: > >>> > >>>> Hm... I would prefer to find a way to handle Enums automatically. > >>>> > >>>> In case if user expects a String, can we catch an exception and do > >>>> automatic conversion at that time? In this case, we could catch the > >>>> exception once and remember the decision. Will something like this > >> work? > >>>> > >>>> D. > >>>> > >>>> On Tue, Jul 26, 2016 at 1:49 AM, Sergi Vladykin < > >>> sergi.vlady...@gmail.com> > >>>> wrote: > >>>> > >>>>> GridQueryProcessor contains two types: BinaryProperty and > >>> ClassProperty. > >>>>> Indexing uses them for fields access. Probably we can change them, so > >>>> that > >>>>> they will always return String instead of Enum type but this > >>>>> > >>>>> 1. looks like a compatibility breaking change; > >>>>> 2. users doing queries like `select my_enum_field from my_table` > >>> probably > >>>>> still expect to get a Enum result but not a String. > >>>>> > >>>>> What do you think? > >>>>> > >>>>> Sergi > >>>>> > >>>>> > >>>>> 2016-07-26 3:17 GMT+03:00 Valentin Kulichenko < > >>>>> valentin.kuliche...@gmail.com > >>>>>> : > >>>>> > >>>>>> Sergi, > >>>>>> > >>>>>> Ideally, I would like this query to work: > >>>>>> > >>>>>> select * from MyTable where myEnumField = 'MY_ENUM_NAME' > >>>>>> > >>>>>> The problem is that the field value is not a string, it's a binary > >>>> object > >>>>>> with the enum value ordinal inside. We can add enum value names > >> into > >>>> the > >>>>>> metadata, so that we can always map the field value to its string > >>>>>> representation, but SQL engine will have to know how to use it. Is > >>> this > >>>>>> possible? > >>>>>> > >>>>>> -Val > >>>>>> > >>>>>> On Fri, Jul 22, 2016 at 10:25 PM, Sergi Vladykin < > >>>>> sergi.vlady...@gmail.com > >>>>>>> wrote: > >>>>>> > >>>>>>> I'm not sure what exactly you are going to patch in SQL engine. We > >>>> could > >>>>>>> and some SQL function like enum('MY_ENUM_NAME') but probably it > >> will > >>>> not > >>>>>>> work if we will not pass enum type there as well, so it have look > >>> like > >>>>>>> enum('com.mycompany.MyEnum', 'MY_ENUM_NAME') which is ugly. > >>>>>>> > >>>>>>> Sergi > >>>>>>> > >>>>>>> On 23 июля 2016 г., 0:43, Valentin Kulichenko < > >>>>>>> valentin.kuliche...@gmail.com > >>>>>>>> wrote: > >>>>>>> > >>>>>>>> Folks, > >>>>>>>> > >>>>>>>> I noticed that we currently have a very weird limitation for > >> enum > >>>>> fields > >>>>>>>> when running SQL queries. Basically, you can't use enum value > >>> names > >>>> as > >>>>>>> many > >>>>>>>> users would expect. > >>>>>>>> > >>>>>>>> Technically this happens because binary format stores only > >> ordinal > >>>> and > >>>>>>> the > >>>>>>>> only way to run such query is to do something like this: > >>>>>>>> > >>>>>>>> SqlFieldsQuery qry = new SqlFieldsQuery("select * from Table > >> where > >>>>>>>> enumField = ?"); > >>>>>>>> qry.setArgs(MyEnum.ENUM_VALUE); > >>>>>>>> cache.query(qry); > >>>>>>>> > >>>>>>>> This means that this query can be executed only if: > >>>>>>>> - IgniteCache API is used. So it doesn't work in JDBC driver, > >>>>> Zeppelin, > >>>>>>>> etc. > >>>>>>>> - The client that executes the query has the enum class on > >>>> classpath. > >>>>>>>> > >>>>>>>> My first thought about fixing this is to somehow store value > >> names > >>>> in > >>>>>>>> binary metadata and patch the SQL engine so that it understands > >>> how > >>>> to > >>>>>>> use > >>>>>>>> this information. > >>>>>>>> > >>>>>>>> Thoughts? > >>>>>>>> > >>>>>>>> -Val > >> >