require "cases/helper"
module ActiveRecord
module ConnectionAdapters
class SQLiteAdapterTest < ActiveRecord::TestCase
def setup
@ctx = Base.sqlite3_connection :database => ':memory:',
:adapter => 'sqlite3',
:timeout => nil
@ctx.execute <<-eosql
CREATE TABLE items (
id integer PRIMARY KEY AUTOINCREMENT,
number integer
)
eosql
end
def test_execute
@ctx.execute "INSERT INTO items (number) VALUES (10)"
records = @ctx.execute "SELECT * FROM items"
assert_equal 1, records.length
record = records.first
assert_equal 10, record['number']
assert_equal 1, record['id']
end
def test_quote_string
assert_equal "''", @ctx.quote_string("'")
end
def test_insert_sql
2.times do |i|
rv = @ctx.insert_sql "INSERT INTO items (number) VALUES (#{i})"
assert_equal(i + 1, rv)
end
records = @ctx.execute "SELECT * FROM items"
assert_equal 2, records.length
end
def test_insert_sql_logged
sql = "INSERT INTO items (number) VALUES (10)"
name = "foo"
assert_logged([[sql, name]]) do
@ctx.insert_sql sql, name
end
end
def test_insert_id_value_returned
sql = "INSERT INTO items (number) VALUES (10)"
idval = 'vuvuzela'
id = @ctx.insert_sql sql, nil, nil, idval
assert_equal idval, id
end
def test_select_rows
2.times do |i|
@ctx.create "INSERT INTO items (number) VALUES (#{i})"
end
rows = @ctx.select_rows 'select number, id from items'
assert_equal [[0, 1], [1, 2]], rows
end
def test_select_rows_logged
sql = "select * from items"
name = "foo"
assert_logged([[sql, name]]) do
@ctx.select_rows sql, name
end
end
def test_transaction
count_sql = 'select count(*) from items'
@ctx.begin_db_transaction
@ctx.create "INSERT INTO items (number) VALUES (10)"
assert_equal 1, @ctx.select_rows(count_sql).first.first
@ctx.rollback_db_transaction
assert_equal 0, @ctx.select_rows(count_sql).first.first
end
def test_tables
assert_equal %w{ items }, @ctx.tables
@ctx.execute <<-eosql
CREATE TABLE people (
id integer PRIMARY KEY AUTOINCREMENT,
number integer
)
eosql
assert_equal %w{ items people }.sort, @ctx.tables.sort
end
def test_tables_logs_name
name = "hello"
assert_logged [[name]] do
@ctx.tables(name)
assert_not_nil @ctx.logged.first.shift
end
end
def assert_logged logs
@ctx.extend(Module.new {
attr_reader :logged
def log sql, name
@logged ||= []
@logged << [sql, name]
yield
end
})
yield
assert_equal logs, @ctx.logged
end
end
end
end