Skip to content

Release Notes

okram edited this page Sep 17, 2014 · 45 revisions

Pipes: A Lazy Data Flow Framework
http://pipes.tinkerpop.com

Pipes 2.y.z

Version 2.6.0 (September 17, 2014)

<dependency>
  <groupId>com.tinkerpop</groupId>
  <artifactId>pipes</artifactId>
  <version>2.6.0</version>
</dependency>

Version 2.5.0 (April 14, 2014)

<dependency>
  <groupId>com.tinkerpop</groupId>
  <artifactId>pipes</artifactId>
  <version>2.5.0</version>
</dependency>
  • GroupByPipe and GroupByReducePipe now take a Collection instead of a List for the Map value that stores results.
  • Updated to support LinkedHashSet in DuplicateFilterPipe
  • Updated to support LinkedHashSet in CyclicPathFilterPipe

Version 2.4.0 (August 4, 2013)

<dependency>
  <groupId>com.tinkerpop</groupId>
  <artifactId>pipes</artifactId>
  <version>2.4.0</version>
</dependency>
  • Added Pipeline.cast to allow pipeline end type to be reset
  • Added a dependency to Blueprints and now Pipes can reference graph constructs
  • Added all the graph-related pipes in Gremlin to Pipes
  • FilterPipe.Filter no longer exists as now Compare should be used
  • Full support for Predicate from Blueprints
  • Added ToStringPipe to support streaming results out as as Object.toString()
  • Added branch factor support to all VerticesVerticesPipe and VerticesEdgesPipe classes
  • IntervalFilterPipe now requires two Comparables not just generic Object

Version 2.3.0 (March 20, 2013)

<dependency>
  <groupId>com.tinkerpop</groupId>
  <artifactId>pipes</artifactId>
  <version>2.3.0</version>
</dependency>
  • Breaking API change with GroupByReducePipeIterator<V> is now List<V>
  • Fixed a bug in GroupByReducePipe when LoopPipe is used in conjunction
  • Minor speed improvement to path calculations
  • Moved IdentityPipe to root package as it is not a TransformPipe
  • Added <S,E> typing to TransformPipe interface and updated respective pipe implementations
  • ExceptFilterPipe and RetainFilterPipe support String[] of named steps to reference as collection
  • Added sub-interfaces of LazySideEffectPipe and GreedySideEffectPipe to specify when sideeffect is ready
  • Made Row.getColumnNames() public
  • Better support for indexing AsPipes within a MetaPipe in FluentUtility
  • Added TransformPipe.Order enums for ordering specifications in OrderPipe and OrderMapPipe
  • Added OrderMapPipe to sort a map given a PipeFunction and then emit map keys
  • Added ShufflePipe to gather up all objects then randomize their output

Version 2.2.0 (December 19, 2012)

<dependency>
  <groupId>com.tinkerpop</groupId>
  <artifactId>pipes</artifactId>
  <version>2.2.0</version>
</dependency>
  • Fixed a comparator bug in OrderPipe
  • Garbage collector optimized CycliePathFilterPipe to avoid newing a set each iteration
  • Added TransformPipe interface to denote a transform operation so path joins are ignored

Version 2.1.0 (August 4, 2012)

<dependency>
  <groupId>com.tinkerpop</groupId>
  <artifactId>pipes</artifactId>
  <version>2.1.0</version>
</dependency>
  • Added Travis continuous integration support
  • Added getters for getting the high and low end ranges of a RangeFilterPipe
  • Made exception handling faster with FastNoSuchElementException

Version 2.0.0 (May 23, 2012)

<dependency>
  <groupId>com.tinkerpop</groupId>
  <artifactId>pipes</artifactId>
  <version>2.0.0</version>
