Skip to content

Commit 1965050

Browse files
authored
Merge pull request #984 from yellowspot/better-handle-sql-queries
[Rails 7] Better handle sql queries
2 parents 396aef9 + cc25a9a commit 1965050

File tree

3 files changed

+15
-0
lines changed

3 files changed

+15
-0
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#### Changed
88

99
- [#983](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/983) Optimize remove_columns to use a single SQL statement
10+
- [#984](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/984) Better handle SQL queries with invalid encoding
1011

1112
#### Added
1213

lib/active_record/connection_adapters/sqlserver/database_statements.rb

Lines changed: 2 additions & 0 deletions
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

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

0 commit comments

Comments
 (0)