pacer-orient 2.1.1-java → 2.1.2-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.
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: {}