/*
* Copyright 2013 Sylvain LAURENT
*
* 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 ch.sla.jdbcperflogger.logger;
import java.sql.Timestamp;
import java.sql.Types;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.junit.Assert;
import org.junit.Test;
import ch.sla.jdbcperflogger.DatabaseType;
import ch.sla.jdbcperflogger.model.PreparedStatementValuesHolder;
import ch.sla.jdbcperflogger.model.SqlTypedValue;
public class PerfLoggerTest {
@Test
public void testfillParameters() throws Exception {
final PreparedStatementValuesHolder valHolder = new PreparedStatementValuesHolder();
String filledSql;
valHolder.put(1, new SqlTypedValue("toto$", Types.VARCHAR));
filledSql = PerfLogger.fillParameters("select * from toto where name = ?", valHolder, DatabaseType.ORACLE);
Assert.assertEquals("select * from toto where name = 'toto$' /*VARCHAR*/", filledSql);
valHolder.put(2, new SqlTypedValue(36, Types.INTEGER));
filledSql = PerfLogger.fillParameters("select * from toto where name = ? and age < ?", valHolder,
DatabaseType.ORACLE);
Assert.assertEquals("select * from toto where name = 'toto$' /*VARCHAR*/ and age < 36 /*INTEGER*/", filledSql);
valHolder.put(1, new SqlTypedValue(null, Types.VARCHAR));
filledSql = PerfLogger.fillParameters("select * from toto where name = ?", valHolder, DatabaseType.ORACLE);
Assert.assertEquals("select * from toto where name = NULL /*VARCHAR*/", filledSql);
valHolder.put(1, new SqlTypedValue(null, Types.DATE));
filledSql = PerfLogger.fillParameters("select * from toto where param = ?", valHolder, DatabaseType.ORACLE);
Assert.assertEquals("select * from toto where param = NULL /*DATE*/", filledSql);
valHolder.put(1, new SqlTypedValue(java.sql.Date.valueOf("2013-03-04"), Types.DATE));
filledSql = PerfLogger.fillParameters("select * from toto where param = ?", valHolder, DatabaseType.ORACLE);
Assert.assertEquals("select * from toto where param = date'2013-03-04' /*DATE*/", filledSql);
final String dateStr = "2011-07-15T13:45:56.123";
final Date utilDate = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS").parse(dateStr);
valHolder.put(1, new SqlTypedValue(utilDate, Types.DATE));
filledSql = PerfLogger.fillParameters("select * from toto where param = ?", valHolder, DatabaseType.ORACLE);
Assert.assertEquals(
"select * from toto where param = cast(timestamp'2011-07-15 13:45:56.123' as DATE) /*DATE (non pure)*/",
filledSql);
final Timestamp tstamp = Timestamp.valueOf("2011-07-15 13:45:56.123");
valHolder.put(1, new SqlTypedValue(tstamp, Types.TIMESTAMP));
filledSql = PerfLogger.fillParameters("select * from toto where param = ?", valHolder, DatabaseType.ORACLE);
Assert.assertEquals("select * from toto where param = timestamp'" + tstamp + "' /*TIMESTAMP*/", filledSql);
valHolder.put(1, new SqlTypedValue(new Object(), Types.CLOB));
filledSql = PerfLogger.fillParameters("select * from toto where param = ?", valHolder, DatabaseType.ORACLE);
Assert.assertEquals("select * from toto where param = ? /*CLOB*/", filledSql);
}
@Test
public void testgetValueAsString_string() {
String val;
val = PerfLogger.getValueAsString(new SqlTypedValue("toto", Types.VARCHAR), DatabaseType.ORACLE);
Assert.assertEquals("'toto' /*VARCHAR*/", val);
val = PerfLogger.getValueAsString(new SqlTypedValue("hel'lo", Types.VARCHAR), DatabaseType.ORACLE);
Assert.assertEquals("'hel''lo' /*VARCHAR*/", val);
val = PerfLogger.getValueAsString(new SqlTypedValue("java's cool, it''s", Types.VARCHAR), DatabaseType.ORACLE);
Assert.assertEquals("'java''s cool, it''''s' /*VARCHAR*/", val);
}
}