From 7bca5a98a6e38e39c92459f2118344f48970dee2 Mon Sep 17 00:00:00 2001 From: Andrew Kane Date: Tue, 19 Mar 2024 12:28:10 -0700 Subject: [PATCH] Fixed error with MySQL and binary data - #466 --- CHANGELOG.md | 4 ++++ lib/blazer/adapters/sql_adapter.rb | 14 ++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 97d077fef..b24630800 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 f35826c99..d945b133c 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) }