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

Reply via email to