Namespace
Methods
S
T
Instance Public methods
setup()
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 12
def setup
  @conn = Base.sqlite3_connection :database => ':memory:',
                                 :adapter => 'sqlite3',
                                 :timeout => 100
  @conn.execute <<-eosql
    CREATE TABLE items (
      id integer PRIMARY KEY AUTOINCREMENT,
      number integer
    )
  eosql
end
test_bad_timeout()
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 74
def test_bad_timeout
  assert_raises(TypeError) do
    Base.sqlite3_connection :database => ':memory:',
                            :adapter => 'sqlite3',
                            :timeout => 'usa'
  end
end
test_bind_value_substitute()
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 99
def test_bind_value_substitute
  bind_param = @conn.substitute_at('foo', 0)
  assert_equal Arel.sql('?'), bind_param
end
test_column_types()
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 24
def test_column_types
  return skip('only test encoding on 1.9') unless "<3".encoding_aware?

  owner = Owner.create!(:name => "hello".encode('ascii-8bit'))
  owner.reload
  select = Owner.columns.map { |c| "typeof(#{c.name})" }.join ', '
  result = Owner.connection.exec_query <<-esql
    SELECT #{select}
    FROM   #{Owner.table_name}
    WHERE  #{Owner.primary_key} = #{owner.id}
  esql

  assert(!result.rows.first.include?("blob"), "should not store blobs")
end
test_columns()
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 262
def test_columns
  columns = @conn.columns('items').sort_by { |x| x.name }
  assert_equal 2, columns.length
  assert_equal %w{ id number }.sort, columns.map { |x| x.name }
  assert_equal [nil, nil], columns.map { |x| x.default }
  assert_equal [true, true], columns.map { |x| x.null }
end
test_columns_with_default()
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 270
def test_columns_with_default
  @conn.execute <<-eosql
    CREATE TABLE columns_with_default (
      id integer PRIMARY KEY AUTOINCREMENT,
      number integer default 10
    )
  eosql
  column = @conn.columns('columns_with_default').find { |x|
    x.name == 'number'
  }
  assert_equal 10, column.default
end
test_columns_with_not_null()
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 283
def test_columns_with_not_null
  @conn.execute <<-eosql
    CREATE TABLE columns_with_default (
      id integer PRIMARY KEY AUTOINCREMENT,
      number integer not null
    )
  eosql
  column = @conn.columns('columns_with_default').find { |x|
    x.name == 'number'
  }
  assert !column.null, "column should not be null"
end
test_compound_index()
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 323
def test_compound_index
  @conn.add_index 'items', %w{ id number }, :name => 'fun'
  index = @conn.indexes('items').find { |idx| idx.name == 'fun' }
  assert_equal %w{ id number }.sort, index.columns.sort
end
test_connect()
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 90
def test_connect
  assert @conn, 'should have connection'
end
test_connection_no_adapter()
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 62
def test_connection_no_adapter
  assert_raises(ArgumentError) do
    Base.sqlite3_connection :database => ':memory:'
  end
end
test_connection_no_db()
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 56
def test_connection_no_db
  assert_raises(ArgumentError) do
    Base.sqlite3_connection {}
  end
end
test_connection_wrong_adapter()
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 68
def test_connection_wrong_adapter
  assert_raises(ArgumentError) do
    Base.sqlite3_connection :database => ':memory:',:adapter => 'vuvuzela'
  end
end
test_encoding()

sqlite3 defaults to UTF-8 encoding

# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 95
def test_encoding
  assert_equal 'UTF-8', @conn.encoding
end
test_exec_insert()
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 39
def test_exec_insert
  column = @conn.columns('items').find { |col| col.name == 'number' }
  vals   = [[column, 10]]
  @conn.exec_insert('insert into items (number) VALUES (?)', 'SQL', vals)

  result = @conn.exec_query(
    'select number from items where number = ?', 'SQL', vals)

  assert_equal 1, result.rows.length
  assert_equal 10, result.rows.first.first
end
test_exec_no_binds()
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 104
def test_exec_no_binds
  @conn.exec_query('create table ex(id int, data string)')
  result = @conn.exec_query('SELECT id, data FROM ex')
  assert_equal 0, result.rows.length
  assert_equal 2, result.columns.length
  assert_equal %w{ id data }, result.columns

  @conn.exec_query('INSERT INTO ex (id, data) VALUES (1, "foo")')
  result = @conn.exec_query('SELECT id, data FROM ex')
  assert_equal 1, result.rows.length
  assert_equal 2, result.columns.length

  assert_equal [[1, 'foo']], result.rows
end
test_exec_query_typecasts_bind_vals()
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 131
def test_exec_query_typecasts_bind_vals
  @conn.exec_query('create table ex(id int, data string)')
  @conn.exec_query('INSERT INTO ex (id, data) VALUES (1, "foo")')
  column = @conn.columns('ex').find { |col| col.name == 'id' }

  result = @conn.exec_query(
    'SELECT id, data FROM ex WHERE id = ?', nil, [[column, '1-fuu']])

  assert_equal 1, result.rows.length
  assert_equal 2, result.columns.length

  assert_equal [[1, 'foo']], result.rows
end
test_exec_query_with_binds()
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 119
def test_exec_query_with_binds
  @conn.exec_query('create table ex(id int, data string)')
  @conn.exec_query('INSERT INTO ex (id, data) VALUES (1, "foo")')
  result = @conn.exec_query(
    'SELECT id, data FROM ex WHERE id = ?', nil, [[nil, 1]])

  assert_equal 1, result.rows.length
  assert_equal 2, result.columns.length

  assert_equal [[1, 'foo']], result.rows
