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 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