Skip to content

Commit 2077524

Browse files
authored
Merge pull request rails#45373 from ghiculescu/sqlite3-strict-database-yml
Let sqlite `strict` config read from `database.yml` or config
2 parents c47e663 + 507cc6f commit 2077524

File tree

2 files changed

+40
-1
lines changed

2 files changed

+40
-1
lines changed

activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,10 @@ def sqlite3_connection(config)
3232
Dir.mkdir(dirname) unless File.directory?(dirname)
3333
end
3434

35+
config[:strict] = ConnectionAdapters::SQLite3Adapter.strict_strings_by_default unless config.key?(:strict)
3536
db = SQLite3::Database.new(
3637
config[:database].to_s,
37-
config.merge(results_as_hash: true, strict: ConnectionAdapters::SQLite3Adapter.strict_strings_by_default)
38+
config.merge(results_as_hash: true)
3839
)
3940

4041
ConnectionAdapters::SQLite3Adapter.new(db, logger, nil, config)

activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -635,6 +635,44 @@ def test_strict_strings_by_default
635635
end
636636
end
637637

638+
def test_strict_strings_by_default_and_true_in_database_yml
639+
conn = Base.sqlite3_connection(database: ":memory:", adapter: "sqlite3", strict: true)
640+
conn.create_table :testings
641+
642+
error = assert_raises(StandardError) do
643+
conn.add_index :testings, :non_existent
644+
end
645+
assert_match(/no such column: non_existent/, error.message)
646+
647+
with_strict_strings_by_default do
648+
conn = Base.sqlite3_connection(database: ":memory:", adapter: "sqlite3", strict: true)
649+
conn.create_table :testings
650+
651+
error = assert_raises(StandardError) do
652+
conn.add_index :testings, :non_existent2
653+
end
654+
assert_match(/no such column: non_existent2/, error.message)
655+
end
656+
end
657+
658+
def test_strict_strings_by_default_and_false_in_database_yml
659+
conn = Base.sqlite3_connection(database: ":memory:", adapter: "sqlite3", strict: false)
660+
conn.create_table :testings
661+
662+
assert_nothing_raised do
663+
conn.add_index :testings, :non_existent
664+
end
665+
666+
with_strict_strings_by_default do
667+
conn = Base.sqlite3_connection(database: ":memory:", adapter: "sqlite3", strict: false)
668+
conn.create_table :testings
669+
670+
assert_nothing_raised do
671+
conn.add_index :testings, :non_existent
672+
end
673+
end
674+
end
675+
638676
private
639677
def assert_logged(logs)
640678
subscriber = SQLSubscriber.new

0 commit comments

Comments
 (0)