From b75d866961adb95b0b32eadfa249c2893629cb85 Mon Sep 17 00:00:00 2001 From: Alden Quimby Date: Thu, 3 Apr 2014 12:48:24 -0400 Subject: [PATCH] default java.util.Date parameters to setting timestamp rather than date --- src/main/java/org/sql2o/Query.java | 23 ++++++--------------- src/test/java/org/sql2o/Sql2oTest.java | 19 ++++++++++++----- src/test/java/org/sql2o/UtilDateEntity.java | 9 ++++++++ 3 files changed, 29 insertions(+), 22 deletions(-) diff --git a/src/main/java/org/sql2o/Query.java b/src/main/java/org/sql2o/Query.java index d727ac12..fb19a033 100644 --- a/src/main/java/org/sql2o/Query.java +++ b/src/main/java/org/sql2o/Query.java @@ -161,28 +161,15 @@ public Query addParameter(String name, Timestamp value){ } public Query addParameter(String name, Date value){ - if (this.getConnection().getSql2o().quirksMode == QuirksMode.MSSqlServer){ - Timestamp timestamp = value == null ? null : new Timestamp(value.getTime()); - return addParameter(name, timestamp); - } - if (value != null && this.connection.getSql2o().quirksMode == QuirksMode.DB2){ // With the DB2 driver you can get an error if trying to put a date value into a timestamp column, // but of some reason it works if using setObject(). return addParameter(name, (Object)value); } - try{ - if (value == null) { - statement.setNull(name, Types.DATE); - } else { - statement.setDate(name, value); - } - } catch (Exception ex) { - throw new Sql2oException("Error setting parameter '" + name + "'", ex); - } - - return this; + // by default add a timestamp, because it works with DATE, DATETIME, TIMESTAMP columns + Timestamp timestamp = value == null ? null : new Timestamp(value.getTime()); + return addParameter(name, timestamp); } public Query addParameter(String name, java.util.Date value){ @@ -247,8 +234,10 @@ public Query bind(Object bean){ logger.debug("Using addParameter(String, Object)", ex); addParameter(param, res); } - }else + } + else { addParameter(param, res); + } } }catch(IllegalArgumentException ex){ logger.debug("Ignoring Illegal Arguments", ex); diff --git a/src/test/java/org/sql2o/Sql2oTest.java b/src/test/java/org/sql2o/Sql2oTest.java index 1f28e47f..f96d33d6 100644 --- a/src/test/java/org/sql2o/Sql2oTest.java +++ b/src/test/java/org/sql2o/Sql2oTest.java @@ -274,18 +274,27 @@ public void testJodaTime(){ @Test public void testUtilDate(){ - sql2o.createQuery("create table testutildate(id int primary key, d1 datetime, d2 timestamp)").executeUpdate(); + sql2o.createQuery("create table testutildate(id int primary key, d1 datetime, d2 timestamp, d3 date)").executeUpdate(); - sql2o.createQuery("insert into testutildate(id, d1, d2) values(:id, :d1, :d2)") - .addParameter("id", 1).addParameter("d1", new Date()).addParameter("d2", new Date()).addToBatch() - .addParameter("id", 2).addParameter("d1", new Date()).addParameter("d2", new Date()).addToBatch() - .addParameter("id", 3).addParameter("d1", new Date()).addParameter("d2", new Date()).addToBatch() + Date now = new Date(); + + sql2o.createQuery("insert into testutildate(id, d1, d2, d3) values(:id, :d1, :d2, :d3)") + .addParameter("id", 1).addParameter("d1", now).addParameter("d2", now).addParameter("d3", now).addToBatch() + .addParameter("id", 2).addParameter("d1", now).addParameter("d2", now).addParameter("d3", now).addToBatch() + .addParameter("id", 3).addParameter("d1", now).addParameter("d2", now).addParameter("d3", now).addToBatch() .executeBatch(); List list = sql2o.createQuery("select * from testutildate").executeAndFetch(UtilDateEntity.class); assertTrue(list.size() == 3); + // make sure d1, d2, d3 were properly inserted and selected + for (UtilDateEntity e : list) { + assertEquals(now, e.d1); + assertEquals(now, e.getD2()); + Date dateOnly = new DateTime(now).toDateMidnight().toDate(); + assertEquals(dateOnly, e.getD3()); + } } @Test diff --git a/src/test/java/org/sql2o/UtilDateEntity.java b/src/test/java/org/sql2o/UtilDateEntity.java index 3e677146..5d027448 100644 --- a/src/test/java/org/sql2o/UtilDateEntity.java +++ b/src/test/java/org/sql2o/UtilDateEntity.java @@ -14,6 +14,7 @@ public class UtilDateEntity { public int id; public Date d1; private Date d2; + private Date d3; public Date getD2() { return d2; @@ -22,4 +23,12 @@ public Date getD2() { public void setD2(Date d2) { this.d2 = d2; } + + public Date getD3() { + return d3; + } + + public void setD3(Date d3) { + this.d3 = d3; + } }