Продолжение поддерживает тип boolean
. В нем хранятся true
и false
как t
и f
в SQLite. Если перечитать данные преобразуются обратно в true
и false
Булевы значения с SQLite и Sequel
SQLite сам предпочитает хранить true
, как 1 и false
, как 0 (и некоторые SQLite-administartion инструменты ожидают его). Если я храню логическое также как «1», Sequel также преобразует значение «истина»:
require 'sequel'
DB = Sequel.sqlite()#'test.db')
DB.create_table(:test){
boolean :my_truth
nvarchar :descr, :size => 10
}
DB[:test].insert(1, '1')
p DB[:test].filter(:descr => '1').first #-> {:my_truth=>true, :descr=>"1"}
Но если я выбираю для true
, значение не найдено:
DB[:test].filter(:my_truth => true).each{|ds|
puts "\t%s" % ds[:descr]
}
Значения true
и "t"
найдены:
DB[:test].insert(true, 'true')
DB[:test].insert('t', '"t"')
DB[:test].filter(:my_truth => true).each{|ds|
puts "\t%s" % ds[:descr] #true and 't'
}
Существует аналогичная ситуация для ложных ценностей, как 0
... (С.Е. е пример кода после вопроса)
Так мой вопрос: Как я могу сделать DB[:test].filter(:my_truth => true)
обнаружить 1
-значения и DB[:test].filter(:my_truth => false)
обнаружить 0
-значения?
Я не искал что-то вроде DB[:test].filter(:my_truth => [true,1])
Аналогичный вопрос для ActiveRecord Rails 3 SQLite3 Boolean false
Я использую Sequel 3.33.0
Пример кода:
require 'sequel'
DB = Sequel.sqlite()#'test.db')
DB.create_table(:test){
boolean :my_truth
nvarchar :descr, :size => 10
fixnum :line #code line, where data is inserted
}
#All true:
DB[:test].insert(true, 'true', __LINE__)
DB[:test].insert('true', '"true"', __LINE__)
DB[:test].insert(1, 'one', __LINE__)
DB[:test].insert('t', 't', __LINE__)
#All false:
DB[:test].insert(false,'false', __LINE__)
DB[:test].insert('false','"false"', __LINE__)
DB[:test].insert(0,'zero', __LINE__)
DB[:test].insert('f', 'f', __LINE__)
DB[:test].insert('F', 'F', __LINE__)
DB[:test].insert(nil, 'nil', __LINE__)
DB[:test].insert('n', 'n', __LINE__)
DB[:test].insert('N', 'N', __LINE__)
#Also true
DB[:test].insert('x', 'x', __LINE__)
DB[:test].insert(' ', 'space', __LINE__)
DB[:test].insert('', 'empty', __LINE__)
puts "All true values:"
DB[:test].filter(:my_truth => true).each{|ds|
puts "\t%s (line %i)" % [ds[:descr], ds[:line] ]
}
puts "All false values:"
DB[:test].filter(:my_truth => false).each{|ds|
puts "\t%s (line %i)" % [ds[:descr], ds[:line] ]
}
puts "Data:"
DB[:test].each{|ds|
puts "\t%-5s is <%s> (line %i)" % [ ds[:descr], ds[:my_truth].inspect, ds[:line] ]
}
Ресул т:
All true values:
true (line 10)
t (line 13)
All false values:
false (line 16)
f (line 19)
Data:
true is <true> (line 10)
"true" is <true> (line 11)
one is <true> (line 12)
t is <true> (line 13)
false is <false> (line 16)
"false" is <false> (line 17)
zero is <false> (line 18)
f is <false> (line 19)
F is <false> (line 20)
nil is <nil> (line 21)
n is <false> (line 22)
N is <false> (line 23)
x is <true> (line 26)
space is <true> (line 27)
empty is <true> (line 28)
Отлично! Я просто протестировал на своем ПК 2nc без успеха, но там у меня было продолжение 3.28. После обновления он работает. Благодаря! – knut