pacer-orient 2.1.1-java → 2.1.2-java

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c2fdd8ddfc4598b083a169ccb43bc73bd5fbeb71
4
- data.tar.gz: 927e24d2325d80d8c43bf5dbb02960e9985be2c6
3
+ metadata.gz: a412d30bbf1e14575ea9d6bb5640370b16777c7c
4
+ data.tar.gz: 619fcd6eb5f3b707089be17635629cbb7a8392a0
5
5
  SHA512:
6
- metadata.gz: 4d4f1593a4cbc034406287fe45365626a41a8ed6acea60210927d38a0f0329cf8f01c2ff79016adb31cd4e26f3b3acf086878c04b953dfaed3fc2d97856394b2
7
- data.tar.gz: 1df25c40515d3ea6413e77c3f3d23cdc8d89508f383f8338eb0aee770d81998eb78ba5b51e2e7ed2b71d51c5e05572bd765f9ef6ec7adef23266f99f1eb4a634
6
+ metadata.gz: 95a24e286b6ccd78c0101cc843fb059a95e11e3ce4dbf88e27a5f5240bd35bb4847e5a20936f9c6ff17d9415f07ebec558b64f972e807e6d2ac21aa4df56834f
7
+ data.tar.gz: bcd6f2b791474497e2d170a4f9c284824f98fa273269503a63976781782e05ac1f068074043329206da4187c44344de788c16e8e72ef6646f8c48bc606d2a67b
@@ -19,19 +19,19 @@ module Pacer::Orient
19
19
  if value.is_a? Bignum
20
20
  Marshal.dump(value).to_java_bytes
21
21
  else
22
- value.to_java
22
+ value
23
23
  end
24
24
  when true, false
25
- value.to_java
25
+ value
26
26
  when JavaDate
27
27
  value
28
28
  when Time
29
- value.to_java
29
+ value
30
30
  when DateTime
31
- value.to_time.to_java
31
+ value.to_time
32
32
  when Date
33
33
  t = value.to_time
34
- (t + Time.zone_offset(t.zone)).utc.to_java
34
+ (t + Time.zone_offset(t.zone))
35
35
  when Set
36
36
  value.map { |x| encode_property(x) }.to_hashset
37
37
  when Hash
@@ -5,6 +5,7 @@ require 'pacer-orient/property'
5
5
  require 'pacer-orient/encoder'
6
6
  require 'pacer-orient/record_id'
7
7
  require 'pacer-orient/factory_container'
8
+ require 'pacer-orient/sql_filter'
8
9
 
9
10
  module Pacer
10
11
  module Orient
@@ -25,6 +26,10 @@ module Pacer
25
26
  :float => OType::FLOAT,
26
27
  :double => OType::DOUBLE, # use this one
27
28
  :decimal => OType::DECIMAL, # use this one
29
+ #If encoding dates to binary
30
+ #:date => OType::BINARY,
31
+ #:datetime => OType::BINARY,
32
+ #:date_time => OType::BINARY,
28
33
  :date => OType::DATE, # use this one
29
34
  :datetime => OType::DATETIME, # use this one
30
35
  :date_time => OType::DATETIME,
@@ -50,6 +55,7 @@ module Pacer
50
55
  :range_fulltext => OClass::INDEX_TYPE::FULLTEXT,
51
56
  :range_full_text => OClass::INDEX_TYPE::FULLTEXT,
52
57
  :range_notunique => OClass::INDEX_TYPE::NOTUNIQUE,
58
+ :range_nonunique => OClass::INDEX_TYPE::NOTUNIQUE,
53
59
  :range_not_unique => OClass::INDEX_TYPE::NOTUNIQUE,
54
60
  :range_unique => OClass::INDEX_TYPE::UNIQUE,
55
61
  :proxy => OClass::INDEX_TYPE::PROXY,
@@ -57,11 +63,24 @@ module Pacer
57
63
  :fulltext => OClass::INDEX_TYPE::FULLTEXT_HASH_INDEX,
58
64
  :full_text => OClass::INDEX_TYPE::FULLTEXT_HASH_INDEX,
59
65
  :notunique => OClass::INDEX_TYPE::NOTUNIQUE_HASH_INDEX,
66
+ :nonunique => OClass::INDEX_TYPE::NOTUNIQUE_HASH_INDEX,
60
67
  :not_unique => OClass::INDEX_TYPE::NOTUNIQUE_HASH_INDEX,
61
68
  :spatial => OClass::INDEX_TYPE::SPATIAL,
62
69
  :unique => OClass::INDEX_TYPE::UNIQUE_HASH_INDEX
63
70
  }
64
71
 
