quill-sql 0.1.5 → 0.1.6

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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/db/postgres.rb +59 -25
  3. metadata +16 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2b78c0e2b82a49c007a604467d4c30ee9d57f0df37b7aa7b316fcdee1249f6a9
4
- data.tar.gz: 3c519df47600372ab72b735ce5f0baf7402ebfc629b631b83a895823b1788c21
3
+ metadata.gz: 2a0a484270d6c53d3aace8649706262abc4025f036b2fcbe8b65e9f0e15d017e
4
+ data.tar.gz: 350c28eb59616ef2f23e23015fbb5c4909d01f90e218730e20b3cae48cd613ad
5
5
  SHA512:
6
- metadata.gz: f2ae021a1248508de215150b14f8584dd4e2590e09551f1a104a40e42146cc5c77415ec8a481baed6929743f41e8e6aa469594159de2ab2ddc78af34518f4811
7
- data.tar.gz: 0e91cf6e674aeb7db748f719d998bcaf3ad2fb7743723efb9588449ae63a77b3a53a1d6b25a7692f8d7ba71da23aac462b3fdc64840a9abfb4d345bbc46503d2
6
+ metadata.gz: c7952deda10956bebd8bbb43e6f5a38f1f58f2a488e8ca2d250a2b68b5bde1701f869f27e2e661461a19a7538994f5b3ca6104f6df820fb72ef607c8016afeeb
7
+ data.tar.gz: 94fddf190d5903b22b90d21f3f2f886592df35440d8babf4c499f59c8e57033834294acb02a8f6f4f1ec25484713981b489042540607cbba39cfd148a2691d0d
data/lib/db/postgres.rb CHANGED
@@ -2,42 +2,76 @@ require 'pg'
2
2
  require 'json'
3
3
  require 'uri'
4
4
  require 'active_support/inflector'
5
+ require 'connection_pool'
5
6
 
6
7
  module PostgresHelper
7
8
  class << self
8
9
  def connect_to_postgres(config)
9
- conn = PG.connect(
10
- host: config[:host],
11
- port: config[:port],
12
- dbname: config[:database],
13
- user: config[:username],
14
- password: config[:password],
15
- sslmode: config[:sslmode] || 'prefer',
16
- gssencmode: 'disable', # Disable GSSAPI encryption
17
- krbsrvname: nil, # Disable Kerberos service name
18
- target_session_attrs: 'read-write'
19
- )
20
- conn
10
+ # Create a connection pool that matches Puma's thread count
11
+ ConnectionPool.new(size: 5, timeout: 5) do
12
+ PG.connect(
13
+ host: config[:host],
14
+ port: config[:port],
15
+ dbname: config[:database],
16
+ user: config[:username],
17
+ password: config[:password],
18
+ sslmode: config[:sslmode] || 'prefer',
19
+ gssencmode: 'disable', # Disable GSSAPI encryption
20
+ krbsrvname: nil, # Disable Kerberos service name
21
+ target_session_attrs: 'read-write'
22
+ )
23
+ end
21
24
  end
22
25
 
23
- def disconnect_from_postgres(client)
24
- client.close if client.respond_to?(:close)
26
+ def disconnect_from_postgres(pool)
27
+ return unless pool.respond_to?(:shutdown)
28
+ pool.shutdown { |conn| conn.close if conn.respond_to?(:close) }
29
+ rescue PG::Error => e
30
+ puts "Error closing connection pool: #{e.message}"
25
31
  end
26
32
 
27
- def run_query_postgres(sql, client)
28
- result = client.exec(sql)
29
-
30
- fields = result.fields.map do |field|
33
+ def run_query_postgres(sql, pool)
34
+ pool.with do |client|
35
+ result = client.exec(sql)
36
+
37
+ fields = result.fields.map do |field|
38
+ {
39
+ name: field,
40
+ dataTypeID: result.ftype(result.fields.index(field))
41
+ }
42
+ end
43
+
44
+ rows = result.values.map do |row|
45
+ result.fields.zip(row).map do |field_name, value|
46
+ # First convert all values to strings
47
+ string_value = value.to_s
48
+
49
+ # Then try to parse JSON if it looks like JSON
50
+ parsed_value = begin
51
+ if string_value.start_with?('[') || string_value.start_with?('{')
52
+ json_value = JSON.parse(string_value)
53
+ if json_value.is_a?(Array)
54
+ json_value.map(&:to_s)
55
+ else
56
+ json_value
57
+ end
58
+ else
59
+ string_value
60
+ end
61
+ rescue JSON::ParserError
62
+ string_value
63
+ end
64
+ [field_name, parsed_value]
65
+ end.to_h
66
+ end
67
+
31
68
  {
32
- name: field,
33
- dataTypeID: result.ftype(result.fields.index(field))
69
+ fields: fields,
70
+ rows: rows
34
71
  }
72
+ ensure
73
+ result&.clear if result.respond_to?(:clear)
35
74
  end
36
-
37
- {
38
- fields: fields,
39
- rows: result.values.map { |row| result.fields.zip(row).to_h }
40
- }
41
75
  end
42
76
 
43
77
  def get_schemas_postgres(client)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: quill-sql
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shawn Magee, Albert Yan
8
8
  - Sam Bishop
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-04-15 00:00:00.000000000 Z
11
+ date: 2025-04-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -94,6 +94,20 @@ dependencies:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: connection_pool
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: rubocop
99
113
  requirement: !ruby/object:Gem::Requirement