</dependency>
  • GatherPipe no longer locks on looping and is semantically sound for depth-first traversing
  • Added GatherFunctionPipe for user provided function to transform the gathered list
  • Added Pipe.enablePath(boolean) method to support the turning on/off of path calculations (efficiency reasons)
  • Renamed Pipe.getPath() to Pipe.getCurrentPath()
  • SideEffectCapPipe moved to the transform package as it was wrongly organized in the sideeffect package
  • Fixed an indexing issue in ExhaustMergePipe that made itself apparent when two split/merges happened in the same pipeline
  • Added Tree and TreePipe to return a tree representation of a traversal
  • Merged PathPipe and PathFunctionPipe into one class called PathPipe
  • Added AbstractMetaPipe to encapsulate reused behavior in all MetaPipe implementations
  • The CopySplitPipe, FairMergePipe, and ExhaustMergePipe all have functioning path calculations
  • Removed unused extra methods for merging in PipesFluentPipeline interface (and updated respective implementations)
  • Added OrderPipe to do inline sorting of objects in a stream
  • Added numerous help methods to the Table data structure

Pipes 0.x

Version 1.0 (Pipes — February 28, 2012)

<dependency>
  <groupId>com.tinkerpop</groupId>
  <artifactId>pipes</artifactId>
  <version>1.0</version>
</dependency>
  • Added SelectPipe to select the objects of named steps from a pipeline
  • Separated Row from Table so it can be reused by other pipes (e.g. SelectPipe)
  • Heavily reworked PipesFluentPipeline JavaDoc to make it a single point of reference
  • Updated LoopPipe semantics such that if there is an emit function, then the final object in a while isn’t returned
  • Updated GroupCountFunctionPipe semantics such that the value-function gets a Pair containing incoming object and last value for that object
  • Reorganized the com.tinkerpop.pipes.util package
  • Removed the objectFilter step from PipeFluentPipeline as retain and except can be used instead
  • EmptyIterator is now a singleton
  • ScatterPipe now scatters Map objects into Map.Entry streams
  • Added GroupByPipe which groups values under a provided key
  • Added GroupByReducePipe which groups reduced values under a provided key

Version 0.9 (Sink — December 7, 2011)

<dependency>
  <groupId>com.tinkerpop</groupId>
  <artifactId>pipes</artifactId>
  <version>0.9</version>
</dependency>
  • Removed all Blueprints graph related dependencies
  • Renamed UniquePathFilterPipe to CyclicPathFilterPipe
  • Renamed and removed numerous methods in FluentPipeline to make DSL construction more concise
  • Updated LoopPipe to support emit functionality via PipeFunction
  • Added StorePipe to lazily save objects to provided collection
  • Added function support to DeduplicateFilterPipe

Version 0.8 (Cleaner — September 18, 2011)

<dependency>
  <groupId>com.tinkerpop</groupId>
  <artifactId>pipes</artifactId>
  <version>0.8</version>
</dependency>
  • SideEffectPipe now has signature of <S,T> instead of <S,E,T>
  • GroupCountFunctionPipe has signature of <S,K> to denote the key of its Map<K,Number> side-effect
  • Removed ComparisonFilterPipe as it is confusing and now PipeHelper has comparison support
  • Added PipeHelper.makePipeString() to have a single point where all pipe toString()s are created
  • Optimized PipeHelper.counter() and PipeHelper.fillCollection() by respecting architecture of AbstractPipe
  • Added PipeHelper.iterate() to complete drain an iterator
  • Added FluentPipeline as a utility class for fluently constructing a pipeline
  • Added RetainFilterPipe, added ExceptFilterPipe, and abstracted CollectionFilterPipe
  • Added EdgesPipe, added VerticesPipe, and abstracted GraphElementPipe
  • Renamed AggregatorPipe to AggregatePipe
  • AndFilterPipe and OrFilterPipe will automatically wrap provided pipes in a HasNextPipe
  • Generalized GroupCountPipe to have a value of Map<Object,Number> instead of Long
  • Migrated TablePipe and Table from Gremlin
  • Simplified the semantics of HasNextPipe (use Pipe.hasNext() to accomplish previous behavior)
  • Added MemoizePipe to memoize the mapping of a particular pipe
  • Simplified PipeClosure to be purely functional and now named PipeFunction
    • Renamed XXXClosurePipe to XXXFunctionPipe
  • Fixed performance issue in RangeFilterPipe and provided long ranges

Version 0.7 (PVC — August 1, 2011)

<dependency>
  <groupId>com.tinkerpop</groupId>
  <artifactId>pipes</artifactId>
  <version>0.7</version>
