-
Notifications
You must be signed in to change notification settings - Fork 236
Release Notes
jbmusso edited this page Jul 11, 2016
·
80 revisions

Attention: this Wiki hosts an outdated version of the TinkerPop framework and Gremlin language documentation.
Please visit the Apache TinkerPop website and latest documentation.
Gremlin: A Graph Traversal Language
http://gremlin.tinkerpop.com

<dependency>
<groupId>com.tinkerpop.gremlin</groupId>
<artifactId>gremlin-java</artifactId>
<version>2.6.0</version>
</dependency>
<dependency>
<groupId>com.tinkerpop.gremlin</groupId>
<artifactId>gremlin-groovy</artifactId>
<version>2.6.0</version>
</dependency>-
GremlinGroovyScriptEnginereads scripts to UTF-8. -
GremlinGroovyScriptEngineallows for a script base class to be set.
<dependency>
<groupId>com.tinkerpop.gremlin</groupId>
<artifactId>gremlin-java</artifactId>
<version>2.5.0</version>
</dependency>
<dependency>
<groupId>com.tinkerpop.gremlin</groupId>
<artifactId>gremlin-groovy</artifactId>
<version>2.5.0</version>
</dependency>- Added a plugin system for the Gremlin Console that allows external libraries to extend the Gremlin environment
- Remove
Grapefrom imports as it is replaced byGremlin.use() - Add
Gremlin.deps()to list imported dependencies
- Remove
- Added
g.tryTxto execute transactions with retry capabilities - Fixed a property/method caching bug
-
gremlin.shaccepts more than nine parameters - Changed support from DEX to Sparksee
<dependency>
<groupId>com.tinkerpop.gremlin</groupId>
<artifactId>gremlin-java</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>com.tinkerpop.gremlin</groupId>
<artifactId>gremlin-groovy</artifactId>
<version>2.4.0</version>
</dependency>- Added loader support for
SailGraph.saveRDF - Added
GremlinPipeline.castto allow pipeline end type to be reset - Added
GraphQueryPipeand support for Graph index query optimization via pipeline rewriting - Added support for
has(key,predicate,value)as dictated by new BlueprintsQueryAPI changes - Added support for
has(key)andhasNot(key)to identify the existence of an element key - Additions to the
HasStepTestandHasNotStepTesttest suites - Moved all pipe definitions to Pipes package (greatly reduced the size of Gremlin as a project)
- Moved gremlin.sh and gremlin.bat to bin/ (noticeable to developers of source only)
- Added
GremlinStartPipeto better handle graph as the root of aGremlinPipeline - Fixed a double
iterator()call inGremlinPipeline - Allow use of
Grapefrom the console to dynamically import packages - Generalized the console iterator using
ToStringPipein Pipes - Solved the
QueryPipesupport for when the last statement is an edge-statement - Code simplification around
GraphQueryandVertexQueryrelated traversals - Updated test cases to use
Iteratorand thus, made typing more general for more stringent Gremlin implementations - Updated test cases to support the testing of both optimized and non-optimized
GremlinPipelines - Deprecated all numbered steps in favor of
as-based steps - Added branch factor support for
out,outE,in,inE,both, andbothE - The
interval-step requires twoComparables(not genericObject)
<dependency>
<groupId>com.tinkerpop.gremlin</groupId>
<artifactId>gremlin-java</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>com.tinkerpop.gremlin</groupId>
<artifactId>gremlin-groovy</artifactId>
<version>2.3.0</version>
</dependency>- Added support for
Vertex.addEdge()withMap<String,Object>properties for the edge - A semantic change to
store().cap()whereStorePipenow implementsLazySideEffectPipe - Updated all
TransformPipesto new typing interface rules in Pipes -
except()/retain()supportString[]of named steps to reference as collection -
GroovyPipeFunctionprovides support forAsMapreferencing and closure access to named-steps - Bumped to support Groovy 1.8.9
- Added
GremlinPipeline.remove()which removes all elements at the end of the pipeline (overridesIterator.remove()) - Added
LinkPipeandlinkOut,linkIn,linkBothsteps to allow for the addition of linking current vertex with past vertex - Added
orderMapstep which takes aMapas input, orders its entries, and then emits its keys - Added
Tokens.T.decrandTokens.T.incrfor default ordering inorderandorderMapsteps -
ScriptExecutorprovides support forargs[]as well asa1,a2, etc. type parameters - Fixed a
StackOverflowErrorinGremlinGroovyScriptEnginehaving to do with infinite looping on function calls -
GremlinGroovyScriptEnginenow maintains an internal cache reset to ensure noOutOfMemoryExceptionissues - The
mapstep now ismap(String... keys)with user provided keys to get (idandlabelpossible options) - The console can be initialized with a script to pre-define steps and initialize other aspects of the environment
- Added
shufflestep which gathers all objects into a list and randomizes the order of their output
<dependency>
<groupId>com.tinkerpop.gremlin</groupId>
<artifactId>gremlin-java</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>com.tinkerpop.gremlin</groupId>
<artifactId>gremlin-groovy</artifactId>
<version>2.2.0</version>
</dependency>- Revised method signatures for
loadGraphSON()andsaveGraphSON()that now use the GraphSONMode enum - Bumped to support Groovy 1.8.8
- Fixed a bug in
QueryPipelimit, where limit was not decrementing via counting already emitted elements - Provided a vertex-centric query optimization for
out[0..1]type traversals - Added support for non-zero low range limits in
QueryPipe - All transform steps implement new
TransformPipeinterface (marker interface) - Various thread safety test cases added for
GremlinGroovyScriptEngine - Significant performance improvements in
GremlinGroovyScriptEngine(mapped toGroovyScriptEngine)
<dependency>
<groupId>com.tinkerpop.gremlin</groupId>
<artifactId>gremlin-java</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>com.tinkerpop.gremlin</groupId>
<artifactId>gremlin-groovy</artifactId>
<version>2.1.0</version>
</dependency>- Optimized the pom.xml for both the parent and child projects
- Added Travis continuous integration support
- Restructured the distribution.xml to provide a more “standard” looking directory structure
- Provide support for
Query.limit()in query optimization - Added import static support for
Direction.* - Made
gremlin-groovy.sh/batinto simplygremlin.sh/bat
<dependency>
<groupId>com.tinkerpop.gremlin</groupId>
<artifactId>gremlin-java</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>com.tinkerpop.gremlin</groupId>
<artifactId>gremlin-groovy</artifactId>
<version>2.0.0</version>
</dependency>- Removed Gremlin-Scala from the main Gremlin distribution
- Added
tree-step based on theTreePipeto support representing the branch of a traversal - Added
order-step based on theOrderPipeto support in-stream ordering - Removed
VerticesPipeandEdgesPipesas should be called viagetVertices()andgetEdges()inGremlinPipelineconstructor - Added
QueryPipesupport automated optimizations aroundVertex.query() - Added
GremlinPipeline.enablePath()to allow for non-automated path enabling - Provided
GremlinPipeline.optimize(boolean)to control whether the pipeline is query optimized - The
Importsclass now provides static imports forDirectionandTransactionenums - Gremlin-Groovy
- Renamed
paths-step to simplypathas now in Pipes the method is calledPipe.getCurrentPath() - Bumped to support GMaven 1.4
- Renamed