72
+ ITYPE_REVERSE = {
73
+ 'DICTIONARY' => { range: true, unique: false, type: :range_dictionary } ,
74
+ 'DICTIONARY_HASH_INDEX' => { range: false, unique: false, type: :dictionary } ,
75
+ 'FULLTEXT' => { range: true, unique: false, type: :range_fulltext } ,
76
+ 'FULLTEXT_HASH_INDEX' => { range: false, unique: false, type: :fulltext } ,
77
+ 'NOTUNIQUE' => { range: true, unique: false, type: :range_notunique } ,
78
+ 'NOTUNIQUE_HASH_INDEX' => { range: false, unique: false, type: :notunique } ,
79
+ 'PROXY' => { range: false, unique: false, type: :proxy } ,
80
+ 'SPATIAL' => { range: false, unique: false, type: :spatial } ,
81
+ 'UNIQUE' => { range: true, unique: true, type: :range_unique } ,
82
+ 'UNIQUE_HASH_INDEX' => { range: false, unique: true, type: :unique } ,
83
+ }
65
84
 
66
85
  def orient_graph
67
86
  blueprints_graph.raw_graph
@@ -122,13 +141,11 @@ module Pacer
122
141
  blueprints_graph.useClassForVertexLabel = b
123
142
  end
124
143
 
125
- def sql(extensions, sql = nil, args)
126
- if extensions.is_a? String
127
- args = sql
128
- sql = extensions
129
- extensions = []
130
- end
131
- sql_command(sql, args).iterator.to_route(based_on: self.v(extensions))
144
+ def sql(sql = nil, args = nil, opts = {})
145
+ opts = { back: self, element_type: :vertex }.merge opts
146
+ chain_route(opts.merge(sql: sql,
147
+ query_args: args,
148
+ filter: Pacer::Filter::SqlFilter))
132
149
  end
133
150
 
134
151
  def sql_e(extensions, sql = nil, args)
@@ -140,11 +157,16 @@ module Pacer
140
157
  sql_command(sql, args).iterator.to_route(based_on: self.e(extensions))
141
158
  end
142
159
 
143
- def sql_command(sql, args)
144
- unless args.frozen?
160
+ def sql_command(sql, args = nil)
161
+ if args and not args.frozen?
145
162
  args = args.map { |a| encoder.encode_property(a) }
146
163
  end
147
- blueprints_graph.command(OCommandSQL.new(sql)).execute(*args)
164
+ command = blueprints_graph.command(OCommandSQL.new(sql))
165
+ if args
166
+ command.execute(*args)
167
+ else
168
+ command.execute
169
+ end
148
170
  end
149
171
 
150
172
  # Find or create a vertex or edge class
@@ -237,6 +259,79 @@ module Pacer
237
259
  end
238
260
  end
239
261
  end
262
+
263
+ def sql_range(k, v, params)
264
+ params.push v.min
265
+ params.push v.last
266
+ "#{k} BETWEEN ? and ?"
267
+ end
268
+
269
+ # Only consider a property indexed if it can look up that type
270
+ def index_properties(orient_type, filters)
271
+ filters.properties.select do |k, v|
272
+ if v
273
+ p = orient_type.property k
274
+ if p and p.indexed?
275
+ if v.is_a? Range or v.class.name == 'RangeSet'
276
+ p.range_index?
277
+ else
278
+ true
279
+ end
280
+ elsif v.is_a? Range
281
+ true
282
+ end
283
+ end
284
+ end
285
+ end
286
+
287
+ def build_query(orient_type, filters)
288
+ indexed = index_properties orient_type, filters
289
+ if indexed.any?
290
+ params = []
291
+ conds = indexed.map do |k, v|
292
+ if v.is_a? Range
293
+ sql_range(k, v, params)
294
+ elsif v.class.name == 'RangeSet'
295
+ s = v.ranges.map do |r|
296
+ sql_range(k, r, params)
297
+ end.join " OR "
298
+ "(#{s})"
299
+ elsif v.is_a? Set
300
+ params.push v.to_a
301
+ "#{k} IN ?"
302
+ else
303
+ params.push v
304
+ "#{k} = ?"
305
+ end
306
+ end.compact.join(" AND ")
307
+ ["SELECT FROM #{orient_type.name} WHERE #{conds}", params, indexed]
308
+ else
309
+ nil
310
+ end
311
+ end
312
+
313
+ def indexed_route(element_type, filters, block)
314
+ if search_manual_indices
315
+ super
316
+ else
317
+ filters.graph = self
318
+ filters.use_lookup!
319
+ query = build_query(orient_type(nil, element_type), filters)
320
+ if query
321
+ route = sql query[0], query[1], element_type: element_type, extensions: filters.extensions, wrapper: filters.wrapper
322
+ indexed = query.pop
323
+ filters.remove_property_keys indexed.map { |x| x.first }
324
+ if filters.any?
325
+ Pacer::Route.property_filter(route, filters, block)
326
+ else
327
+ route
328
+ end
329
+ elsif filters.route_modules.any?
330
+ mod = filters.route_modules.shift
331
+ Pacer::Route.property_filter(mod.route(self), filters, block)
332
+ end
333
+ end
334
+ end
240
335
  end
241
336
  end
242
337
  end
