pacer-orient 2.1.2-java → 2.2.0.pre-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-orient/factory_container.rb +67 -5
- data/lib/pacer-orient/graph.rb +83 -44
- data/lib/pacer-orient/orient_type.rb +3 -9
- data/lib/pacer-orient/property.rb +1 -3
- data/lib/pacer-orient/sql_filter.rb +20 -1
- data/lib/pacer-orient/version.rb +3 -3
- data/lib/{pacer-orient-2.1.2-standalone.jar → pacer-orient-2.2.0.pre-standalone.jar} +0 -0
- data/lib/pacer-orient.rb +32 -40
- data/pom.xml +3 -3
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9b32edc920ee17066a25d9d17ae4797e4879e52d
|
4
|
+
data.tar.gz: e0122dc83de2028ec05812adb6455d47668bd6e2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a36668673a20c99d81a62b97285e80806bb9bf5c2dd956335fb6108a85e81967fe41af13f0864d262f1e292070848e47ea0cc200c232f903849dc096d9511fb7
|
7
|
+
data.tar.gz: 7e321c5921a437089c14fe4f78154f566e1cf39e5b96002ca50f03b200983ac96910795a36e307d1529db74af72ec8cbe73bfa5b59adfff4d7aa7ab5fd343eb4
|
@@ -1,26 +1,88 @@
|
|
1
1
|
module Pacer::Orient
|
2
2
|
class FactoryContainer
|
3
|
-
attr_reader :factory
|
3
|
+
attr_reader :factory, :url, :use_pool
|
4
|
+
attr_accessor :encoder, :transactional, :lightweight_edges, :edge_classes, :vertex_classes
|
4
5
|
|
5
|
-
def initialize(f)
|
6
|
+
def initialize(f, url, args)
|
6
7
|
@factory = f
|
8
|
+
@url = url
|
9
|
+
Pacer.open_graphs[url] = self
|
10
|
+
if args
|
11
|
+
@transactional = args[:transactional]
|
12
|
+
@lightweight_edges = args[:lightweight_edges]
|
13
|
+
@edge_classes = args[:edge_classes]
|
14
|
+
@vertex_classes = args[:vertex_classes]
|
15
|
+
self.stay_open = args[:stay_open]
|
16
|
+
@encoder = args.fetch :encoder, Encoder
|
17
|
+
min = args[:pool_min]
|
18
|
+
max = args[:pool_max]
|
19
|
+
if min and max
|
20
|
+
setupPool min, max
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def setupPool(min, max)
|
26
|
+
@use_pool = true
|
27
|
+
factory.setupPool min, max
|
28
|
+
end
|
29
|
+
|
30
|
+
def stay_open=(b)
|
31
|
+
#factory.setLeaveGraphsOpen b
|
32
|
+
end
|
33
|
+
|
34
|
+
def stay_open
|
35
|
+
#factory.getLeaveGraphsOpen
|
36
|
+
end
|
37
|
+
|
38
|
+
def graph
|
39
|
+
# Shutdown releases the graph to the pool in this case.
|
40
|
+
g = Graph.new encoder, proc { get }, proc { |g| g.blueprints_graph.shutdown }
|
41
|
+
if block_given?
|
42
|
+
r = yield g
|
43
|
+
g.shutdown if use_pool
|
44
|
+
r
|
45
|
+
else
|
46
|
+
g
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def surrender(g)
|
51
|
+
g.shutdown if use_pool
|
7
52
|
end
|
8
53
|
|
9
54
|
def get
|
10
|
-
|
55
|
+
if transactional == false
|
56
|
+
getNoTx
|
57
|
+
else
|
58
|
+
getTx
|
59
|
+
end
|
11
60
|
end
|
12
61
|
|
13
62
|
def getTx
|
14
|
-
factory.getTx
|
63
|
+
configure factory.getTx
|
15
64
|
end
|
16
65
|
|
17
66
|
def getNoTx
|
18
|
-
factory.getNoTx
|
67
|
+
configure factory.getNoTx
|
19
68
|
end
|
20
69
|
|
21
70
|
# Pacer calls shutdown on all cached graphs when it exits. Orient caches this factory.
|
22
71
|
def shutdown
|
23
72
|
factory.close
|
73
|
+
Pacer.open_graphs.delete url
|
74
|
+
end
|
75
|
+
|
76
|
+
private
|
77
|
+
|
78
|
+
def configure(bg)
|
79
|
+
bg.setAutoStartTx false
|
80
|
+
bg.setRequireTransaction true
|
81
|
+
bg.rollback # a transaction is auto-started when the graph is opened.
|
82
|
+
bg.setUseLightweightEdges lightweight_edges if lightweight_edges == false
|
83
|
+
bg.setUseClassForEdgeLabel edge_classes if edge_classes == false
|
84
|
+
bg.setUseClassForVertexLabel vertex_classes if vertex_classes == false
|
85
|
+
bg
|
24
86
|
end
|
25
87
|
end
|
26
88
|
end
|
data/lib/pacer-orient/graph.rb
CHANGED
@@ -13,10 +13,12 @@ module Pacer
|
|
13
13
|
import com.orientechnologies.orient.core.sql.OCommandSQL
|
14
14
|
import com.orientechnologies.orient.core.metadata.schema.OType
|
15
15
|
import com.orientechnologies.orient.core.metadata.schema.OClass
|
16
|
+
import com.orientechnologies.orient.core.db.ODatabaseRecordThreadLocal
|
16
17
|
|
17
18
|
# Marked the types that should be most commonly used.
|
18
19
|
OTYPES = {
|
19
20
|
:any => OType::ANY,
|
21
|
+
:all => OType::ANY,
|
20
22
|
:boolean => OType::BOOLEAN, # use this one
|
21
23
|
:bool => OType::BOOLEAN,
|
22
24
|
:short => OType::SHORT,
|
@@ -26,10 +28,7 @@ module Pacer
|
|
26
28
|
:float => OType::FLOAT,
|
27
29
|
:double => OType::DOUBLE, # use this one
|
28
30
|
:decimal => OType::DECIMAL, # use this one
|
29
|
-
|
30
|
-
#:date => OType::BINARY,
|
31
|
-
#:datetime => OType::BINARY,
|
32
|
-
#:date_time => OType::BINARY,
|
31
|
+
#HINT: If using the BinaryDateEncoder, use :binary instead of the :date or :datetime types.
|
33
32
|
:date => OType::DATE, # use this one
|
34
33
|
:datetime => OType::DATETIME, # use this one
|
35
34
|
:date_time => OType::DATETIME,
|
@@ -83,15 +82,16 @@ module Pacer
|
|
83
82
|
}
|
84
83
|
|
85
84
|
def orient_graph
|
86
|
-
blueprints_graph.
|
85
|
+
blueprints_graph.getRawGraph
|
87
86
|
end
|
88
87
|
|
89
88
|
def allow_auto_tx=(b)
|
89
|
+
blueprints_graph.setRequireTransaction !b
|
90
90
|
blueprints_graph.setAutoStartTx b
|
91
91
|
end
|
92
92
|
|
93
93
|
def allow_auto_tx
|
94
|
-
blueprints_graph.
|
94
|
+
blueprints_graph.isAutoStartTx or not blueprints_graph.isRequireTransaction
|
95
95
|
end
|
96
96
|
|
97
97
|
def on_commit(&block)
|
@@ -175,14 +175,12 @@ module Pacer
|
|
175
175
|
if r
|
176
176
|
r
|
177
177
|
else
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
OrientType.new self, element_type, t if t
|
185
|
-
end
|
178
|
+
t = if element_type == :vertex
|
179
|
+
blueprints_graph.createVertexType(t.to_s)
|
180
|
+
elsif element_type == :edge
|
181
|
+
blueprints_graph.createEdgeType(t.to_s)
|
182
|
+
end
|
183
|
+
OrientType.new self, element_type, t if t
|
186
184
|
end
|
187
185
|
end
|
188
186
|
|
@@ -218,48 +216,59 @@ module Pacer
|
|
218
216
|
end
|
219
217
|
|
220
218
|
def add_vertex_types(*types)
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
OrientType.new(self, :vertex, t) if t
|
229
|
-
end
|
219
|
+
types.map do |t|
|
220
|
+
existing = orient_type(t, :vertex)
|
221
|
+
if existing
|
222
|
+
existing
|
223
|
+
else
|
224
|
+
t = blueprints_graph.createVertexType(t.to_s)
|
225
|
+
OrientType.new(self, :vertex, t) if t
|
230
226
|
end
|
231
227
|
end
|
232
228
|
end
|
233
229
|
|
234
|
-
def
|
235
|
-
|
236
|
-
type.property!(name).create_index!(itype) if type
|
230
|
+
def in_transaction?
|
231
|
+
orient_graph.getTransaction.isActive
|
237
232
|
end
|
238
233
|
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
end
|
244
|
-
|
245
|
-
private
|
246
|
-
|
247
|
-
def in_pure_transaction
|
248
|
-
if @in_pure_transaction
|
234
|
+
# Enables using multiple graphs at once.
|
235
|
+
def thread_local(revert = false)
|
236
|
+
orig = ODatabaseRecordThreadLocal.INSTANCE.getIfDefined
|
237
|
+
if orig == orient_graph
|
249
238
|
yield
|
250
239
|
else
|
251
240
|
begin
|
252
|
-
|
253
|
-
|
254
|
-
orient_graph.rollback
|
255
|
-
yield
|
256
|
-
end
|
241
|
+
ODatabaseRecordThreadLocal.INSTANCE.set orient_graph
|
242
|
+
yield
|
257
243
|
ensure
|
258
|
-
|
244
|
+
ODatabaseRecordThreadLocal.INSTANCE.set orig if revert
|
259
245
|
end
|
260
246
|
end
|
261
247
|
end
|
262
248
|
|
249
|
+
def transaction(opts = {})
|
250
|
+
thread_local do
|
251
|
+
if opts[:schema]
|
252
|
+
begin
|
253
|
+
if in_transaction?
|
254
|
+
in_tx = true
|
255
|
+
blueprints_graph.commit
|
256
|
+
end
|
257
|
+
c, r = nested_tx_finalizers
|
258
|
+
yield c, r
|
259
|
+
ensure
|
260
|
+
blueprints_graph.begin if in_tx
|
261
|
+
end
|
262
|
+
else
|
263
|
+
super
|
264
|
+
end
|
265
|
+
end
|
266
|
+
end
|
267
|
+
|
268
|
+
alias tx transaction
|
269
|
+
|
270
|
+
private
|
271
|
+
|
263
272
|
def sql_range(k, v, params)
|
264
273
|
params.push v.min
|
265
274
|
params.push v.last
|
@@ -271,9 +280,10 @@ module Pacer
|
|
271
280
|
filters.properties.select do |k, v|
|
272
281
|
if v
|
273
282
|
p = orient_type.property k
|
274
|
-
if p and p.indexed?
|
283
|
+
if (p and p.indexed?) or key_indices.include?(k)
|
275
284
|
if v.is_a? Range or v.class.name == 'RangeSet'
|
276
|
-
p
|
285
|
+
# not p just means it is a key index
|
286
|
+
not p or p.range_index?
|
277
287
|
else
|
278
288
|
true
|
279
289
|
end
|
@@ -332,6 +342,35 @@ module Pacer
|
|
332
342
|
end
|
333
343
|
end
|
334
344
|
end
|
345
|
+
|
346
|
+
def finish_transaction!
|
347
|
+
end
|
348
|
+
|
349
|
+
def start_transaction!(opts)
|
350
|
+
if allow_auto_tx
|
351
|
+
base_tx_finalizers
|
352
|
+
elsif in_transaction?
|
353
|
+
nested_tx_finalizers
|
354
|
+
else
|
355
|
+
blueprints_graph.begin
|
356
|
+
base_tx_finalizers
|
357
|
+
end
|
358
|
+
end
|
359
|
+
|
360
|
+
def base_tx_finalizers
|
361
|
+
commit = ->(reopen = true) do
|
362
|
+
puts "transaction committed" if Pacer.verbose == :very
|
363
|
+
blueprints_graph.commit
|
364
|
+
blueprints_graph.begin if reopen
|
365
|
+
on_commit_block.call if on_commit_block
|
366
|
+
end
|
367
|
+
rollback = ->(message = nil) do
|
368
|
+
puts ["transaction rolled back", message].compact.join(': ') if Pacer.verbose == :very
|
369
|
+
blueprints_graph.rollback
|
370
|
+
blueprints_graph.begin unless $!
|
371
|
+
end
|
372
|
+
[commit, rollback]
|
373
|
+
end
|
335
374
|
end
|
336
375
|
end
|
337
376
|
end
|
@@ -45,9 +45,7 @@ module Pacer::Orient
|
|
45
45
|
def property!(name, otype)
|
46
46
|
p = raw_property(name)
|
47
47
|
unless p
|
48
|
-
p = graph.
|
49
|
-
type.createProperty(name.to_s, graph.property_type(otype))
|
50
|
-
end
|
48
|
+
p = type.createProperty(name.to_s, graph.property_type(otype))
|
51
49
|
end
|
52
50
|
Property.new self, p
|
53
51
|
end
|
@@ -59,16 +57,12 @@ module Pacer::Orient
|
|
59
57
|
end
|
60
58
|
|
61
59
|
def set_super_class(sc)
|
62
|
-
graph.
|
63
|
-
type.setSuperClass graph.orient_type(element_type, sc)
|
64
|
-
end
|
60
|
+
type.setSuperClass graph.orient_type(element_type, sc)
|
65
61
|
self
|
66
62
|
end
|
67
63
|
|
68
64
|
def drop_property!(name)
|
69
|
-
|
70
|
-
type.dropProperty name
|
71
|
-
end
|
65
|
+
type.dropProperty name
|
72
66
|
end
|
73
67
|
|
74
68
|
def properties
|
@@ -20,9 +20,7 @@ module Pacer::Orient
|
|
20
20
|
|
21
21
|
def create_index!(index_type = :not_unique)
|
22
22
|
unless indexed?
|
23
|
-
graph.
|
24
|
-
property.createIndex graph.index_type(index_type)
|
25
|
-
end
|
23
|
+
property.createIndex graph.index_type(index_type)
|
26
24
|
end
|
27
25
|
self
|
28
26
|
end
|
@@ -1,7 +1,26 @@
|
|
1
1
|
module Pacer
|
2
2
|
module Filter
|
3
3
|
module SqlFilter
|
4
|
-
attr_accessor :sql, :select, :orient_type, :where, :query_args, :order_by, :
|
4
|
+
attr_accessor :sql, :select, :orient_type, :where, :query_args, :order_by, :timeout, :parallel
|
5
|
+
attr_writer :limit, :offset
|
6
|
+
|
7
|
+
def offset(n = nil)
|
8
|
+
if n
|
9
|
+
@offset = n
|
10
|
+
self
|
11
|
+
else
|
12
|
+
@offset
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def limit(n = nil)
|
17
|
+
if n
|
18
|
+
@limit = n
|
19
|
+
self
|
20
|
+
else
|
21
|
+
@limit
|
22
|
+
end
|
23
|
+
end
|
5
24
|
|
6
25
|
protected
|
7
26
|
|
data/lib/pacer-orient/version.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
module Pacer
|
2
2
|
module Orient
|
3
|
-
VERSION = "2.
|
3
|
+
VERSION = "2.2.0.pre"
|
4
4
|
JAR = "pacer-orient-#{ VERSION }-standalone.jar"
|
5
5
|
JAR_PATH = "lib/#{ JAR }"
|
6
|
-
ORIENT_VERSION = "
|
7
|
-
PIPES_VERSION = "2.
|
6
|
+
ORIENT_VERSION = "2.0-M2-SNAPSHOT"
|
7
|
+
PIPES_VERSION = "2.6.0"
|
8
8
|
PACER_REQ = ">= 1.5.3"
|
9
9
|
end
|
10
10
|
end
|
Binary file
|
data/lib/pacer-orient.rb
CHANGED
@@ -14,6 +14,32 @@ Pacer::FunctionResolver.clear_cache
|
|
14
14
|
module Pacer
|
15
15
|
# Add 'static methods' to the Pacer namespace.
|
16
16
|
class << self
|
17
|
+
def orient_factory(url = nil, args = {})
|
18
|
+
if url.nil?
|
19
|
+
url = "memory:#{ next_orient_name }"
|
20
|
+
elsif url.is_a? String and url !~ /^(plocal|local|remote|memory):/
|
21
|
+
url = "plocal:#{ url }"
|
22
|
+
end
|
23
|
+
if url
|
24
|
+
factory = Pacer.open_graphs[url]
|
25
|
+
if factory
|
26
|
+
factory
|
27
|
+
else
|
28
|
+
if args
|
29
|
+
username = args[:username]
|
30
|
+
password = args[:password]
|
31
|
+
end
|
32
|
+
factory =
|
33
|
+
if username
|
34
|
+
com.tinkerpop.blueprints.impls.orient.OrientGraphFactory.new url, username, password
|
35
|
+
else
|
36
|
+
com.tinkerpop.blueprints.impls.orient.OrientGraphFactory.new url
|
37
|
+
end
|
38
|
+
Pacer::Orient::FactoryContainer.new(factory, url, args)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
17
43
|
# Return a graph for the given path. Will create a graph if none exists at
|
18
44
|
# that location.
|
19
45
|
#
|
@@ -21,52 +47,18 @@ module Pacer
|
|
21
47
|
# Ruby's at_exit callback, but if an already open graph is given, it will
|
22
48
|
# not.
|
23
49
|
def orient(url = nil, args = nil)
|
24
|
-
if url.
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
end
|
29
|
-
if args
|
30
|
-
username = args.delete :username
|
31
|
-
password = args.delete :password
|
32
|
-
transactional = args.delete :transactional
|
33
|
-
lightweight_edges = args.delete :lightweight_edges
|
34
|
-
edge_classes = args.delete :edge_classes
|
35
|
-
vertex_classes = args.delete :vertex_classes
|
36
|
-
end
|
37
|
-
if url.is_a? String
|
50
|
+
if url.is_a? Pacer::Graph
|
51
|
+
# Don't register the new graph so that it won't be automatically closed.
|
52
|
+
Orient::Graph.new Pacer::Orient::Encoder, proc { url }
|
53
|
+
else
|
38
54
|
open = proc do
|
39
|
-
|
40
|
-
factory = Pacer.open_graphs[[url, username]]
|
41
|
-
unless factory
|
42
|
-
factory =
|
43
|
-
if username
|
44
|
-
com.tinkerpop.blueprints.impls.orient.OrientGraphFactory.new url, username, password
|
45
|
-
else
|
46
|
-
com.tinkerpop.blueprints.impls.orient.OrientGraphFactory.new url
|
47
|
-
end
|
48
|
-
Pacer.open_graphs[[url, username]] = Pacer::Orient::FactoryContainer.new(factory)
|
49
|
-
end
|
50
|
-
if transactional == false
|
51
|
-
graph = factory.getNoTx()
|
52
|
-
else
|
53
|
-
graph = factory.getTx()
|
54
|
-
end
|
55
|
-
graph.useLightweightEdges = lightweight_edges if lightweight_edges == false
|
56
|
-
graph.useClassForEdgeLabel = edge_classes if edge_classes == false
|
57
|
-
graph.useClassForVertexLabel = vertex_classes if vertex_classes == false
|
58
|
-
#graph.setAutoStartTx false
|
59
|
-
graph
|
55
|
+
orient_factory(url, args).get
|
60
56
|
end
|
61
57
|
shutdown = proc do |g|
|
62
|
-
factory = Pacer.open_graphs.delete
|
58
|
+
factory = Pacer.open_graphs.delete url
|
63
59
|
factory.shutdown if factory
|
64
60
|
end
|
65
61
|
Orient::Graph.new(Pacer::Orient::Encoder, open, shutdown)
|
66
|
-
else
|
67
|
-
# Don't register the new graph so that it won't be automatically closed.
|
68
|
-
graph = url
|
69
|
-
Orient::Graph.new Pacer::Orient::Encoder, proc { graph }
|
70
62
|
end
|
71
63
|
end
|
72
64
|
|
data/pom.xml
CHANGED
@@ -7,9 +7,9 @@
|
|
7
7
|
<artifactId>pacer-orient</artifactId>
|
8
8
|
<!-- NOTE: the following properties are automatically updated based on the values in lib/pacer-orient/version.rb -->
|
9
9
|
<properties>
|
10
|
-
<orient.version>
|
11
|
-
<gem.version>2.
|
12
|
-
<pipes.version>2.
|
10
|
+
<orient.version>2.0-M2-SNAPSHOT</orient.version>
|
11
|
+
<gem.version>2.2.0.pre</gem.version>
|
12
|
+
<pipes.version>2.6.0</pipes.version>
|
13
13
|
</properties>
|
14
14
|
<!-- NOTE: the following properties are automatically updated based on the values in lib/pacer-orient/version.rb -->
|
15
15
|
<version>${gem.version}</version>
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pacer-orient
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.0.pre
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- Darrick Wiebe
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-09-
|
11
|
+
date: 2014-09-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pacer
|
@@ -48,7 +48,7 @@ files:
|
|
48
48
|
- pacer-orient.gemspec
|
49
49
|
- pom.xml
|
50
50
|
- pom/standalone.xml
|
51
|
-
- lib/pacer-orient-2.
|
51
|
+
- lib/pacer-orient-2.2.0.pre-standalone.jar
|
52
52
|
homepage: http://orientechnologies.com
|
53
53
|
licenses: []
|
54
54
|
metadata: {}
|
@@ -63,9 +63,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
63
63
|
version: '0'
|
64
64
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - '
|
66
|
+
- - '>'
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
68
|
+
version: 1.3.1
|
69
69
|
requirements: []
|
70
70
|
rubyforge_project: pacer-orient
|
71
71
|
rubygems_version: 2.1.9
|