spec/adapters/sqlite_spec.rb in sequel-4.49.0 vs spec/adapters/sqlite_spec.rb in sequel-5.0.0
- old
+ new
@@ -1,61 +1,19 @@
SEQUEL_ADAPTER_TEST = :sqlite
-require File.join(File.dirname(File.expand_path(__FILE__)), 'spec_helper.rb')
+require_relative 'spec_helper'
describe "An SQLite database" do
before do
@db = DB
- deprecated do
- @fk = @db.foreign_keys
- end
end
after do
@db.drop_table?(:fk)
- deprecated do
- @db.auto_vacuum = :none
- @db.run 'VACUUM'
- @db.foreign_keys = @fk
- @db.case_sensitive_like = true
- end
@db.use_timestamp_timezones = false
Sequel.datetime_class = Time
end
- deprecated "should support getting setting pragma values" do
- @db.pragma_set(:auto_vacuum, '0')
- @db.run 'VACUUM'
- @db.pragma_get(:auto_vacuum).to_s.must_equal '0'
- @db.pragma_set(:auto_vacuum, '1')
- @db.run 'VACUUM'
- @db.pragma_get(:auto_vacuum).to_s.must_equal '1'
- @db.pragma_set(:auto_vacuum, '2')
- @db.run 'VACUUM'
- @db.pragma_get(:auto_vacuum).to_s.must_equal '2'
- end
-
- deprecated "should support getting and setting the auto_vacuum pragma" do
- @db.auto_vacuum = :full
- @db.run 'VACUUM'
- @db.auto_vacuum.must_equal :full
- @db.auto_vacuum = :incremental
- @db.run 'VACUUM'
- @db.auto_vacuum.must_equal :incremental
-
- proc {@db.auto_vacuum = :invalid}.must_raise(Sequel::Error)
- end
-
- deprecated "should respect case sensitive like false" do
- @db.case_sensitive_like = false
- @db.get(Sequel.like('a', 'A')).to_s.must_equal '1'
- end
-
- deprecated "should respect case sensitive like true" do
- @db.case_sensitive_like = true
- @db.get(Sequel.like('a', 'A')).to_s.must_equal '0'
- end
-
it "should support casting to Date by using the date function" do
@db.get(Sequel.cast('2012-10-20 11:12:13', Date)).must_equal '2012-10-20'
end
it "should support casting to Time or DateTime by using the datetime function" do
@@ -65,32 +23,10 @@
it "should provide the SQLite version as an integer" do
@db.sqlite_version.must_be_kind_of(Integer)
end
- deprecated "should support setting and getting the foreign_keys pragma" do
- (@db.sqlite_version >= 30619 ? [true, false] : [nil]).must_include(@db.foreign_keys)
- @db.foreign_keys = true
- @db.foreign_keys = false
- end
-
- deprecated "should enforce foreign key integrity if foreign_keys pragma is set" do
- @db.foreign_keys = true
- @db.create_table!(:fk){primary_key :id; foreign_key :parent_id, :fk}
- @db[:fk].insert(1, nil)
- @db[:fk].insert(2, 1)
- @db[:fk].insert(3, 3)
- proc{@db[:fk].insert(4, 5)}.must_raise(Sequel::ForeignKeyConstraintViolation, Sequel::ConstraintViolation, Sequel::DatabaseError)
- end if DB.sqlite_version >= 30619
-
- deprecated "should not enforce foreign key integrity if foreign_keys pragma is unset" do
- @db.foreign_keys = false
- @db.create_table!(:fk){primary_key :id; foreign_key :parent_id, :fk}
- @db[:fk].insert(1, 2)
- @db[:fk].all.must_equal [{:id=>1, :parent_id=>2}]
- end
-
it "should support a use_timestamp_timezones setting" do
@db.use_timestamp_timezones = true
@db.create_table!(:fk){Time :time}
@db[:fk].insert(Time.now)
@db[:fk].get(Sequel.cast(:time, String)).must_match(/[-+]\d\d\d\d\z/)
@@ -106,33 +42,11 @@
@db.tables.wont_include(:fk)
@db.create_table!(:fk){String :name}
@db.tables.must_include(:fk)
end
- deprecated "should support getting and setting the synchronous pragma" do
- @db.synchronous = :off
- @db.synchronous.must_equal :off
- @db.synchronous = :normal
- @db.synchronous.must_equal :normal
- @db.synchronous = :full
- @db.synchronous.must_equal :full
-
- proc {@db.synchronous = :invalid}.must_raise(Sequel::Error)
- end
-
- deprecated "should support getting and setting the temp_store pragma" do
- @db.temp_store = :default
- @db.temp_store.must_equal :default
- @db.temp_store = :file
- @db.temp_store.must_equal :file
- @db.temp_store = :memory
- @db.temp_store.must_equal :memory
-
- proc {@db.temp_store = :invalid}.must_raise(Sequel::Error)
- end
-
- cspecify "should support timestamps and datetimes and respect datetime_class", [:do], [:jdbc], [:swift] do
+ cspecify "should support timestamps and datetimes and respect datetime_class", [:jdbc] do
@db.create_table!(:fk){timestamp :t; datetime :d}
@db.use_timestamp_timezones = true
t1 = Time.at(1)
@db[:fk].insert(:t => t1, :d => t1)
@db[:fk].map(:t).must_equal [t1]
@@ -310,36 +224,10 @@
proc{@d.literal(Sequel.expr(:x).like(/a/i))}.must_raise(Sequel::InvalidOperation)
proc{@d.literal(~Sequel.expr(:x).like(/a/i))}.must_raise(Sequel::InvalidOperation)
end
end
-describe "An SQLite dataset AS clause" do
- it "should use a string literal for Sequel[:col].as(:alias)" do
- DB.literal(Sequel[:c].as(:a)).must_equal "`c` AS 'a'"
- end
-
- it "should use a string literal for Sequel[:table][:col].as(:alias)" do
- DB.literal(Sequel[:t][:c].as(:a)).must_equal "`t`.`c` AS 'a'"
- end
-
- it "should use a string literal for :column.as(:alias)" do
- DB.literal(Sequel.as(:c, :a)).must_equal "`c` AS 'a'"
- end
-
- it "should use a string literal in the SELECT clause" do
- DB[:t].select(Sequel[:c].as(:a)).sql.must_equal "SELECT `c` AS 'a' FROM `t`"
- end
-
- it "should use a string literal in the FROM clause" do
- DB[Sequel[:t].as(:a)].sql.must_equal "SELECT * FROM `t` AS 'a'"
- end
-
- it "should use a string literal in the JOIN clause" do
- DB[:t].join_table(:natural, :j, nil, :table_alias=>:a).sql.must_equal "SELECT * FROM `t` NATURAL JOIN `j` AS 'a'"
- end
-end
-
describe "SQLite::Dataset#delete" do
before do
DB.create_table! :items do
primary_key :id
String :name
@@ -617,12 +505,10 @@
@db.from(table_name).all.must_equal [{:"t t"=>1}]
@db.drop_table?(table_name)
end
it "should choose a temporary table name that isn't already used when dropping or renaming columns" do
- sqls = []
- @db.loggers << (l=Class.new{%w'info error'.each{|m| define_method(m){|sql| sqls << sql}}}.new)
@db.tables.each{|t| @db.drop_table(t) if t.to_s =~ /test3/}
@db.create_table :test3 do
Integer :h
Integer :i
end
@@ -634,31 +520,24 @@
end
@db[:test3].columns.must_equal [:h, :i]
@db[:test3_backup0].columns.must_equal [:j]
@db[:test3_backup1].columns.must_equal [:k]
- sqls.clear
@db.drop_column(:test3, :i)
- sqls.any?{|x| x =~ /\AALTER TABLE.*test3.*RENAME TO.*test3_backup2/}.must_equal true
- sqls.any?{|x| x =~ /\AALTER TABLE.*test3.*RENAME TO.*test3_backup[01]/}.must_equal false
@db[:test3].columns.must_equal [:h]
@db[:test3_backup0].columns.must_equal [:j]
@db[:test3_backup1].columns.must_equal [:k]
@db.create_table :test3_backup2 do
Integer :l
end
- sqls.clear
@db.rename_column(:test3, :h, :i)
- sqls.any?{|x| x =~ /\AALTER TABLE.*test3.*RENAME TO.*test3_backup3/}.must_equal true
- sqls.any?{|x| x =~ /\AALTER TABLE.*test3.*RENAME TO.*test3_backup[012]/}.must_equal false
@db[:test3].columns.must_equal [:i]
@db[:test3_backup0].columns.must_equal [:j]
@db[:test3_backup1].columns.must_equal [:k]
@db[:test3_backup2].columns.must_equal [:l]
- @db.loggers.delete(l)
end
it "should support add_index" do
@db.add_index :test2, :value, :unique => true
@db.add_index :test2, [:name, :value]
@@ -677,37 +556,20 @@
@db.drop_column :test3, :b
@db.indexes(:test3).must_equal(:test3_a_index=>{:unique=>false, :columns=>[:a]})
end
it "should have support for various #transaction modes" do
- sqls = []
- @db.loggers << Class.new{%w'info error'.each{|m| define_method(m){|sql| sqls << sql}}}.new
+ @db.transaction(:mode => :immediate){}
+ @db.transaction(:mode => :exclusive){}
+ @db.transaction(:mode => :deferred){}
+ @db.transaction{}
- @db.transaction(:mode => :immediate) do
- sqls.last.must_equal "BEGIN IMMEDIATE TRANSACTION"
- end
- @db.transaction(:mode => :exclusive) do
- sqls.last.must_equal "BEGIN EXCLUSIVE TRANSACTION"
- end
- @db.transaction(:mode => :deferred) do
- sqls.last.must_equal "BEGIN DEFERRED TRANSACTION"
- end
- @db.transaction do
- sqls.last.must_equal 'BEGIN'
- end
-
@db.transaction_mode.must_be_nil
@db.transaction_mode = :immediate
@db.transaction_mode.must_equal :immediate
- @db.transaction do
- sqls.last.must_equal "BEGIN IMMEDIATE TRANSACTION"
- end
- @db.transaction(:mode => :exclusive) do
- sqls.last.must_equal "BEGIN EXCLUSIVE TRANSACTION"
- end
-
+ @db.transaction{}
+ @db.transaction(:mode => :exclusive){}
proc {@db.transaction_mode = :invalid}.must_raise(Sequel::Error)
-
@db.transaction_mode.must_equal :immediate
proc {@db.transaction(:mode => :invalid) {}}.must_raise(Sequel::Error)
end
it "should keep unique constraints when copying tables" do