pg_conn 0.3.6 → 0.4.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 +7 -0
- data/lib/pg_conn/rdbms_methods.rb +5 -5
- data/lib/pg_conn/role_methods.rb +4 -5
- data/lib/pg_conn/schema_methods.rb +2 -2
- data/lib/pg_conn/version.rb +1 -1
- data/lib/pg_conn.rb +19 -12
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e9c82eb8c1dc8b48877759c39ecd0f3f0d2a8bb5f37abfffd0969208c1718cd4
|
4
|
+
data.tar.gz: b003f7990a98a8a63e9bd847ffdb2b44d3de9b61067c37189a8267efd3872346
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 988688435e1c6aa8026772cc4813537101e410c86a4c032dd8369d271a5d519209c7b9ff61d132421d2fb42a4c5cfe533b3b6e994adc2039b930203f3279aad7
|
7
|
+
data.tar.gz: 696363e3cc63c7fc1986d1c898053c012c524179a40817eb632a0080669bae948f3f32d97abb5691a8a194042d100a688626d8f12525197ddbe3e42d92d4badb
|
data/TODO
CHANGED
@@ -1,4 +1,11 @@
|
|
1
1
|
TODO
|
2
|
+
o Option to accept no records when using #value, #tuple, and #struct. The
|
3
|
+
alternative is to use the 'one-table' as base table in the query and then
|
4
|
+
left join the rest
|
5
|
+
o Implement search_path
|
6
|
+
o Proper implementation of call of functions and procedures: Functions should
|
7
|
+
be called through #value, #tuple etc. and procedures through #call.
|
8
|
+
Proceduer output parameters needs handling too
|
2
9
|
o Create an abstract PgConnBase and have PgStmts (writes statements to array)
|
3
10
|
and PgConn (sends statements to server) classes derived from it
|
4
11
|
o fix silent
|
@@ -69,13 +69,13 @@ module PgConn
|
|
69
69
|
end
|
70
70
|
|
71
71
|
# Hollow-out a database by removing all schemas in the database. The public
|
72
|
-
# schema is recreated afterwards
|
73
|
-
# nil
|
72
|
+
# schema is recreated afterwards if :public is true. Uses the current
|
73
|
+
# database if @database is nil
|
74
74
|
#
|
75
75
|
# Note that the database can have active users logged in while the database
|
76
76
|
# is emptied
|
77
77
|
#
|
78
|
-
def empty!(database = nil, exclude: [])
|
78
|
+
def empty!(database = nil, public: true, exclude: [])
|
79
79
|
local = !database.nil?
|
80
80
|
begin
|
81
81
|
conn = local ? PgConn.new(database) : self.conn
|
@@ -84,11 +84,11 @@ module PgConn
|
|
84
84
|
.values("select nspname from pg_namespace where nspowner != 10 or nspname = 'public'")
|
85
85
|
.select { |schema| !exclude.include?(schema) }
|
86
86
|
.join(", ")
|
87
|
+
conn.exec "drop schema #{schemas} cascade"
|
87
88
|
conn.exec %(
|
88
|
-
drop schema #{schemas} cascade;
|
89
89
|
create schema public authorization postgres;
|
90
90
|
grant usage, create on schema public to public
|
91
|
-
)
|
91
|
+
) if public
|
92
92
|
ensure
|
93
93
|
conn&.terminate if local
|
94
94
|
end
|
data/lib/pg_conn/role_methods.rb
CHANGED
@@ -44,11 +44,10 @@ module PgConn
|
|
44
44
|
# Create a new role
|
45
45
|
def create(rolename, superuser: false, create_database: false, can_login: false, create_role: false)
|
46
46
|
user_decl = "create role \"#{rolename}\""
|
47
|
-
superuser_decl = superuser ? "
|
48
|
-
create_database_decl = create_database ? "
|
49
|
-
can_login_decl = can_login ? "
|
50
|
-
create_role_decl = create_role ? "
|
51
|
-
|
47
|
+
superuser_decl = superuser ? "superuser" : "nosuperuser"
|
48
|
+
create_database_decl = create_database ? "createdb" : "nocreatedb"
|
49
|
+
can_login_decl = can_login ? "login" : "nologin"
|
50
|
+
create_role_decl = create_role ? "createrole" : "nocreaterole"
|
52
51
|
stmt = [user_decl, superuser_decl, can_login_decl, create_role_decl].compact.join(" ")
|
53
52
|
conn.exec stmt
|
54
53
|
end
|
@@ -35,8 +35,8 @@ module PgConn
|
|
35
35
|
true
|
36
36
|
end
|
37
37
|
|
38
|
-
# List schemas.
|
39
|
-
#
|
38
|
+
# List schemas. Built-in schemas are not listed unless the :all option is
|
39
|
+
# true. The :exclude option can be used to exclude named schemas
|
40
40
|
def list(all: false, exclude: [])
|
41
41
|
conn.values(%(
|
42
42
|
select schema_name
|
data/lib/pg_conn/version.rb
CHANGED
data/lib/pg_conn.rb
CHANGED
@@ -438,7 +438,8 @@ module PgConn
|
|
438
438
|
# (like #value or #values), a tuple if the record has multiple columns
|
439
439
|
# (like #tuple), and an array of of tuples if the result contained more
|
440
440
|
# than one record with multiple columns (like #tuples)
|
441
|
-
|
441
|
+
#
|
442
|
+
def call(name, *args, proc: false)
|
442
443
|
args_sql = args.map { |arg| # TODO: Use pg's encoder
|
443
444
|
case arg
|
444
445
|
when NilClass; "null"
|
@@ -451,19 +452,24 @@ module PgConn
|
|
451
452
|
raise ArgumentError, "Unrecognized value: #{arg.inspect}"
|
452
453
|
end
|
453
454
|
}.join(", ")
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
|
455
|
+
if proc
|
456
|
+
pg_exec "call #{name}(#{args_sql})"
|
457
|
+
return nil
|
458
|
+
else
|
459
|
+
r = pg_exec "select * from #{name}(#{args_sql})"
|
460
|
+
if r.ntuples == 0
|
461
|
+
raise Error, "No records returned"
|
462
|
+
elsif r.ntuples == 1
|
463
|
+
if r.nfields == 1
|
464
|
+
r.values[0][0]
|
465
|
+
else
|
466
|
+
r.values[0]
|
467
|
+
end
|
468
|
+
elsif r.nfields == 1
|
469
|
+
r.column_values(0)
|
460
470
|
else
|
461
|
-
r
|
471
|
+
r&.values
|
462
472
|
end
|
463
|
-
elsif r.nfields == 1
|
464
|
-
r.column_values(0)
|
465
|
-
else
|
466
|
-
r&.values
|
467
473
|
end
|
468
474
|
end
|
469
475
|
|
@@ -582,6 +588,7 @@ module PgConn
|
|
582
588
|
rescue PgConn::Rollback
|
583
589
|
pop_trancaction(commit: false)
|
584
590
|
return nil
|
591
|
+
# FIXME: Rescue other postgres errors and wipe-out stack
|
585
592
|
end
|
586
593
|
pop_transaction(commit: commit)
|
587
594
|
result
|
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.4.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-06-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pg
|
@@ -106,7 +106,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
106
106
|
- !ruby/object:Gem::Version
|
107
107
|
version: '0'
|
108
108
|
requirements: []
|
109
|
-
rubygems_version: 3.1.
|
109
|
+
rubygems_version: 3.1.2
|
110
110
|
signing_key:
|
111
111
|
specification_version: 4
|
112
112
|
summary: Gem pg_conn
|