/*
* Copyright 2004-2015 the Seasar Foundation and the Others.
*
* 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.seasar.extension.jdbc.it.sql;
import java.math.BigDecimal;
import java.sql.Time;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import javax.persistence.EntityExistsException;
import org.junit.runner.RunWith;
import org.seasar.extension.jdbc.JdbcManager;
import org.seasar.extension.jdbc.it.entity.Tense;
import org.seasar.framework.unit.Seasar2;
import static org.junit.Assert.*;
import static org.seasar.extension.jdbc.parameter.Parameter.*;
/**
* @author taedium
*
*/
@RunWith(Seasar2.class)
public class SqlUpdateTest {
private JdbcManager jdbcManager;
/**
*
* @throws Exception
*/
public void testParameter_none() throws Exception {
String sql = "DELETE FROM EMPLOYEE";
int actual = jdbcManager.updateBySql(sql).execute();
assertEquals(14, actual);
}
/**
*
* @throws Exception
*/
public void testParameter() throws Exception {
String sql =
"DELETE FROM EMPLOYEE WHERE DEPARTMENT_ID = ? AND SALARY > ?";
int actual =
jdbcManager.updateBySql(sql, int.class, BigDecimal.class).params(
3,
new BigDecimal(1000)).execute();
assertEquals(5, actual);
}
/**
*
* @throws Exception
*/
public void testEntityExistsException_insert() throws Exception {
String sql =
"INSERT INTO DEPARTMENT (DEPARTMENT_ID, DEPARTMENT_NO) VALUES(?, ?)";
try {
jdbcManager
.updateBySql(sql, int.class, int.class)
.params(1, 50)
.execute();
fail();
} catch (EntityExistsException e) {
}
}
/**
*
* @throws Exception
*/
public void testEntityExistsException_update() throws Exception {
jdbcManager
.updateBySql(
"INSERT INTO DEPARTMENT (DEPARTMENT_ID, DEPARTMENT_NO) VALUES (99, 99)")
.execute();
String sql =
"UPDATE DEPARTMENT SET DEPARTMENT_ID = ? WHERE DEPARTMENT_ID = ?";
try {
jdbcManager
.updateBySql(sql, int.class, int.class)
.params(1, 99)
.execute();
fail();
} catch (EntityExistsException e) {
}
}
/**
*
* @throws Exception
*/
public void testTemporalType() throws Exception {
String sql =
"UPDATE TENSE SET DATE_DATE = ?, DATE_TIME = ?, DATE_TIMESTAMP = ?, CAL_DATE = ?, CAL_TIME = ?, CAL_TIMESTAMP = ?, SQL_DATE = ?, SQL_TIME = ?, SQL_TIMESTAMP = ? WHERE ID = ?";
long date =
new SimpleDateFormat("yyyy-MM-dd").parse("2005-03-14").getTime();
long time =
new SimpleDateFormat("HH:mm:ss").parse("13:11:10").getTime();
long timestamp =
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(
"2005-03-14 13:11:10").getTime();
Calendar calDate = Calendar.getInstance();
calDate.setTimeInMillis(date);
Calendar calTime = Calendar.getInstance();
calTime.setTimeInMillis(time);
Calendar calTimestamp = Calendar.getInstance();
calTimestamp.setTimeInMillis(timestamp);
jdbcManager.updateBySql(
sql,
Date.class,
Date.class,
Date.class,
Calendar.class,
Calendar.class,
Calendar.class,
java.sql.Date.class,
Time.class,
Timestamp.class,
int.class).params(
date(new Date(date)),
time(new Date(time)),
timestamp(new Date(timestamp)),
calDate,
calTime,
calTimestamp,
new java.sql.Date(date),
new Time(time),
new Timestamp(timestamp),
1).execute();
Tense tense =
jdbcManager
.selectBySql(
Tense.class,
"SELECT DATE_DATE, DATE_TIME, DATE_TIMESTAMP, CAL_DATE, CAL_TIME, CAL_TIMESTAMP, SQL_DATE, SQL_TIME, SQL_TIMESTAMP FROM TENSE WHERE ID = 1")
.getSingleResult();
assertEquals(date, tense.calDate.getTimeInMillis());
assertEquals(date, tense.dateDate.getTime());
assertEquals(date, tense.sqlDate.getTime());
assertEquals(time, tense.calTime.getTimeInMillis());
assertEquals(time, tense.dateTime.getTime());
assertEquals(time, tense.sqlTime.getTime());
assertEquals(timestamp, tense.calTimestamp.getTimeInMillis());
assertEquals(timestamp, tense.dateTimestamp.getTime());
assertEquals(timestamp, tense.sqlTimestamp.getTime());
}
}