<dependency>
<groupId>com.tinkerpop.gremlin</groupId>
<artifactId>gremlin-java</artifactId>
<version>1.5</version>
</dependency>
<dependency>
<groupId>com.tinkerpop.gremlin</groupId>
<artifactId>gremlin-groovy</artifactId>
<version>1.5</version>
</dependency>
<dependency>
<groupId>com.tinkerpop.gremlin</groupId>
<artifactId>gremlin-scala</artifactId>
<version>1.5</version>
</dependency>- Added
selectstep for the respectiveSelectPipe - Added
hasandhasNotstep for concise property/id/label filtering - Removed
idFilterstep, wherehasandhasNotis the respective replacement - Removed
labelFilterstep, wherehasandhasNotis the respective replacement - Removed
propertyFilterstep, wherehasandhasNotis the respective replacement - Removed
indexstep as it was not used and there are other ways of getting that functionality - Altered the semantics of
groupCountvalue function such that it now takes aPair(much more expressive) - Fixed classpath issues in the
.batfiles of respective Gremlin implementations - Lots of JavaDoc work to make the
GremlinPipelineJavaDoc be a single point of reference - Updated
distribution.xmlfiles to supportdata/andLICENSE.txtinclusion in sub-modules - Added
groupBystep for the underlyingGroupByPipeandGroupByReducePipein Pipes (support for MapReduce) - Gremlin-Groovy
- Removed the
JSONSlurpervertex and edge overloaded methods -
Gremlin.load()now makes use of method reflection to build the language tokens - Increased the performance of
Element.keyby approximately a factor of 10
- Removed the