@@ -42,6 +42,27 @@ module Pacer::Orient
42
42
  nil
43
43
  end
44
44
 
45
+ def range_index?
46
+ if i = index
47
+ t = Graph::ITYPE_REVERSE[i.getType]
48
+ t[:range] if t
49
+ end
50
+ end
51
+
52
+ def unique_index?
53
+ if i = index
54
+ t = Graph::ITYPE_REVERSE[i.getType]
55
+ t[:unique] if t
56
+ end
57
+ end
58
+
59
+ def index_type
60
+ if i = index
61
+ t = Graph::ITYPE_REVERSE[i.getType]
62
+ t[:type] if t
63
+ end
64
+ end
65
+
45
66
  [ :set_name, :set_not_null, :set_collate,
46
67
  :set_mandatory, :set_readonly, :set_min, :set_max,
47
68
  :set_regexp, :set_custom, :remove_custom, :clear_custom
@@ -0,0 +1,55 @@
1
+ module Pacer
2
+ module Filter
3
+ module SqlFilter
4
+ attr_accessor :sql, :select, :orient_type, :where, :query_args, :order_by, :limit, :offset, :timeout, :parallel
5
+
6
+ protected
7
+
8
+ def orient_type_name
9
+ t = graph.orient_type(orient_type, element_type)
10
+ if t
11
+ t.name
12
+ else
13
+ fail Pacer::ClientError.new "Unknown orient type for #{ element_type }: #{ orient_type }"
14
+ end
15
+ end
16
+
17
+ def query
18
+ if sql
19
+ s = ""
20
+ s << sql
21
+ else
22
+ s = "SELECT "
23
+ case select
24
+ when String
25
+ s << select
26
+ when Array
27
+ s << select.join(", ")
28
+ end
29
+ s << " FROM #{ orient_type } WHERE "
30
+ s << where
31
+ s << "ORDER_BY " if order_by
32
+ case order_by
33
+ when String
34
+ s << order_by
35
+ when Array
36
+ s << order_by.join(", ")
37
+ end
38
+ end
39
+ s << " SKIP #{ offset }" if offset
40
+ s << " LIMIT #{ limit }" if limit
41
+ s << " TIMEOUT #{ timeout }" if timeout
42
+ s << " PARALLEL" if parallel
43
+ s
44
+ end
45
+
46
+ def source_iterator
47
+ graph.sql_command(query, query_args).iterator
48
+ end
49
+
50
+ def inspect_string
51
+ "SQL '#{query}' #{query_args}"
52
+ end
53
+ end
54
+ end
55
+ end
@@ -1,10 +1,10 @@
1
1
  module Pacer
2
2
  module Orient
3
- VERSION = "2.1.1"
3
+ VERSION = "2.1.2"
4
4
  JAR = "pacer-orient-#{ VERSION }-standalone.jar"
5
5
  JAR_PATH = "lib/#{ JAR }"
6
6
  ORIENT_VERSION = "1.7.8"
7
7
  PIPES_VERSION = "2.5.0"
8
- PACER_REQ = ">= 1.5.2"
8
+ PACER_REQ = ">= 1.5.3"
9
9
  end
10
10
  end
data/pom.xml CHANGED
@@ -8,7 +8,7 @@
8
8
  <!-- NOTE: the following properties are automatically updated based on the values in lib/pacer-orient/version.rb -->
9
9
  <properties>
10
10
  <orient.version>1.7.8</orient.version>
11
- <gem.version>2.1.1</gem.version>
11
+ <gem.version>2.1.2</gem.version>
12
12
  <pipes.version>2.5.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 -->
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.1.1
4
+ version: 2.1.2
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-18 00:00:00.000000000 Z
11
+ date: 2014-09-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pacer
@@ -16,12 +16,12 @@ dependencies:
16
16
  requirements:
17
17
  - - '>='
18
18
  - !ruby/object:Gem::Version
19
- version: 1.5.2
19
+ version: 1.5.3
20
20
  requirement: !ruby/object:Gem::Requirement
21
21
  requirements:
22
22
  - - '>='
23
23
  - !ruby/object:Gem::Version
24
- version: 1.5.2
24
+ version: 1.5.3
25
25
  prerelease: false
26
26
  type: :runtime
27
27
  description: Orient jars and related code for Pacer
@@ -43,11 +43,12 @@ files:
43
43
  - lib/pacer-orient/property.rb
44
44
  - lib/pacer-orient/record_id.rb
45
45
  - lib/pacer-orient/rspec.rb
46
+ - lib/pacer-orient/sql_filter.rb
46
47
  - lib/pacer-orient/version.rb
47
48
  - pacer-orient.gemspec
48
49
  - pom.xml
49
50
  - pom/standalone.xml
50
- - lib/pacer-orient-2.1.1-standalone.jar
51
+ - lib/pacer-orient-2.1.2-standalone.jar
51
52
  homepage: http://orientechnologies.com
52
53
  licenses: []
53
54
  metadata: {}