79 lines
2.3 KiB
Crystal
79 lines
2.3 KiB
Crystal
require "./db-cars.cr"
|
|
|
|
rootdb = "/tmp/test-db"
|
|
|
|
db = DODB::Storage::Cached(Car).new rootdb
|
|
#db = DODB::Storage::Common(Car).new rootdb, 2
|
|
index_name = db.new_index "name", &.name
|
|
index_color = db.new_partition "color", &.color
|
|
index_keywords = db.new_tags "keywords", &.keywords
|
|
|
|
car0 = Car.new "Corvet-0", "red", ["shiny"]
|
|
car1 = Car.new "Corvet-1", "red", ["slow", "expensive"]
|
|
car2 = Car.new "Corvet-2", "blue", ["fast", "elegant"]
|
|
car3 = Car.new "Corvet-3", "violet", ["expensive"]
|
|
|
|
db << car0
|
|
db << car1
|
|
db << car2
|
|
db << car3
|
|
|
|
# Get a car from stored data based on its name.
|
|
if (c = index_name.get?("Corvet-2")) == car2
|
|
puts "We found the Corvet-2: #{c}"
|
|
else
|
|
puts "We didn't find the Corvet-2!!!"
|
|
end
|
|
|
|
# Get a car from stored data based on a keyword.
|
|
if c = index_keywords.get?("elegant")
|
|
puts "We found the elegant car: #{c}"
|
|
else
|
|
puts "We didn't find the elegant car!!!"
|
|
end
|
|
|
|
# All cached entries are dropped.
|
|
# WARNING: the Storage::Cached database don't read anything on the filesystem and relies entirely
|
|
# on cached values. Therefore, clearing the caches means the database won't answer any request
|
|
# with the proper values. The content has to be read again through a reindex_everything! for example.
|
|
#db.clear_cache!
|
|
|
|
db = DODB::Storage::Cached(Car).new rootdb
|
|
index_name = db.new_index "name", &.name
|
|
index_color = db.new_partition "color", &.color
|
|
index_keywords = db.new_tags "keywords", &.keywords
|
|
db.reindex_everything!
|
|
|
|
# Get a car from stored data based on its color.
|
|
if index_color.get?("violet").size == 1
|
|
puts "We found the violet car"
|
|
else
|
|
puts "We didn't find the violet car!!!"
|
|
end
|
|
|
|
# Get a car from stored data based on a keyword.
|
|
list_of_cars = index_keywords.get?("expensive")
|
|
if ! list_of_cars.nil? && list_of_cars.size > 0
|
|
puts "We found the expensive cars:"
|
|
list_of_cars.each { |car| puts "- #{car}" }
|
|
else
|
|
puts "We didn't find the expensive car!!!"
|
|
end
|
|
|
|
# Loop over entries, filling up the cache for Storage.
|
|
total_values = 0
|
|
db.each_with_key do |v, k|
|
|
total_values += 1
|
|
end
|
|
|
|
if total_values == 4
|
|
puts "We found all the values"
|
|
else
|
|
puts "We didn't find all the values!!!"
|
|
end
|
|
|
|
FileUtils.rm_r rootdb
|
|
|
|
# Caches should still have a single entry since we only searched through them only once.
|
|
#index_name.data.size.should eq 1
|
|
#index_color.data.size.should eq 1
|