<dependency>
<groupId>com.tinkerpop.gremlin</groupId>
<artifactId>gremlin-java</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>com.tinkerpop.gremlin</groupId>
<artifactId>gremlin-groovy</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>com.tinkerpop.gremlin</groupId>
<artifactId>gremlin-scala</artifactId>
<version>1.4</version>
</dependency>- Generalized Gremlin to be a meta-language
- Added
gremlin-testas a universal test suite for all Gremlin implementations - Added
gremlin-javaas the Java representation of the Gremlin language - Added
gremlin-groovyas the Groovy representation of the Gremlin language - Added
gremlin-scalaas the Scala representation of the Gremlin language - Added
IndexElementsPipeas a start pipe that pulls elements from an index - Renamed
uniqueObjectstep todedup - Renamed
orFilterandandFiltertoorandand, respectively - Renamed
uniquePathtosimplePath
- Added
- Added
storestep to support lazily loading of objects into collection - Added
dedup{closure}to allow for uniqueness determination as a function -
gremlin-groovyupdates- Renamed
Graph.saveGraphJSON()toGraph.saveGrapSON()(likewise for load method) - No more
_()required off of graph-based objects - No more
[[ ]]filtering supported - No more support for
>>syntax-
>>1isnext() -
>>2isnext(2) -
>>-1isiterate() -
>>[]istoList() -
>>collectionisfill(collection)
-
- Renamed

<dependency>
<groupId>com.tinkerpop</groupId>
<artifactId>gremlin</artifactId>
<version>1.3</version>
</dependency>- Added
SailGraph.loadRDF()meta method to make it easier to load RDF files - Optimized
>>-1to use a try/catch model which is more efficient given the architecture ofAbstractPipe - Updated
gremlin.shto respect previous classpaths and to make sym-linking easier - Fixed table width bug in
Table - Added
Graph.loadGraphJSON()andGraph.saveGraphJSON()with respectivedata/graph-example-1.json - Moved to
FluentPipelinemodel provided by Pipes - Filter functions must be made explicit now (e.g.
out{it.id > 2}must now beout.filter{it.id > 2}) - Migrated
TablePipeandTableto Pipes - Renamed
propFilterstep topropertyFilter - Added multi-vertex/edge lookup support via
g.v(1,2,3) -> [v[1],v[2],v[3]](andg.e()as well) - Added
memoize()step to provide theMemoizePipefunctionality to Gremlin - Added support for simpler
PipeFunctionmodel introduced by Pipes - Bumped to Groovy 1.8.2

<dependency>
<groupId>com.tinkerpop</groupId>
<artifactId>gremlin</artifactId>
<version>1.2</version>
</dependency>- Added respective pipe support for
Vertex.getOutEdges(String...)andVertex.getInEdges(String...) - Added path functions to
pathsto allow for post-processing a returned path - Added map entry functions to
groupCountto allow for pre-processing an entry’s key/value pairs - Added
Gremlin.version()to get version information (returnsGremlinTokens.VERSION) - Added
Gremlin.defineStep()to make it simple for developers to add new steps - Added support for
Graph.loadGraphML(URL) - Renamed
ifelsetoifThenElseand provided ‘scatter’ functionality if branch yields an iterator/iterable - Implemented
Pipe.reset()method for all Gremlin-specific pipes - Migrated all Gremlin-specific pipes to Pipes
- Added
GroovyPipeClosureto map a GroovyClosureto aPipeClosure
- Added
- Update
g.idx()to reflectnullbehavior of Blueprints index API update - Added
mapstep to emit an element’s property map - Added support for
aggregatestep function to process object prior to insertion into the aggregate collection - Bumped to Groovy 1.8.1

<dependency>
<groupId>com.tinkerpop</groupId>
<artifactId>gremlin</artifactId>
<version>1.1</version>
</dependency>- The
.gremlin_historyfile is always saved to the users home directory - Supports an inclusive max on
RangeFilterPipe - Supports integer range filtering for
Map— e.g.m[0..10] - Added meta methods
loadGraphMLandsaveGraphMLtoGraph -
SailGraphis no longer a strict dependency (however, loads meta methods if in classpath) - Added
optionalstep for doingback, but without filtering - Extended support for graph pattern matching
- Added
AsPipefor naming steps.- Added
tablestep with respectiveTablePipeandTabledata structure - Added support for named steps in
loop - Added support for named steps in
back - Added support for named steps in
optional
- Added

