quill-sql 0.1.4 → 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.
- checksums.yaml +4 -4
- data/lib/db/postgres.rb +59 -25
- metadata +30 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2a0a484270d6c53d3aace8649706262abc4025f036b2fcbe8b65e9f0e15d017e
|
4
|
+
data.tar.gz: 350c28eb59616ef2f23e23015fbb5c4909d01f90e218730e20b3cae48cd613ad
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
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(
|
24
|
-
|
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,
|
28
|
-
|
29
|
-
|
30
|
-
|
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
|
-
|
33
|
-
|
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.
|
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-
|
11
|
+
date: 2025-04-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
@@ -80,6 +80,34 @@ dependencies:
|
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: pg
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
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'
|
83
111
|
- !ruby/object:Gem::Dependency
|
84
112
|
name: rubocop
|
85
113
|
requirement: !ruby/object:Gem::Requirement
|