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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5f4b26e4c641b161de759efb248c690f9c35fe394006328a065b99a453f99505
4
- data.tar.gz: 4ec2c0ac1cf0b2dd910688520bde9fda1d9dfdf30ee2d53781caeeb81450fcfb
3
+ metadata.gz: e9c82eb8c1dc8b48877759c39ecd0f3f0d2a8bb5f37abfffd0969208c1718cd4
4
+ data.tar.gz: b003f7990a98a8a63e9bd847ffdb2b44d3de9b61067c37189a8267efd3872346
5
5
  SHA512:
6
- metadata.gz: d40cf6491babd1cec85d65c3d658836889fc09a953c02957e435e7cc7013a5320a5adf5da65369f2c3c2d62c50880e6f456c682be1a5c0b34d69d083cd2644d2
7
- data.tar.gz: b7182f38bd7469eeeaf5ba0c9414bc5b4c195ecf4fa05a6041cd17bb9b05b8e19104d8ebba0e6511b4a7e808ce32593f0b9086f788141f763e753e071e1878f9
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. Use the current database if @database is
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
@@ -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 ? "--superuser" : nil
48
- create_database_decl = create_database ? "--createdb" : "--nocreatedb"
49
- can_login_decl = can_login ? "--login" : "--nologin"
50
- create_role_decl = create_role ? "--createrole" : "--nocreaterole"
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. By built-in schemas are not listed unless the :all option
39
- # is true. The :exclude option can be used to exclude named schemas
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
@@ -1,3 +1,3 @@
1
1
  module PgConn
2
- VERSION = "0.3.6"
2
+ VERSION = "0.4.1"
3
3
  end
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
- def call(name, *args)
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
- r = pg_exec "select * from #{name}(#{args_sql})"
455
- if r.ntuples == 0
456
- raise Error, "No records returned"
457
- elsif r.ntuples == 1
458
- if r.nfields == 1
459
- r.values[0][0]
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.values[0]
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.3.6
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-04-16 00:00:00.000000000 Z
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.4
109
+ rubygems_version: 3.1.2
110
110
  signing_key:
111
111
  specification_version: 4
112
112
  summary: Gem pg_conn