test/test_database.rb in extralite-1.22 vs test/test_database.rb in extralite-1.23

- old
+ new

@@ -267,10 +267,72 @@ end def test_database_status assert_operator 0, :<, @db.status(Extralite::SQLITE_DBSTATUS_SCHEMA_USED).first end + + def test_database_limit + result = @db.limit(Extralite::SQLITE_LIMIT_ATTACHED) + assert_equal 10, result + + result = @db.limit(Extralite::SQLITE_LIMIT_ATTACHED, 5) + assert_equal 10, result + + result = @db.limit(Extralite::SQLITE_LIMIT_ATTACHED) + assert_equal 5, result + + assert_raises(Extralite::Error) { @db.limit(-999) } + end + + def test_database_busy_timeout + fn = "/tmp/extralite-#{rand(10000)}.db" + db1 = Extralite::Database.new(fn) + db2 = Extralite::Database.new(fn) + + db1.query('begin exclusive') + assert_raises(Extralite::BusyError) { db2.query('begin exclusive') } + + db2.busy_timeout = 0.3 + t0 = Time.now + t = Thread.new { sleep 0.1; db1.query('rollback') } + result = db2.query('begin exclusive') + t1 = Time.now + + assert_equal [], result + assert t1 - t0 >= 0.1 + db2.query('rollback') + + # try to provoke a timeout + db1.query('begin exclusive') + db2.busy_timeout = 0.1 + t0 = Time.now + t = Thread.new do + sleep 0.5 + ensure + db1.query('rollback') + end + assert_raises(Extralite::BusyError) { db2.query('begin exclusive') } + t1 = Time.now + assert t1 - t0 >= 0.1 + t.kill + t.join + + db1.query('begin exclusive') + db2.busy_timeout = 0 + assert_raises(Extralite::BusyError) { db2.query('begin exclusive') } + + db2.busy_timeout = nil + assert_raises(Extralite::BusyError) { db2.query('begin exclusive') } + end + + def test_database_total_changes + assert_equal 2, @db.total_changes + + @db.query('insert into t values (7, 8, 9)') + + assert_equal 3, @db.total_changes + end end class ScenarioTest < MiniTest::Test def setup @db = Extralite::Database.new('/tmp/extralite.db') @@ -333,9 +395,33 @@ @db.query('insert into t values (7, 8, 9)') @db.query('commit') result = @db.query_single_column('select x from t') assert_equal [1, 4, 7], result + end + + def test_database_trace + sqls = [] + @db.trace { |sql| sqls << sql } + + @db.query('select 1') + assert_equal ['select 1'], sqls + + @db.query('select 2') + assert_equal ['select 1', 'select 2'], sqls + + stmt = @db.prepare('select 3') + + stmt.query + assert_equal ['select 1', 'select 2', 'select 3'], sqls + + # turn off + @db.trace + + stmt.query + + @db.query('select 4') + assert_equal ['select 1', 'select 2', 'select 3'], sqls end end class BackupTest < MiniTest::Test def setup