<dependency>
<groupId>com.tinkerpop</groupId>
<artifactId>gremlin</artifactId>
<version>1.0</version>
</dependency>- Added
out(label?),in(label?), andboth(label?) - Added
copySplit,fairMerge,exhaustMerge -
SailLoaderis loaded on startup (no longer required by developer) - Faster
Gremlin.compile()usingGremlinScriptEngine - Renamed
andf,orf, andpropftoandFilter,orFilter, andpropFilter - Moved to the more optimal vertex/edge incidence Pipes
- Renamed
uniquetouniqueObject - Updated Gremlin-specific pipes to support
reset()API

<dependency>
<groupId>com.tinkerpop</groupId>
<artifactId>gremlin</artifactId>
<version>0.9</version>
</dependency>-
IterableandIteratormeta methods are nowPipeexclusive -
Indexresults are auto-wrapped in anIdentityPipeto ensure consistent behavior across graphs - Added
DexGraphas imported graph database -
Object.propertyMissingis no longer defined to ensure Gremlin safety -
emitstep renamed totransform -
foreachstep renamed tosideeffect - Removed
futurefstep asbacksupplies necessary computation - The
itof thegatherstep is now the gatheredList

<dependency>
<groupId>com.tinkerpop</groupId>
<artifactId>gremlin</artifactId>
<version>0.8</version>
</dependency>- Added new steps
-
emitto emit results of provided function -
ifelseto perform a if/then/else branch -
uniquePathto filter looping paths
-
- Added new methods
-
Object.mean()to calculate the average of delegate -
Pipe.count()to calculate the number of objects in pipe
-
- Added support for stack trace printing during an error in the console
-
loopstep now requires “back integer” - Added step caching model to increase speed of property notation
- Added
outE(label),inE(label)andbothE(label)support - Added support for dynamic counter adjustment in
groupCount - Bumped to using Groovy 1.7.8
- Created a type-cast friendly
groupCountstep

<dependency>
<groupId>com.tinkerpop</groupId>
<artifactId>gremlin</artifactId>
<version>0.7</version>
</dependency>- Added many new steps
-
loopstep for in-line looping -
foreachstep for function based operations on flowing objects -
backstep for backtracking in pipeline (i.e.../) -
aggregate,except, andretainfor except/retain pattern -
groupCountfor map aggregations (i.e.g:op-value()) -
stepfor anonymous/lambda steps
-
- Massive refactoring of documentation
- Changed to Groovy as the host language

<dependency>
<groupId>com.tinkerpop</groupId>
<artifactId>gremlin</artifactId>
<version>0.6</version>
</dependency>- Fixed
foreachbug that occurred on single object looping - Fixed
if/elsebug that occurred on function call -
nulland empty iterator/iterable result now printed in console - Empty path expression returns an empty iterable, not
null - Added
g:copy-e()function that conveniently copies an element from one graph into another - Fixed numerous bugs in how functions were computing atoms
- GPath optimization through auto-reset of Gremlin-specific range-based pipes
- Comparing numbers is now possible without casting
- Fixed a major bug in error message handling (many exceptions w/o message being provided in console)
- Improved Gremlin evaluator load time with static function and step loading
- Added support for Blueprints 0.3 multi-indexes
-
g:add-aidx-key(),g:add-idx(),g:drop-idx(),g:show-aidx-keys(),g:show-idx(),g:remove-aidx-keys()
-
- Added
return ?objectto return from a user defined function or step - Added support for path generation through
g:path()(main body of work in Pipes)

