/*! ******************************************************************************
*
* Pentaho Data Integration
*
* Copyright (C) 2002-2016 by Pentaho : http://www.pentaho.com
*
*******************************************************************************
*
* 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.pentaho.di.core.database;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import org.junit.Test;
import org.mockito.Mockito;
import org.pentaho.di.core.row.value.ValueMetaDate;
import org.pentaho.di.core.row.value.ValueMetaString;
import org.pentaho.di.core.row.value.ValueMetaTimestamp;
public class Vertica5DatabaseMetaTest extends VerticaDatabaseMetaTest {
@Test
public void testOverridesToVerticaDatabaseMeta() throws Exception {
Vertica5DatabaseMeta nativeMeta = new Vertica5DatabaseMeta();
nativeMeta.setAccessType( DatabaseMeta.TYPE_ACCESS_NATIVE );
Vertica5DatabaseMeta odbcMeta = new Vertica5DatabaseMeta();
odbcMeta.setAccessType( DatabaseMeta.TYPE_ACCESS_ODBC );
assertEquals( "com.vertica.jdbc.Driver", nativeMeta.getDriverClass() );
assertEquals( "sun.jdbc.odbc.JdbcOdbcDriver", odbcMeta.getDriverClass() );
assertFalse( nativeMeta.supportsTimeStampToDateConversion() );
ResultSet resultSet = Mockito.mock( ResultSet.class );
ResultSetMetaData metaData = Mockito.mock( ResultSetMetaData.class );
Mockito.when( resultSet.getMetaData() ).thenReturn( metaData );
Mockito.when( resultSet.getTimestamp( 1 ) ).thenReturn( new java.sql.Timestamp( 65535 ) );
Mockito.when( resultSet.getTime( 2 ) ).thenReturn( new java.sql.Time( 1000 ) );
Mockito.when( resultSet.getDate( 3 ) ).thenReturn( new java.sql.Date( ( 65535 * 2 ) ) );
ValueMetaTimestamp ts = new ValueMetaTimestamp( "FOO" );
ts.setOriginalColumnType( java.sql.Types.TIMESTAMP );
ValueMetaDate tm = new ValueMetaDate( "BAR" );
tm.setOriginalColumnType( java.sql.Types.TIME );
ValueMetaDate dt = new ValueMetaDate( "WIBBLE" );
dt.setOriginalColumnType( java.sql.Types.DATE );
Object rtn = null;
rtn = nativeMeta.getValueFromResultSet( resultSet, ts, 0 );
assertNotNull( rtn );
assertEquals( "java.sql.Timestamp", rtn.getClass().getName() );
rtn = nativeMeta.getValueFromResultSet( resultSet, tm, 1 );
assertNotNull( rtn );
assertEquals( "java.sql.Time", rtn.getClass().getName() );
rtn = nativeMeta.getValueFromResultSet( resultSet, dt, 2 );
assertNotNull( rtn );
assertEquals( "java.sql.Date", rtn.getClass().getName() );
Mockito.when( resultSet.wasNull() ).thenReturn( true );
rtn = nativeMeta.getValueFromResultSet( resultSet, new ValueMetaString( "WOBBLE" ), 3 );
assertNull( rtn );
// Verify that getDate, getTime, and getTimestamp were respectively called once
Mockito.verify( resultSet, Mockito.times( 1 ) ).getDate( Mockito.anyInt() );
Mockito.verify( resultSet, Mockito.times( 1 ) ).getTime( Mockito.anyInt() );
Mockito.verify( resultSet, Mockito.times( 1 ) ).getTimestamp( Mockito.anyInt() );
}
}