tina4ruby 3.11.13 → 3.11.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ca811aa2cb83ea336ce8be177f6f3688d014d6a7cb2ad4b90304a752a163d6aa
4
- data.tar.gz: 51208212f5cf5b7c49fde4f77d80b042a99d65ec615f9e422228299dd04993c9
3
+ metadata.gz: 0306b1bed1468e9d48729f576f4494f01f0ba42bd0868f137c56a533d4d3a987
4
+ data.tar.gz: 500e0e589914771bdc96b5b901dc0b9948ecf901df072b0ed845fd31efe7ff34
5
5
  SHA512:
6
- metadata.gz: 8baf46841c98a50c37b767ce9f963404c04250802e58b33c97d4927847fd7895098e243affbde71caae19d872fd6238b388c2d08affc5d157f9b9a51aae73e46
7
- data.tar.gz: bcc3047216b640f05573f7f450f6f591b8e3467979f12c503f80d2a652cdbb17cc513ed373b7e881b6c1305502b420910941bba6aefba401d827e45b21d918ec
6
+ metadata.gz: 225d391063a44527dc0df900ee7cce8fa20151be48a6a786fd41e2f6130253cff8899e1939a1a067e2d3f6879463f8b5cd7c888a85af29baaac85c8608a1607e
7
+ data.tar.gz: 0ece15acd6ebdeef69e90f67e10b250a3c1e05dee513ea3fad2f5794df93abc10141471362e59040bcff03f3aeeb2986dc4e7e6e1e1670a7721e26af82e0d902
@@ -34,11 +34,12 @@ module Tina4
34
34
  end
35
35
 
36
36
  def execute_query(sql, params = [])
37
- if params.empty?
38
- @connection.query(:hash, sql)
39
- else
40
- @connection.query(:hash, sql, *params)
41
- end.map { |row| stringify_keys(row) }
37
+ rows = if params.empty?
38
+ @connection.query(:hash, sql)
39
+ else
40
+ @connection.query(:hash, sql, *params)
41
+ end
42
+ rows.map { |row| decode_blobs(stringify_keys(row)) }
42
43
  end
43
44
 
44
45
  def execute(sql, params = [])
@@ -105,6 +106,19 @@ module Tina4
105
106
  def stringify_keys(hash)
106
107
  hash.each_with_object({}) { |(k, v), h| h[k.to_s] = v }
107
108
  end
109
+
110
+ # Ensure Firebird BLOB columns are proper byte strings.
111
+ # The Fb gem may return BLOBs as resource handles or IO objects —
112
+ # read them into strings if needed.
113
+ def decode_blobs(row)
114
+ row.each do |key, value|
115
+ if value.respond_to?(:read)
116
+ row[key] = value.read
117
+ value.close if value.respond_to?(:close)
118
+ end
119
+ end
120
+ row
121
+ end
108
122
  end
109
123
  end
110
124
  end
@@ -28,7 +28,7 @@ module Tina4
28
28
  else
29
29
  @connection.exec_params(converted_sql, params)
30
30
  end
31
- result.map { |row| symbolize_keys(row) }
31
+ result.map { |row| decode_blobs(symbolize_keys(row)) }
32
32
  end
33
33
 
34
34
  def execute(sql, params = [])
@@ -101,6 +101,16 @@ module Tina4
101
101
  def symbolize_keys(hash)
102
102
  hash.each_with_object({}) { |(k, v), h| h[k.to_sym] = v }
103
103
  end
104
+
105
+ # Ensure binary (bytea) columns are proper byte strings.
106
+ # PostgreSQL's pg gem returns bytea as ASCII-8BIT encoded strings —
107
+ # they're already raw bytes, just tag them so Ruby treats them right.
108
+ def decode_blobs(row)
109
+ # No conversion needed — pg gem returns bytea as ASCII-8BIT strings
110
+ # which are raw bytes. Users can .force_encoding("UTF-8") for text
111
+ # BLOBs or use the bytes directly for binary data.
112
+ row
113
+ end
104
114
  end
105
115
  end
106
116
  end
data/lib/tina4/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Tina4
4
- VERSION = "3.11.13"
4
+ VERSION = "3.11.14"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tina4ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.11.13
4
+ version: 3.11.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tina4 Team
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2026-04-16 00:00:00.000000000 Z
11
+ date: 2026-04-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack