ignite-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Dmitriy Setrakyan <dsetrak...@apache.org>
Subject Re: Enums and SQL queries
Date Wed, 27 Jul 2016 06:23:08 GMT
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.vladykin@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.kulichenko@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.vladykin@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.kulichenko@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
> >> >
> >>
> >
> >
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message