Skip to content

Commit 4ccfbd0

Browse files
authored
Merge pull request #1014 from aidanharan/better-handle-sql-queries-backport-6-1
Better handle SQL queries with invalid encoding
2 parents 379ea9b + 578a0cc commit 4ccfbd0

File tree

3 files changed

+18
-0
lines changed

3 files changed

+18
-0
lines changed

‎CHANGELOG.md

+4
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44

55
- [#1006](https://.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1006) Fix support for index types
66

7+
#### Changed
8+
9+
- [#1014](https://.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1014) Better handle SQL queries with invalid encoding
10+
711
## v6.1.2.1
812

913
[Full changelog](https://.com/rails-sqlserver/activerecord-sqlserver-adapter/compare/v6.1.2.0...v6.1.2.1)

‎lib/active_record/connection_adapters/sqlserver/database_statements.rb

+2
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ module DatabaseStatements
99

1010
def write_query?(sql) # :nodoc:
1111
!READ_QUERY.match?(sql)
12+
rescue ArgumentError # Invalid encoding
13+
!READ_QUERY.match?(sql.b)
1214
end
1315

1416
def execute(sql, name = nil)

‎test/cases/coerced_tests.rb

+12
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,18 @@ def test_errors_when_an_insert_query_prefixed_by_a_double_dash_comment_is_called
9292
Subscriber.send(:load_schema!)
9393
original_test_errors_when_an_insert_query_prefixed_by_a_double_dash_comment_is_called_while_preventing_writes
9494
end
95+
96+
coerce_tests! :test_doesnt_error_when_a_select_query_has_encoding_errors
97+
def test_doesnt_error_when_a_select_query_has_encoding_errors_coerced
98+
ActiveRecord::Base.while_preventing_writes do
99+
# TinyTDS fail on encoding errors.
100+
# But at least we can assert it fails in the client and not before when trying to
101+
# match the query.
102+
assert_raises ActiveRecord::StatementInvalid do
103+
@connection.select_all("SELECT '\xC8'")
104+
end
105+
end
106+
end
95107
end
96108
end
97109

0 commit comments

Comments
 (0)