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?, create_session, current, current!, inspect, named, on_session_available, open, open_named, query, register, register_db, #running, set_current, unregister, user_agent_string

Constructor Details

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

Returns a new instance of EmbeddedSession.



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

def initialize(db_location, 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.



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

def db_location
  @db_location
end

#graph_dbObject (readonly)

Returns the value of attribute graph_db.



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

def graph_db
  @graph_db
end

#properties_fileObject (readonly)

Returns the value of attribute properties_file.



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

def properties_file
  @properties_file
end

Instance Method Details

#_load_node(neo_id) ⇒ Object

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



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

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



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

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(q, params = {}) ⇒ 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



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

def _query(q, params={})
  @engine ||= Java::OrgNeo4jCypherJavacompat::ExecutionEngine.new(@graph_db)
  @engine.execute(q, Neo4j::Core::HashWithIndifferentAccess.new(params))
rescue Exception => e
  raise Neo4j::Session::CypherError.new(e.message, e.class, 'cypher error')
end

#_query_or_fail(q) ⇒ Object



145
146
147
148
# File 'lib/neo4j-embedded/embedded_session.rb', line 145

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

#begin_txObject



57
58
59
60
61
62
63
64
65
# File 'lib/neo4j-embedded/embedded_session.rb', line 57

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



67
68
69
70
# File 'lib/neo4j-embedded/embedded_session.rb', line 67

def close
  super
  shutdown
end

#create_label(name) ⇒ Object



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

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

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



154
155
156
157
158
159
160
161
162
163
# File 'lib/neo4j-embedded/embedded_session.rb', line 154

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

#db_typeObject



27
28
29
# File 'lib/neo4j-embedded/embedded_session.rb', line 27

def db_type
  :embedded_db
end

#factory_classObject



52
53
54
55
# File 'lib/neo4j-embedded/embedded_session.rb', line 52

def factory_class
  Java::OrgNeo4jGraphdbFactory::GraphDatabaseFactory
  Java::OrgNeo4jTest::ImpermanentGraphDatabase
end

#find_all_nodes(label) ⇒ Object



122
123
124
# File 'lib/neo4j-embedded/embedded_session.rb', line 122

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

#find_nodes(label, key, value) ⇒ Object



126
127
128
# File 'lib/neo4j-embedded/embedded_session.rb', line 126

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

#inspectObject



31
32
33
# File 'lib/neo4j-embedded/embedded_session.rb', line 31

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

#load_node(neo_id) ⇒ Object



85
86
87
# File 'lib/neo4j-embedded/embedded_session.rb', line 85

def load_node(neo_id)
  _load_node(neo_id)
end

#load_relationship(neo_id) ⇒ Object



99
100
101
# File 'lib/neo4j-embedded/embedded_session.rb', line 99

def load_relationship(neo_id)
  _load_relationship(neo_id)
end

#query(*args) ⇒ Object



111
112
113
114
115
116
117
118
119
# File 'lib/neo4j-embedded/embedded_session.rb', line 111

def query(*args)
  if [[String], [String, String]].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



141
142
143
# File 'lib/neo4j-embedded/embedded_session.rb', line 141

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

#running?Boolean

Returns:

  • (Boolean)


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

def running?
  !!graph_db
end

#search_result_to_enumerable(result) ⇒ Object



150
151
152
# File 'lib/neo4j-embedded/embedded_session.rb', line 150

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

#shutdownObject



72
73
74
75
# File 'lib/neo4j-embedded/embedded_session.rb', line 72

def shutdown
  graph_db && graph_db.shutdown
  @graph_db = nil
end

#startObject

Raises:



41
42
43
44
45
46
47
48
49
50
# File 'lib/neo4j-embedded/embedded_session.rb', line 41

def start
  raise Error.new("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
  @graph_db = db_service.newGraphDatabase()
  Neo4j::Session._notify_listeners(:session_available, self)
  @engine = Java::OrgNeo4jCypherJavacompat::ExecutionEngine.new(@graph_db)
end

#versionObject



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

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