pacer-neo4j2 2.2.2-java → 2.2.3.1-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/pacer-neo4j2/graph.rb +25 -18
- data/lib/pacer-neo4j2/transaction_event_handler.rb +54 -8
- data/lib/pacer-neo4j2/tx_data_wrapper.rb +102 -32
- data/lib/pacer-neo4j2/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7b25e9b3b920ef6780d9db9505b6211985d5876b
|
4
|
+
data.tar.gz: 111a026f6a7da6a44bfe4c1ad7f2f7a02aa3e215
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8356d03f89635e84bf45ac4a80536d69cc2cc1641385e5d7048704aaedab17f9787232b79eb469e043722275a749e0ec9ff49ee97d94178fce13969bd672fec8
|
7
|
+
data.tar.gz: 432a457bfd14411c6bae2c202a5ab12f2c624e439ffa4bbfe3aacda029c593b565269465279a7c39feed3db190816fc962edefc4f84e09376f13ae767dc11f50
|
data/lib/pacer-neo4j2/graph.rb
CHANGED
@@ -120,13 +120,28 @@ module Pacer
|
|
120
120
|
def reopen_read_transaction
|
121
121
|
blueprints_graph.autoStartTransaction(false) if in_read_transaction?
|
122
122
|
end
|
123
|
+
def transaction_event_handler
|
124
|
+
unless @teh
|
125
|
+
@teh = TransactionEventHandler.new(self)
|
126
|
+
neo_graph.registerTransactionEventHandler @teh
|
127
|
+
end
|
128
|
+
@teh
|
129
|
+
end
|
123
130
|
|
124
|
-
def
|
131
|
+
def before_commit(wrapper = nil, &block)
|
125
132
|
return unless block
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
133
|
+
wrapper = false if block.arity == 0
|
134
|
+
transaction_event_handler.before_commit_wrapper = wrapper unless wrapper.nil?
|
135
|
+
transaction_event_handler.before_commit = block
|
136
|
+
nil
|
137
|
+
end
|
138
|
+
|
139
|
+
def on_commit(wrapper = nil, &block)
|
140
|
+
return unless block
|
141
|
+
wrapper = false if block.arity == 0
|
142
|
+
transaction_event_handler.on_commit_wrapper = wrapper unless wrapper.nil?
|
143
|
+
transaction_event_handler.on_commit = block
|
144
|
+
nil
|
130
145
|
end
|
131
146
|
|
132
147
|
# This is actually only called if the commit fails and then it internally tries to
|
@@ -135,20 +150,12 @@ module Pacer
|
|
135
150
|
# An exception in before_commit can definitely trigger this.
|
136
151
|
#
|
137
152
|
# Regular rollbacks do not get seen by the transaction system and no callback happens.
|
138
|
-
def on_commit_failed(&block)
|
153
|
+
def on_commit_failed(wrapper = nil, &block)
|
139
154
|
return unless block
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
end
|
145
|
-
|
146
|
-
def before_commit(&block)
|
147
|
-
return unless block
|
148
|
-
TransactionEventHandler.new(self).tap do |h|
|
149
|
-
h.before_commit = block
|
150
|
-
neo_graph.registerTransactionEventHandler h
|
151
|
-
end
|
155
|
+
wrapper = false if block.arity == 0
|
156
|
+
transaction_event_handler.on_commit_failed_wrapper = wrapper unless wrapper.nil?
|
157
|
+
transaction_event_handler.on_commit_failed = block
|
158
|
+
nil
|
152
159
|
end
|
153
160
|
|
154
161
|
def drop_handler(h)
|
@@ -3,27 +3,61 @@ module Pacer
|
|
3
3
|
class TransactionEventHandler
|
4
4
|
include org.neo4j.graphdb.event.TransactionEventHandler
|
5
5
|
|
6
|
-
attr_reader :graph
|
7
|
-
attr_accessor :on_commit, :on_commit_failed, :before_commit
|
6
|
+
attr_reader :graph, :enable_cache
|
7
|
+
attr_accessor :on_commit , :on_commit_failed , :before_commit
|
8
|
+
attr_accessor :on_commit_wrapper , :on_commit_failed_wrapper , :before_commit_wrapper
|
9
|
+
attr_accessor :type_property
|
8
10
|
|
9
11
|
def initialize(graph)
|
10
12
|
@graph = graph
|
13
|
+
@on_commit_wrapper = @on_commit_failed_wrapper = @before_commit_wrapper = TxDataWrapper
|
11
14
|
end
|
12
15
|
|
13
16
|
def unregister!
|
14
17
|
graph.drop_handler self
|
15
18
|
end
|
16
19
|
|
20
|
+
def enable_cache!
|
21
|
+
@enable_cache = true
|
22
|
+
end
|
23
|
+
|
17
24
|
private
|
18
25
|
|
19
26
|
# Return value is passed to afterCommit or afterRollback, but some values can cause crashes.
|
20
27
|
def beforeCommit(data)
|
21
|
-
|
22
|
-
|
28
|
+
if before_commit_wrapper and (before_commit or enable_cache)
|
29
|
+
wrapped = before_commit_wrapper.new data, graph, type_property
|
30
|
+
end
|
31
|
+
if before_commit
|
32
|
+
if before_commit_wrapper
|
33
|
+
before_commit.call wrapped
|
34
|
+
else
|
35
|
+
before_commit.call
|
36
|
+
end
|
37
|
+
end
|
38
|
+
if enable_cache
|
39
|
+
wrapped.data
|
40
|
+
end
|
41
|
+
rescue Exception => e
|
42
|
+
p e.message
|
43
|
+
pp e.backtrace
|
44
|
+
throw
|
23
45
|
end
|
24
46
|
|
25
|
-
def afterCommit(data,
|
26
|
-
|
47
|
+
def afterCommit(data, cache)
|
48
|
+
if on_commit
|
49
|
+
if cache
|
50
|
+
on_commit.call cache
|
51
|
+
elsif on_commit_wrapper
|
52
|
+
on_commit.call on_commit_wrapper.new data, graph
|
53
|
+
else
|
54
|
+
on_commit.call
|
55
|
+
end
|
56
|
+
end
|
57
|
+
rescue Exception => e
|
58
|
+
p e.message
|
59
|
+
pp e.backtrace
|
60
|
+
throw
|
27
61
|
end
|
28
62
|
|
29
63
|
# This is actually only called if the commit fails and then it internally tries to
|
@@ -32,8 +66,20 @@ module Pacer
|
|
32
66
|
# An exception in beforeCommit can definitely trigger this.
|
33
67
|
#
|
34
68
|
# Regular rollbacks do not get seen by the transaction system and no callback happens.
|
35
|
-
def afterRollback(data,
|
36
|
-
|
69
|
+
def afterRollback(data, cache)
|
70
|
+
if on_commit_failed
|
71
|
+
if cache
|
72
|
+
on_commit_failed.call cache
|
73
|
+
elsif on_commit_failed_wrapper
|
74
|
+
on_commit_failed.call on_commit_failed_wrapper.new data, graph
|
75
|
+
else
|
76
|
+
on_commit_failed.call
|
77
|
+
end
|
78
|
+
end
|
79
|
+
rescue Exception => e
|
80
|
+
p e.message
|
81
|
+
pp e.backtrace
|
82
|
+
throw
|
37
83
|
end
|
38
84
|
end
|
39
85
|
end
|
@@ -7,11 +7,12 @@ module Pacer
|
|
7
7
|
class TxDataWrapper
|
8
8
|
include Algo::Wrapping
|
9
9
|
|
10
|
-
attr_reader :graph, :tx
|
10
|
+
attr_reader :graph, :tx, :type_property
|
11
11
|
|
12
|
-
def initialize(tx, graph)
|
12
|
+
def initialize(tx, graph, type_property)
|
13
13
|
@tx = tx
|
14
14
|
@graph = graph
|
15
|
+
@type_property = type_property
|
15
16
|
end
|
16
17
|
|
17
18
|
def created_v
|
@@ -31,7 +32,16 @@ module Pacer
|
|
31
32
|
end
|
32
33
|
|
33
34
|
def created_v_ids
|
34
|
-
|
35
|
+
if type_property
|
36
|
+
tx.createdNodes.map do |n|
|
37
|
+
if n.hasProperty(type_property)
|
38
|
+
type = n.getProperty(type_property)
|
39
|
+
end
|
40
|
+
[n.getId, type]
|
41
|
+
end
|
42
|
+
else
|
43
|
+
tx.createdNodes.map { |n| [n.getId] }
|
44
|
+
end
|
35
45
|
end
|
36
46
|
|
37
47
|
def deleted_v_ids
|
@@ -39,7 +49,7 @@ module Pacer
|
|
39
49
|
end
|
40
50
|
|
41
51
|
def created_e_ids
|
42
|
-
tx.createdRelationships.map { |n| n.getId }
|
52
|
+
tx.createdRelationships.map { |n| [n.getId, n.getType.name, n.getStartNode.getId, n.getEndNode.getId] }
|
43
53
|
end
|
44
54
|
|
45
55
|
def deleted_e_ids
|
@@ -50,42 +60,38 @@ module Pacer
|
|
50
60
|
tx.is_deleted e.element.rawElement
|
51
61
|
end
|
52
62
|
|
53
|
-
def
|
63
|
+
def assigned_v
|
54
64
|
tx.assignedNodeProperties.map do |p|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
end +
|
65
|
+
[p.entity.getId, p.key, graph.decode_property(p.value)]
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def cleared_v
|
61
70
|
tx.removedNodeProperties.map do |p|
|
62
|
-
|
63
|
-
id: p.entity.getId,
|
64
|
-
key: p.key,
|
65
|
-
was: graph.decode_property(p.previouslyCommitedValue),
|
66
|
-
is: nil }
|
71
|
+
[p.entity.getId, p.key]
|
67
72
|
end
|
68
73
|
end
|
69
74
|
|
70
|
-
def
|
75
|
+
def assigned_e
|
71
76
|
tx.assignedRelationshipProperties.map do |p|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
end +
|
77
|
+
[p.entity.getId, p.key, graph.decode_property(p.value)]
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def cleared_e
|
78
82
|
tx.removedRelationshipProperties.map do |p|
|
79
|
-
|
80
|
-
id: p.entity.getId,
|
81
|
-
key: p.key,
|
82
|
-
was: graph.decode_property(p.previouslyCommitedValue),
|
83
|
-
is: nil }
|
83
|
+
[p.entity.getId, p.key]
|
84
84
|
end
|
85
85
|
end
|
86
86
|
|
87
|
-
def
|
88
|
-
|
87
|
+
def each_v_change(&blk)
|
88
|
+
assigned_v.each(&blk)
|
89
|
+
cleared_v.each(&blk)
|
90
|
+
end
|
91
|
+
|
92
|
+
def each_e_change(&blk)
|
93
|
+
assigned_e.each(&blk)
|
94
|
+
cleared_e.each(&blk)
|
89
95
|
end
|
90
96
|
|
91
97
|
def summary
|
@@ -93,8 +99,72 @@ module Pacer
|
|
93
99
|
deleted_v: deleted_v_ids,
|
94
100
|
created_e: created_e_ids,
|
95
101
|
deleted_e: deleted_e_ids,
|
96
|
-
|
97
|
-
|
102
|
+
assigned_v: assigned_v,
|
103
|
+
cleared_v: cleared_v,
|
104
|
+
assigned_e: assigned_e,
|
105
|
+
cleared_e: cleared_e }
|
106
|
+
end
|
107
|
+
|
108
|
+
def data
|
109
|
+
TxCachedData.new summary
|
110
|
+
end
|
111
|
+
|
112
|
+
def as_json(options = nil)
|
113
|
+
data.as_json(options)
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
class TxCachedData
|
118
|
+
attr_reader :summary
|
119
|
+
|
120
|
+
def initialize(summary)
|
121
|
+
@summary = summary
|
122
|
+
end
|
123
|
+
|
124
|
+
def created_v_ids
|
125
|
+
summary[:created_v]
|
126
|
+
end
|
127
|
+
|
128
|
+
def deleted_v_ids
|
129
|
+
summary[:deleted_v]
|
130
|
+
end
|
131
|
+
|
132
|
+
def created_e_ids
|
133
|
+
summary[:created_e]
|
134
|
+
end
|
135
|
+
|
136
|
+
def deleted_e_ids
|
137
|
+
summary[:deleted_e]
|
138
|
+
end
|
139
|
+
|
140
|
+
def assigned_v
|
141
|
+
summary[:assigned_v]
|
142
|
+
end
|
143
|
+
|
144
|
+
def cleared_v
|
145
|
+
summary[:cleared_v]
|
146
|
+
end
|
147
|
+
|
148
|
+
def assigned_e
|
149
|
+
summary[:assigned_e]
|
150
|
+
end
|
151
|
+
|
152
|
+
def cleared_e
|
153
|
+
summary[:cleared_e]
|
154
|
+
end
|
155
|
+
|
156
|
+
def each_v_change(&blk)
|
157
|
+
assigned_v.each(&blk)
|
158
|
+
cleared_v.each(&blk)
|
159
|
+
end
|
160
|
+
|
161
|
+
def each_e_change(&blk)
|
162
|
+
assigned_e.each(&blk)
|
163
|
+
cleared_e.each(&blk)
|
164
|
+
end
|
165
|
+
|
166
|
+
def as_json(options = nil)
|
167
|
+
summary.as_json(options)
|
98
168
|
end
|
99
169
|
end
|
100
170
|
end
|
data/lib/pacer-neo4j2/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pacer-neo4j2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.2.
|
4
|
+
version: 2.2.3.1
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- Darrick Wiebe
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-02-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pacer
|