Ok, It seems like I have found what was causing the issue. In our apache.ignite.internal.processors.queryh.h2.IgniteH2Indexing.DBTypeEnum:
/** * Initialize map of DB types. */ static { map.put(int.class, INT); map.put(Integer.class, INT); map.put(boolean.class, BOOL); map.put(Boolean.class, BOOL); map.put(byte.class, TINYINT); map.put(Byte.class, TINYINT); map.put(short.class, SMALLINT); map.put(Short.class, SMALLINT); map.put(long.class, BIGINT); map.put(Long.class, BIGINT); map.put(BigDecimal.class, DECIMAL); map.put(double.class, DOUBLE); map.put(Double.class, DOUBLE); map.put(float.class, REAL); map.put(Float.class, REAL); map.put(Time.class, TIME); map.put(Timestamp.class, TIMESTAMP); map.put(java.util.Date.class, TIMESTAMP); map.put(java.sql.Date.class, DATE); map.put(String.class, VARCHAR); map.put(UUID.class, UUID); map.put(byte[].class, BINARY); } As I was using java.util.Date and not the java.sql.Date it was translated as TIMESTAMP and not as DATE. Are there any particular reason for java.util.Date being treated as a TIMESTAMP? In our Binary marshaler we use java.sql.Date and when I try to change configuration and make the Date field to be of the type java.sql.Date I've got an error, because this field value deserialized as java.sql.Date: lass org.apache.ignite.IgniteCheckedException: Failed to execute SQL query. at org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.executeSqlQuery(IgniteH2Indexing.java:831) [...] at org.apache.ignite.internal.processors.platform.cache.query.PlatformAbstractQueryCursor.iterator(PlatformAbstractQueryCursor.java:134) Caused by: org.h2.jdbc.JdbcSQLException: "java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date" Best Regards, Igor On Thu, Feb 11, 2016 at 12:39 PM, Vladimir Ozerov <voze...@gridgain.com> wrote: > There was some changes in how .NET interoperate w/ Java on binary level. No > changes were made to cache or query logic. > I performed a smoke test in Java and observed that Date field was correctly > mapped to H2 date and then vice versa. > > Probably this is a kind of configuration problem. > > Vladimir. > > On Thu, Feb 11, 2016 at 12:41 AM, Dmitriy Setrakyan <dsetrak...@apache.org > > > wrote: > > > I remember seeing some work done for the .NET support to provide better > > precision for time data values. Could it be that SQL now converts > > everything to Timestamp because of that? > > > > D. > > > > On Wed, Feb 10, 2016 at 10:09 AM, Igor Sapego <isap...@gridgain.com> > > wrote: > > > > > Hello, > > > > > > Recently I've been working on implementation of the Date and Timestamp > > > types support for C++ client [1] and I today have faced an issue when I > > was > > > running tests with Date and SqlFieldQuery. > > > > > > Here is the issue. I have class that have field of type 'Date'. I was > > able > > > to create > > > instances of that class and put them in a cache, but when I tried to > > > retrieve > > > these fields with SQL query I've got an exception. After the short > debug > > > session > > > I have found that the values that SQL queries return are of type > > > 'Timestamp'. > > > > > > So now I'm wonder, is it an expected behavior? Because to me it looks > > like > > > something that may be very confusing for a user. User knows that > object's > > > field > > > is of type 'Date' but when they try to call GetNext<Date> on query row > > they > > > get an > > > exception. > > > > > > I have also tested simple caches with Date where Date is a value and > > these > > > tests > > > work just fine with 'Date' returned as a result of Cache#Get() > requests. > > > > > > [1] - IGNITE-2222: CPP: Implement Date and Timestamp data types support > > for > > > binary protocol. <https://issues.apache.org/jira/browse/IGNITE-2222> > > > Best Regards, > > > Igor > > > > > >