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