-
Notifications
You must be signed in to change notification settings - Fork 239
Release Notes
okram edited this page Sep 17, 2014
·
80 revisions
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>
-
GremlinGroovyScriptEngine
reads scripts to UTF-8. -
GremlinGroovyScriptEngine
allows 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
Grape
from imports as it is replaced byGremlin.use()
- Add
Gremlin.deps()
to list imported dependencies
- Remove
- Added
g.tryTx
to execute transactions with retry capabilities - Fixed a property/method caching bug
-
gremlin.sh
accepts 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.cast
to allow pipeline end type to be reset - Added
GraphQueryPipe
and support for Graph index query optimization via pipeline rewriting - Added support for
has(key,predicate,value)
as dictated by new BlueprintsQuery
API changes - Added support for
has(key)
andhasNot(key)
to identify the existence of an element key - Additions to the
HasStepTest
andHasNotStepTest
test 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
GremlinStartPipe
to better handle graph as the root of aGremlinPipeline
- Fixed a double
iterator()
call inGremlinPipeline
- Allow use of
Grape
from the console to dynamically import packages - Generalized the console iterator using
ToStringPipe
in Pipes - Solved the
QueryPipe
support for when the last statement is an edge-statement - Code simplification around
GraphQuery
andVertexQuery
related traversals - Updated test cases to use
Iterator
and 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()
whereStorePipe
now implementsLazySideEffectPipe
- Updated all
TransformPipes
to new typing interface rules in Pipes -
except()/retain()
supportString[]
of named steps to reference as collection -
GroovyPipeFunction
provides support forAsMap
referencing 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
LinkPipe
andlinkOut
,linkIn
,linkBoth
steps to allow for the addition of linking current vertex with past vertex - Added
orderMap
step which takes aMap
as input, orders its entries, and then emits its keys - Added
Tokens.T.decr
andTokens.T.incr
for default ordering inorder
andorderMap
steps -
ScriptExecutor
provides support forargs[]
as well asa1
,a2
, etc. type parameters - Fixed a
StackOverflowError
inGremlinGroovyScriptEngine
having to do with infinite looping on function calls -
GremlinGroovyScriptEngine
now maintains an internal cache reset to ensure noOutOfMemoryException
issues - The
map
step now ismap(String... keys)
with user provided keys to get (id
andlabel
possible options) - The console can be initialized with a script to pre-define steps and initialize other aspects of the environment
- Added
shuffle
step 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
QueryPipe
limit, 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
TransformPipe
interface (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/bat
into 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 theTreePipe
to support representing the branch of a traversal - Added
order
-step based on theOrderPipe
to support in-stream ordering - Removed
VerticesPipe
andEdgesPipes
as should be called viagetVertices()
andgetEdges()
inGremlinPipeline
constructor - Added
QueryPipe
support 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
Imports
class now provides static imports forDirection
andTransaction
enums - Gremlin-Groovy
- Renamed
paths
-step to simplypath
as 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
select
step for the respectiveSelectPipe
- Added
has
andhasNot
step for concise property/id/label filtering - Removed
idFilter
step, wherehas
andhasNot
is the respective replacement - Removed
labelFilter
step, wherehas
andhasNot
is the respective replacement - Removed
propertyFilter
step, wherehas
andhasNot
is the respective replacement - Removed
index
step as it was not used and there are other ways of getting that functionality - Altered the semantics of
groupCount
value function such that it now takes aPair
(much more expressive) - Fixed classpath issues in the
.bat
files of respective Gremlin implementations - Lots of JavaDoc work to make the
GremlinPipeline
JavaDoc be a single point of reference - Updated
distribution.xml
files to supportdata/
andLICENSE.txt
inclusion in sub-modules - Added
groupBy
step for the underlyingGroupByPipe
andGroupByReducePipe
in Pipes (support for MapReduce) - Gremlin-Groovy
- Removed the
JSONSlurper
vertex and edge overloaded methods -
Gremlin.load()
now makes use of method reflection to build the language tokens - Increased the performance of
Element.key
by 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-test
as a universal test suite for all Gremlin implementations - Added
gremlin-java
as the Java representation of the Gremlin language - Added
gremlin-groovy
as the Groovy representation of the Gremlin language - Added
gremlin-scala
as the Scala representation of the Gremlin language - Added
IndexElementsPipe
as a start pipe that pulls elements from an index - Renamed
uniqueObject
step todedup
- Renamed
orFilter
andandFilter
toor
andand
, respectively - Renamed
uniquePath
tosimplePath
- Added
- Added
store
step to support lazily loading of objects into collection - Added
dedup{closure}
to allow for uniqueness determination as a function -
gremlin-groovy
updates- 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-
>>1
isnext()
-
>>2
isnext(2)
-
>>-1
isiterate()
-
>>[]
istoList()
-
>>collection
isfill(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
>>-1
to use a try/catch model which is more efficient given the architecture ofAbstractPipe
- Updated
gremlin.sh
to 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
FluentPipeline
model provided by Pipes - Filter functions must be made explicit now (e.g.
out{it.id > 2}
must now beout.filter{it.id > 2}
) - Migrated
TablePipe
andTable
to Pipes - Renamed
propFilter
step 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 theMemoizePipe
functionality to Gremlin - Added support for simpler
PipeFunction
model 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
paths
to allow for post-processing a returned path - Added map entry functions to
groupCount
to 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
ifelse
toifThenElse
and 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
GroovyPipeClosure
to map a GroovyClosure
to aPipeClosure
- Added
- Update
g.idx()
to reflectnull
behavior of Blueprints index API update - Added
map
step to emit an element’s property map - Added support for
aggregate
step 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_history
file 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
loadGraphML
andsaveGraphML
toGraph
-
SailGraph
is no longer a strict dependency (however, loads meta methods if in classpath) - Added
optional
step for doingback
, but without filtering - Extended support for graph pattern matching
- Added
AsPipe
for naming steps.- Added
table
step with respectiveTablePipe
andTable
data 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
-
SailLoader
is loaded on startup (no longer required by developer) - Faster
Gremlin.compile()
usingGremlinScriptEngine
- Renamed
andf
,orf
, andpropf
toandFilter
,orFilter
, andpropFilter
- Moved to the more optimal vertex/edge incidence Pipes
- Renamed
unique
touniqueObject
- Updated Gremlin-specific pipes to support
reset()
API
<dependency>
<groupId>com.tinkerpop</groupId>
<artifactId>gremlin</artifactId>
<version>0.9</version>
</dependency>
-
Iterable
andIterator
meta methods are nowPipe
exclusive -
Index
results are auto-wrapped in anIdentityPipe
to ensure consistent behavior across graphs - Added
DexGraph
as imported graph database -
Object.propertyMissing
is no longer defined to ensure Gremlin safety -
emit
step renamed totransform
-
foreach
step renamed tosideeffect
- Removed
futuref
step asback
supplies necessary computation - The
it
of thegather
step is now the gatheredList
<dependency>
<groupId>com.tinkerpop</groupId>
<artifactId>gremlin</artifactId>
<version>0.8</version>
</dependency>
- Added new steps
-
emit
to emit results of provided function -
ifelse
to perform a if/then/else branch -
uniquePath
to 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
-
loop
step 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
groupCount
step
<dependency>
<groupId>com.tinkerpop</groupId>
<artifactId>gremlin</artifactId>
<version>0.7</version>
</dependency>
- Added many new steps
-
loop
step for in-line looping -
foreach
step for function based operations on flowing objects -
back
step for backtracking in pipeline (i.e.../
) -
aggregate
,except
, andretain
for except/retain pattern -
groupCount
for map aggregations (i.e.g:op-value()
) -
step
for 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
foreach
bug that occurred on single object looping - Fixed
if/else
bug that occurred on function call -
null
and 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 ?object
to 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
gather
andscatter
steps 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
-
Functions
implement theServiceLoader
pattern for ease of incorporating 3rd-party extensions - Numerous changes to the Gremlin function library
- All core functions are now in the
g
namespace (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
Functions
changed toFunctionLibrary
-
list g:list(object+)
is nowlist g:list(object*)
- Added support for Java 1.6+ JSR 223
ScriptEngine
andScriptEngineFactory
- Renamed
GremlinEngine
toGremlinScriptEngine
- Renamed
GremlinEngineFactory
toGremlinScriptEngineFactory
- 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
.gremlinrc
load 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
$_g
variable 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