<dependency>
<groupId>com.tinkerpop</groupId>
<artifactId>gremlin</artifactId>
<version>0.5.5</version>
</dependency>- A rework of the user-defined step model
- Renamed the concept of “path” to “step”
- Users can now define computations in steps
- Added
gatherandscattersteps to allow for aggregation and unrolling of objects within a path - Added
g:append()function to concatenate objects to an iterable (e.g. list, set)
<dependency>
<groupId>com.tinkerpop</groupId>
<artifactId>gremlin</artifactId>
<version>0.5</version>
</dependency>- A complete redesign and implementation of the Gremlin compiler
- Significant performance improvements
- Order of magnitude increase in speed for numerous operations
- Lazy evaluation for better memory usage
-
Functionsimplement theServiceLoaderpattern for ease of incorporating 3rd-party extensions - Numerous changes to the Gremlin function library
- All core functions are now in the
gnamespace (e.g.g:count(),g:string()) -
g:id()changed tog:id-v()andg:id-e()for getting vertices and edges, respectively -
g:key()changed tog:key-v() - Added
g:version()function to retrieve version information - Added
g:g()(group) to semi-replace()model in Gremlin 0.2.2 - Added
g:flatten()to flatten embedded iterables - Added
g:includes()to determine if an object is in an iterable - Added
g:power()to implement raising a number by a power - Added
g:range()to allow for integer ranges to be created - Changed
g:difference()tog:diff()(abbreviation policy enacted for function names) - Added
g:set()to create a set (unordered, unique collection of objects) - Added
g:integer(),g:long(),g:float(), andg:double()to support number casting
- All core functions are now in the
- Additions to the Gremlin type system
- Supports iterable as a super type in order to have direct support for lazy evaluation
- Supports set as an unordered, unique collection of objects
- Supports integer (1), long (1l), float (1.0), double (1.0d) as different number types
- Print streams can be dynamically set in
GremlinScriptContext -
true(),false(), andnull()are now keywords—true,false,null - String concatenation is supported with the
+operation - Range filter support through
[1..10]type syntax - Index of lists starts at 0 instead of 1 as in Gremlin 0.2.2
- Test cases now provide performance statistics
- Removed the ‘show all aspects’ * step (i.e.
./outE/inV/*) - Allow for the use of assignment and other operations within a path (e.g.
./outE/inV[g:p($x := .)] - Provided support for OrientDB graph database (main body of work in Blueprints)
- Update to dependency inclusions
- Distribution includes all supported graph databases in Blueprints (
gremlin-*-standalone.jar) - Dependency provide
<scope>provided</scope>
- Distribution includes all supported graph databases in Blueprints (

<dependency>
<groupId>com.tinkerpop</groupId>
<artifactId>gremlin</artifactId>
<version>0.2.2</version>
</dependency>- Fixed a bug introduced in 0.2.1 having to do with variables copied from a parent path context
- Added dependency on Neo4j RDF and SAIL SNAPSHOTS
- Added Neo4jSailGraph BETA to the core distribution
<dependency>
<groupId>com.tinkerpop</groupId>
<artifactId>gremlin</artifactId>
<version>0.2.1</version>
</dependency>- Instance naming convention for
Functionschanged toFunctionLibrary -
list g:list(object+)is nowlist g:list(object*) - Added support for Java 1.6+ JSR 223
ScriptEngineandScriptEngineFactory- Renamed
GremlinEnginetoGremlinScriptEngine - Renamed
GremlinEngineFactorytoGremlinScriptEngineFactory
- Renamed
<dependency>
<groupId>com.tinkerpop</groupId>
<artifactId>gremlin</artifactId>
<version>0.2</version>
</dependency>- Added user defined functions
- Gremlin and Java defined functions supported
- Added user defined paths
- Gremlin and Java defined functions supported
- Added
.gremlinrcload script - Added support for manual transaction handling of Neo4j graphs
-
boolean neo4j:start-tx(),boolean neo4j:stop-tx(boolean)added
-
- Added support for embedded maps and lists
- Added support for JSON encoding and decoding of Gremlin types
-
g:json(object)was removed -
string g:to-json(object)andobject g:from-json(string)added
-
- Added better support for vertex and edge property indexing
- Added working graph
$_gvariable and updated graph functions to support it - Added support for SPARQL queries for SAIL-based graphs
-
list sail:sparql(graph?, string)was added
-
- Added support for Linked Data SAIL for real-time analysis of the Web of Data
- Added support for script loading
script gremlin-script.grm
- Added support for JUNG algorithms over Gremlin graphs
map jung:pagerank(graph?, map?)list jung:dijkstra(graph?, vertex, vertex, map?)
- Renamed
g:append(object, object+)tog:list(object+) - Renamed the general graph model to property graph model
- Moved the model and its implementations to Blueprints
- Dependency is on Blueprints 0.1
- Various bug fixes and optimizations

<dependency>
<groupId>com.tinkerpop</groupId>
<artifactId>gremlin</artifactId>
<version>0.1</version>
</dependency>- Initial release of the language and virtual machine