From 240256384d8441704a18990d799747e4509e6f5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Raupach?= Date: Mon, 21 Aug 2017 21:30:29 +0200 Subject: [PATCH 1/3] Testing OffsetDateTimeHandler which retains Offset from UTC --- .../java/org/apache/ibatis/type/JdbcType.java | 4 +- .../type/OffsetDateTimeTypeHandler.java | 19 ++--- .../timestamp_with_timezone/CreateDB.sql | 25 +++++++ .../timestamp_with_timezone/Mapper.java | 28 +++++++ .../timestamp_with_timezone/Mapper.xml | 25 +++++++ .../OffsetDateTimeTypeHandlerTest.java | 75 +++++++++++++++++++ .../timestamp_with_timezone/Record.java | 32 ++++++++ .../mybatis-config.xml | 42 +++++++++++ 8 files changed, 236 insertions(+), 14 deletions(-) create mode 100644 src/test/java/org/apache/ibatis/submitted/usesjava8/timestamp_with_timezone/CreateDB.sql create mode 100644 src/test/java/org/apache/ibatis/submitted/usesjava8/timestamp_with_timezone/Mapper.java create mode 100644 src/test/java/org/apache/ibatis/submitted/usesjava8/timestamp_with_timezone/Mapper.xml create mode 100644 src/test/java/org/apache/ibatis/submitted/usesjava8/timestamp_with_timezone/OffsetDateTimeTypeHandlerTest.java create mode 100644 src/test/java/org/apache/ibatis/submitted/usesjava8/timestamp_with_timezone/Record.java create mode 100644 src/test/java/org/apache/ibatis/submitted/usesjava8/timestamp_with_timezone/mybatis-config.xml diff --git a/src/main/java/org/apache/ibatis/type/JdbcType.java b/src/main/java/org/apache/ibatis/type/JdbcType.java index 94d4ed55b08..c0fcc3256f1 100644 --- a/src/main/java/org/apache/ibatis/type/JdbcType.java +++ b/src/main/java/org/apache/ibatis/type/JdbcType.java @@ -65,7 +65,9 @@ public enum JdbcType { ROWID(Types.ROWID), // JDK6 LONGNVARCHAR(Types.LONGNVARCHAR), // JDK6 SQLXML(Types.SQLXML), // JDK6 - DATETIMEOFFSET(-155); // SQL Server 2008 + DATETIMEOFFSET(-155), // SQL Server 2008 + TIME_WITH_TIMEZONE(Types.TIME_WITH_TIMEZONE), // JDBC 4.2 JDK8 + TIMESTAMP_WITH_TIMEZONE(Types.TIMESTAMP_WITH_TIMEZONE); // JDBC 4.2 JDK8 public final int TYPE_CODE; private static Map codeLookup = new HashMap<>(); diff --git a/src/main/java/org/apache/ibatis/type/OffsetDateTimeTypeHandler.java b/src/main/java/org/apache/ibatis/type/OffsetDateTimeTypeHandler.java index a82b041da2b..04a2fd02441 100644 --- a/src/main/java/org/apache/ibatis/type/OffsetDateTimeTypeHandler.java +++ b/src/main/java/org/apache/ibatis/type/OffsetDateTimeTypeHandler.java @@ -20,6 +20,7 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Timestamp; +import java.sql.Types; import java.time.OffsetDateTime; import java.time.ZoneId; @@ -32,31 +33,23 @@ public class OffsetDateTimeTypeHandler extends BaseTypeHandler { @Override public void setNonNullParameter(PreparedStatement ps, int i, OffsetDateTime parameter, JdbcType jdbcType) throws SQLException { - ps.setTimestamp(i, Timestamp.from(parameter.toInstant())); + ps.setObject(i, parameter); } @Override public OffsetDateTime getNullableResult(ResultSet rs, String columnName) throws SQLException { - Timestamp timestamp = rs.getTimestamp(columnName); - return getOffsetDateTime(timestamp); + return (OffsetDateTime) rs.getObject(columnName); } @Override public OffsetDateTime getNullableResult(ResultSet rs, int columnIndex) throws SQLException { - Timestamp timestamp = rs.getTimestamp(columnIndex); - return getOffsetDateTime(timestamp); + return (OffsetDateTime) rs.getObject(columnIndex); } @Override public OffsetDateTime getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { - Timestamp timestamp = cs.getTimestamp(columnIndex); - return getOffsetDateTime(timestamp); + return (OffsetDateTime) cs.getObject(columnIndex); } - private static OffsetDateTime getOffsetDateTime(Timestamp timestamp) { - if (timestamp != null) { - return OffsetDateTime.ofInstant(timestamp.toInstant(), ZoneId.systemDefault()); - } - return null; - } + } diff --git a/src/test/java/org/apache/ibatis/submitted/usesjava8/timestamp_with_timezone/CreateDB.sql b/src/test/java/org/apache/ibatis/submitted/usesjava8/timestamp_with_timezone/CreateDB.sql new file mode 100644 index 00000000000..cd073147612 --- /dev/null +++ b/src/test/java/org/apache/ibatis/submitted/usesjava8/timestamp_with_timezone/CreateDB.sql @@ -0,0 +1,25 @@ +-- +-- Copyright 2009-2017 the original author or authors. +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- + +drop table records if exists; + +create table records ( + datetime timestamp with time zone +); + +insert into records values ('2017-08-20 20:00:00+02:00'); +insert into records values ('2017-08-20 20:00:00-04:00'); + diff --git a/src/test/java/org/apache/ibatis/submitted/usesjava8/timestamp_with_timezone/Mapper.java b/src/test/java/org/apache/ibatis/submitted/usesjava8/timestamp_with_timezone/Mapper.java new file mode 100644 index 00000000000..eecd3148096 --- /dev/null +++ b/src/test/java/org/apache/ibatis/submitted/usesjava8/timestamp_with_timezone/Mapper.java @@ -0,0 +1,28 @@ +/** + * Copyright 2009-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.ibatis.submitted.usesjava8.timestamp_with_timezone; + +import org.apache.ibatis.submitted.usesjava8.use_actual_param_name.*; +import java.util.List; + +import org.apache.ibatis.annotations.Select; + +public interface Mapper { + + @Select("select * from records") + List selectAll(); + +} diff --git a/src/test/java/org/apache/ibatis/submitted/usesjava8/timestamp_with_timezone/Mapper.xml b/src/test/java/org/apache/ibatis/submitted/usesjava8/timestamp_with_timezone/Mapper.xml new file mode 100644 index 00000000000..bac734e07c5 --- /dev/null +++ b/src/test/java/org/apache/ibatis/submitted/usesjava8/timestamp_with_timezone/Mapper.xml @@ -0,0 +1,25 @@ + + + + + + + diff --git a/src/test/java/org/apache/ibatis/submitted/usesjava8/timestamp_with_timezone/OffsetDateTimeTypeHandlerTest.java b/src/test/java/org/apache/ibatis/submitted/usesjava8/timestamp_with_timezone/OffsetDateTimeTypeHandlerTest.java new file mode 100644 index 00000000000..92b778845c1 --- /dev/null +++ b/src/test/java/org/apache/ibatis/submitted/usesjava8/timestamp_with_timezone/OffsetDateTimeTypeHandlerTest.java @@ -0,0 +1,75 @@ +/** + * Copyright 2009-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.ibatis.submitted.usesjava8.timestamp_with_timezone; + + +import java.io.Reader; +import java.sql.Connection; +import java.util.List; + +import org.apache.ibatis.io.Resources; +import org.apache.ibatis.jdbc.ScriptRunner; +import org.apache.ibatis.session.SqlSession; +import org.apache.ibatis.session.SqlSessionFactory; +import org.apache.ibatis.session.SqlSessionFactoryBuilder; +import org.apache.ibatis.submitted.usesjava8.use_actual_param_name.User; +import org.junit.Assert; +import static org.junit.Assert.assertNotNull; +import org.junit.BeforeClass; +import org.junit.Test; + +public class OffsetDateTimeTypeHandlerTest { + + private static SqlSessionFactory sqlSessionFactory; + + @BeforeClass + public static void setUp() throws Exception { + // create an SqlSessionFactory + Reader reader = Resources.getResourceAsReader( + "org/apache/ibatis/submitted/usesjava8/timestamp_with_timezone/mybatis-config.xml"); + sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); + reader.close(); + + // populate in-memory database + SqlSession session = sqlSessionFactory.openSession(); + Connection conn = session.getConnection(); + reader = Resources.getResourceAsReader( + "org/apache/ibatis/submitted/usesjava8/timestamp_with_timezone/CreateDB.sql"); + ScriptRunner runner = new ScriptRunner(conn); + runner.setLogWriter(null); + runner.runScript(reader); + conn.close(); + reader.close(); + session.close(); + } + + @Test + public void shouldPreserveDateTimeWithOffset() { + SqlSession sqlSession = sqlSessionFactory.openSession(); + try { + Mapper mapper = sqlSession.getMapper(Mapper.class); + List records = mapper.selectAll(); + + for (Record record : records) { + System.out.println(record.getDatetime()); + } + + } finally { + sqlSession.close(); + } + } + +} diff --git a/src/test/java/org/apache/ibatis/submitted/usesjava8/timestamp_with_timezone/Record.java b/src/test/java/org/apache/ibatis/submitted/usesjava8/timestamp_with_timezone/Record.java new file mode 100644 index 00000000000..7680ca5e12c --- /dev/null +++ b/src/test/java/org/apache/ibatis/submitted/usesjava8/timestamp_with_timezone/Record.java @@ -0,0 +1,32 @@ +/** + * Copyright 2009-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.ibatis.submitted.usesjava8.timestamp_with_timezone; + +import java.time.OffsetDateTime; + +public class Record { + + private OffsetDateTime datetime; + + public OffsetDateTime getDatetime() { + return datetime; + } + + public void setDatetime(OffsetDateTime datetime) { + this.datetime = datetime; + } + +} diff --git a/src/test/java/org/apache/ibatis/submitted/usesjava8/timestamp_with_timezone/mybatis-config.xml b/src/test/java/org/apache/ibatis/submitted/usesjava8/timestamp_with_timezone/mybatis-config.xml new file mode 100644 index 00000000000..759601b2e62 --- /dev/null +++ b/src/test/java/org/apache/ibatis/submitted/usesjava8/timestamp_with_timezone/mybatis-config.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + From 907d258a7d3a8bd576ba52dff2541bae78e8ce5a Mon Sep 17 00:00:00 2001 From: Iwao AVE! Date: Wed, 9 Jan 2019 02:56:20 +0900 Subject: [PATCH 2/3] Applied the requested change. --- .../type/OffsetDateTimeTypeHandler.java | 10 +-- .../timestamp_with_timezone/CreateDB.sql | 8 +- .../timestamp_with_timezone/Mapper.java | 15 ++-- .../timestamp_with_timezone/Record.java | 26 +++++-- .../TimestampWithTimezoneTypeHandlerTest.java | 75 +++++++++++++++++++ .../mybatis-config.xml | 6 +- .../timestamp_with_timezone/Mapper.xml | 25 ------- .../OffsetDateTimeTypeHandlerTest.java | 75 ------------------- .../type/OffsetDateTimeTypeHandlerTest.java | 2 +- 9 files changed, 113 insertions(+), 129 deletions(-) rename src/test/java/org/apache/ibatis/submitted/{usesjava8 => }/timestamp_with_timezone/CreateDB.sql (81%) rename src/test/java/org/apache/ibatis/submitted/{usesjava8 => }/timestamp_with_timezone/Mapper.java (70%) rename src/test/java/org/apache/ibatis/submitted/{usesjava8 => }/timestamp_with_timezone/Record.java (68%) create mode 100644 src/test/java/org/apache/ibatis/submitted/timestamp_with_timezone/TimestampWithTimezoneTypeHandlerTest.java rename src/test/java/org/apache/ibatis/submitted/{usesjava8 => }/timestamp_with_timezone/mybatis-config.xml (87%) delete mode 100644 src/test/java/org/apache/ibatis/submitted/usesjava8/timestamp_with_timezone/Mapper.xml delete mode 100644 src/test/java/org/apache/ibatis/submitted/usesjava8/timestamp_with_timezone/OffsetDateTimeTypeHandlerTest.java diff --git a/src/main/java/org/apache/ibatis/type/OffsetDateTimeTypeHandler.java b/src/main/java/org/apache/ibatis/type/OffsetDateTimeTypeHandler.java index 04a2fd02441..3c7b8877745 100644 --- a/src/main/java/org/apache/ibatis/type/OffsetDateTimeTypeHandler.java +++ b/src/main/java/org/apache/ibatis/type/OffsetDateTimeTypeHandler.java @@ -19,10 +19,7 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; -import java.sql.Timestamp; -import java.sql.Types; import java.time.OffsetDateTime; -import java.time.ZoneId; /** * @since 3.4.5 @@ -38,18 +35,17 @@ public void setNonNullParameter(PreparedStatement ps, int i, OffsetDateTime para @Override public OffsetDateTime getNullableResult(ResultSet rs, String columnName) throws SQLException { - return (OffsetDateTime) rs.getObject(columnName); + return rs.getObject(columnName, OffsetDateTime.class); } @Override public OffsetDateTime getNullableResult(ResultSet rs, int columnIndex) throws SQLException { - return (OffsetDateTime) rs.getObject(columnIndex); + return rs.getObject(columnIndex, OffsetDateTime.class); } @Override public OffsetDateTime getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { - return (OffsetDateTime) cs.getObject(columnIndex); + return cs.getObject(columnIndex, OffsetDateTime.class); } - } diff --git a/src/test/java/org/apache/ibatis/submitted/usesjava8/timestamp_with_timezone/CreateDB.sql b/src/test/java/org/apache/ibatis/submitted/timestamp_with_timezone/CreateDB.sql similarity index 81% rename from src/test/java/org/apache/ibatis/submitted/usesjava8/timestamp_with_timezone/CreateDB.sql rename to src/test/java/org/apache/ibatis/submitted/timestamp_with_timezone/CreateDB.sql index cd073147612..6a47889b02a 100644 --- a/src/test/java/org/apache/ibatis/submitted/usesjava8/timestamp_with_timezone/CreateDB.sql +++ b/src/test/java/org/apache/ibatis/submitted/timestamp_with_timezone/CreateDB.sql @@ -17,9 +17,9 @@ drop table records if exists; create table records ( - datetime timestamp with time zone + id int, + odt timestamp with time zone ); -insert into records values ('2017-08-20 20:00:00+02:00'); -insert into records values ('2017-08-20 20:00:00-04:00'); - +insert into records (id, odt) values +(1, '2018-01-02 11:22:33.123456000+01:23'); diff --git a/src/test/java/org/apache/ibatis/submitted/usesjava8/timestamp_with_timezone/Mapper.java b/src/test/java/org/apache/ibatis/submitted/timestamp_with_timezone/Mapper.java similarity index 70% rename from src/test/java/org/apache/ibatis/submitted/usesjava8/timestamp_with_timezone/Mapper.java rename to src/test/java/org/apache/ibatis/submitted/timestamp_with_timezone/Mapper.java index eecd3148096..775f9112c9d 100644 --- a/src/test/java/org/apache/ibatis/submitted/usesjava8/timestamp_with_timezone/Mapper.java +++ b/src/test/java/org/apache/ibatis/submitted/timestamp_with_timezone/Mapper.java @@ -13,16 +13,17 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.ibatis.submitted.usesjava8.timestamp_with_timezone; - -import org.apache.ibatis.submitted.usesjava8.use_actual_param_name.*; -import java.util.List; +package org.apache.ibatis.submitted.timestamp_with_timezone; +import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Select; public interface Mapper { - - @Select("select * from records") - List selectAll(); + + @Select("select id, odt from records where id = #{id}") + Record selectById(Integer id); + + @Insert("insert into records (id, odt) values (#{id}, #{odt})") + int insertOffsetDateTime(Record record); } diff --git a/src/test/java/org/apache/ibatis/submitted/usesjava8/timestamp_with_timezone/Record.java b/src/test/java/org/apache/ibatis/submitted/timestamp_with_timezone/Record.java similarity index 68% rename from src/test/java/org/apache/ibatis/submitted/usesjava8/timestamp_with_timezone/Record.java rename to src/test/java/org/apache/ibatis/submitted/timestamp_with_timezone/Record.java index 7680ca5e12c..5f371cd1468 100644 --- a/src/test/java/org/apache/ibatis/submitted/usesjava8/timestamp_with_timezone/Record.java +++ b/src/test/java/org/apache/ibatis/submitted/timestamp_with_timezone/Record.java @@ -13,20 +13,30 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.ibatis.submitted.usesjava8.timestamp_with_timezone; +package org.apache.ibatis.submitted.timestamp_with_timezone; import java.time.OffsetDateTime; public class Record { - - private OffsetDateTime datetime; - public OffsetDateTime getDatetime() { - return datetime; + private Integer id; + + private OffsetDateTime odt; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; } - public void setDatetime(OffsetDateTime datetime) { - this.datetime = datetime; + public OffsetDateTime getOdt() { + return odt; } - + + public void setOdt(OffsetDateTime odt) { + this.odt = odt; + } + } diff --git a/src/test/java/org/apache/ibatis/submitted/timestamp_with_timezone/TimestampWithTimezoneTypeHandlerTest.java b/src/test/java/org/apache/ibatis/submitted/timestamp_with_timezone/TimestampWithTimezoneTypeHandlerTest.java new file mode 100644 index 00000000000..03ebde41084 --- /dev/null +++ b/src/test/java/org/apache/ibatis/submitted/timestamp_with_timezone/TimestampWithTimezoneTypeHandlerTest.java @@ -0,0 +1,75 @@ +/** + * Copyright 2009-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.ibatis.submitted.timestamp_with_timezone; + +import static org.junit.jupiter.api.Assertions.*; + +import java.io.Reader; +import java.time.OffsetDateTime; +import java.time.ZoneOffset; + +import org.apache.ibatis.BaseDataTest; +import org.apache.ibatis.io.Resources; +import org.apache.ibatis.session.SqlSession; +import org.apache.ibatis.session.SqlSessionFactory; +import org.apache.ibatis.session.SqlSessionFactoryBuilder; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +public class TimestampWithTimezoneTypeHandlerTest { + + private static SqlSessionFactory sqlSessionFactory; + + @BeforeAll + public static void setUp() throws Exception { + try (Reader reader = Resources + .getResourceAsReader("org/apache/ibatis/submitted/timestamp_with_timezone/mybatis-config.xml")) { + sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); + } + BaseDataTest.runScript(sqlSessionFactory.getConfiguration().getEnvironment().getDataSource(), + "org/apache/ibatis/submitted/timestamp_with_timezone/CreateDB.sql"); + } + + @Test + public void shouldSelectOffsetDateTime() { + try (SqlSession sqlSession = sqlSessionFactory.openSession()) { + Mapper mapper = sqlSession.getMapper(Mapper.class); + Record record = mapper.selectById(1); + assertEquals(OffsetDateTime.of(2018, 1, 2, 11, 22, 33, 123456000, ZoneOffset.ofHoursMinutes(1, 23)), + record.getOdt()); + } + } + + @Test + public void shouldInsertOffsetDateTime() { + OffsetDateTime odt = OffsetDateTime.of(2018, 1, 2, 11, 22, 33, 123456000, ZoneOffset.ofHoursMinutes(1, 23)); + try (SqlSession sqlSession = sqlSessionFactory.openSession()) { + Mapper mapper = sqlSession.getMapper(Mapper.class); + Record record = new Record(); + record.setId(2); + record.setOdt(odt); + int result = mapper.insertOffsetDateTime(record); + assertEquals(1, result); + sqlSession.commit(); + } + try (SqlSession sqlSession = sqlSessionFactory.openSession()) { + Mapper mapper = sqlSession.getMapper(Mapper.class); + Record record = mapper.selectById(2); + assertEquals(odt, record.getOdt()); + } + } + +} diff --git a/src/test/java/org/apache/ibatis/submitted/usesjava8/timestamp_with_timezone/mybatis-config.xml b/src/test/java/org/apache/ibatis/submitted/timestamp_with_timezone/mybatis-config.xml similarity index 87% rename from src/test/java/org/apache/ibatis/submitted/usesjava8/timestamp_with_timezone/mybatis-config.xml rename to src/test/java/org/apache/ibatis/submitted/timestamp_with_timezone/mybatis-config.xml index 759601b2e62..d70c6fb2eb0 100644 --- a/src/test/java/org/apache/ibatis/submitted/usesjava8/timestamp_with_timezone/mybatis-config.xml +++ b/src/test/java/org/apache/ibatis/submitted/timestamp_with_timezone/mybatis-config.xml @@ -29,14 +29,16 @@ - + - + diff --git a/src/test/java/org/apache/ibatis/submitted/usesjava8/timestamp_with_timezone/Mapper.xml b/src/test/java/org/apache/ibatis/submitted/usesjava8/timestamp_with_timezone/Mapper.xml deleted file mode 100644 index bac734e07c5..00000000000 --- a/src/test/java/org/apache/ibatis/submitted/usesjava8/timestamp_with_timezone/Mapper.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - diff --git a/src/test/java/org/apache/ibatis/submitted/usesjava8/timestamp_with_timezone/OffsetDateTimeTypeHandlerTest.java b/src/test/java/org/apache/ibatis/submitted/usesjava8/timestamp_with_timezone/OffsetDateTimeTypeHandlerTest.java deleted file mode 100644 index 92b778845c1..00000000000 --- a/src/test/java/org/apache/ibatis/submitted/usesjava8/timestamp_with_timezone/OffsetDateTimeTypeHandlerTest.java +++ /dev/null @@ -1,75 +0,0 @@ -/** - * Copyright 2009-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.ibatis.submitted.usesjava8.timestamp_with_timezone; - - -import java.io.Reader; -import java.sql.Connection; -import java.util.List; - -import org.apache.ibatis.io.Resources; -import org.apache.ibatis.jdbc.ScriptRunner; -import org.apache.ibatis.session.SqlSession; -import org.apache.ibatis.session.SqlSessionFactory; -import org.apache.ibatis.session.SqlSessionFactoryBuilder; -import org.apache.ibatis.submitted.usesjava8.use_actual_param_name.User; -import org.junit.Assert; -import static org.junit.Assert.assertNotNull; -import org.junit.BeforeClass; -import org.junit.Test; - -public class OffsetDateTimeTypeHandlerTest { - - private static SqlSessionFactory sqlSessionFactory; - - @BeforeClass - public static void setUp() throws Exception { - // create an SqlSessionFactory - Reader reader = Resources.getResourceAsReader( - "org/apache/ibatis/submitted/usesjava8/timestamp_with_timezone/mybatis-config.xml"); - sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); - reader.close(); - - // populate in-memory database - SqlSession session = sqlSessionFactory.openSession(); - Connection conn = session.getConnection(); - reader = Resources.getResourceAsReader( - "org/apache/ibatis/submitted/usesjava8/timestamp_with_timezone/CreateDB.sql"); - ScriptRunner runner = new ScriptRunner(conn); - runner.setLogWriter(null); - runner.runScript(reader); - conn.close(); - reader.close(); - session.close(); - } - - @Test - public void shouldPreserveDateTimeWithOffset() { - SqlSession sqlSession = sqlSessionFactory.openSession(); - try { - Mapper mapper = sqlSession.getMapper(Mapper.class); - List records = mapper.selectAll(); - - for (Record record : records) { - System.out.println(record.getDatetime()); - } - - } finally { - sqlSession.close(); - } - } - -} diff --git a/src/test/java/org/apache/ibatis/type/OffsetDateTimeTypeHandlerTest.java b/src/test/java/org/apache/ibatis/type/OffsetDateTimeTypeHandlerTest.java index d8f0c6530c0..86d437f7940 100644 --- a/src/test/java/org/apache/ibatis/type/OffsetDateTimeTypeHandlerTest.java +++ b/src/test/java/org/apache/ibatis/type/OffsetDateTimeTypeHandlerTest.java @@ -33,7 +33,7 @@ public class OffsetDateTimeTypeHandlerTest extends BaseTypeHandlerTest { @Test public void shouldSetParameter() throws Exception { TYPE_HANDLER.setParameter(ps, 1, OFFSET_DATE_TIME, null); - verify(ps).setTimestamp(1, TIMESTAMP); + verify(ps).setObject(1, OFFSET_DATE_TIME); } @Override From ffcae5db9273f4af55ba32d94ca91fbb0c6c94a0 Mon Sep 17 00:00:00 2001 From: Iwao AVE! Date: Wed, 9 Jan 2019 04:27:36 +0900 Subject: [PATCH 3/3] Forgot to update some tests. --- .../type/OffsetDateTimeTypeHandlerTest.java | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/test/java/org/apache/ibatis/type/OffsetDateTimeTypeHandlerTest.java b/src/test/java/org/apache/ibatis/type/OffsetDateTimeTypeHandlerTest.java index 86d437f7940..4e1d6c777d7 100644 --- a/src/test/java/org/apache/ibatis/type/OffsetDateTimeTypeHandlerTest.java +++ b/src/test/java/org/apache/ibatis/type/OffsetDateTimeTypeHandlerTest.java @@ -18,7 +18,6 @@ import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.*; -import java.sql.Timestamp; import java.time.OffsetDateTime; import org.junit.jupiter.api.Test; @@ -27,7 +26,6 @@ public class OffsetDateTimeTypeHandlerTest extends BaseTypeHandlerTest { private static final TypeHandler TYPE_HANDLER = new OffsetDateTimeTypeHandler(); private static final OffsetDateTime OFFSET_DATE_TIME = OffsetDateTime.now(); - private static final Timestamp TIMESTAMP = Timestamp.from(OFFSET_DATE_TIME.toInstant()); @Override @Test @@ -39,7 +37,7 @@ public void shouldSetParameter() throws Exception { @Override @Test public void shouldGetResultFromResultSetByName() throws Exception { - when(rs.getTimestamp("column")).thenReturn(TIMESTAMP); + when(rs.getObject("column", OffsetDateTime.class)).thenReturn(OFFSET_DATE_TIME); assertEquals(OFFSET_DATE_TIME, TYPE_HANDLER.getResult(rs, "column")); verify(rs, never()).wasNull(); } @@ -47,7 +45,7 @@ public void shouldGetResultFromResultSetByName() throws Exception { @Override @Test public void shouldGetResultNullFromResultSetByName() throws Exception { - when(rs.getTimestamp("column")).thenReturn(null); + when(rs.getObject("column", OffsetDateTime.class)).thenReturn(null); assertNull(TYPE_HANDLER.getResult(rs, "column")); verify(rs, never()).wasNull(); } @@ -55,7 +53,7 @@ public void shouldGetResultNullFromResultSetByName() throws Exception { @Override @Test public void shouldGetResultFromResultSetByPosition() throws Exception { - when(rs.getTimestamp(1)).thenReturn(TIMESTAMP); + when(rs.getObject(1, OffsetDateTime.class)).thenReturn(OFFSET_DATE_TIME); assertEquals(OFFSET_DATE_TIME, TYPE_HANDLER.getResult(rs, 1)); verify(rs, never()).wasNull(); } @@ -63,7 +61,7 @@ public void shouldGetResultFromResultSetByPosition() throws Exception { @Override @Test public void shouldGetResultNullFromResultSetByPosition() throws Exception { - when(rs.getTimestamp(1)).thenReturn(null); + when(rs.getObject(1, OffsetDateTime.class)).thenReturn(null); assertNull(TYPE_HANDLER.getResult(rs, 1)); verify(rs, never()).wasNull(); } @@ -71,7 +69,7 @@ public void shouldGetResultNullFromResultSetByPosition() throws Exception { @Override @Test public void shouldGetResultFromCallableStatement() throws Exception { - when(cs.getTimestamp(1)).thenReturn(TIMESTAMP); + when(cs.getObject(1, OffsetDateTime.class)).thenReturn(OFFSET_DATE_TIME); assertEquals(OFFSET_DATE_TIME, TYPE_HANDLER.getResult(cs, 1)); verify(cs, never()).wasNull(); } @@ -79,8 +77,9 @@ public void shouldGetResultFromCallableStatement() throws Exception { @Override @Test public void shouldGetResultNullFromCallableStatement() throws Exception { - when(cs.getTimestamp(1)).thenReturn(null); + when(cs.getObject(1, OffsetDateTime.class)).thenReturn(null); assertNull(TYPE_HANDLER.getResult(cs, 1)); verify(cs, never()).wasNull(); } + }