neo4j-core 3.0.0.alpha.16 → 3.0.0.alpha.17
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 +4 -4
- data/README.md +14 -37
- data/lib/mydb/index/lucene-store.db +0 -0
- data/lib/mydb/index/lucene.log.active +0 -0
- data/lib/mydb/index/{lucene.log.1 → lucene.log.v0} +0 -0
- data/lib/mydb/messages.log +359 -0
- data/lib/mydb/neostore +0 -0
- data/lib/mydb/neostore.id +0 -0
- data/lib/mydb/neostore.labeltokenstore.db +0 -0
- data/lib/mydb/neostore.labeltokenstore.db.id +0 -0
- data/lib/mydb/neostore.labeltokenstore.db.names +0 -0
- data/lib/mydb/neostore.labeltokenstore.db.names.id +0 -0
- data/lib/mydb/neostore.nodestore.db +0 -0
- data/lib/mydb/neostore.nodestore.db.id +0 -0
- data/lib/mydb/neostore.nodestore.db.labels +0 -0
- data/lib/mydb/neostore.nodestore.db.labels.id +0 -0
- data/lib/mydb/neostore.propertystore.db +0 -0
- data/lib/mydb/neostore.propertystore.db.arrays +0 -0
- data/lib/mydb/neostore.propertystore.db.arrays.id +0 -0
- data/lib/mydb/neostore.propertystore.db.id +0 -0
- data/lib/mydb/neostore.propertystore.db.index +0 -0
- data/lib/mydb/neostore.propertystore.db.index.id +0 -0
- data/lib/mydb/neostore.propertystore.db.index.keys +0 -0
- data/lib/mydb/neostore.propertystore.db.index.keys.id +0 -0
- data/lib/mydb/neostore.propertystore.db.strings +0 -0
- data/lib/mydb/neostore.propertystore.db.strings.id +0 -0
- data/lib/mydb/neostore.relationshipgroupstore.db +0 -0
- data/lib/mydb/neostore.relationshipgroupstore.db.id +0 -0
- data/lib/mydb/neostore.relationshipstore.db +0 -0
- data/lib/mydb/neostore.relationshipstore.db.id +0 -0
- data/lib/mydb/neostore.relationshiptypestore.db +1 -0
- data/lib/mydb/neostore.relationshiptypestore.db.id +0 -0
- data/lib/mydb/neostore.relationshiptypestore.db.names +0 -0
- data/lib/mydb/neostore.relationshiptypestore.db.names.id +0 -0
- data/lib/mydb/neostore.schemastore.db +0 -0
- data/lib/mydb/neostore.schemastore.db.id +0 -0
- data/lib/mydb/nioneo_logical.log.active +0 -0
- data/lib/mydb/nioneo_logical.log.v0 +0 -0
- data/lib/mydb/schema/label/lucene/segments.gen +0 -0
- data/lib/mydb/schema/label/lucene/segments_1 +0 -0
- data/lib/mydb/tm_tx_log.1 +0 -0
- data/lib/neo4j-core.rb +1 -1
- data/lib/neo4j-core/helpers.rb +1 -1
- data/lib/neo4j-core/query.rb +298 -0
- data/lib/neo4j-core/query_clauses.rb +476 -0
- data/lib/neo4j-core/version.rb +1 -1
- data/lib/neo4j-core/version.rb~ +5 -0
- data/lib/neo4j-embedded/cypher_response.rb +9 -45
- data/lib/neo4j-embedded/embedded_session.rb +15 -17
- data/lib/neo4j-server/cypher_node.rb +16 -5
- data/lib/neo4j-server/cypher_relationship.rb +24 -6
- data/lib/neo4j-server/cypher_response.rb +35 -35
- data/lib/neo4j-server/cypher_session.rb +8 -12
- data/lib/neo4j/node.rb +4 -4
- data/lib/neo4j/session.rb +11 -63
- data/lib/neo4j/tasks/neo4j_server.rb +31 -0
- metadata +9 -7
- data/lib/mydb/lock +0 -0
- data/lib/mydb/nioneo_logical.log.1 +0 -0
- data/lib/mydb/schema/label/lucene/write.lock +0 -0
- data/lib/neo4j-core/query_builder.rb +0 -200
@@ -15,13 +15,44 @@ namespace :neo4j do
|
|
15
15
|
end
|
16
16
|
|
17
17
|
unless File.exist?(file_name)
|
18
|
+
# check if file is available
|
19
|
+
status = HTTParty.head(download_url).code
|
20
|
+
raise "#{file} is not available to download, try a different version" if status < 200 || status >= 300
|
21
|
+
|
18
22
|
df = File.open(file_name, 'wb')
|
23
|
+
|
24
|
+
|
25
|
+
success = false
|
19
26
|
begin
|
20
27
|
df << HTTParty.get(download_url)
|
28
|
+
success = true
|
21
29
|
ensure
|
22
30
|
df.close()
|
31
|
+
File.delete(file_name) unless success
|
23
32
|
end
|
24
33
|
end
|
34
|
+
|
35
|
+
|
36
|
+
|
37
|
+
# # http://download.neo4j.org/artifact?edition=community&version=2.1.2&distribution=tarball&dlid=3462770&_ga=1.110610309.1220184053.1399636580
|
38
|
+
#
|
39
|
+
# parsed_url = URI.parse(download_url)
|
40
|
+
#
|
41
|
+
# puts "parsed_url.host #{parsed_url.host} port #{parsed_url.port} uri: #{parsed_url.request_uri}"
|
42
|
+
# Net::HTTP.start(parsed_url.host, parsed_url.port) do |http|
|
43
|
+
# request = Net::HTTP::Get.new parsed_url.request_uri
|
44
|
+
# http.request request do |response|
|
45
|
+
# File.open 'large_file.tar.gz', 'wb' do |io|
|
46
|
+
# response.read_body do |chunk|
|
47
|
+
# io.write chunk
|
48
|
+
# end
|
49
|
+
# end
|
50
|
+
# end
|
51
|
+
# end
|
52
|
+
#
|
53
|
+
# puts "DOWN LOAD URL #{download_url}, exist #{file_name} : #{File.exist?(file_name)}"
|
54
|
+
#
|
55
|
+
|
25
56
|
file_name
|
26
57
|
end
|
27
58
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: neo4j-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.0.alpha.
|
4
|
+
version: 3.0.0.alpha.17
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andreas Ronge
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-07-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|
@@ -81,9 +81,8 @@ files:
|
|
81
81
|
- README.md
|
82
82
|
- lib/mydb/active_tx_log
|
83
83
|
- lib/mydb/index/lucene-store.db
|
84
|
-
- lib/mydb/index/lucene.log.1
|
85
84
|
- lib/mydb/index/lucene.log.active
|
86
|
-
- lib/mydb/
|
85
|
+
- lib/mydb/index/lucene.log.v0
|
87
86
|
- lib/mydb/messages.log
|
88
87
|
- lib/mydb/neostore
|
89
88
|
- lib/mydb/neostore.id
|
@@ -115,9 +114,10 @@ files:
|
|
115
114
|
- lib/mydb/neostore.relationshiptypestore.db.names.id
|
116
115
|
- lib/mydb/neostore.schemastore.db
|
117
116
|
- lib/mydb/neostore.schemastore.db.id
|
118
|
-
- lib/mydb/nioneo_logical.log.1
|
119
117
|
- lib/mydb/nioneo_logical.log.active
|
120
|
-
- lib/mydb/
|
118
|
+
- lib/mydb/nioneo_logical.log.v0
|
119
|
+
- lib/mydb/schema/label/lucene/segments.gen
|
120
|
+
- lib/mydb/schema/label/lucene/segments_1
|
121
121
|
- lib/mydb/store_lock
|
122
122
|
- lib/mydb/tm_tx_log.1
|
123
123
|
- lib/neo4j-core.rb
|
@@ -125,8 +125,10 @@ files:
|
|
125
125
|
- lib/neo4j-core/hash_with_indifferent_access.rb
|
126
126
|
- lib/neo4j-core/helpers.rb
|
127
127
|
- lib/neo4j-core/label.rb
|
128
|
-
- lib/neo4j-core/
|
128
|
+
- lib/neo4j-core/query.rb
|
129
|
+
- lib/neo4j-core/query_clauses.rb
|
129
130
|
- lib/neo4j-core/version.rb
|
131
|
+
- lib/neo4j-core/version.rb~
|
130
132
|
- lib/neo4j-embedded.rb
|
131
133
|
- lib/neo4j-embedded/cypher_response.rb
|
132
134
|
- lib/neo4j-embedded/cypher_response.rb~
|
data/lib/mydb/lock
DELETED
File without changes
|
Binary file
|
File without changes
|
@@ -1,200 +0,0 @@
|
|
1
|
-
module Neo4j::Core
|
2
|
-
|
3
|
-
class QueryBuilder
|
4
|
-
include CypherTranslator
|
5
|
-
|
6
|
-
DEFAULT_VAR_NAME = :n
|
7
|
-
|
8
|
-
class InvalidQueryError < StandardError;
|
9
|
-
end
|
10
|
-
|
11
|
-
def initialize(map_return={})
|
12
|
-
@map_return = map_return
|
13
|
-
@map_return[:node] = ->(id) { "ID(#{id})" }
|
14
|
-
end
|
15
|
-
|
16
|
-
# TODO should be moved somewhere else
|
17
|
-
def self.default_cypher_map_return_procs
|
18
|
-
{
|
19
|
-
id_to_node: ->(column) { Neo4j::Node.load(column) },
|
20
|
-
to_node: ->(column) { column.wrapper }, # for embedded db
|
21
|
-
value: ->(column) { column },
|
22
|
-
id_to_rel: ->(column) { Neo4j::Relationship.load(column) },
|
23
|
-
to_rel: ->(column) { column.wrapper } # for embedded db
|
24
|
-
}
|
25
|
-
end
|
26
|
-
|
27
|
-
|
28
|
-
def to_query_hash(params, default_map_return)
|
29
|
-
if params.first.is_a?(Hash)
|
30
|
-
hash = params.first.clone
|
31
|
-
hash[:map_return] ||= default_map_return unless hash[:q] || hash[:return]
|
32
|
-
hash[:map_return] ||= :value if hash[:return].is_a?(Symbol)
|
33
|
-
return hash
|
34
|
-
else
|
35
|
-
hash = (params[1] && params[1].clone) || {}
|
36
|
-
hash[:q] = params[0]
|
37
|
-
return hash
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
def to_map_return_procs(query_hash)
|
42
|
-
map_return_procs = query_hash[:map_return_procs] || self.class.default_cypher_map_return_procs
|
43
|
-
map_return = query_hash[:map_return]
|
44
|
-
case map_return
|
45
|
-
when NilClass
|
46
|
-
return {}
|
47
|
-
when Symbol, String
|
48
|
-
return map_return_procs[map_return.to_sym]
|
49
|
-
when Hash
|
50
|
-
map_return.keys.inject({}) do |ack, key|
|
51
|
-
proc_key = map_return[key]
|
52
|
-
ack[key] = map_return_procs[proc_key]
|
53
|
-
raise InvalidQueryError.new("Illegal map_return, '#{ack[key]}' not defined for #{key}") unless ack[key]
|
54
|
-
ack
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
def to_cypher(query_hash)
|
60
|
-
return query_hash[:q] if query_hash[:q]
|
61
|
-
match_parts = label_parts(query_hash[:label])
|
62
|
-
match_parts += match_parts(query_hash[:match])
|
63
|
-
conditions_parts = conditions_parts(query_hash[:conditions])
|
64
|
-
conditions_parts += where_parts(query_hash[:where])
|
65
|
-
|
66
|
-
return_parts = return_parts(query_hash)
|
67
|
-
return_parts += order_parts(query_hash[:order])
|
68
|
-
return_parts += skip_parts(query_hash[:skip])
|
69
|
-
return_parts += limit_parts(query_hash[:limit])
|
70
|
-
|
71
|
-
cypher = "MATCH #{match_parts.join(',')}"
|
72
|
-
cypher += " WHERE #{conditions_parts.join(' AND ')}" if !conditions_parts.empty?
|
73
|
-
cypher + " RETURN #{return_parts.join(' ')}"
|
74
|
-
end
|
75
|
-
|
76
|
-
|
77
|
-
def order_parts(order)
|
78
|
-
return [] unless order
|
79
|
-
cypher = "ORDER BY "
|
80
|
-
|
81
|
-
handleHash = Proc.new do |hash|
|
82
|
-
if (hash.is_a?(Hash))
|
83
|
-
k, v = hash.first
|
84
|
-
raise "only :asc or :desc allowed in order, got #{query.inspect}" unless [:asc, :desc].include?(v)
|
85
|
-
v.to_sym == :asc ? "#{DEFAULT_VAR_NAME}.`#{k}`" : "#{DEFAULT_VAR_NAME}.`#{k}` DESC"
|
86
|
-
else
|
87
|
-
"#{DEFAULT_VAR_NAME}.`#{hash}`" unless hash.is_a?(Hash)
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
case order
|
92
|
-
when Array
|
93
|
-
cypher += order.map(&handleHash).join(', ')
|
94
|
-
when Hash
|
95
|
-
cypher += handleHash.call(order)
|
96
|
-
else
|
97
|
-
cypher += "#{DEFAULT_VAR_NAME}.`#{order}`"
|
98
|
-
end
|
99
|
-
|
100
|
-
[cypher]
|
101
|
-
end
|
102
|
-
|
103
|
-
def return_parts(query_hash)
|
104
|
-
query_hash[:return] ? [cypher_return(query_hash[:return])] : [cypher_default_return(query_hash[:label], query_hash)]
|
105
|
-
end
|
106
|
-
|
107
|
-
def cypher_return(ret)
|
108
|
-
case ret
|
109
|
-
when Array
|
110
|
-
ret.map { |r| cypher_return_val(r) }.join(',')
|
111
|
-
when String, Symbol
|
112
|
-
cypher_return_val(ret)
|
113
|
-
end
|
114
|
-
|
115
|
-
end
|
116
|
-
|
117
|
-
def cypher_default_return(label, query_hash)
|
118
|
-
raise InvalidQueryError, "Can't have default return for two labels" if label.is_a?(Hash) && label.key.size > 1
|
119
|
-
if (query_hash[:map_return] == :id_to_node)
|
120
|
-
label.is_a?(Hash) ? "ID(#{label.key.first})" : "ID(#{DEFAULT_VAR_NAME})"
|
121
|
-
elsif (query_hash[:map_return] == :to_node)
|
122
|
-
label.is_a?(Hash) ? "#{label.key.first}" : "#{DEFAULT_VAR_NAME}"
|
123
|
-
else
|
124
|
-
raise InvalidQueryError.new("Don't know how to generate a cypher return #{query_hash.inspect}")
|
125
|
-
end
|
126
|
-
|
127
|
-
end
|
128
|
-
|
129
|
-
|
130
|
-
def where_parts(conditions)
|
131
|
-
return [] unless conditions
|
132
|
-
conditions.is_a?(Array) ? conditions : [conditions]
|
133
|
-
end
|
134
|
-
|
135
|
-
def limit_parts(limit)
|
136
|
-
return [] unless limit
|
137
|
-
raise InvalidQueryError.new ":limit value not a number" unless limit.is_a?(Integer)
|
138
|
-
return ["LIMIT #{limit}"]
|
139
|
-
end
|
140
|
-
|
141
|
-
def skip_parts(skip)
|
142
|
-
return [] unless skip
|
143
|
-
raise InvalidQueryError.new ":skip value not a number" unless skip.is_a?(Integer)
|
144
|
-
return ["SKIP #{skip}"]
|
145
|
-
end
|
146
|
-
|
147
|
-
def conditions_parts(conditions)
|
148
|
-
|
149
|
-
return [] unless conditions
|
150
|
-
neo_id = conditions.delete(:neo_id)
|
151
|
-
conditions["id(#{as})"] = neo_id if neo_id
|
152
|
-
|
153
|
-
conditions.map do |key, value|
|
154
|
-
operator, value_string = case value
|
155
|
-
when Regexp
|
156
|
-
pattern = (value.casefold? ? "(?i)" : "") + value.source
|
157
|
-
['=~', escape_value(pattern.gsub(/\\/, '\\\\\\'))]
|
158
|
-
else
|
159
|
-
['=', escape_value(value)]
|
160
|
-
end
|
161
|
-
|
162
|
-
k = key.to_s.dup
|
163
|
-
k = "#{DEFAULT_VAR_NAME}.#{k}" unless k.match(/[\(\.]/)
|
164
|
-
k + operator + value_string.to_s
|
165
|
-
end
|
166
|
-
end
|
167
|
-
|
168
|
-
def label_parts(label)
|
169
|
-
case label
|
170
|
-
when NilClass then
|
171
|
-
[]
|
172
|
-
when Hash
|
173
|
-
label.map { |variable, label_name| "(#{variable}:`#{label_name}`)" }
|
174
|
-
else
|
175
|
-
["(n:`#{label}`)"]
|
176
|
-
end
|
177
|
-
end
|
178
|
-
|
179
|
-
|
180
|
-
def match_parts(match)
|
181
|
-
case match
|
182
|
-
when Array then
|
183
|
-
return match
|
184
|
-
when String then
|
185
|
-
return [match]
|
186
|
-
when NilClass
|
187
|
-
return []
|
188
|
-
else
|
189
|
-
raise InvalidQueryError, "Invalid value for 'match' query key #{match.inspect}"
|
190
|
-
end
|
191
|
-
end
|
192
|
-
|
193
|
-
def cypher_return_val(val)
|
194
|
-
val.is_a?(Symbol) ? "#{DEFAULT_VAR_NAME}.`#{val}` AS `#{val}`" : val
|
195
|
-
end
|
196
|
-
|
197
|
-
end
|
198
|
-
|
199
|
-
end
|
200
|
-
|