pg_conn 0.21.0 → 0.22.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/pg_conn/rdbms_methods.rb +3 -3
- data/lib/pg_conn/role_methods.rb +3 -3
- data/lib/pg_conn/schema_methods.rb +7 -7
- data/lib/pg_conn/version.rb +1 -1
- data/lib/pg_conn.rb +10 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8d8571dfbe07ffc9e846741807d87d45373553d987e353693aa4599010804b3e
|
4
|
+
data.tar.gz: 4d0bd8faced962ac9c0837b3a98f1a6f0ee4fbc0c1c1aa4a12c448472e10376a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3b3ff2ae7e1fa63f697616e16eff4065e5118ef5fe9cb446837cc30b028df5a385b56848e23546c7718f5f704e622cd35175acbd56aacd6fd56774dec9c34627
|
7
|
+
data.tar.gz: 4c9428ef6abc6162c068f154575eb1d8c7b63c1aa072af4350c7bacb2c6ea63e0ffea80a470f9ca8b72c635e83ceda7345b54bc6a24d5adc450bf0863fb0df1b
|
@@ -21,7 +21,7 @@ module PgConn
|
|
21
21
|
end
|
22
22
|
|
23
23
|
# Create a new database
|
24
|
-
def create(database, owner: ENV['USER'], template: "template1")
|
24
|
+
def create(database, owner: ENV['USER'], template: "template1")
|
25
25
|
owner_clause = owner ? "owner = \"#{owner}\"" : nil
|
26
26
|
template_clause = template ? "template = \"#{template}\"" : nil
|
27
27
|
stmt = ["create database \"#{database}\"", owner_clause, template_clause].compact.join(" ")
|
@@ -80,7 +80,7 @@ module PgConn
|
|
80
80
|
local = !database.nil?
|
81
81
|
begin
|
82
82
|
conn = local ? PgConn.new(database) : self.conn
|
83
|
-
schemas =
|
83
|
+
schemas =
|
84
84
|
conn
|
85
85
|
.values("select nspname from pg_namespace where nspowner != 10 or nspname = 'public'")
|
86
86
|
.select { |schema| !exclude.include?(schema) }
|
@@ -90,7 +90,7 @@ module PgConn
|
|
90
90
|
# FIXME FIXME FIXME SECURITY Why grant 'create' to public?
|
91
91
|
conn.exec %(
|
92
92
|
create schema public authorization postgres;
|
93
|
-
grant usage, create on schema public to public
|
93
|
+
grant usage, create on schema public to public
|
94
94
|
) if public
|
95
95
|
ensure
|
96
96
|
conn&.terminate if local
|
data/lib/pg_conn/role_methods.rb
CHANGED
@@ -18,7 +18,7 @@ module PgConn
|
|
18
18
|
else
|
19
19
|
nil
|
20
20
|
end
|
21
|
-
can_login_clause =
|
21
|
+
can_login_clause =
|
22
22
|
case can_login
|
23
23
|
when true; "rolcanlogin"
|
24
24
|
when false; "not rolcanlogin"
|
@@ -62,7 +62,7 @@ module PgConn
|
|
62
62
|
# counldn't be deleted
|
63
63
|
#
|
64
64
|
# Note that cascade only works if connected to the database where the
|
65
|
-
# privileges exist.
|
65
|
+
# privileges exist.
|
66
66
|
#
|
67
67
|
# TODO The :silent option is used in tests - fix it somehow!
|
68
68
|
def drop(*rolenames, cascade: false, fail: true, silent: false)
|
@@ -86,7 +86,7 @@ module PgConn
|
|
86
86
|
superuser_clause = superuser.nil? ? nil : "rolsuper = #{superuser}"
|
87
87
|
can_login_clause = can_login.nil? ? nil : "rolcanlogin = #{can_login}"
|
88
88
|
query = [
|
89
|
-
"select rolname from pg_roles where true",
|
89
|
+
"select rolname from pg_roles where true",
|
90
90
|
database_clause, superuser_clause, can_login_clause
|
91
91
|
].compact.join(" and ")
|
92
92
|
conn.values(query)
|
@@ -49,8 +49,8 @@ module PgConn
|
|
49
49
|
# Empty all tables in the given schema
|
50
50
|
def clean!(schema, exclude: [])
|
51
51
|
conn.session.triggers(false) {
|
52
|
-
self.list_tables(schema, exclude: exclude).each { |table|
|
53
|
-
conn.exec "delete from #{schema}.#{table}"
|
52
|
+
self.list_tables(schema, exclude: exclude).each { |table|
|
53
|
+
conn.exec "delete from #{schema}.#{table}"
|
54
54
|
}
|
55
55
|
}
|
56
56
|
end
|
@@ -125,8 +125,8 @@ module PgConn
|
|
125
125
|
end
|
126
126
|
|
127
127
|
# Return name of the table's sequence (if any)
|
128
|
-
def sequence(schema, table)
|
129
|
-
conn.value "select pg_get_serial_sequence('#{schema}.#{table}', 'id')"
|
128
|
+
def sequence(schema, table)
|
129
|
+
conn.value "select pg_get_serial_sequence('#{schema}.#{table}', 'id')"
|
130
130
|
end
|
131
131
|
|
132
132
|
# Get the current serial value for the table. Returns nil if the serial has
|
@@ -168,7 +168,7 @@ module PgConn
|
|
168
168
|
kind_sql_list = "'" + (kind.nil? ? %w(r f v m) : Array(kind).flatten).join("', '") + "'"
|
169
169
|
%(
|
170
170
|
select 1
|
171
|
-
from pg_class
|
171
|
+
from pg_class
|
172
172
|
where relnamespace::regnamespace::text = '#{schema}'
|
173
173
|
and relname = '#{relation}'
|
174
174
|
and relkind in (#{kind_sql_list})
|
@@ -183,7 +183,7 @@ module PgConn
|
|
183
183
|
exclude_expr = exclude.empty? ? "true = true" : "not relname in (#{exclude_list})"
|
184
184
|
%(
|
185
185
|
select relname
|
186
|
-
from pg_class
|
186
|
+
from pg_class
|
187
187
|
where relnamespace::regnamespace::text = '#{schema}'
|
188
188
|
and #{kind_expr}
|
189
189
|
and #{exclude_expr}
|
@@ -211,7 +211,7 @@ module PgConn
|
|
211
211
|
join pg_attribute a on a.attrelid = c.oid
|
212
212
|
where relnamespace::regnamespace::text = '#{schema}'
|
213
213
|
and a.attnum > 0
|
214
|
-
),
|
214
|
+
),
|
215
215
|
relation_clause
|
216
216
|
].compact.join(" and ")
|
217
217
|
end
|
data/lib/pg_conn/version.rb
CHANGED
data/lib/pg_conn.rb
CHANGED
@@ -515,8 +515,9 @@ module PgConn
|
|
515
515
|
|
516
516
|
# Returns a hash from the first field to a tuple of the remaining fields.
|
517
517
|
# If there is only one remaining field then that value is used instead of a
|
518
|
-
# tuple
|
519
|
-
|
518
|
+
# tuple. The optional +key+ argument sets the mapping field and the
|
519
|
+
# +symbol+ option convert key to Symbol objects when true
|
520
|
+
def map(query, key = nil, symbol: false) # TODO Swap arguments
|
520
521
|
r = pg_exec(query)
|
521
522
|
begin
|
522
523
|
key = (key || r.fname(0)).to_s
|
@@ -528,13 +529,18 @@ module PgConn
|
|
528
529
|
h = {}
|
529
530
|
r.each_row { |row|
|
530
531
|
key_value = row.delete_at(key_index)
|
532
|
+
key_value = key_value.to_sym if symbol
|
531
533
|
!h.key?(key_value) or raise Error, "Duplicate key: #{key_value}"
|
532
534
|
h[key_value] = (one ? row.first : row)
|
533
535
|
}
|
534
536
|
h
|
535
537
|
end
|
536
538
|
|
537
|
-
|
539
|
+
# Like #map but values of duplicate keys are concatenated. It acts as a
|
540
|
+
# group-by on the key and array_agg on the remaining values. The value is
|
541
|
+
# an array of tuples if the query has more than one value field and an
|
542
|
+
# array of values if there is only one value field
|
543
|
+
def multimap(query, key = nil, symbol: false)
|
538
544
|
r = pg_exec(query)
|
539
545
|
begin
|
540
546
|
key = (key || r.fname(0)).to_s
|
@@ -546,6 +552,7 @@ module PgConn
|
|
546
552
|
h = {}
|
547
553
|
r.each_row { |row|
|
548
554
|
key_value = row.delete_at(key_index)
|
555
|
+
key_value = key_value.to_sym if symbol
|
549
556
|
(h[key_value] ||= []) << (one ? row.first : row)
|
550
557
|
}
|
551
558
|
h
|
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.22.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Claus Rasmussen
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-08-
|
11
|
+
date: 2024-08-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pg
|