</dependency>
  • Added support for Vertex.getOutEdges(String...) and Vertex.getInEdges(String...)
  • Updated AggregatorPipe to be fully SideEffectPipe compliant and to respect getPath()
  • Added PipeClosure to support function-based pipes
  • Migrated all the Gremlin specific pipes to Pipes
  • Refactored package names to align with pipe semantics
  • Flipped the meaning of Filter, where true means pass, and false means filter
  • Added AggregatorPipe PipeClosure to process object prior to insertion into the aggregate collection
  • Added temporary fix for AggregatorPipe/LoopPipe phenomena
  • IfThenElsePipe now requires an elseFunction

Version 0.6 (Toilet — June 15, 2011)

<dependency>
  <groupId>com.tinkerpop</groupId>
  <artifactId>pipes</artifactId>
  <version>0.6</version>
</dependency>
  • RangeFilterPipe max value is now inclusive
  • Added OptionalPipe which is like BackFilterPipe, but non-filtering.
  • Updated AggregatorPipe to support multiple setStarts()

Version 0.5 (Drain — May 8, 2011)

<dependency>
  <groupId>com.tinkerpop</groupId>
  <artifactId>pipes</artifactId>
  <version>0.5</version>
</dependency>
  • Added OutPipe, InPipe, and BothPipe to allow for vertex-vertex hoping
  • Removed VertexEdgeLabelFilterPipe as it is now covered by more efficient pipes
  • Added the MetaPipe interface to allow pipes to acknowledge pipe wrapping
  • Added CopySplitPipe, ExhaustMergePipe, and FairMergePipe
  • Optimized PropertyPipe and UniquePathFilterPipe
  • Added support for Pipe.reset() and thus, pipe reuse

Version 0.4 (Spigot — April 4, 2011)

<dependency>
  <groupId>com.tinkerpop</groupId>
  <artifactId>pipes</artifactId>
  <version>0.4</version>
</dependency>
  • Added StartPipe to aid in creating an Object-to-Pipe converter
  • Removed VertexEdge and EdgeVertex pipes for more low-level/faster pipes.
  • Supports new Blueprints packaging scheme.

Version 0.3.1 (Mario — March 2, 2011)

<dependency>
  <groupId>com.tinkerpop</groupId>
  <artifactId>pipes</artifactId>
  <version>0.3.1</version>
</dependency>
  • Added VertexEdgeLabelFilterPipe to reflect Blueprints Vertex API update
  • Added UniquePathFilterPipe to filter paths that have visited the same object twice

Version 0.3 (Mario — January 22, 2011)

<dependency>
  <groupId>com.tinkerpop</groupId>
  <artifactId>pipes</artifactId>
  <version>0.3</version>
</dependency>
  • Added a general toString() model to articulate pipe construction
  • Redesigned path-model to where enablePaths() no longer required
    • Added HistoryIterator to replace the enablePath() model
  • Renamed CountCombine to GroupCount
  • Added ExpandableIterator to support pipe looping
  • Removed many unused pipes for the sake of clarity and simplicity
  • Added GatherPipe as a composite of SideEffectCapPipe and AggregatorPipe
  • Removed EndSupportPipe as that is what ScatterPipe now accomplishes

Version 0.2 (Clogged — December 14, 2010)

<dependency>
  <groupId>com.tinkerpop</groupId>
  <artifactId>pipes</artifactId>
  <version>0.2</version>
</dependency>
  • Added path functionality to get the path pipe traversed
    • Added PathSequence path utility
    • Added PathPipe to support using paths in a computation
  • Numerous test cases added

Version 0.1.1 (Leaky — October 28, 2010)

<dependency>
  <groupId>com.tinkerpop</groupId>
  <artifactId>pipes</artifactId>
  <version>0.1.1</version>
</dependency>
  • Fixed ‘reset pipe’ issue in FutureFilterPipe

Version 0.1 (Leaky — September 22, 2010)

<dependency>
  <groupId>com.tinkerpop</groupId>
  <artifactId>pipes</artifactId>
  <version>0.1</version>
</dependency>
  • Initial release as the core engine for Gremlin 0.5