Class: Traildb::TrailDBConstructor

Inherits:
FFI::AutoPointer
  • Object
show all
Defined in:
lib/traildb.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(path, ofields = []) ⇒ TrailDBConstructor

Returns a new instance of TrailDBConstructor.

Raises:



136
137
138
139
140
141
142
143
144
145
146
# File 'lib/traildb.rb', line 136

def initialize(path, ofields=[])
  raise TrailDBError.new("Path is required") if path.nil?
  super Traildb.tdb_cons_init()
  n = ofields.size
  ofield_names = FFI::MemoryPointer.new(:string, n)
  ofield_names.write_array_of_pointer(ofields.map{|field|FFI::MemoryPointer.from_string(field)})
  ret = Traildb.tdb_cons_open(self, path, ofield_names, n)
  raise TrailDBError.new("Cannot open constructor", ret) if ret != 0
  @path = path
  @ofields = ofields
end

Class Method Details

.release(ptr) ⇒ Object



175
176
177
# File 'lib/traildb.rb', line 175

def self.release(ptr)
  Traildb.tdb_cons_close(ptr)
end

Instance Method Details

#add(uuid, tstamp, values) ⇒ Object

Raises:



148
149
150
151
152
153
154
155
156
157
158
# File 'lib/traildb.rb', line 148

def add(uuid, tstamp, values)
  tstamp = tstamp.to_i if tstamp.is_a? Time
  uuid = Traildb.uuid_raw(uuid)
  n = @ofields.size
  value_array = FFI::MemoryPointer.new(:string, n)
  value_array.write_array_of_pointer(values.map{|v|v.nil? ? nil : FFI::MemoryPointer.from_string(v)})
  value_lengths = FFI::MemoryPointer.new(:uint64, n)
  value_lengths.write_array_of_uint64(values.map{|v|v.nil? ? 0 : v.size})
  ret = Traildb.tdb_cons_add(self, uuid, tstamp, value_array, value_lengths)
  raise TrailDBError.new("Too many values: %s" % values[ret]) if ret != 0
end

#append(db) ⇒ Object



160
161
162
163
164
165
166
167
# File 'lib/traildb.rb', line 160

def append(db)
  f = Traildb.tdb_cons_append(self, db)
  if f < 0
    raise TrailDBError.new("Wrong number of fields: %d" % db.num_fields, f)
  elsif f > 0
    raise TrailDBError.new("Too many values", f)
  end
end

#finalizeObject

Raises:



169
170
171
172
173
# File 'lib/traildb.rb', line 169

def finalize
  ret = Traildb.tdb_cons_finalize(self)
  raise TrailDBError.new("Could not finalize", ret) if ret != 0
  TrailDB.new(@path)
end