pg_conn 0.2.1 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|