class ActiveRecord::ConnectionAdapters::SQLite3AdapterTest
Public Instance Methods
setup()
click to toggle source
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 18 def setup @conn = Base.sqlite3_connection database: ":memory:", adapter: "sqlite3", timeout: 100 end
test_bad_connection()
click to toggle source
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 24 def test_bad_connection assert_raise ActiveRecord::NoDatabaseError do connection = ActiveRecord::Base.sqlite3_connection(adapter: "sqlite3", database: "/tmp/should/_not/_exist/-cinco-dog.db") connection.drop_table "ex", if_exists: true end end
test_bad_timeout()
click to toggle source
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 94 def test_bad_timeout assert_raises(TypeError) do Base.sqlite3_connection database: ":memory:", adapter: "sqlite3", timeout: "usa" end end
test_column_types()
click to toggle source
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 54 def test_column_types 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") ensure owner.delete end
test_columns()
click to toggle source
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 291 def test_columns with_example_table do columns = @conn.columns("ex").sort_by(&:name) assert_equal 2, columns.length assert_equal %w{ id number }.sort, columns.map(&:name) assert_equal [nil, nil], columns.map(&:default) assert_equal [true, true], columns.map(&:null) end end
test_columns_with_default()
click to toggle source
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 301 def test_columns_with_default with_example_table "id integer PRIMARY KEY AUTOINCREMENT, number integer default 10" do column = @conn.columns("ex").find { |x| x.name == "number" } assert_equal "10", column.default end end
test_columns_with_not_null()
click to toggle source
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 310 def test_columns_with_not_null with_example_table "id integer PRIMARY KEY AUTOINCREMENT, number integer not null" do column = @conn.columns("ex").find { |x| x.name == "number" } assert_not column.null, "column should not be null" end end
test_compound_index()
click to toggle source
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 348 def test_compound_index with_example_table do @conn.add_index "ex", %w{ id number }, name: "fun" index = @conn.indexes("ex").find { |idx| idx.name == "fun" } assert_equal %w{ id number }.sort, index.columns.sort end end
test_connect()
click to toggle source
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 110 def test_connect assert @conn, "should have connection" end
test_connect_memory_with_url()
click to toggle source
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 44 def test_connect_memory_with_url original_connection = ActiveRecord::Base.remove_connection url = "sqlite3::memory:" ActiveRecord::Base.establish_connection(url) assert ActiveRecord::Base.connection ensure ActiveRecord::Base.establish_connection(original_connection) end
test_connect_with_url()
click to toggle source
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 32 def test_connect_with_url original_connection = ActiveRecord::Base.remove_connection tf = Tempfile.open "whatever" url = "sqlite3:#{tf.path}" ActiveRecord::Base.establish_connection(url) assert ActiveRecord::Base.connection ensure tf.close tf.unlink ActiveRecord::Base.establish_connection(original_connection) end
test_connection_no_db()
click to toggle source
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 88 def test_connection_no_db assert_raises(ArgumentError) do Base.sqlite3_connection {} end end
test_encoding()
click to toggle source
sqlite3 defaults to UTF-8 encoding
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 115 def test_encoding assert_equal "UTF-8", @conn.encoding end
test_exec_insert()
click to toggle source
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 69 def test_exec_insert with_example_table do vals = [Relation::QueryAttribute.new("number", 10, Type::Value.new)] @conn.exec_insert("insert into ex (number) VALUES (?)", "SQL", vals) result = @conn.exec_query( "select number from ex where number = ?", "SQL", vals) assert_equal 1, result.rows.length assert_equal 10, result.rows.first.first end end
test_exec_no_binds()
click to toggle source
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 119 def test_exec_no_binds with_example_table "id int, data string" do 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 end
test_exec_query_typecasts_bind_vals()
click to toggle source
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 148 def test_exec_query_typecasts_bind_vals with_example_table "id int, data string" do @conn.exec_query('INSERT INTO ex (id, data) VALUES (1, "foo")') result = @conn.exec_query( "SELECT id, data FROM ex WHERE id = ?", nil, [Relation::QueryAttribute.new("id", "1-fuu", Type::Integer.new)]) assert_equal 1, result.rows.length assert_equal 2, result.columns.length assert_equal [[1, "foo"]], result.rows end end
test_exec_query_with_binds()
click to toggle source
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 135 def test_exec_query_with_binds with_example_table "id int, data string" do @conn.exec_query('INSERT INTO ex (id, data) VALUES (1, "foo")') result = @conn.exec_query( "SELECT id, data FROM ex WHERE id = ?", nil, [Relation::QueryAttribute.new(nil, 1, Type::Value.new)]) assert_equal 1, result.rows.length assert_equal 2, result.columns.length assert_equal [[1, "foo"]], result.rows end end
test_execute()
click to toggle source
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 186 def test_execute with_example_table do @conn.execute "INSERT INTO ex (number) VALUES (10)" records = @conn.execute "SELECT * FROM ex" assert_equal 1, records.length record = records.first assert_equal 10, record["number"] assert_equal 1, record["id"] end end
test_index()
click to toggle source
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 329 def test_index with_example_table do @conn.add_index "ex", "id", unique: true, name: "fun" index = @conn.indexes("ex").find { |idx| idx.name == "fun" } assert_equal "ex", index.table assert index.unique, "index is unique" assert_equal ["id"], index.columns end end
test_indexes_logs()
click to toggle source
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 317 def test_indexes_logs with_example_table do assert_logged [["PRAGMA index_list(\"ex\")", "SCHEMA", []]] do @conn.indexes("ex") end end end
test_indexes_logs_name()
click to toggle source
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 272 def test_indexes_logs_name with_example_table do assert_logged [["PRAGMA index_list(\"ex\")", "SCHEMA", []]] do assert_deprecated { @conn.indexes("ex", "hello") } end end end
test_insert_id_value_returned()
click to toggle source
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 212 def test_insert_id_value_returned with_example_table do sql = "INSERT INTO ex (number) VALUES (10)" idval = "vuvuzela" id = @conn.insert(sql, nil, nil, idval) assert_equal idval, id end end
test_insert_logged()
click to toggle source
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 202 def test_insert_logged with_example_table do sql = "INSERT INTO ex (number) VALUES (10)" name = "foo" assert_logged [[sql, name, []]] do @conn.insert(sql, name) end end end
test_nil_timeout()
click to toggle source
connection is OK with a nil timeout
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 103 def test_nil_timeout conn = Base.sqlite3_connection database: ":memory:", adapter: "sqlite3", timeout: nil assert conn, "made a connection" end
test_no_indexes()
click to toggle source
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 325 def test_no_indexes assert_equal [], @conn.indexes("items") end
test_no_primary_key()
click to toggle source
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 365 def test_no_primary_key with_example_table "number integer not null" do assert_nil @conn.primary_key("ex") end end
test_non_unique_index()
click to toggle source
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 340 def test_non_unique_index with_example_table do @conn.add_index "ex", "id", name: "fun" index = @conn.indexes("ex").find { |idx| idx.name == "fun" } assert_not index.unique, "index is not unique" end end
test_primary_key()
click to toggle source
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 356 def test_primary_key with_example_table do assert_equal "id", @conn.primary_key("ex") with_example_table "internet integer PRIMARY KEY AUTOINCREMENT, number integer not null", "foos" do assert_equal "internet", @conn.primary_key("foos") end end end
test_primary_key_returns_nil_for_no_pk()
click to toggle source
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 82 def test_primary_key_returns_nil_for_no_pk with_example_table "id int, data string" do assert_nil @conn.primary_key("ex") end end
test_quote_binary_column_escapes_it()
click to toggle source
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 162 def test_quote_binary_column_escapes_it DualEncoding.connection.execute(<<-eosql) CREATE TABLE IF NOT EXISTS dual_encodings ( id integer PRIMARY KEY AUTOINCREMENT, name varchar(255), data binary ) eosql str = "\x80".dup.force_encoding("ASCII-8BIT") binary = DualEncoding.new name: "いただきます!", data: str binary.save! assert_equal str, binary.data ensure DualEncoding.connection.drop_table "dual_encodings", if_exists: true end
test_quote_string()
click to toggle source
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 198 def test_quote_string assert_equal "''", @conn.quote_string("'") end
test_respond_to_disable_extension()
click to toggle source
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 379 def test_respond_to_disable_extension assert @conn.respond_to?(:disable_extension) end
test_respond_to_enable_extension()
click to toggle source
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 375 def test_respond_to_enable_extension assert @conn.respond_to?(:enable_extension) end
test_select_rows()
click to toggle source
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 221 def test_select_rows with_example_table do 2.times do |i| @conn.create "INSERT INTO ex (number) VALUES (#{i})" end rows = @conn.select_rows "select number, id from ex" assert_equal [[0, 1], [1, 2]], rows end end
test_select_rows_logged()
click to toggle source
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 231 def test_select_rows_logged with_example_table do sql = "select * from ex" name = "foo" assert_logged [[sql, name, []]] do @conn.select_rows sql, name end end end
test_statement_closed()
click to toggle source
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 383 def test_statement_closed db = ::SQLite3::Database.new(ActiveRecord::Base. configurations["arunit"]["database"]) statement = ::SQLite3::Statement.new(db, "CREATE TABLE statement_test (number integer not null)") statement.stub(:step, -> { raise ::SQLite3::BusyException.new("busy") }) do assert_called(statement, :columns, returns: []) do assert_called(statement, :close) do ::SQLite3::Statement.stub(:new, statement) do assert_raises ActiveRecord::StatementInvalid do @conn.exec_query "select * from statement_test" end end end end end end
test_supports_extensions()
click to toggle source
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 371 def test_supports_extensions assert_not @conn.supports_extensions?, "does not support extensions" end
test_table_exists_logs_name()
click to toggle source
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 280 def test_table_exists_logs_name with_example_table do sql = <<-SQL SELECT name FROM sqlite_master WHERE name <> 'sqlite_sequence' AND name = 'ex' AND type IN ('table') SQL assert_logged [[sql.squish, "SCHEMA", []]] do assert @conn.table_exists?("ex") end end end
test_tables()
click to toggle source
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 254 def test_tables with_example_table do assert_equal %w{ ex }, @conn.tables with_example_table "id integer PRIMARY KEY AUTOINCREMENT, number integer", "people" do assert_equal %w{ ex people }.sort, @conn.tables.sort end end end
test_tables_logs_name()
click to toggle source
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 263 def test_tables_logs_name sql = <<-SQL SELECT name FROM sqlite_master WHERE name <> 'sqlite_sequence' AND type IN ('table') SQL assert_logged [[sql.squish, "SCHEMA", []]] do @conn.tables end end
test_transaction()
click to toggle source
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 241 def test_transaction with_example_table do count_sql = "select count(*) from ex" @conn.begin_db_transaction @conn.create "INSERT INTO ex (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 end
test_type_cast_should_not_mutate_encoding()
click to toggle source
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 178 def test_type_cast_should_not_mutate_encoding name = "hello".dup.force_encoding(Encoding::ASCII_8BIT) Owner.create(name: name) assert_equal Encoding::ASCII_8BIT, name.encoding ensure Owner.delete_all end
Private Instance Methods
assert_logged(logs) { || ... }
click to toggle source
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 403 def assert_logged(logs) subscriber = SQLSubscriber.new subscription = ActiveSupport::Notifications.subscribe("sql.active_record", subscriber) yield assert_equal logs, subscriber.logged ensure ActiveSupport::Notifications.unsubscribe(subscription) end
with_example_table(definition = nil, table_name = "ex", &block)
click to toggle source
Calls superclass method
DdlHelper#with_example_table
# File activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb, line 412 def with_example_table(definition = nil, table_name = "ex", &block) definition ||= <<-SQL id integer PRIMARY KEY AUTOINCREMENT, number integer SQL super(@conn, table_name, definition, &block) end