Class: Neo4j::Embedded::EmbeddedSession

Inherits:
Session
  • Object
show all
Extended by:
Forwardable, Core::TxMethods
Defined in:
lib/neo4j-embedded/embedded_session.rb

Defined Under Namespace

Classes: Error

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Core::TxMethods

tx_methods

Methods inherited from Session

_listeners, _notify_listeners, add_listener, #auto_commit?, clear_listeners, create_session, current, current!, inspect, named, on_session_available, open, query, register, register_db, #running, set_current, unregister, user_agent_string, validate_session_num!

Constructor Details

#initialize(db_location, config = {}) ⇒ EmbeddedSession

Returns a new instance of EmbeddedSession.



18
19
20
21
22
23
24
# File 'lib/neo4j-embedded/embedded_session.rb', line 18

def initialize(db_location, config = {})
  @config          = config
  @db_location     = db_location
  @auto_commit     = !!@config[:auto_commit]
  @properties_file = @config[:properties_file]
  Neo4j::Session.register(self)
end

Instance Attribute Details

#db_locationObject (readonly)

Returns the value of attribute db_location.



13
14
15
# File 'lib/neo4j-embedded/embedded_session.rb', line 13

def db_location
  @db_location
end

#graph_dbObject (readonly)

Returns the value of attribute graph_db.



13
14
15
# File 'lib/neo4j-embedded/embedded_session.rb', line 13

def graph_db
  @graph_db
end

#properties_fileObject (readonly)

Returns the value of attribute properties_file.



13
14
15
# File 'lib/neo4j-embedded/embedded_session.rb', line 13

def properties_file
  @properties_file
end

#properties_mapObject (readonly)

Returns the value of attribute properties_map.



13
14
15
# File 'lib/neo4j-embedded/embedded_session.rb', line 13

def properties_map
  @properties_map
end

Instance Method Details

#_load_node(neo_id) ⇒ Object

Same as load but does not return the node as a wrapped Ruby object.



103
104
105
106
107
108
# File 'lib/neo4j-embedded/embedded_session.rb', line 103

def _load_node(neo_id)
  return nil if neo_id.nil?
  @graph_db.get_node_by_id(neo_id.to_i)
rescue Java::OrgNeo4jGraphdb.NotFoundException
  nil
end

#_load_relationship(neo_id) ⇒ Object



115
116
117
118
119
120
# File 'lib/neo4j-embedded/embedded_session.rb', line 115

def _load_relationship(neo_id)
  return nil if neo_id.nil?
  @graph_db.get_relationship_by_id(neo_id.to_i)
rescue Java::OrgNeo4jGraphdb.NotFoundException
  nil
end

#_query(query, params = {}, options = {}) ⇒ Object

Performs a cypher query with given string. Remember that you should close the resource iterator.

Parameters:

  • q (String)

    the cypher query as a String



145
146
147
148
149
150
151
152
153
# File 'lib/neo4j-embedded/embedded_session.rb', line 145

def _query(query, params = {}, options = {})
  ActiveSupport::Notifications.instrument('neo4j.cypher_query', params: params, context: options[:context],
                                                                cypher: query, pretty_cypher: options[:pretty_cypher], params: params) do
    @engine ||= Java::OrgNeo4jCypherJavacompat::ExecutionEngine.new(@graph_db)
    @engine.execute(query, HashWithIndifferentAccess.new(params))
  end
rescue StandardError => e
  raise Neo4j::Session::CypherError.new(e.message, e.class, 'cypher error')
end

#_query_or_fail(q) ⇒ Object



159
160
161
162
# File 'lib/neo4j-embedded/embedded_session.rb', line 159

def _query_or_fail(q)
  @engine ||= Java::OrgNeo4jCypherJavacompat::ExecutionEngine.new(@graph_db)
  @engine.execute(q)
end

#begin_txObject



66
67
68
69
70
71
72
73
74
# File 'lib/neo4j-embedded/embedded_session.rb', line 66

def begin_tx
  if Neo4j::Transaction.current
    # Handle nested transaction "placebo transaction"
    Neo4j::Transaction.current.push_nested!
  else
    Neo4j::Embedded::EmbeddedTransaction.new(@graph_db.begin_tx)
  end
  Neo4j::Transaction.current
end

#closeObject



76
77
78
79
# File 'lib/neo4j-embedded/embedded_session.rb', line 76

def close
  super
  shutdown
end

#create_label(name) ⇒ Object



92
93
94
# File 'lib/neo4j-embedded/embedded_session.rb', line 92

