Pipes: A Lazy Data Flow Framework
http://pipes.tinkerpop.com
```xml
com.tinkerpop
pipes
2.7.0-SNAPSHOT
```
```xml
com.tinkerpop
pipes
2.6.0
```
```xml
com.tinkerpop
pipes
2.5.0
```
GroupByPipe
andGroupByReducePipe
now take aCollection
instead of aList
for theMap
value that stores results.- Updated to support
LinkedHashSet
inDuplicateFilterPipe
- Updated to support
LinkedHashSet
inCyclicPathFilterPipe
```xml
com.tinkerpop
pipes
2.4.0
```
- 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 nowCompare
should be used- Full support for
Predicate
from Blueprints - Added
ToStringPipe
to support streaming results out as asObject.toString()
- Added branch factor support to all
VerticesVerticesPipe
andVerticesEdgesPipe
classes IntervalFilterPipe
now requires twoComparables
not just genericObject
```xml
com.tinkerpop
pipes
2.3.0
```
- Breaking API change with
GroupByReducePipe
—Iterator<V>
is nowList<V>
- Fixed a bug in
GroupByReducePipe
whenLoopPipe
is used in conjunction - Minor speed improvement to path calculations
- Moved
IdentityPipe
to root package as it is not aTransformPipe
- Added
<S,E>
typing toTransformPipe
interface and updated respective pipe implementations ExceptFilterPipe
andRetainFilterPipe
supportString[]
of named steps to reference as collection- Added sub-interfaces of
LazySideEffectPipe
andGreedySideEffectPipe
to specify when sideeffect is ready - Made
Row.getColumnNames()
public - Better support for indexing
AsPipes
within aMetaPipe
inFluentUtility
- Added
TransformPipe.Order
enums for ordering specifications inOrderPipe
andOrderMapPipe
- Added
OrderMapPipe
to sort a map given aPipeFunction
and then emit map keys - Added
ShufflePipe
to gather up all objects then randomize their output
```xml
com.tinkerpop
pipes
2.2.0
```
- 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
```xml
com.tinkerpop
pipes
2.1.0
```
- Added Travis continuous integration support
- Added getters for getting the high and low end ranges of a
RangeFilterPipe
- Made exception handling faster with
FastNoSuchElementException
```xml
com.tinkerpop
pipes
2.0.0
```
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()
toPipe.getCurrentPath()
SideEffectCapPipe
moved to thetransform
package as it was wrongly organized in thesideeffect
package- Fixed an indexing issue in
ExhaustMergePipe
that made itself apparent when two split/merges happened in the same pipeline - Added
Tree
andTreePipe
to return a tree representation of a traversal - Merged
PathPipe
andPathFunctionPipe
into one class calledPathPipe
- Added
AbstractMetaPipe
to encapsulate reused behavior in allMetaPipe
implementations - The
CopySplitPipe
,FairMergePipe
, andExhaustMergePipe
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
```xml
com.tinkerpop
pipes
1.0
```
- Added
SelectPipe
to select the objects of named steps from a pipeline - Separated
Row
fromTable
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 aPair
containing incoming object and last value for that object - Reorganized the
com.tinkerpop.pipes.util
package - Removed the
objectFilter
step fromPipeFluentPipeline
asretain
andexcept
can be used instead EmptyIterator
is now a singletonScatterPipe
now scattersMap
objects intoMap.Entry
streams- Added
GroupByPipe
which groups values under a provided key - Added
GroupByReducePipe
which groups reduced values under a provided key
```xml
com.tinkerpop
pipes
0.9
```
- Removed all Blueprints graph related dependencies
- Renamed
UniquePathFilterPipe
toCyclicPathFilterPipe
- Renamed and removed numerous methods in
FluentPipeline
to make DSL construction more concise - Updated
LoopPipe
to support emit functionality viaPipeFunction
- Added
StorePipe
to lazily save objects to provided collection - Added function support to
DeduplicateFilterPipe
```xml
com.tinkerpop
pipes
0.8
```
SideEffectPipe
now has signature of<S,T>
instead of<S,E,T>
GroupCountFunctionPipe
has signature of<S,K>
to denote the key of itsMap<K,Number>
side-effect- Removed
ComparisonFilterPipe
as it is confusing and nowPipeHelper
has comparison support - Added
PipeHelper.makePipeString()
to have a single point where all pipetoString()
s are created - Optimized
PipeHelper.counter()
andPipeHelper.fillCollection()
by respecting architecture ofAbstractPipe
- Added
PipeHelper.iterate()
to complete drain an iterator - Added
FluentPipeline
as a utility class for fluently constructing a pipeline - Added
RetainFilterPipe
, addedExceptFilterPipe
, and abstractedCollectionFilterPipe
- Added
EdgesPipe
, addedVerticesPipe
, and abstractedGraphElementPipe
- Renamed
AggregatorPipe
toAggregatePipe
AndFilterPipe
andOrFilterPipe
will automatically wrap provided pipes in aHasNextPipe
- Generalized
GroupCountPipe
to have a value ofMap<Object,Number>
instead ofLong
- Migrated
TablePipe
andTable
from Gremlin - Simplified the semantics of
HasNextPipe
(usePipe.hasNext()
to accomplish previous behavior) - Added
MemoizePipe
to memoize the mapping of a particular pipe - Simplified
PipeClosure
to be purely functional and now namedPipeFunction
- Renamed
XXXClosurePipe
toXXXFunctionPipe
- Renamed
- Fixed performance issue in
RangeFilterPipe
and providedlong
ranges
```xml
com.tinkerpop
pipes
0.7
```
- Added support for
Vertex.getOutEdges(String...)
andVertex.getInEdges(String...)
- Updated
AggregatorPipe
to be fullySideEffectPipe
compliant and to respectgetPath()
- 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
, wheretrue
means pass, andfalse
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 anelseFunction
```xml
com.tinkerpop
pipes
0.6
```
RangeFilterPipe
max value is now inclusive- Added
OptionalPipe
which is likeBackFilterPipe
, but non-filtering. - Updated
AggregatorPipe
to support multiplesetStarts()
```xml
com.tinkerpop
pipes
0.5
```
- Added
OutPipe
,InPipe
, andBothPipe
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
, andFairMergePipe
- Optimized
PropertyPipe
andUniquePathFilterPipe
- Added support for Pipe.reset() and thus, pipe reuse
```xml
com.tinkerpop
pipes
0.4
```
- Added
StartPipe
to aid in creating anObject
-to-Pipe
converter - Removed
VertexEdge
andEdgeVertex
pipes for more low-level/faster pipes. - Supports new Blueprints packaging scheme.
```xml
com.tinkerpop
pipes
0.3.1
```
- Added
VertexEdgeLabelFilterPipe
to reflect BlueprintsVertex
API update - Added
UniquePathFilterPipe
to filter paths that have visited the same object twice
```xml
com.tinkerpop
pipes
0.3
```
- Added a general
toString()
model to articulate pipe construction - Redesigned path-model to where
enablePaths()
no longer required- Added
HistoryIterator
to replace theenablePath()
model
- Added
- Renamed
CountCombine
toGroupCount
- Added
ExpandableIterator
to support pipe looping - Removed many unused pipes for the sake of clarity and simplicity
- Added
GatherPipe
as a composite ofSideEffectCapPipe
andAggregatorPipe
- Removed
EndSupportPipe
as that is whatScatterPipe
now accomplishes
```xml
com.tinkerpop
pipes
0.2
```
- Added path functionality to get the path pipe traversed
- Added
PathSequence
path utility - Added
PathPipe
to support using paths in a computation
- Added
- Numerous test cases added
```xml
com.tinkerpop
pipes
0.1.1
```
- Fixed ‘reset pipe’ issue in
FutureFilterPipe
```xml
com.tinkerpop
pipes
0.1
```
- Initial release as the core engine for Gremlin 0.5