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