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
> >>
>

Reply via email to