Class: Tarantool::DB

Inherits:
Object
  • Object
show all
Defined in:
lib/tarantool.rb

Direct Known Subclasses

BlockDB, EMDB

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(shards, replica_strategy, previous_shards_count, insert_to_previous_shard) ⇒ DB

Returns a new instance of DB.



76
77
78
79
80
81
82
83
# File 'lib/tarantool.rb', line 76

def initialize(shards, replica_strategy, previous_shards_count, insert_to_previous_shard)
  @shards = shards
  @replica_strategy = replica_strategy
  @previous_shards_count = previous_shards_count
  @insert_to_previous_shard = insert_to_previous_shard
  @connections = {}
  @closed = false
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(name, *args) ⇒ Object



119
120
121
122
123
124
125
# File 'lib/tarantool.rb', line 119

def method_missing(name, *args)
  if query.respond_to?(name)
    query.send(name, *args)
  else
    super
  end
end

Instance Attribute Details

#closedObject (readonly) Also known as: closed?

Returns the value of attribute closed.



74
75
76
# File 'lib/tarantool.rb', line 74

def closed
  @closed
end

#connectionsObject (readonly)

Returns the value of attribute connections.



74
75
76
# File 'lib/tarantool.rb', line 74

def connections
  @connections
end

#previous_shards_countObject (readonly)

Returns the value of attribute previous_shards_count.



136
137
138
# File 'lib/tarantool.rb', line 136

def previous_shards_count
  @previous_shards_count
end

Instance Method Details

#_shard(number) ⇒ Object



142
143
144
145
146
147
148
# File 'lib/tarantool.rb', line 142

def _shard(number)
  @connections[number] ||= begin
    @shards[number].map do |host, port|
      IProto.get_connection(host, port, self.class::IPROTO_CONNECTION_TYPE)
    end
  end
end

#closeObject



127
128
129
130
# File 'lib/tarantool.rb', line 127

def close
  @closed = true
  close_connection
end

#close_connectionObject



150
151
152
153
154
155
# File 'lib/tarantool.rb', line 150

def close_connection
  @connections.each do |number, replicas|
    replicas.each(&:close)
  end
  @connections.clear
end

#insert_with_shards_countObject



138
139
140
# File 'lib/tarantool.rb', line 138

def insert_with_shards_count
  @insert_to_previous_shard && @previous_shards_count || @shards.count
end

#primary_interfaceObject

Raises:

  • (NoMethodError)


157
158
159
# File 'lib/tarantool.rb', line 157

def primary_interface
  raise NoMethodError, "#primary_interface should by overriden"
end

#queryObject



115
116
117
# File 'lib/tarantool.rb', line 115

def query
  @query ||= self.class::Query.new(self)
end

#shards_countObject



132
133
134
# File 'lib/tarantool.rb', line 132

def shards_count
  @shards.count
end

#space(space_no, fields = [], opts = {}) ⇒ Object



96
97
98
99
100
101
102
103
104
105
# File 'lib/tarantool.rb', line 96

def space(space_no, fields = [], opts = {})
  case fields
  when Array
    space_array(space_no, fields, opts)
  when Hash
    space_hash(space_no, fields, opts)
  else
    raise "You should specify fields as an array or hash (got #{fields.inspect})"
  end
end

#space_array(space_no, field_types = [], opts = {}) ⇒ Object

returns regular space, where fields are named by position

tarantool.space_block(0, [:int, :str, :int, :str], keys: [[0], [1,2]])



88
89
90
91
92
93
94
# File 'lib/tarantool.rb', line 88

def space_array(space_no, field_types = [], opts = {})
  indexes = opts[:keys] || opts[:indexes]
  shard_fields = opts[:shard_fields]
  shard_proc = opts[:shard_proc]
  self.class::SpaceArray.new(self, space_no, field_types, indexes,
                             shard_fields, shard_proc)
end

#space_hash(space_no, fields, opts = {}) ⇒ Object



107
108
109
110
111
112
113
# File 'lib/tarantool.rb', line 107

def space_hash(space_no, fields, opts = {})
  indexes = opts[:keys] || opts[:indexes]
  shard_fields = opts[:shard_fields]
  shard_proc = opts[:shard_proc]
  self.class::SpaceHash.new(self, space_no, fields, indexes,
                            shard_fields, shard_proc)
end