pg_conn 0.34.0 → 0.35.0

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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/pg_conn/version.rb +1 -1
  3. data/lib/pg_conn.rb +47 -26
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6d18d4244a00a767589287122f298966ccdd9e8d53a6467f84097df698be34a6
4
- data.tar.gz: 6ad5c4c5cf19459996d744e25627cd852d03fa1fa25688572c40de71a5a61100
3
+ metadata.gz: a4c942ce055688931946e0d5a71ddc89a722b2dd98ea6d9d0edc150b39421dd9
4
+ data.tar.gz: 3fea9a99e361c86b3b413845d5f319562051347afe025a27006c80548f822ff4
5
5
  SHA512:
6
- metadata.gz: 9a476b27de6f211d02957c543cf2ee0742011e3d06a468a006fee143827c3cceb8ad32610ca5dee5692cf0230a4c188dd6a4a57335e1eb51d48bc23a9a52e7d3
7
- data.tar.gz: 89dcdcec1bdd52d6b2a6ce56ee688e77661f7d438187e289d26e9344d9d030450caea180e260348050c9abcfd34261465fa1d82cefbded641e16ffde708250b5
6
+ metadata.gz: aa391cc15005c51ca01503e33096dacecec5743fa3bf6f28c22d7fd2ad7e14d2e23f48dc2cc0e3e9cade6d77bc359d3b56ebb871015e2db9d08cffcedcf8988f
7
+ data.tar.gz: 6fd5537fe417a8dac42ad2ac3af16c75a329bcafc93118ae2a375a3ec3368d0dc088163f8dbd87d5b56a8cb357b3bc5c76c6f9ec49618d4d4c6099bee472b423
@@ -1,3 +1,3 @@
1
1
  module PgConn
2
- VERSION = "0.34.0"
2
+ VERSION = "0.35.0"
3
3
  end
data/lib/pg_conn.rb CHANGED
@@ -155,19 +155,27 @@ module PgConn
155
155
  # #exec or #transaction block. The timestamp includes the current time zone
156
156
  attr_reader :timestamptz
157
157
 
158
- # Controls notices. Valid values are true, false, nil, or a Proc
159
- # object that recieves the message. True causes the message to be printed
160
- # to standard output, false ignores it, and nil resets the state to the
161
- # default given when the connection was initialized
162
- def notice=(value) set_option(:notice, value) end
158
+ # Controls error messages. It can be assigned true, false, nil. True causes
159
+ # the error message to be printed to standard error, false ignores it, and
160
+ # nil resets the state to the default given when the connection was
161
+ # initialized or false if absent. Note that #silent only controls the error
162
+ # message, the exception is not affected
163
+ def silent() @options[:silent] end
164
+ def silent=(value) set_option(:silent, value) end
165
+
166
+ # Controls notices. It can be assigned true, false, nil, or a Proc object
167
+ # that recieves the message. True causes the message to be printed to
168
+ # standard output, false ignores it, and nil resets the state to the
169
+ # default given when the connection was initialized or false if absent
163
170
  def notice() @options[:notice] end
171
+ def notice=(value) set_option(:notice, value) end
164
172
 
165
- # Controls warnings. Valid values are true, false, nil, or a Proc
166
- # object that recieves the message. True causes the message to be printed
167
- # to standard error, false ignores it, and nil resets the state to the
168
- # default given when the connection was initialized
169
- def warning=(value) set_option(:warning, value) end
173
+ # Controls warnings. It can be assigned true, false, nil, or a Proc object
174
+ # that recieves the message. True causes the message to be printed to
175
+ # standard error, false ignores it, and nil resets the state to the default
176
+ # given when the connection was initialized or false if absent
170
177
  def warning() @options[:warning] end
178
+ def warning=(value) set_option(:warning, value) end
171
179
 
172
180
  # TODO: Move error message handling into the same framework as notice and
173
181
  # warning but we have a name collision just below that would need to be
@@ -206,7 +214,7 @@ module PgConn
206
214
  # if absent in the Postgres error message
207
215
  def errchar = err[2]
208
216
 
209
- DEFAULT_OPTIONS = { notice: false, warning: false }
217
+ DEFAULT_OPTIONS = { silent: false, notice: false, warning: false }
210
218
 
211
219
  # :call-seq:
212
220
  # initialize(dbname = nil, user = nil, **options)
@@ -314,7 +322,8 @@ module PgConn
314
322
  # type "uuid" with oid 2950..' warnings
315
323
  type_map.default_type_map = PG::TypeMapAllStrings.new
316
324
 
317
- # Timestamp decoder. FIXME What is this?
325
+ # Timestamp decoder. FIXME What is this? Why only Timestamp and not
326
+ # Timestamptz?
318
327
  type_map.add_coder PG::TextDecoder::Timestamp.new( # Timestamp without time zone
319
328
  oid: 1114,
320
329
  flags: PG::Coder::TIMESTAMP_DB_UTC | PG::Coder::TIMESTAMP_APP_UTC)
@@ -329,12 +338,13 @@ module PgConn
329
338
 
330
339
  @pg_connection.type_map_for_results = type_map
