diff --git a/CHANGELOG.md b/CHANGELOG.md index 97d077fe..b2463080 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## 3.0.4 (unreleased) + +- Fixed error with MySQL and binary data + ## 3.0.3 (2024-01-10) - Fixed error with Trilogy, non-ASCII column names, and charts diff --git a/lib/blazer/adapters/sql_adapter.rb b/lib/blazer/adapters/sql_adapter.rb index f35826c9..d945b133 100644 --- a/lib/blazer/adapters/sql_adapter.rb +++ b/lib/blazer/adapters/sql_adapter.rb @@ -46,6 +46,20 @@ def run_statement(statement, comment, bind_params = []) if adapter_name == "Trilogy" columns.map! { |k| k.dup.force_encoding(Encoding::UTF_8) } end + + # fix for binary data + if mysql? + rows = + rows.map do |row| + row.map do |v| + if v.is_a?(String) && v.encoding == Encoding::BINARY + "0x#{v.unpack1("H*").upcase}" + else + v + end + end + end + end rescue => e error = e.message.sub(/.+ERROR: /, "") error = Blazer::TIMEOUT_MESSAGE if Blazer::TIMEOUT_ERRORS.any? { |e| error.include?(e) }