/** * Default constructor. */ public PGBulkLoaderData() { super(); db = null; // Let's use ISO 8601 format. This in unambiguous with PostgreSQL dateMeta = new ValueMetaDate( "date" ); dateMeta.setConversionMask( "yyyy-MM-dd" ); dateTimeMeta = new ValueMetaDate( "date" ); // Let's keep milliseconds. Didn't find a way to keep microseconds (max resolution with PG) dateTimeMeta.setConversionMask( "yyyy-MM-dd HH:mm:ss.SSS" ); } }
@Override public Object convertDataUsingConversionMetaData( Object data2 ) throws KettleValueException { if ( conversionMetadata == null ) { throw new KettleValueException( "API coding error: please specify the conversion metadata before attempting to convert value " + name ); } return super.convertDataUsingConversionMetaData( data2 ); }
@Override public Object getNativeDataType( Object object ) throws KettleValueException { return getDate( object ); }
private RowMeta getInputRowMeta2() { RowMeta inputRowMeta = new RowMeta(); ValueMetaDate vmd1 = new ValueMetaDate( "value1" ); vmd1.setConversionMask( "yyyyMMdd" ); inputRowMeta.addValueMeta( vmd1 ); ValueMetaDate vmd2 = new ValueMetaDate( "value2" ); vmd2.setConversionMask( "yyyy/MM/dd HH:mm:ss.SSS" ); inputRowMeta.addValueMeta( vmd2 ); ValueMetaDate vmd3 = new ValueMetaDate( "value3" ); vmd3.setConversionMask( "yyyyMMdd" ); inputRowMeta.addValueMeta( vmd3 ); ValueMetaDate vmd4 = new ValueMetaDate( "value4" ); vmd4.setConversionMask( "yyyy/MM/dd HH:mm:ss.SSS" ); inputRowMeta.addValueMeta( vmd4 ); return inputRowMeta; }
@Test public void getFieldsWithSubject_WithFormat() { ValueMetaDate valueMeta = new ValueMetaDate(); valueMeta.setConversionMask( "yyyy-MM-dd" ); valueMeta.setName( "date" ); doReturn( valueMeta ).when( rowMeta ).searchValueMeta( "date" ); groupByMeta.setSubjectField( new String[] { "date" } ); groupByMeta.setGroupField( new String[] {} ); groupByMeta.setAggregateField( new String[] { "maxDate" } ); groupByMeta.setAggregateType( new int[] { TYPE_GROUP_MAX } ); groupByMeta.getFields( rowMeta, "Group by", mockInfo, mockNextStep, mockSpace, null, mockIMetaStore ); verify( rowMeta, times( 1 ) ).clear(); verify( rowMeta, times( 1 ) ).addRowMeta( any() ); assertEquals( "yyyy-MM-dd", rowMeta.searchValueMeta( "maxDate" ).getConversionMask() ); }
@Test public void getFieldsWithoutSubject() { ValueMetaDate valueMeta = new ValueMetaDate(); valueMeta.setName( "date" ); doReturn( valueMeta ).when( rowMeta ).searchValueMeta( "date" ); memoryGroupByMeta.setSubjectField( new String[] { null } ); memoryGroupByMeta.setGroupField( new String[] { "date" } ); memoryGroupByMeta.setAggregateField( new String[] { "countDate" } ); memoryGroupByMeta.setAggregateType( new int[] { TYPE_GROUP_COUNT_ANY } ); memoryGroupByMeta.getFields( rowMeta, "Group by", mockInfo, mockNextStep, mockSpace, null, mockIMetaStore ); verify( rowMeta, times( 1 ) ).clear(); verify( rowMeta, times( 1 ) ).addRowMeta( any() ); assertNotNull( rowMeta.searchValueMeta( "countDate" ) ); } }
doReturn( new Object[] { new Timestamp( System.currentTimeMillis() ) } ).when( db ).getLookup( any( PreparedStatement.class ) ); returnRowMeta.addValueMeta( new ValueMetaDate( "TimeStamp" ) ); doReturn( returnRowMeta ).when( db ).getReturnRowMeta(); storageMetadata.setConversionMask( "yyyy-MM-dd" ); ValueMetaDate valueMeta = new ValueMetaDate( "Date" ); valueMeta.setStorageType( ValueMetaInterface.STORAGE_TYPE_BINARY_STRING ); valueMeta.setStorageMetadata( storageMetadata );
@Override public ValueMetaInterface getMetadataPreview( DatabaseMeta databaseMeta, ResultSet rs ) throws KettleDatabaseException { try { if ( java.sql.Types.TIMESTAMP == rs.getInt( "COLUMN_TYPE" ) ) { ValueMetaInterface vmi = super.getMetadataPreview( databaseMeta, rs ); ValueMetaInterface valueMeta; if ( databaseMeta.supportsTimestampDataType() ) { valueMeta = new ValueMetaTimestamp( name ); } else { valueMeta = new ValueMetaDate( name ); } valueMeta.setLength( vmi.getLength() ); valueMeta.setOriginalColumnType( vmi.getOriginalColumnType() ); valueMeta.setOriginalColumnTypeName( vmi.getOriginalColumnTypeName() ); valueMeta.setOriginalNullable( vmi.getOriginalNullable() ); valueMeta.setOriginalPrecision( vmi.getOriginalPrecision() ); valueMeta.setOriginalScale( vmi.getOriginalScale() ); valueMeta.setOriginalSigned( vmi.getOriginalSigned() ); return valueMeta; } } catch ( SQLException e ) { throw new KettleDatabaseException( e ); } return null; }
@Override public String getFormatMask() { return getDateFormatMask(); } }
@Override public ValueMetaInterface getMetadataPreview( DatabaseMeta databaseMeta, ResultSet rs ) throws KettleDatabaseException { try { if ( "INET".equalsIgnoreCase( rs.getString( "TYPE_NAME" ) ) ) { ValueMetaInterface vmi = super.getMetadataPreview( databaseMeta, rs ); ValueMetaInterface valueMeta = new ValueMetaInternetAddress( name ); valueMeta.setLength( vmi.getLength() ); valueMeta.setOriginalColumnType( vmi.getOriginalColumnType() ); valueMeta.setOriginalColumnTypeName( vmi.getOriginalColumnTypeName() ); valueMeta.setOriginalNullable( vmi.getOriginalNullable() ); valueMeta.setOriginalPrecision( vmi.getOriginalPrecision() ); valueMeta.setOriginalScale( vmi.getOriginalScale() ); valueMeta.setOriginalSigned( vmi.getOriginalSigned() ); return valueMeta; } } catch ( SQLException e ) { throw new KettleDatabaseException( e ); } return null; }
@Test public void getFieldsWithoutSubject() { ValueMetaDate valueMeta = new ValueMetaDate(); valueMeta.setName( "date" ); doReturn( valueMeta ).when( rowMeta ).searchValueMeta( "date" ); groupByMeta.setSubjectField( new String[] { null } ); groupByMeta.setGroupField( new String[] { "date" } ); groupByMeta.setAggregateField( new String[] { "countDate" } ); groupByMeta.setAggregateType( new int[] { TYPE_GROUP_COUNT_ANY } ); groupByMeta.getFields( rowMeta, "Group by", mockInfo, mockNextStep, mockSpace, null, mockIMetaStore ); verify( rowMeta, times( 1 ) ).clear(); verify( rowMeta, times( 1 ) ).addRowMeta( any() ); assertNotNull( rowMeta.searchValueMeta( "countDate" ) ); } }
@Test public void getFieldsWithSubject_WithFormat() { ValueMetaDate valueMeta = new ValueMetaDate(); valueMeta.setConversionMask( "yyyy-MM-dd" ); valueMeta.setName( "date" ); doReturn( valueMeta ).when( rowMeta ).searchValueMeta( "date" ); memoryGroupByMeta.setSubjectField( new String[] { "date" } ); memoryGroupByMeta.setGroupField( new String[] {} ); memoryGroupByMeta.setAggregateField( new String[] { "maxDate" } ); memoryGroupByMeta.setAggregateType( new int[] { TYPE_GROUP_MAX } ); memoryGroupByMeta.getFields( rowMeta, "Memory Group by", mockInfo, mockNextStep, mockSpace, null, mockIMetaStore ); verify( rowMeta, times( 1 ) ).clear(); verify( rowMeta, times( 1 ) ).addRowMeta( any() ); assertEquals( "yyyy-MM-dd", rowMeta.searchValueMeta( "maxDate" ).getConversionMask() ); }
doReturn( new Object[] { new Timestamp( System.currentTimeMillis() ) } ).when( db ).getLookup( any( PreparedStatement.class ) ); returnRowMeta.addValueMeta( new ValueMetaDate( "TimeStamp" ) ); doReturn( returnRowMeta ).when( db ).getReturnRowMeta(); storageMetadata.setConversionMask( "yyyy-MM-dd" ); ValueMetaDate valueMeta = new ValueMetaDate( "Date" ); valueMeta.setStorageType( ValueMetaInterface.STORAGE_TYPE_BINARY_STRING ); valueMeta.setStorageMetadata( storageMetadata );
/** * Get the metadata used for conversion to date format See related PDI-4019 * * @param mask * @return */ private ValueMetaInterface getConversionMeta( String mask ) { ValueMetaInterface meta = null; if ( !Utils.isEmpty( mask ) ) { meta = conversionMetaCache.get( mask ); if ( meta == null ) { meta = new ValueMetaDate(); meta.setConversionMask( mask ); conversionMetaCache.put( mask, meta ); } } return meta; }
@Test public void getFieldsWithSubject_NoFormat() { ValueMetaDate valueMeta = new ValueMetaDate(); valueMeta.setName( "date" ); doReturn( valueMeta ).when( rowMeta ).searchValueMeta( "date" ); groupByMeta.setSubjectField( new String[] { "date" } ); groupByMeta.setGroupField( new String[] {} ); groupByMeta.setAggregateField( new String[] { "minDate" } ); groupByMeta.setAggregateType( new int[] { TYPE_GROUP_MIN } ); groupByMeta.getFields( rowMeta, "Group by", mockInfo, mockNextStep, mockSpace, null, mockIMetaStore ); verify( rowMeta, times( 1 ) ).clear(); verify( rowMeta, times( 1 ) ).addRowMeta( any() ); assertEquals( null, rowMeta.searchValueMeta( "minDate" ).getConversionMask() ); }
public ExcelInputData() { super(); workbook = null; filenr = 0; sheetnr = 0; rownr = -1; colnr = -1; valueMetaString = new ValueMetaString( "v" ); valueMetaNumber = new ValueMetaNumber( "v" ); valueMetaDate = new ValueMetaDate( "v" ); valueMetaBoolean = new ValueMetaBoolean( "v" ); } }
@Test public void getFieldsWithSubject_NoFormat() { ValueMetaDate valueMeta = new ValueMetaDate(); valueMeta.setName( "date" ); doReturn( valueMeta ).when( rowMeta ).searchValueMeta( "date" ); memoryGroupByMeta.setSubjectField( new String[] { "date" } ); memoryGroupByMeta.setGroupField( new String[] {} ); memoryGroupByMeta.setAggregateField( new String[] { "minDate" } ); memoryGroupByMeta.setAggregateType( new int[] { TYPE_GROUP_MIN } ); memoryGroupByMeta.getFields( rowMeta, "Group by", mockInfo, mockNextStep, mockSpace, null, mockIMetaStore ); verify( rowMeta, times( 1 ) ).clear(); verify( rowMeta, times( 1 ) ).addRowMeta( any() ); assertEquals( null, rowMeta.searchValueMeta( "minDate" ).getConversionMask() ); }
private static void populateMetaAndData( int i, Object[] rowString10, RowMetaInterface metaString10, Object[] rowMixed10, RowMetaInterface metaMixed10 ) { rowString10[i] = StringUtil.generateRandomString( 20, "", "", false ); ValueMetaInterface meta = new ValueMetaString( "String" + ( i + 1 ), 20, 0 ); metaString10.addValueMeta( meta ); rowMixed10[i * 5 + 0] = StringUtil.generateRandomString( 20, "", "", false ); ValueMetaInterface meta0 = new ValueMetaString( "String" + ( i * 5 + 1 ), 20, 0 ); metaMixed10.addValueMeta( meta0 ); rowMixed10[i * 5 + 1] = new Date(); ValueMetaInterface meta1 = new ValueMetaDate( "String" + ( i * 5 + 1 ) ); metaMixed10.addValueMeta( meta1 ); rowMixed10[i * 5 + 2] = new Double( Math.random() * 1000000 ); ValueMetaInterface meta2 = new ValueMetaNumber( "String" + ( i * 5 + 1 ), 12, 4 ); metaMixed10.addValueMeta( meta2 ); rowMixed10[i * 5 + 3] = new Long( (long) ( Math.random() * 1000000 ) ); ValueMetaInterface meta3 = new ValueMetaInteger( "String" + ( i * 5 + 1 ), 8, 0 ); metaMixed10.addValueMeta( meta3 ); rowMixed10[i * 5 + 4] = Boolean.valueOf( Math.random() > 0.5 ? true : false ); ValueMetaInterface meta4 = new ValueMetaBoolean( "String" + ( i * 5 + 1 ) ); metaMixed10.addValueMeta( meta4 ); }
valueMeta = new ValueMetaString(); } else if ( type.equals( "Date" ) ) { valueMeta = new ValueMetaDate(); } else if ( type.equals( "Boolean" ) ) { valueMeta = new ValueMetaBoolean();
@Before public void setup() throws KettlePluginException { rowMeta = spy( new RowMeta() ); groupByMeta = spy( new GroupByMeta() ); mockStatic( ValueMetaFactory.class ); when( ValueMetaFactory.createValueMeta( anyInt() ) ).thenCallRealMethod(); when( ValueMetaFactory.createValueMeta( anyString(), anyInt() ) ).thenCallRealMethod(); when( ValueMetaFactory.createValueMeta( "maxDate", 3, -1, -1 ) ).thenReturn( new ValueMetaDate( "maxDate" ) ); when( ValueMetaFactory.createValueMeta( "minDate", 3, -1, -1 ) ).thenReturn( new ValueMetaDate( "minDate" ) ); when( ValueMetaFactory.createValueMeta( "countDate", 5, -1, -1 ) ).thenReturn( new ValueMetaInteger( "countDate" ) ); when( ValueMetaFactory.getValueMetaName( 3 ) ).thenReturn( "Date" ); when( ValueMetaFactory.getValueMetaName( 5 ) ).thenReturn( "Integer" ); }