pacer 0.9.1.1-java → 1.0.0-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.autotest +4 -1
- data/.gitignore +4 -0
- data/.rspec +1 -1
- data/Gemfile-dev +33 -0
- data/Gemfile-release +4 -0
- data/README.md +27 -9
- data/Rakefile +26 -8
- data/bin/autotest +1 -1
- data/lib/pacer/blueprints/multi_graph.rb +7 -19
- data/lib/pacer/blueprints/ruby_graph.rb +77 -52
- data/lib/pacer/blueprints/tg.rb +6 -93
- data/lib/pacer/blueprints.rb +0 -1
- data/lib/pacer/core/graph/edges_route.rb +10 -12
- data/lib/pacer/core/graph/element_route.rb +14 -21
- data/lib/pacer/core/graph/graph_index_route.rb +12 -8
- data/lib/pacer/core/graph/graph_route.rb +2 -5
- data/lib/pacer/core/graph/mixed_route.rb +3 -5
- data/lib/pacer/core/graph/vertices_route.rb +26 -27
- data/lib/pacer/core/route.rb +35 -66
- data/lib/pacer/exceptions.rb +13 -6
- data/lib/pacer/extensions/block_filter_element.rb +0 -5
- data/lib/pacer/filter/collection_filter.rb +9 -2
- data/lib/pacer/filter/empty_filter.rb +12 -3
- data/lib/pacer/filter/future_filter.rb +5 -5
- data/lib/pacer/filter/loop_filter.rb +7 -13
- data/lib/pacer/filter/object_filter.rb +10 -16
- data/lib/pacer/filter/property_filter/filters.rb +134 -93
- data/lib/pacer/filter/property_filter.rb +22 -19
- data/lib/pacer/filter/where_filter/node_visitor.rb +47 -26
- data/lib/pacer/filter/where_filter.rb +24 -3
- data/lib/pacer/function_resolver.rb +7 -2
- data/lib/pacer/graph/graph_ml.rb +39 -0
- data/lib/pacer/graph/graph_transactions_mixin.rb +107 -175
- data/lib/pacer/graph/pacer_graph.rb +438 -0
- data/lib/pacer/graph/simple_encoder.rb +20 -0
- data/lib/pacer/graph/yaml_encoder.rb +81 -0
- data/lib/pacer/graph.rb +8 -10
- data/lib/pacer/pipe/blackbox_pipeline.rb +11 -4
- data/lib/pacer/pipe/block_filter_pipe.rb +5 -22
- data/lib/pacer/pipe/cross_product_transform_pipe.rb +5 -7
- data/lib/pacer/pipe/edges_pipe.rb +22 -0
- data/lib/pacer/pipe/enumerable_pipe.rb +3 -9
- data/lib/pacer/pipe/expandable_pipe.rb +2 -14
- data/lib/pacer/pipe/id_collection_filter_pipe.rb +2 -8
- data/lib/pacer/pipe/is_empty_pipe.rb +5 -12
- data/lib/pacer/pipe/is_unique_pipe.rb +3 -13
- data/lib/pacer/pipe/label_collection_filter_pipe.rb +1 -7
- data/lib/pacer/pipe/label_prefix_pipe.rb +0 -6
- data/lib/pacer/pipe/loop_pipe.rb +27 -25
- data/lib/pacer/pipe/never_pipe.rb +1 -1
- data/lib/pacer/pipe/path_wrapping_pipe.rb +40 -0
- data/lib/pacer/pipe/process_pipe.rb +2 -20
- data/lib/pacer/pipe/property_comparison_pipe.rb +0 -6
- data/lib/pacer/pipe/ruby_pipe.rb +10 -3
- data/lib/pacer/pipe/simple_visitor_pipe.rb +12 -11
- data/lib/pacer/pipe/stream_sort_pipe.rb +1 -7
- data/lib/pacer/pipe/stream_uniq_pipe.rb +0 -6
- data/lib/pacer/pipe/type_filter_pipe.rb +1 -7
- data/lib/pacer/pipe/unary_transform_pipe.rb +6 -8
- data/lib/pacer/pipe/unwrapping_pipe.rb +13 -0
- data/lib/pacer/pipe/vertices_pipe.rb +22 -0
- data/lib/pacer/pipe/visitor_pipe.rb +3 -7
- data/lib/pacer/pipe/wrapping_pipe.rb +37 -0
- data/lib/pacer/pipes.rb +17 -12
- data/lib/pacer/route/mixin/bulk_operations.rb +8 -9
- data/lib/pacer/route/mixin/route_operations.rb +17 -11
- data/lib/pacer/route/mixins.rb +0 -1
- data/lib/pacer/route.rb +198 -121
- data/lib/pacer/side_effect/aggregate.rb +22 -2
- data/lib/pacer/side_effect/as.rb +73 -0
- data/lib/pacer/side_effect/group_count.rb +0 -3
- data/lib/pacer/side_effect/is_unique.rb +7 -6
- data/lib/pacer/side_effect.rb +1 -1
- data/lib/pacer/support/enumerable.rb +14 -12
- data/lib/pacer/support/nil_class.rb +5 -0
- data/lib/pacer/support/proc.rb +2 -2
- data/lib/pacer/support.rb +1 -1
- data/lib/pacer/transform/cap.rb +1 -1
- data/lib/pacer/transform/has_count_cap.rb +1 -1
- data/lib/pacer/transform/join.rb +20 -16
- data/lib/pacer/transform/map.rb +6 -2
- data/lib/pacer/transform/path.rb +44 -20
- data/lib/pacer/transform/sort_section.rb +58 -51
- data/lib/pacer/utils/tsort.rb +7 -2
- data/lib/pacer/utils.rb +0 -1
- data/lib/pacer/version.rb +4 -3
- data/lib/pacer/visitors/section.rb +42 -0
- data/lib/pacer/visitors/visits_section.rb +32 -0
- data/lib/pacer/visitors.rb +7 -0
- data/lib/pacer/wrappers/edge_wrapper.rb +164 -11
- data/lib/pacer/wrappers/element_wrapper.rb +133 -8
- data/lib/pacer/wrappers/index_wrapper.rb +47 -0
- data/lib/pacer/wrappers/vertex_wrapper.rb +175 -12
- data/lib/pacer/wrappers/wrapper_selector.rb +40 -0
- data/lib/pacer/wrappers/wrapping_pipe_function.rb +90 -0
- data/lib/pacer/wrappers.rb +3 -1
- data/lib/pacer-1.0.0-standalone.jar +0 -0
- data/lib/pacer.rb +13 -47
- data/pacer.gemspec +0 -8
- data/pom.xml +10 -3
- data/spec/pacer/blueprints/dex_spec.rb +12 -26
- data/spec/pacer/blueprints/neo4j_spec.rb +14 -28
- data/spec/pacer/blueprints/tg_spec.rb +6 -54
- data/spec/pacer/core/graph/edges_route_spec.rb +1 -1
- data/spec/pacer/core/graph/element_route_spec.rb +2 -2
- data/spec/pacer/core/graph/graph_route_spec.rb +2 -2
- data/spec/pacer/core/graph/vertices_route_spec.rb +10 -3
- data/spec/pacer/core/route_spec.rb +35 -58
- data/spec/pacer/filter/empty_filter_spec.rb +5 -6
- data/spec/pacer/filter/future_filter_spec.rb +8 -8
- data/spec/pacer/filter/loop_filter_spec.rb +120 -6
- data/spec/pacer/filter/object_filter_spec.rb +15 -0
- data/spec/pacer/filter/property_filter/filters_spec.rb +169 -0
- data/spec/pacer/filter/property_filter_spec.rb +15 -12
- data/spec/pacer/filter/uniq_filter_spec.rb +1 -1
- data/spec/pacer/filter/where_filter_spec.rb +55 -7
- data/spec/pacer/graph/{graph_mixin_spec.rb → pacer_graph_spec.rb} +114 -185
- data/spec/pacer/route/mixin/base_spec.rb +36 -35
- data/spec/pacer/route/mixin/route_operations_spec.rb +4 -46
- data/spec/pacer/side_effect/as_spec.rb +34 -0
- data/spec/pacer/support/enumerable_spec.rb +6 -6
- data/spec/pacer/transform/join_spec.rb +7 -5
- data/spec/pacer/transform/map_spec.rb +55 -0
- data/spec/pacer/transform/path_spec.rb +30 -15
- data/spec/pacer/transform/process_spec.rb +42 -0
- data/spec/pacer/transform/sort_section_spec.rb +82 -0
- data/spec/pacer/wrapper/edge_wrapper_spec.rb +122 -2
- data/spec/pacer/wrapper/element_wrapper_spec.rb +289 -3
- data/spec/pacer/wrapper/vertex_wrapper_spec.rb +289 -2
- data/spec/spec_helper.rb +16 -7
- data/spec/support/graph_runner.rb +80 -29
- data/tags +1165 -0
- metadata +46 -107
- data/.rvmrc +0 -0
- data/lib/pacer/blueprints/extensions.rb +0 -77
- data/lib/pacer/graph/edge_mixin.rb +0 -127
- data/lib/pacer/graph/element_mixin.rb +0 -202
- data/lib/pacer/graph/graph_indices_mixin.rb +0 -93
- data/lib/pacer/graph/graph_mixin.rb +0 -361
- data/lib/pacer/graph/index_mixin.rb +0 -30
- data/lib/pacer/graph/vertex_mixin.rb +0 -119
- data/lib/pacer/pipe/map_pipe.rb +0 -36
- data/lib/pacer/pipe/variable_store_iterator_wrapper.rb +0 -26
- data/lib/pacer/route/mixin/variable_route_module.rb +0 -26
- data/lib/pacer/side_effect/section.rb +0 -25
- data/lib/pacer/support/iterator_mixins.rb +0 -110
- data/lib/pacer/wrappers/new_element.rb +0 -106
- data/lib/pacer-0.9.1.1-standalone.jar +0 -0
- data/spec/pacer/graph/edge_mixin_spec.rb +0 -116
- data/spec/pacer/graph/element_mixin_spec.rb +0 -297
- data/spec/pacer/graph/index_mixin_spec.rb +0 -0
- data/spec/pacer/graph/vertex_mixin_spec.rb +0 -192
@@ -15,12 +15,6 @@ module Pacer::Pipes
|
|
15
15
|
|
16
16
|
def next
|
17
17
|
super
|
18
|
-
rescue NativeException => e
|
19
|
-
if e.cause.getClass == Pacer::NoSuchElementException.getClass
|
20
|
-
raise e.cause
|
21
|
-
else
|
22
|
-
raise e
|
23
|
-
end
|
24
18
|
ensure
|
25
19
|
@path = @next_path
|
26
20
|
@metadata = @next_metadata
|
@@ -32,8 +26,8 @@ module Pacer::Pipes
|
|
32
26
|
if @queue.isEmpty
|
33
27
|
@next_metadata = nil
|
34
28
|
r = @starts.next
|
35
|
-
if @starts.respond_to? :
|
36
|
-
@next_path = @starts.
|
29
|
+
if pathEnabled and @starts.respond_to? :getCurrentPath
|
30
|
+
@next_path = @starts.getCurrentPath
|
37
31
|
else
|
38
32
|
@next_path = java.util.ArrayList.new
|
39
33
|
end
|
@@ -42,12 +36,6 @@ module Pacer::Pipes
|
|
42
36
|
element, @next_metadata, @next_path = @queue.remove
|
43
37
|
element
|
44
38
|
end
|
45
|
-
rescue NativeException => e
|
46
|
-
if e.cause.getClass == Pacer::NoSuchElementException.getClass
|
47
|
-
raise e.cause
|
48
|
-
else
|
49
|
-
raise e
|
50
|
-
end
|
51
39
|
end
|
52
40
|
|
53
41
|
def getPathToHere
|
@@ -10,24 +10,18 @@ module Pacer::Pipes
|
|
10
10
|
if @comparison == Pacer::Pipes::EQUAL
|
11
11
|
while true
|
12
12
|
element = @starts.next
|
13
|
-
if element and @ids.include? element.
|
13
|
+
if element and @ids.include? element.getId
|
14
14
|
return element
|
15
15
|
end
|
16
16
|
end
|
17
17
|
else
|
18
18
|
while true
|
19
19
|
element = @starts.next
|
20
|
-
if element and not @ids.include? element.
|
20
|
+
if element and not @ids.include? element.getId
|
21
21
|
return element
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
25
|
-
rescue NativeException => e
|
26
|
-
if e.cause.getClass == Pacer::NoSuchElementException.getClass
|
27
|
-
raise e.cause
|
28
|
-
else
|
29
|
-
raise e
|
30
|
-
end
|
31
25
|
end
|
32
26
|
end
|
33
27
|
end
|
@@ -6,20 +6,13 @@ module Pacer::Pipes
|
|
6
6
|
end
|
7
7
|
|
8
8
|
def processNextStart
|
9
|
-
raise
|
10
|
-
|
9
|
+
raise EmptyPipe.instance if @raise
|
10
|
+
starts.next
|
11
11
|
@raise = true
|
12
|
-
rescue
|
13
|
-
|
14
|
-
# This is the only case where we return true.
|
15
|
-
# The only time we get here is if the first call to next
|
16
|
-
# has no results.
|
17
|
-
true
|
18
|
-
else
|
19
|
-
raise e
|
20
|
-
end
|
12
|
+
rescue EmptyPipe, java.util.NoSuchElementException
|
13
|
+
true
|
21
14
|
else
|
22
|
-
raise
|
15
|
+
raise EmptyPipe.instance
|
23
16
|
end
|
24
17
|
|
25
18
|
def reset
|
@@ -2,7 +2,7 @@ module Pacer::Pipes
|
|
2
2
|
class IsUniquePipe < RubyPipe
|
3
3
|
import java.util.ArrayList
|
4
4
|
import com.tinkerpop.pipes.sideeffect.SideEffectPipe
|
5
|
-
import com.tinkerpop.pipes.util.ExpandableIterator
|
5
|
+
import com.tinkerpop.pipes.util.iterators.ExpandableIterator
|
6
6
|
import com.tinkerpop.pipes.filter.DuplicateFilterPipe
|
7
7
|
|
8
8
|
include SideEffectPipe
|
@@ -16,12 +16,6 @@ module Pacer::Pipes
|
|
16
16
|
value = starts.next
|
17
17
|
check_uniqueness value if @unique
|
18
18
|
value
|
19
|
-
rescue NativeException => e
|
20
|
-
if e.cause.getClass == Pacer::NoSuchElementException.getClass
|
21
|
-
raise e.cause
|
22
|
-
else
|
23
|
-
raise e
|
24
|
-
end
|
25
19
|
end
|
26
20
|
|
27
21
|
def reset
|
@@ -42,12 +36,8 @@ module Pacer::Pipes
|
|
42
36
|
def check_uniqueness(value)
|
43
37
|
@expando.add value
|
44
38
|
@unique_pipe.next
|
45
|
-
rescue
|
46
|
-
|
47
|
-
@unique = false
|
48
|
-
else
|
49
|
-
raise e
|
50
|
-
end
|
39
|
+
rescue EmptyPipe, java.util.NoSuchElementException
|
40
|
+
@unique = false
|
51
41
|
end
|
52
42
|
|
53
43
|
def prepare_state
|
@@ -8,13 +8,7 @@ module Pacer::Pipes
|
|
8
8
|
def processNextStart
|
9
9
|
while true
|
10
10
|
edge = @starts.next
|
11
|
-
return edge if edge and @labels.include? edge.
|
12
|
-
end
|
13
|
-
rescue NativeException => e
|
14
|
-
if e.cause.getClass == Pacer::NoSuchElementException.getClass
|
15
|
-
raise e.cause
|
16
|
-
else
|
17
|
-
raise e
|
11
|
+
return edge if edge and @labels.include? edge.getLabel
|
18
12
|
end
|
19
13
|
end
|
20
14
|
end
|
data/lib/pacer/pipe/loop_pipe.rb
CHANGED
@@ -4,73 +4,75 @@ module Pacer::Pipes
|
|
4
4
|
|
5
5
|
def initialize(graph, looping_pipe, control_block)
|
6
6
|
super()
|
7
|
+
@graph = graph
|
7
8
|
@control_block = control_block
|
9
|
+
@wrapper = Pacer::Wrappers::WrapperSelector.build
|
8
10
|
|
9
11
|
@expando = ExpandablePipe.new
|
10
12
|
empty = ArrayList.new
|
11
13
|
@expando.setStarts empty.iterator
|
12
14
|
looping_pipe.setStarts(@expando)
|
15
|
+
#if control_block.arity < 0 and 1 < control_block.arity
|
16
|
+
@yield_paths = true
|
17
|
+
looping_pipe.enablePath true
|
18
|
+
#end
|
13
19
|
@looping_pipe = looping_pipe
|
14
20
|
end
|
15
21
|
|
16
22
|
def next
|
17
23
|
super
|
18
|
-
rescue NativeException => e
|
19
|
-
if e.cause.getClass == Pacer::NoSuchElementException.getClass
|
20
|
-
raise e.cause
|
21
|
-
else
|
22
|
-
raise e
|
23
|
-
end
|
24
24
|
ensure
|
25
25
|
@path = @next_path
|
26
26
|
end
|
27
27
|
|
28
28
|
def setStarts(starts)
|
29
|
-
@starts_has_path = starts.respond_to? :getPath
|
30
29
|
super
|
30
|
+
enablePath true if yield_paths
|
31
31
|
end
|
32
32
|
|
33
33
|
protected
|
34
34
|
|
35
|
+
attr_reader :wrapper, :control_block, :expando, :looping_pipe, :graph, :yield_paths
|
36
|
+
|
35
37
|
def processNextStart
|
36
38
|
while true
|
37
39
|
# FIXME: hasNext shouldn't be raising an exception...
|
38
|
-
has_next =
|
40
|
+
has_next = looping_pipe.hasNext
|
39
41
|
if has_next
|
40
|
-
element =
|
41
|
-
depth = (
|
42
|
-
@next_path =
|
42
|
+
element = looping_pipe.next
|
43
|
+
depth = (expando.metadata || 0) + 1
|
44
|
+
@next_path = looping_pipe.getCurrentPath if yield_paths
|
43
45
|
else
|
44
|
-
element =
|
45
|
-
if
|
46
|
-
@next_path =
|
46
|
+
element = starts.next
|
47
|
+
if pathEnabled
|
48
|
+
@next_path = starts.getCurrentPath
|
47
49
|
else
|
48
50
|
@next_path = ArrayList.new
|
49
51
|
@next_path.add element
|
50
52
|
end
|
51
53
|
depth = 0
|
52
54
|
end
|
53
|
-
|
54
|
-
|
55
|
+
wrapped = wrapper.new(element)
|
56
|
+
wrapped.graph = graph if wrapped.respond_to? :graph=
|
57
|
+
path = @next_path.map do |e|
|
58
|
+
w = wrapper.new e
|
59
|
+
w.graph = graph if w.respond_to? :graph=
|
60
|
+
w
|
61
|
+
end
|
62
|
+
case control_block.call wrapped, depth, path
|
55
63
|
when :loop
|
56
|
-
|
64
|
+
expando.add element, depth, @next_path
|
57
65
|
when :emit
|
58
66
|
return element
|
59
67
|
when :emit_and_loop, :loop_and_emit
|
60
|
-
|
68
|
+
expando.add element, depth, @next_path
|
61
69
|
return element
|
62
70
|
when false, nil
|
63
71
|
else
|
64
|
-
|
72
|
+
expando.add element, depth, @next_path
|
65
73
|
return element
|
66
74
|
end
|
67
75
|
end
|
68
|
-
rescue NativeException => e
|
69
|
-
if e.cause.getClass == Pacer::NoSuchElementException.getClass
|
70
|
-
raise e.cause
|
71
|
-
else
|
72
|
-
raise e
|
73
|
-
end
|
74
76
|
end
|
75
77
|
|
76
78
|
def getPathToHere
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Pacer
|
2
|
+
module Pipes
|
3
|
+
class PathWrappingPipe < RubyPipe
|
4
|
+
attr_reader :graph
|
5
|
+
attr_accessor :vertex_wrapper, :edge_wrapper, :other_wrapper
|
6
|
+
|
7
|
+
def initialize(graph, vertex_extensions = [], edge_extensions = [])
|
8
|
+
super()
|
9
|
+
@graph = graph
|
10
|
+
@vertex_wrapper = Pacer::Wrappers::WrapperSelector.build :vertex, vertex_extensions || Set[]
|
11
|
+
@edge_wrapper = Pacer::Wrappers::WrapperSelector.build :edge, edge_extensions || Set[]
|
12
|
+
end
|
13
|
+
|
14
|
+
def getCurrentPath
|
15
|
+
starts.getCurrentPath
|
16
|
+
end
|
17
|
+
|
18
|
+
def processNextStart
|
19
|
+
path = starts.next
|
20
|
+
path.collect do |item|
|
21
|
+
if item.is_a? Pacer::Vertex
|
22
|
+
wrapped = vertex_wrapper.new item
|
23
|
+
wrapped.graph = graph
|
24
|
+
wrapped
|
25
|
+
elsif item.is_a? Pacer::Edge
|
26
|
+
wrapped = edge_wrapper.new item
|
27
|
+
wrapped.graph = graph
|
28
|
+
wrapped
|
29
|
+
elsif other_wrapper
|
30
|
+
wrapped = other_wrapper.new item
|
31
|
+
wrapped.graph = graph if wrapped.respond_to? :graph
|
32
|
+
wrapped
|
33
|
+
else
|
34
|
+
item
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -5,33 +5,15 @@ module Pacer::Pipes
|
|
5
5
|
|
6
6
|
def initialize(back, block)
|
7
7
|
super()
|
8
|
-
@block = block
|
9
|
-
@back = back
|
10
|
-
@graph = back.graph if back
|
11
|
-
@extensions = back.extensions + [Pacer::Extensions::BlockFilterElement]
|
12
|
-
@is_element = graph.element_type?(back.element_type) if graph
|
8
|
+
@block = Pacer::Wrappers::WrappingPipeFunction.new back, block
|
13
9
|
end
|
14
10
|
|
15
11
|
def processNextStart
|
16
12
|
while true
|
17
13
|
obj = starts.next
|
18
|
-
|
19
|
-
if is_element
|
20
|
-
obj = obj.add_extensions(extensions)
|
21
|
-
obj.back = back
|
22
|
-
obj.graph = graph
|
23
|
-
end
|
24
|
-
rescue
|
25
|
-
end
|
26
|
-
result = block.call(obj)
|
14
|
+
block.call(obj)
|
27
15
|
return obj
|
28
16
|
end
|
29
|
-
rescue NativeException => e
|
30
|
-
if e.cause.getClass == Pacer::NoSuchElementException.getClass
|
31
|
-
raise e.cause
|
32
|
-
else
|
33
|
-
raise e
|
34
|
-
end
|
35
17
|
end
|
36
18
|
end
|
37
19
|
end
|
data/lib/pacer/pipe/ruby_pipe.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
module Pacer::Pipes
|
2
2
|
class RubyPipe < AbstractPipe
|
3
|
+
field_reader :pathEnabled
|
4
|
+
|
3
5
|
attr_reader :starts
|
4
6
|
|
5
7
|
def setStarts(starts)
|
@@ -9,14 +11,19 @@ module Pacer::Pipes
|
|
9
11
|
|
10
12
|
def reset
|
11
13
|
super
|
12
|
-
|
14
|
+
starts.reset if starts.respond_to? :reset
|
15
|
+
end
|
16
|
+
|
17
|
+
def enablePath(b)
|
18
|
+
super
|
19
|
+
starts.enablePath b if starts.respond_to? :enablePath
|
13
20
|
end
|
14
21
|
|
15
22
|
protected
|
16
23
|
|
17
24
|
def getPathToHere
|
18
|
-
if starts.respond_to? :
|
19
|
-
starts.
|
25
|
+
if starts.respond_to? :getCurrentPath
|
26
|
+
starts.getCurrentPath
|
20
27
|
else
|
21
28
|
java.util.ArrayList.new
|
22
29
|
end
|
@@ -1,14 +1,15 @@
|
|
1
1
|
module Pacer
|
2
2
|
module Pipes
|
3
3
|
class SimpleVisitorPipe < Pacer::Pipes::RubyPipe
|
4
|
-
attr_reader :visitor, :in_section
|
4
|
+
attr_reader :visitor, :in_section, :wrapper, :graph
|
5
5
|
|
6
6
|
attr_accessor :use_on_element, :use_after_element, :use_reset
|
7
7
|
|
8
|
-
def initialize(
|
8
|
+
def initialize(wrapper, graph)
|
9
9
|
super()
|
10
|
-
self.visitor = visitor if visitor
|
11
10
|
@in_section = false
|
11
|
+
@wrapper = wrapper
|
12
|
+
@graph = graph
|
12
13
|
end
|
13
14
|
|
14
15
|
def visitor=(visitor)
|
@@ -22,15 +23,15 @@ module Pacer
|
|
22
23
|
visitor.after_element if use_after_element and in_section
|
23
24
|
current = starts.next
|
24
25
|
@in_section = true unless in_section
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
@in_section = false
|
30
|
-
raise e.cause
|
31
|
-
else
|
32
|
-
raise
|
26
|
+
if use_on_element
|
27
|
+
wrapped = wrapper.new current
|
28
|
+
wrapped.graph = graph
|
29
|
+
visitor.on_element(wrapped)
|
33
30
|
end
|
31
|
+
return current
|
32
|
+
rescue EmptyPipe, java.util.NoSuchElementException
|
33
|
+
@in_section = false
|
34
|
+
raise EmptyPipe.instance
|
34
35
|
end
|
35
36
|
|
36
37
|
def reset
|
@@ -72,13 +72,7 @@ module Pacer::Pipes
|
|
72
72
|
@clearing = @first_silo + @second_silo.sort! + @third_silo.sort!
|
73
73
|
return processNextStart if @clearing.any?
|
74
74
|
end
|
75
|
-
raise
|
76
|
-
rescue NativeException => e
|
77
|
-
if e.cause.getClass == NoSuchElementException.getClass
|
78
|
-
raise e.cause
|
79
|
-
else
|
80
|
-
raise e
|
81
|
-
end
|
75
|
+
raise EmptyPipe.instance
|
82
76
|
end
|
83
77
|
end
|
84
78
|
end
|
@@ -10,13 +10,7 @@ module Pacer::Pipes
|
|
10
10
|
s = @starts.next
|
11
11
|
return s if s.is_a? @type
|
12
12
|
end
|
13
|
-
raise
|
14
|
-
rescue NativeException => e
|
15
|
-
if e.cause.getClass == Pacer::NoSuchElementException.getClass
|
16
|
-
raise e.cause
|
17
|
-
else
|
18
|
-
raise e
|
19
|
-
end
|
13
|
+
raise EmptyPipe.instance
|
20
14
|
end
|
21
15
|
end
|
22
16
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Pacer::Pipes
|
2
2
|
class UnaryTransformPipe < RubyPipe
|
3
3
|
import com.tinkerpop.pipes.Pipe
|
4
|
-
import com.tinkerpop.pipes.util.SingleIterator
|
4
|
+
import com.tinkerpop.pipes.util.iterators.SingleIterator
|
5
5
|
|
6
6
|
attr_reader :branch_a, :method
|
7
7
|
|
@@ -21,12 +21,6 @@ module Pacer::Pipes
|
|
21
21
|
def processNextStart
|
22
22
|
next_a
|
23
23
|
a.send method rescue nil if a.respond_to? method
|
24
|
-
rescue NativeException => e
|
25
|
-
if e.cause.getClass == Pacer::NoSuchElementException.getClass
|
26
|
-
raise e.cause
|
27
|
-
else
|
28
|
-
raise e
|
29
|
-
end
|
30
24
|
end
|
31
25
|
|
32
26
|
protected
|
@@ -42,8 +36,12 @@ module Pacer::Pipes
|
|
42
36
|
if branch_a
|
43
37
|
begin
|
44
38
|
self.a = branch_a.next
|
39
|
+
rescue EmptyPipe
|
40
|
+
next_element
|
41
|
+
branch_a.setStarts SingleIterator.new(element) if branch_a
|
42
|
+
retry
|
45
43
|
rescue NativeException => e
|
46
|
-
if
|
44
|
+
if @first
|
47
45
|
next_element
|
48
46
|
branch_a.setStarts SingleIterator.new(element) if branch_a
|
49
47
|
retry
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Pacer::Pipes
|
2
|
+
class VerticesPipe < AbstractPipe
|
3
|
+
attr_reader :starts
|
4
|
+
|
5
|
+
def setStarts(starts)
|
6
|
+
@starts = starts.first
|
7
|
+
self.iter = @starts.getVertices.iterator
|
8
|
+
end
|
9
|
+
|
10
|
+
def processNextStart
|
11
|
+
iter.next
|
12
|
+
end
|
13
|
+
|
14
|
+
def reset
|
15
|
+
self.iter = @starts.getVertices.iterator
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
attr_accessor :iter
|
21
|
+
end
|
22
|
+
end
|
@@ -47,13 +47,9 @@ module Pacer
|
|
47
47
|
end
|
48
48
|
end
|
49
49
|
end
|
50
|
-
rescue
|
51
|
-
|
52
|
-
|
53
|
-
raise e.cause
|
54
|
-
else
|
55
|
-
raise
|
56
|
-
end
|
50
|
+
rescue EmptyPipe, java.util.NoSuchElementException
|
51
|
+
@in_section = false
|
52
|
+
raise EmptyPipe.instance
|
57
53
|
end
|
58
54
|
|
59
55
|
def reset
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Pacer
|
2
|
+
module Pipes
|
3
|
+
class WrappingPipe < RubyPipe
|
4
|
+
attr_reader :graph, :element_type, :extensions, :wrapper
|
5
|
+
|
6
|
+
def initialize(graph, element_type = nil, extensions = [])
|
7
|
+
super()
|
8
|
+
@graph = graph
|
9
|
+
@element_type = element_type
|
10
|
+
@extensions = extensions || []
|
11
|
+
@wrapper = Pacer::Wrappers::WrapperSelector.build element_type, @extensions
|
12
|
+
end
|
13
|
+
|
14
|
+
def getCurrentPath
|
15
|
+
starts.getCurrentPath
|
16
|
+
end
|
17
|
+
|
18
|
+
def wrapper=(w)
|
19
|
+
if extensions.any? and w.respond_to? :add_extensions
|
20
|
+
@wrapper = w.add_extensions extensions
|
21
|
+
else
|
22
|
+
@wrapper = w
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def processNextStart
|
27
|
+
e = wrapper.new starts.next
|
28
|
+
if element_type == :vertex or element_type == :edge or element_type == :mixed
|
29
|
+
e.graph = graph
|
30
|
+
elsif e.respond_to? :graph=
|
31
|
+
e.graph = graph
|
32
|
+
end
|
33
|
+
e
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
data/lib/pacer/pipes.rb
CHANGED
@@ -5,8 +5,7 @@ module Pacer
|
|
5
5
|
import com.tinkerpop.pipes.AbstractPipe
|
6
6
|
import com.tinkerpop.pipes.transform.IdentityPipe
|
7
7
|
import com.tinkerpop.pipes.util.Pipeline
|
8
|
-
import com.tinkerpop.pipes.util.
|
9
|
-
import com.tinkerpop.pipes.util.MultiIterator
|
8
|
+
import com.tinkerpop.pipes.util.iterators.MultiIterator
|
10
9
|
import com.tinkerpop.pipes.util.PipeHelper
|
11
10
|
|
12
11
|
import com.tinkerpop.pipes.filter.RandomFilterPipe
|
@@ -14,8 +13,12 @@ module Pacer
|
|
14
13
|
import com.tinkerpop.pipes.filter.RangeFilterPipe
|
15
14
|
import com.tinkerpop.pipes.filter.FilterPipe
|
16
15
|
|
17
|
-
import com.tinkerpop.pipes.transform.IdPipe
|
18
|
-
import com.tinkerpop.pipes.transform.PropertyPipe
|
16
|
+
import com.tinkerpop.gremlin.pipes.transform.IdPipe
|
17
|
+
import com.tinkerpop.gremlin.pipes.transform.PropertyPipe
|
18
|
+
|
19
|
+
IN = com.tinkerpop.blueprints.Direction::IN
|
20
|
+
OUT = com.tinkerpop.blueprints.Direction::OUT
|
21
|
+
BOTH = com.tinkerpop.blueprints.Direction::BOTH
|
19
22
|
|
20
23
|
EQUAL = FilterPipe::Filter::EQUAL
|
21
24
|
NOT_EQUAL = FilterPipe::Filter::NOT_EQUAL
|
@@ -23,23 +26,22 @@ module Pacer
|
|
23
26
|
end
|
24
27
|
|
25
28
|
import java.util.Iterator
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
NoSuchElementException = e.cause
|
30
|
-
Pipes::NoSuchElementException = e.cause
|
31
|
-
end
|
29
|
+
|
30
|
+
EmptyPipe = com.tinkerpop.pipes.util.FastNoSuchElementException
|
31
|
+
Pipes::EmptyPipe = EmptyPipe
|
32
32
|
end
|
33
33
|
|
34
34
|
require 'pacer/pipe/ruby_pipe'
|
35
35
|
|
36
|
+
require 'pacer/pipe/vertices_pipe'
|
37
|
+
require 'pacer/pipe/edges_pipe'
|
38
|
+
|
36
39
|
require 'pacer/pipe/never_pipe'
|
37
40
|
require 'pacer/pipe/block_filter_pipe'
|
38
41
|
require 'pacer/pipe/collection_filter_pipe'
|
39
42
|
require 'pacer/pipe/enumerable_pipe'
|
40
43
|
require 'pacer/pipe/expandable_pipe'
|
41
44
|
require 'pacer/pipe/loop_pipe'
|
42
|
-
require 'pacer/pipe/map_pipe'
|
43
45
|
require 'pacer/pipe/process_pipe'
|
44
46
|
require 'pacer/pipe/visitor_pipe'
|
45
47
|
require 'pacer/pipe/simple_visitor_pipe'
|
@@ -51,7 +53,6 @@ require 'pacer/pipe/type_filter_pipe'
|
|
51
53
|
require 'pacer/pipe/label_collection_filter_pipe'
|
52
54
|
require 'pacer/pipe/id_collection_filter_pipe'
|
53
55
|
require 'pacer/pipe/label_prefix_pipe'
|
54
|
-
require 'pacer/pipe/variable_store_iterator_wrapper'
|
55
56
|
|
56
57
|
require 'pacer/pipe/property_comparison_pipe'
|
57
58
|
|
@@ -59,3 +60,7 @@ require 'pacer/pipe/blackbox_pipeline'
|
|
59
60
|
|
60
61
|
require 'pacer/pipe/unary_transform_pipe'
|
61
62
|
require 'pacer/pipe/cross_product_transform_pipe'
|
63
|
+
|
64
|
+
require 'pacer/pipe/wrapping_pipe'
|
65
|
+
require 'pacer/pipe/path_wrapping_pipe'
|
66
|
+
require 'pacer/pipe/unwrapping_pipe'
|