331
340
  @pg_connection.field_name_type = @field_name_class.to_s.downcase.to_sym # Use symbol field names
332
-
333
- @options, @default_options = {}, DEFAULT_OPTIONS
334
- set_options(options) # require @default_options
335
- @default_options = @options.dup
336
341
  end
337
342
 
343
+ # Set options even if there is no connection to avoid special casing
344
+ # absent options
345
+ @options, @default_options = {}, DEFAULT_OPTIONS.merge(options)
346
+ set_options(options) if @pg_connection
347
+
338
348
  @schema = SchemaMethods.new(self)
339
349
  @role = RoleMethods.new(self)
340
350
  @rdbms = RdbmsMethods.new(self)
@@ -685,7 +695,7 @@ module PgConn
685
695
  # of the function. If the :proc option is true the "function" is assumed
686
696
  # to be a procedure
687
697
  #
688
- def call(name, *args, elem_type: nil, silent: false, proc: false) # :proc may interfere with hashes
698
+ def call(name, *args, elem_type: nil, silent: self.silent, proc: false) # :proc may interfere with hashes
689
699
  args_seq = quote_values(args, elem_type: elem_type)
690
700
  if proc
691
701
  pg_exec "call #{name}(#{args_seq})", silent: silent
@@ -709,7 +719,7 @@ module PgConn
709
719
  end
710
720
 
711
721
  # Like #call with :proc set to true
712
- def proc(name, *args, silent: false)
722
+ def proc(name, *args, silent: self.silent)
713
723
  call(name, *args, silent: silent, proc: true)
714
724
  end
715
725
 
@@ -818,7 +828,7 @@ module PgConn
818
828
  end
819
829
 
820
830
  # Execute block with global options and resets afterwards. Currently only
821
- # :notice and :warning is supported. Very useful in RSpec tests
831
+ # :silent, :notice and :warning is supported. Very useful in RSpec tests
822
832
  #
823
833
  # TODO: :error, :fail, :symbol, :schema, :search_path
824
834
  #
@@ -848,14 +858,14 @@ module PgConn
848
858
  # transaction stack has collapsed
849
859
  #
850
860
  # TODO: Make sure the transaction stack is emptied on postgres errors
851
- def exec(sql, commit: true, fail: true, silent: false)
861
+ def exec(sql, commit: true, fail: true, silent: self.silent)
852
862
  transaction(commit: commit) { execute(sql, fail: fail, silent: silent) }
853
863
  end
854
864
 
855
- # Like #exec but returns true/false depending on if the command succeeded.
856
- # There is not a corresponding #execute? method because any failure rolls
857
- # back the whole transaction stack. TODO: Check which exceptions that
858
- # should be captured
865
+ # Like #exec but returns true/false depending on if the command succeeded,
866
+ # error messages are suppressed by default. There is no corresponding
867
+ # #execute? method because any failure rolls back the whole transaction
868
+ # stack. TODO: Check which exceptions that should be captured
859
869
  def exec?(sql, commit: true, silent: true)
860
870
  begin
861
871
  exec(sql, commit: commit, fail: true, silent: silent)
@@ -873,7 +883,7 @@ module PgConn
873
883
  # unless :fail is false in which case it returns nil
874
884
  #
875
885
  # TODO: Handle postgres exceptions wrt transaction state and stack
876
- def execute(sql, fail: true, silent: false)
886
+ def execute(sql, fail: true, silent: self.silent)
877
887
  if @pg_connection
878
888
  begin
879
889
  pg_exec(sql, silent: silent)&.cmd_tuples
@@ -994,6 +1004,9 @@ module PgConn
994
1004
  # PgConn::Rollback exception in which case #transaction returns nil. Note
995
1005
  # that the transaction timestamp is set to the start of the first
996
1006
  # transaction even if transactions are nested
1007
+ #
1008
+ # FIXME: There is some strange problem in rspec where an #insert handles
1009
+ # an exception correctly while #exec, #execute, and #transaction does not
997
1010
  def transaction(commit: true, &block)
998
1011
  if block_given?
999
1012
  result = nil
@@ -1165,6 +1178,14 @@ module PgConn
1165
1178
  # that is shared between all connection copies
1166
1179
  def set_option(option, value)
1167
1180
  case option
1181
+ when :silent
1182
+ @options[:silent] =
1183
+ case value
1184
+ when true, false; value
1185
+ when nil; @default_options[:silent]
1186
+ else
1187
+ raise ArgumentError, "Illegal value #{value.inspect}"
1188
+ end
1168
1189
  when :notice, :warning
1169
1190
  @options[option] =
1170
1191
  case value
@@ -1231,7 +1252,7 @@ module PgConn
1231
1252
  # though
1232
1253
  #
1233
1254
  # TODO: Fix silent by not handling exceptions
1234
- def pg_exec(arg, silent: false)
1255
+ def pg_exec(arg, silent: self.silent)
1235
1256
  if @pg_connection
1236
1257
  begin
1237
1258
  last_stmt = nil # To make the current SQL statement visible to the rescue clause. FIXME Not used?
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.34.0
4
+ version: 0.35.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: 2025-03-08 00:00:00.000000000 Z
11
+ date: 2025-03-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pg