This is an automated email from the ASF dual-hosted git repository. spmallette pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit 86680bbc4efbdd4613397ce2fdd6a1f128b3713f Merge: fb39ed005a 653545b993 Author: Stephen Mallette <[email protected]> AuthorDate: Thu Jul 23 13:03:56 2026 -0400 Merge branch '3.7-dev' into 3.8-dev docs/src/reference/the-traversal.asciidoc | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --cc docs/src/reference/the-traversal.asciidoc index 21c727d2bd,0b76c4a1ec..7a7b90fd15 --- a/docs/src/reference/the-traversal.asciidoc +++ b/docs/src/reference/the-traversal.asciidoc @@@ -1518,17 -1374,19 +1518,21 @@@ link:++https://tinkerpop.apache.org/jav [[dateDiff-step]] === DateDiff Step - The `dateDiff()`-step (*map*) returns the difference between two Dates in epoch time in milliseconds. - If the incoming traverser is not a Date or OffsetDateTime, then an `IllegalArgumentException` will be thrown. -The dateDiff()-step (map) returns the difference between two Dates in epoch time in milliseconds. The result is computed -as the incoming traverser date minus the argument date. A positive result means the incoming date is later than the -argument date, while a negative result means the incoming date is earlier. In the example below, the incoming date ++The dateDiff()-step (*map*) returns the difference between two Dates in epoch time in milliseconds. The result is ++computed as the incoming traverser date minus the argument date. A positive result means the incoming date is later than ++the argument date, while a negative result means the incoming date is earlier. In the example below, the incoming date + (2023-08-02) is one day earlier than the argument date (2023-08-03), so the result is -86400000 (one day in -milliseconds). If the incoming traverser is not a Date or OffsetDateTime, then an IllegalArgumentException will be ++milliseconds). If the incoming traverser is not a `Date` or `OffsetDateTime`, then an IllegalArgumentException will be + thrown. [gremlin-groovy,modern] ---- g.inject("2023-08-02T00:00:00Z").asDate().dateDiff(constant("2023-08-03T00:00:00Z").asDate()) <1> ---- - <1> Find difference between two dates in milliseconds -<1> Find the difference between two dates ++<1> Find the difference between two dates in milliseconds + +NOTE: The `dateDiff(Date)` method is deprecated as of 3.8.0 in favor of `dateDiff(OffsetDateTime)`. *Additional References* @@@ -4066,26 -3907,10 +4070,26 @@@ g.V().until(has('name','ripple')) <1> do-while semantics stating to do `out()` 2 times. <2> while-do semantics stating to break if the traverser is at a vertex named "ripple". -IMPORTANT: There are two modulators for `repeat()`: `until()` and `emit()`. If `until()` comes after `repeat()` it is -do/while looping. If `until()` comes before `repeat()` it is while/do looping. If `emit()` is placed after `repeat()`, -it is evaluated on the traversers leaving the repeat-traversal. If `emit()` is placed before `repeat()`, it is -evaluated on the traversers prior to entering the repeat-traversal. +[gremlin-groovy] +---- +graph = TinkerGraph.open() +g = traversal().with(graph) +g.io('data/grateful-dead.xml').read().iterate() +g.V().has('name','JAM').repeat(out('followedBy').limit(2)).times(3) <1> +g.V().has('name','DRUMS').repeat(__.in('followedBy').range(1,3)).until(loops().is(2)) <2> +g.V().has('name','HEY BO DIDDLEY').repeat(out('followedBy').skip(5)).times(2) <3> +---- + +<1> Starting from the song 'JAM' get 2 songs that have followed, looping 3 times. +<2> Starting from the song 'DRUMS' get the 2nd and 3rd songs that have preceded, looping twice. +<3> Starting from the song 'HEY BO DIDDLEY' get the songs that have followed, skipping the first 5 and looping twice. + - IMPORTANT: There are three modulators for `repeat()`: `times()`, `until()`, and `emit()`. The most straightforward is - `times()`, which indicates the number of times to execute the loop. Conditional loops can be executed using `until()`. - If `until()` comes after `repeat()` it is do/while looping. If `until()` comes before `repeat()` it is while/do looping. - Emission of traversers from the loop are controlled with `emit()`. If `emit()` is placed after `repeat()`, it is evaluated - on the traversers leaving the repeat-traversal. If `emit()` is placed before `repeat()`, it is evaluated on the ++IMPORTANT: There are three modulators for `repeat()`: `times()`, `until()`, and `emit()`. The most straightforward is ++`times()`, which indicates the number of times to execute the loop. Conditional loops can be executed using `until()`. ++If `until()` comes after `repeat()` it is do/while looping. If `until()` comes before `repeat()` it is while/do looping. ++Emission of traversers from the loop are controlled with `emit()`. If `emit()` is placed after `repeat()`, it is evaluated ++on the traversers leaving the repeat-traversal. If `emit()` is placed before `repeat()`, it is evaluated on the +traversers prior to entering the repeat-traversal. The `repeat()`-step also supports an "emit predicate", where the predicate for an empty argument `emit()` is `true` (i.e. `emit() == emit{true}`). With `emit()`, the traverser is split in two -- the traverser exits the code
