DataPipeline 10.1 includes new methods for working with arrays, collections, and filters. It adds Excel support for styling, hyperlinks, and configurable formula error handling. It improves data type detection and adds JDBC-backed dataset caching. It also adds DDL and DML code generation for the H2 Database. As well as new S3 operations.
ArrayValue
New methods added to ArrayValue class:
addAll(Collection<?> collection)– Add all elements from a collection to the arrayforEachRecord(Consumer<Record> action)– Iterate over record elementsforEachArrayValue(Consumer<ArrayValue> action)– Iterate over array value elementsforEachSingleValue(Consumer<SingleValue> action)– Iterate over single value elementsfindFirst(Predicate<ValueNode<?>> predicate, int fromIndex)– Find first matching elementfindLast(Predicate<ValueNode<?>> predicate, int fromIndex)– Find last matching elementfindAll(Predicate<ValueNode<?>> predicate)– Find all matching elementscount(Predicate<ValueNode<?>> predicate)– Count matching elementssort()– Sort array elementssort(Comparator<ValueNode<?>> comparator)– Sort array elements with custom comparator- Related examples:
Async Processing
AsyncReader.exceptionandAsyncWriter.exceptionare now volatile to ensure the latest values are always seen- BUGFIX:
AsyncWriter‘s superclose()is now called inside the overriddenclose()instead of eagerly when async writing completes. This was causingAsyncWriterto appear closed after processing, but beforeclose()was explicitly called - Related examples:
FieldPath
FieldPathnow supports array wildcard expressions and returning arrays- Added
Record.getFieldValue(FieldPath fieldPath, T defaultValue)– Get field value with default fallback
RecordList
New methods added to RecordList:
getValuesAsArray(String fieldPath, boolean includeNulls, boolean flattenArrayValues)– Extract values as array using string pathgetValuesAsArray(FieldPath fieldPath, boolean includeNulls, boolean flattenArrayValues)– Extract values as array using FieldPathcount(Filter filter)– Count records matching a filter- Related examples:
Sorting and Comparison
- Added
ValueNodeComparatorto support sorting and comparing records, arrays, and single values - Related examples:
Excel
Failed Expression Handling
- Added
ExcelReader.FailedExpressionStrategyenum to control how failed formula evaluations are handled (default:FAIL)FAIL– Throw exception when cell formula/expression evaluation fails (causes pipeline/job to abort)SET_CACHED_VALUE– Use the last value cached in the Excel spreadsheet when evaluation failsSET_EXPRESSION– Use the formula/expression as the field’s value when evaluation failsSET_NULL– Usenullas the field’s value when evaluation failsSET_EXCEPTION_MESSAGE– Use the failure’s exception message as the field’s value
- Added
ExcelReader.setFailedExpressionStrategy(FailedExpressionStrategy)to configure the strategy - Added
ExcelReader.getFailedExpressionStrategy()to retrieve the current strategy
Hyperlink Support
- Added
ExcelHyperlinkto model hyperlinks pointing to:- Another cell in the same workbook (
forCell(sheetName, columnIndex, rowIndex)) - URLs, email addresses, files, and document locations
- Another cell in the same workbook (
- Added
ExcelHyperlinkTypeenum to define hyperlink types (DOCUMENT, URL, EMAIL, FILE, NONE) - Added
ExcelHyperlinkFunctioninterface to createExcelHyperlinkinstances dynamically based onFieldLocation - Added
ExcelFieldMetadatato attach Excel-specific metadata to a Field, including anExcelHyperlinkvia session properties - Added
ExcelReader.readMetadataflag to enable the reading of hyperlinks (default: false) - Added
ExcelWriter.writeMetadataflag to enable the writing of hyperlinks (default: false) - Related examples:
Styling Support
New Excel styling classes for applying custom styles to cells:
- Added
ExcelCellStylefor defining cell styles - Added
ExcelCellStyleDecoratorfor applying styles to cells - Added
ExcelColorfor color management - Added
ExcelColorPalettefor color palette operations - Added
ExcelFontfor font styling - Added
FieldLocationandFieldLocationPredicatefor field location-based operations, starting with Excel styling - Added
ExcelWritermethods for applying hyperlinks and cell styles:addHeaderHyperlink(FieldLocationPredicate, ExcelHyperlinkFunction)– Add hyperlinks to header cellsaddHeaderCellStyle(FieldLocationPredicate, ExcelCellStyleDecorator)– Apply styles to header cellsaddDataHyperlink(FieldLocationPredicate, ExcelHyperlinkFunction)– Add hyperlinks to data cellsaddDataCellStyle(FieldLocationPredicate, ExcelCellStyleDecorator)– Apply styles to data cells
- Related examples:
Freeze Panes
- Added
ExcelWriter.freezeRows– the number of rows to freeze, starting from the top - Added
ExcelWriter.freezeColumns– the number of columns to freeze, starting from the left - Related examples:
Filtering
- Added
IsEmptyfilter – returns true if field value is null, field is an empty array, or string value is empty or contains only white space characters - Added
IsNotEmpty– returns true if!IsEmpty - Added
FieldFilter.isEmpty()andisNotEmpty()– convenience methods - Added
Filter.of(Predicate<Record> predicate)– create filters using Java closures - Related examples:
Grouping
- Added
GroupCollectto add values from selected field in grouped records into anArrayValue - Added overloaded
GroupByReader.collect()methods - Related examples:
JSON Processing
New BigInteger support for JSON readers:
- Added
JsonReader.useBigIntegerproperty for use when reading numeric values (default: false) - Added
JsonRecordReader.useBigIntegerproperty for use when reading numeric values (default: false) - Added
SimpleJsonReader.useBigIntegerproperty for use when reading numeric values (default: false) - Related examples:
New Readers and Lookups
- Added
CollectionReaderto read/create records from ajava.util.CollectionorIterator - Added
RecordListLookupto join in-memory from aRecordList - Related examples:
Transformer
- Added
Transformer.of(Function<Record, Boolean> function)to allow creation of transformers using Java closures - Related examples:
Retrying Operations
- Added
RetryingOperation.retryPredicateto allow conditional retry logic based onRetryContextRetryContextprovides access toretryCount,exceptionCount, andlastException- By default, retries until
maxRetryCount(default 5) ormaxErrorCount(default Long.MAX_VALUE-1) is reached
JdbcDataset
- Added
JdbcDatasetfor persistent database-backed dataset caching, providing an alternative to in-memory or file-based dataset storage
Code Generation
- Added
GenerateTableDaoClasses.useDatabaseIdentifiersAsDisplayNamesflag for FormDef generation to control whether database identifiers or display names are used - DAO code generation now assigns database column default values to DAO fields during initialization and in setter methods, ensuring generated code properly handles default values
- BUGFIX: Fixed
NullPointerExceptioninGenerateEntityFromDataset.createFieldDefthat occurred when processing certain field definitions
Type Detection
- Added
maxColumnsToAnalyzeproperty to limit the number of columns analyzed during type detection and schema inference, significantly improving performance in Dataset - Improved type inferrence in Dataset to determine field types for untyped file formats (such as CSV)
H2 Database Integration
H2InsertWriterclass for converting Records into H2 INSERT statements with configurable batch sizesCreateH2DdlFromSchemaDefclass for generating complete H2 table definitions from SchemaDefinition objects- New DDL generation classes for programmatic database schema creation:
- Support for common H2 data types including INT, BIGINT, VARCHAR, TEXT, DECIMAL, DATE, TIME, TIMESTAMP, BLOB, BOOLEAN, and JSON
- Fluent API for building H2 SQL statements with proper identifier escaping and pretty-printing options
- Upsert support with ON DUPLICATE KEY UPDATE semantics for conditional insert/update operations
- Follows the same architectural pattern as existing MySQL and PostgreSQL integrations
Amazon S3
New methods added to AmazonS3FileSystem:
deleteFile(String bucket, String key)– Delete S3 objectsexists(String bucket, String key)– Check if an S3 object exists- Related examples:
For the complete list of changes and detailed information, please refer to the CHANGELOG.txt file.