end
test_execute()
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 174
def test_execute
  @conn.execute "INSERT INTO items (number) VALUES (10)"
  records = @conn.execute "SELECT * FROM items"
  assert_equal 1, records.length

  record = records.first
  assert_equal 10, record['number']
  assert_equal 1, record['id']
end
test_index()
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 308
def test_index
  @conn.add_index 'items', 'id', :unique => true, :name => 'fun'
  index = @conn.indexes('items').find { |idx| idx.name == 'fun' }

  assert_equal 'items', index.table
  assert index.unique, 'index is unique'
  assert_equal ['id'], index.columns
end
test_indexes_logs()
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 296
def test_indexes_logs
  intercept_logs_on @conn
  assert_difference('@conn.logged.length') do
    @conn.indexes('items')
  end
  assert_match(/items/, @conn.logged.last.first)
end
test_insert_id_value_returned()
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 207
def test_insert_id_value_returned
  sql = "INSERT INTO items (number) VALUES (10)"
  idval = 'vuvuzela'
  id = @conn.insert_sql sql, nil, nil, idval
  assert_equal idval, id
end
test_insert_sql()
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 188
def test_insert_sql
  2.times do |i|
    rv = @conn.insert_sql "INSERT INTO items (number) VALUES (#{i})"
    assert_equal(i + 1, rv)
  end

  records = @conn.execute "SELECT * FROM items"
  assert_equal 2, records.length
end
test_insert_sql_logged()
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 198
def test_insert_sql_logged
  sql = "INSERT INTO items (number) VALUES (10)"
  name = "foo"

  assert_logged([[sql, name, []]]) do
    @conn.insert_sql sql, name
  end
end
test_nil_timeout()

connection is OK with a nil timeout

# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 83
def test_nil_timeout
  conn = Base.sqlite3_connection :database => ':memory:',
                                 :adapter => 'sqlite3',
                                 :timeout => nil
  assert conn, 'made a connection'
end
test_no_indexes()
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 304
def test_no_indexes
  assert_equal [], @conn.indexes('items')
end
test_no_primary_key()
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 341
def test_no_primary_key
  @conn.execute 'CREATE TABLE failboat (number integer not null)'
  assert_nil @conn.primary_key('failboat')
end
test_non_unique_index()
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 317
def test_non_unique_index
  @conn.add_index 'items', 'id', :name => 'fun'
  index = @conn.indexes('items').find { |idx| idx.name == 'fun' }
  assert !index.unique, 'index is not unique'
end
test_primary_key()
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 329
def test_primary_key
  assert_equal 'id', @conn.primary_key('items')

  @conn.execute <<-eosql
    CREATE TABLE foos (
      internet integer PRIMARY KEY AUTOINCREMENT,
      number integer not null
    )
  eosql
  assert_equal 'internet', @conn.primary_key('foos')
end
test_primary_key_returns_nil_for_no_pk()
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 51
def test_primary_key_returns_nil_for_no_pk
  @conn.exec_query('create table ex(id int, data string)')
  assert_nil @conn.primary_key('ex')
end
test_quote_binary_column_escapes_it()
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 145
      def test_quote_binary_column_escapes_it
        return unless "<3".respond_to?(:encode)

        DualEncoding.connection.execute("          CREATE TABLE dual_encodings (
            id integer PRIMARY KEY AUTOINCREMENT,
            name string,
            data binary
          )
")
        str = "\x80".force_encoding("ASCII-8BIT")
        binary = DualEncoding.new :name => 'いただきます!', :data => str
        binary.save!
        assert_equal str, binary.data
      ensure
        if "<3".respond_to?(:encode)
          DualEncoding.connection.drop_table('dual_encodings')
        end
      end
test_quote_string()
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 184
def test_quote_string
  assert_equal "''", @conn.quote_string("'")
end
test_select_rows()
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 214
def test_select_rows
  2.times do |i|
    @conn.create "INSERT INTO items (number) VALUES (#{i})"
  end
  rows = @conn.select_rows 'select number, id from items'
  assert_equal [[0, 1], [1, 2]], rows
end
test_select_rows_logged()
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 222
def test_select_rows_logged
  sql = "select * from items"
  name = "foo"

  assert_logged([[sql, name, []]]) do
    @conn.select_rows sql, name
  end
end
test_tables()
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 242
def test_tables
  assert_equal %w{ items }, @conn.tables

  @conn.execute <<-eosql
    CREATE TABLE people (
      id integer PRIMARY KEY AUTOINCREMENT,
      number integer
    )
  eosql
  assert_equal %w{ items people }.sort, @conn.tables.sort
end
test_tables_logs_name()
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 254
def test_tables_logs_name
  name = "hello"
  assert_logged [[name, []]] do
    @conn.tables(name)
    assert_not_nil @conn.logged.first.shift
  end
end
test_transaction()
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 231
def test_transaction
  count_sql = 'select count(*) from items'

  @conn.begin_db_transaction
  @conn.create "INSERT INTO items (number) VALUES (10)"

  assert_equal 1, @conn.select_rows(count_sql).first.first
  @conn.rollback_db_transaction
  assert_equal 0, @conn.select_rows(count_sql).first.first
end
test_type_cast_should_not_mutate_encoding()
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 165
def test_type_cast_should_not_mutate_encoding
  return skip('only test encoding on 1.9') unless "<3".encoding_aware?

  name = 'hello'.force_encoding(Encoding::ASCII_8BIT)
  Owner.create(:name => name)

  assert_equal Encoding::ASCII_8BIT, name.encoding
end