def create_label(name)
  EmbeddedLabel.new(self, name)
end

#create_node(properties = nil, labels = []) ⇒ Object



168
169
170
171
172
173
174
175
176
177
# File 'lib/neo4j-embedded/embedded_session.rb', line 168

def create_node(properties = nil, labels = [])
  if labels.empty?
    @graph_db.create_node
  else
    labels = EmbeddedLabel.as_java(labels)
    @graph_db.create_node(labels)
  end.tap do |java_node|
    properties.each_pair { |k, v| java_node[k] = v } if properties
  end
end

#db_typeObject



35
36
37
# File 'lib/neo4j-embedded/embedded_session.rb', line 35

def db_type
  :embedded_db
end

#factory_classObject



62
63
64
# File 'lib/neo4j-embedded/embedded_session.rb', line 62

def factory_class
  Java::OrgNeo4jTest::ImpermanentGraphDatabase
end

#find_all_nodes(label) ⇒ Object



133
134
135
# File 'lib/neo4j-embedded/embedded_session.rb', line 133

def find_all_nodes(label)
  EmbeddedLabel.new(self, label).find_nodes
end

#find_nodes(label, key, value) ⇒ Object



137
138
139
# File 'lib/neo4j-embedded/embedded_session.rb', line 137

def find_nodes(label, key, value)
  EmbeddedLabel.new(self, label).find_nodes(key, value)
end

#inspectObject



39
40
41
# File 'lib/neo4j-embedded/embedded_session.rb', line 39

def inspect
  "#{self.class} db_location: '#{@db_location}', running: #{running?}"
end

#load_node(neo_id) ⇒ Object



96
97
98
# File 'lib/neo4j-embedded/embedded_session.rb', line 96

def load_node(neo_id)
  _load_node(neo_id)
end

#load_relationship(neo_id) ⇒ Object



110
111
112
# File 'lib/neo4j-embedded/embedded_session.rb', line 110

def load_relationship(neo_id)
  _load_relationship(neo_id)
end

#query(*args) ⇒ Object



122
123
124
125
126
127
128
129
130
# File 'lib/neo4j-embedded/embedded_session.rb', line 122

def query(*args)
  if [[String], [String, Hash]].include?(args.map(&:class))
    query, params = args[0, 2]
    Neo4j::Embedded::ResultWrapper.new(_query(query, params), query)
  else
    options = args[0] || {}
    Neo4j::Core::Query.new(options.merge(session: self))
  end
end

#query_default_return(as) ⇒ Object



155
156
157
# File 'lib/neo4j-embedded/embedded_session.rb', line 155

def query_default_return(as)
  " RETURN #{as}"
end

#running?Boolean

Returns:

  • (Boolean)


88
89
90
# File 'lib/neo4j-embedded/embedded_session.rb', line 88

def running?
  !!@graph_db
end

#search_result_to_enumerable(result) ⇒ Object



164
165
166
# File 'lib/neo4j-embedded/embedded_session.rb', line 164

def search_result_to_enumerable(result)
  result.map { |column| column['n'].wrapper }
end

#shutdownObject



81
82
83
84
85
86
# File 'lib/neo4j-embedded/embedded_session.rb', line 81

def shutdown
  @graph_db && @graph_db.shutdown

  Neo4j::Session.clear_listeners
  @graph_db = nil
end

#startObject



49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/neo4j-embedded/embedded_session.rb', line 49

def start
  fail Error, 'Embedded Neo4j db is already running' if running?
  puts "Start embedded Neo4j db at #{db_location}"
  factory    = Java::OrgNeo4jGraphdbFactory::GraphDatabaseFactory.new
  db_service = factory.newEmbeddedDatabaseBuilder(db_location)
  db_service.loadPropertiesFromFile(properties_file) if properties_file
  db_service.setConfig(properties_map)               if properties_map

  @graph_db = db_service.newGraphDatabase
  Neo4j::Session._notify_listeners(:session_available, self)
  @engine = Java::OrgNeo4jCypherJavacompat::ExecutionEngine.new(@graph_db)
end

#versionObject



43
44
45
46
47
# File 'lib/neo4j-embedded/embedded_session.rb', line 43

def version
  # Wow
  version_string = @graph_db.to_java(Java::OrgNeo4jKernel::GraphDatabaseAPI).getDependencyResolver.resolveDependency(Java::OrgNeo4jKernel::KernelData.java_class).version.to_s
  version_string.split(' ')[-1]
end