pg_conn 0.2.1 → 0.3.1
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/TODO +2 -0
- data/lib/pg_conn/version.rb +1 -1
- data/lib/pg_conn.rb +53 -34
- data/pg_conn.gemspec +1 -23
- metadata +17 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8b90e77eda48e35d4577bfb9bc2f6dd553054342d22fabaec9931639a765c1eb
|
4
|
+
data.tar.gz: 1fca73a204f709583e67d6b035f7d48d896b63164a8e6b06a7133fbb1c038eb2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 22b8ba44cd9b8aea11291977ea85d048f57b92627c9c67e2e306b9a398842f0af7b07b7d04c7cae86c5e0d8496904ef7a471730342ee5cc7aa476099d7f2bead
|
7
|
+
data.tar.gz: 215a4d41c900604a0ee10cbf87a2d9cd6eeed676a953372073084b1c43c493fa7246084dc93c4f6e321693f84cb83ec35944a14e15579347341ad90c147eae42
|
data/TODO
CHANGED
data/lib/pg_conn/version.rb
CHANGED
data/lib/pg_conn.rb
CHANGED
@@ -19,7 +19,7 @@ module PgConn
|
|
19
19
|
def self.===(element) element.is_a?(PgConn::Connection) or super end
|
20
20
|
|
21
21
|
# Returns a PgConn::Connection object (aka. a PgConn object). It's arguments
|
22
|
-
# can be an existing connection that will just be returned
|
22
|
+
# can be an existing connection that will just be returned or a set of
|
23
23
|
# PgConn::Connection#initialize arguments that will be used to create a new
|
24
24
|
# PgConn::Connection object
|
25
25
|
def self.ensure(*args)
|
@@ -66,15 +66,16 @@ module PgConn
|
|
66
66
|
|
67
67
|
|
68
68
|
|
69
|
-
#
|
70
|
-
# variations:
|
71
|
-
#
|
69
|
+
# :call-seq:
|
72
70
|
# initialize(dbname = nil, user = nil, field_name_class: Symbol)
|
73
71
|
# initialize(connection_hash, field_name_class: Symbol)
|
74
72
|
# initialize(connection_string, field_name_class: Symbol)
|
75
73
|
# initialize(host, port, dbname, user, password, field_name_class: Symbol)
|
74
|
+
# initialize(array, field_name_class: Symbol)
|
76
75
|
# initialize(pg_connection_object)
|
77
76
|
#
|
77
|
+
# Initialize a connection object and connect to the database
|
78
|
+
#
|
78
79
|
# The possible keys of the connection hash are :host, :port, :dbname, :user,
|
79
80
|
# and :password. The connection string can either be a space-separated list
|
80
81
|
# of <key>=<value> pairs with the same keys as the hash, or a URI with the
|
@@ -84,6 +85,11 @@ module PgConn
|
|
84
85
|
# Symbol (the default) or String. The :timestamp option is used
|
85
86
|
# internally to set the timestamp for transactions
|
86
87
|
#
|
88
|
+
# If given an array argument, PgConn will not connect to the database and
|
89
|
+
# instead write its commands to the array. In this case, methods extracting
|
90
|
+
# values from the database (eg. #value) will return nil or raise an
|
91
|
+
# exception
|
92
|
+
#
|
87
93
|
# The last variant is used to establish a PgConn from an existing
|
88
94
|
# connection. It doesn't change the connection settings and is not
|
89
95
|
# recommended except in cases where you want to piggyback on an existing
|
@@ -125,6 +131,9 @@ module PgConn
|
|
125
131
|
end
|
126
132
|
when Hash
|
127
133
|
make_connection **arg
|
134
|
+
when Array
|
135
|
+
@pg_commands = arg
|
136
|
+
nil
|
128
137
|
else
|
129
138
|
raise Error, "Illegal argument type: #{arg.class}"
|
130
139
|
end
|
@@ -136,7 +145,7 @@ module PgConn
|
|
136
145
|
raise Error, "Illegal number of parameters: #{args.size}"
|
137
146
|
end
|
138
147
|
|
139
|
-
if !using_existing_connection
|
148
|
+
if @pg_connection && !using_existing_connection
|
140
149
|
# Auto-convert to ruby types
|
141
150
|
type_map = PG::BasicTypeMapForResults.new(@pg_connection)
|
142
151
|
|
@@ -170,7 +179,7 @@ module PgConn
|
|
170
179
|
|
171
180
|
# Close the database connection
|
172
181
|
def terminate()
|
173
|
-
@pg_connection.close if !@pg_connection.finished?
|
182
|
+
@pg_connection.close if @pg_connection && !@pg_connection.finished?
|
174
183
|
end
|
175
184
|
|
176
185
|
def self.new(*args, &block)
|
@@ -178,7 +187,7 @@ module PgConn
|
|
178
187
|
begin
|
179
188
|
object = Connection.allocate
|
180
189
|
object.send(:initialize, *args)
|
181
|
-
yield(object) if object.pg_connection
|
190
|
+
yield(object) # if object.pg_connection
|
182
191
|
ensure
|
183
192
|
object.terminate if object.pg_connection
|
184
193
|
end
|
@@ -187,9 +196,6 @@ module PgConn
|
|
187
196
|
end
|
188
197
|
end
|
189
198
|
|
190
|
-
# # Return true iff the query returns exactly one value
|
191
|
-
# def exist?(query) count(query) == 1 end
|
192
|
-
|
193
199
|
# :call-seq:
|
194
200
|
# exist?(query)
|
195
201
|
# exist?(table, id)
|
@@ -459,7 +465,7 @@ module PgConn
|
|
459
465
|
elsif r.nfields == 1
|
460
466
|
r.column_values(0)
|
461
467
|
else
|
462
|
-
r
|
468
|
+
r&.values
|
463
469
|
end
|
464
470
|
end
|
465
471
|
|
@@ -489,7 +495,11 @@ module PgConn
|
|
489
495
|
#
|
490
496
|
# TODO: Handle postgres exceptions wrt transaction state and stack
|
491
497
|
def execute(sql, fail: true, silent: false)
|
492
|
-
|
498
|
+
if @pg_connection
|
499
|
+
pg_exec(sql, fail: fail, silent: silent)&.cmd_tuples
|
500
|
+
else
|
501
|
+
pg_exec(sql, fail: fail, silent: silent)
|
502
|
+
end
|
493
503
|
end
|
494
504
|
|
495
505
|
# Switch user to the given user and execute the statement before swithcing
|
@@ -534,7 +544,7 @@ module PgConn
|
|
534
544
|
else
|
535
545
|
@savepoints = []
|
536
546
|
pg_exec("begin")
|
537
|
-
@timestamp = pg_exec("select current_timestamp").values[0][0]
|
547
|
+
@timestamp = pg_exec("select current_timestamp").values[0][0] if @pg_connection
|
538
548
|
end
|
539
549
|
end
|
540
550
|
|
@@ -626,30 +636,39 @@ module PgConn
|
|
626
636
|
#
|
627
637
|
# TODO: Fix silent by not handling exceptions
|
628
638
|
def pg_exec(arg, fail: true, silent: false)
|
629
|
-
|
630
|
-
|
631
|
-
|
632
|
-
|
633
|
-
|
634
|
-
|
635
|
-
|
636
|
-
|
637
|
-
|
638
|
-
|
639
|
-
|
640
|
-
|
641
|
-
|
642
|
-
|
643
|
-
|
644
|
-
if
|
645
|
-
|
646
|
-
|
647
|
-
|
639
|
+
if @pg_connection
|
640
|
+
begin
|
641
|
+
last_stmt = nil # To make the current SQL statement visible to the rescue clause
|
642
|
+
if arg.is_a?(String)
|
643
|
+
return nil if arg == ""
|
644
|
+
last_stmt = arg
|
645
|
+
@pg_connection.exec(last_stmt)
|
646
|
+
else
|
647
|
+
stmts = arg.flatten.compact
|
648
|
+
return nil if stmts.empty?
|
649
|
+
last_stmt = stmts.last
|
650
|
+
@pg_connection.exec(stmts.join(";\n"))
|
651
|
+
end
|
652
|
+
|
653
|
+
rescue PG::Error => ex
|
654
|
+
if fail
|
655
|
+
if !silent # FIXME Why do we handle this?
|
656
|
+
$stderr.puts arg
|
657
|
+
$stderr.puts ex.message
|
658
|
+
$stderr.flush
|
659
|
+
end
|
660
|
+
raise
|
661
|
+
else
|
662
|
+
return nil
|
648
663
|
end
|
649
|
-
|
664
|
+
end
|
665
|
+
else # @pg_commands is defined
|
666
|
+
if arg.is_a?(String)
|
667
|
+
@pg_commands << arg if arg != ""
|
650
668
|
else
|
651
|
-
|
669
|
+
@pg_commands.concat(arg)
|
652
670
|
end
|
671
|
+
nil
|
653
672
|
end
|
654
673
|
end
|
655
674
|
|
data/pg_conn.gemspec
CHANGED
@@ -13,7 +13,6 @@ Gem::Specification.new do |spec|
|
|
13
13
|
spec.homepage = "http://www.nowhere.com/"
|
14
14
|
spec.required_ruby_version = ">= 2.4.0"
|
15
15
|
|
16
|
-
|
17
16
|
spec.metadata["homepage_uri"] = spec.homepage
|
18
17
|
|
19
18
|
# Specify which files should be added to the gem when it is released.
|
@@ -27,28 +26,7 @@ Gem::Specification.new do |spec|
|
|
27
26
|
spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
|
28
27
|
spec.require_paths = ["lib"]
|
29
28
|
|
30
|
-
# Uncomment to register a new dependency of your gem
|
31
|
-
# spec.add_dependency "example-gem", "~> 1.0"
|
32
|
-
|
33
|
-
# For more information and examples about making a new gem, checkout our
|
34
|
-
# guide at: https://bundler.io/guides/creating_gem.html
|
35
|
-
|
36
|
-
# Add your production dependencies here
|
37
|
-
# spec.add_dependency GEM [, VERSION]
|
38
29
|
spec.add_dependency "pg"
|
39
30
|
|
40
|
-
|
41
|
-
# spec.add_development_dependency GEM [, VERSION]
|
42
|
-
|
43
|
-
# Also un-comment in spec/spec_helper to use simplecov
|
44
|
-
# spec.add_development_dependency "simplecov"
|
45
|
-
|
46
|
-
# In development mode override load paths for gems whose source are located
|
47
|
-
# as siblings of this project directory
|
48
|
-
if File.directory?("#{__dir__}/.git")
|
49
|
-
local_projects = Dir["../*"].select { |path|
|
50
|
-
File.directory?(path) && File.exist?("#{path}/Gemfile")
|
51
|
-
}.map { |relpath| "#{File.absolute_path(relpath)}/lib" }
|
52
|
-
$LOAD_PATH.unshift *local_projects
|
53
|
-
end
|
31
|
+
spec.add_development_dependency "simplecov"
|
54
32
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pg_conn
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Claus Rasmussen
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-03-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pg
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: simplecov
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
27
41
|
description: Gem pg_conn
|
28
42
|
email:
|
29
43
|
- claus.l.rasmussen@gmail.com
|
@@ -64,7 +78,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
64
78
|
- !ruby/object:Gem::Version
|
65
79
|
version: '0'
|
66
80
|
requirements: []
|
67
|
-
rubygems_version: 3.
|
81
|
+
rubygems_version: 3.1.4
|
68
82
|
signing_key:
|
69
83
|
specification_version: 4
|
70
84
|
summary: Gem pg_conn
|