pg_conn 0.26.0 → 0.26.1

Sign up to get free protection for your applications and to get access to all the features.
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 +44 -28
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4148bbd8c21613249beed07d5248aa71780a8805881afc94899f9f29cd2d452d
4
- data.tar.gz: 21bea1c8c108a4a135eb1d6936a56995b457db0e8192a17b745d0b3dd1676846
3
+ metadata.gz: 6dc75936f3c9bd5db772a2f8a80aa8e8bb25cbd1ae2181492766a7ed6ab9104a
4
+ data.tar.gz: 8ac094777a20c074f4a018b4bb0ea53efff219eb2401e18bf9c5887721fbb1fe
5
5
  SHA512:
6
- metadata.gz: 7cca5aea976d949607b1650e8f00347a22be14907c8296a26379cd804a51f5610bb9786bc21b3b9317496a00ef135564033f276d5e3300dbd4d133b056835a79
7
- data.tar.gz: 8bcf303b9712c1e6de69c301115c88a53d908aad90c8bce6b8e73e912d6b710772fb88a6bb191bc34142ca29f016845bfbc035cda4670c91d5e3d407ce82907e
6
+ metadata.gz: 8651be5de05b08d991cc257dab9cc060c4dfe22f8c22b2489f7e9ecc3654d51c55ad8494287b1cb829dc92a50cf60eb777b8814bcc23b348143caf9339729a8c
7
+ data.tar.gz: 8c11d1e8cb3ceb859438e9ccb98fe38de9ed9126c449c58972cef97d9fb3108c87ea2a18899aea9d500eaa249625d0a1a783176e3fd4e8bc7ebe035cec31f67b
@@ -1,3 +1,3 @@
1
1
  module PgConn
2
- VERSION = "0.26.0"
2
+ VERSION = "0.26.1"
3
3
  end
data/lib/pg_conn.rb CHANGED
@@ -315,41 +315,21 @@ module PgConn
315
315
  end
316
316
 
317
317
  # Quote a record and cast it into the given type, the type can also be a
318
- # table or view. 'data' is a hash or struct representation of the record
318
+ # table or view. 'data' is an array, hash, or struct representation of the
319
+ # record
319
320
  #
320
321
  # Note that the fields are retrived from the database so this method is not
321
322
  # as fast as the other quote-methods. It is however very convenient when
322
323
  # you're testing and need a composite type because record-quoting can
323
324
  # easily become unwieldly
324
- def quote_record(schema_name = nil, type, data, elem_types: nil)
325
- qual_name = [schema_name, type].compact .join('.')
326
-
327
- fields = self.values(%(
328
- select attname
329
- from pg_attribute
330
- where
331
- attrelid = '#{qual_name}'::regclass
332
- and attnum > 0
333
- and not attisdropped
334
- order by attnum
335
- )).map(&:to_sym)
336
-
337
- values =
338
- case data
339
- when Hash; fields.map { |f| data[f] }
340
- when OpenStruct; fields.map { |f| data.send(f) }
341
- when Array; data
342
- else
343
- raise Error, "Illegal value #{data.inspect}"
344
- end
345
-
346
- "(#{quote_tuple(values, elem_types: elem_types)})::#{qual_name}"
325
+ def quote_record(data, schema_name = nil, type, elem_types: nil)
326
+ quote_record_impl(data, schema_name, type, elem_types: elem_types, array: false)
347
327
  end
348
328
 
349
- def quote_records(schema_name = nil, type, datas, elem_types: nil)
350
- qual_name = [schema_name, type].compact .join('.') + "[]"
351
- records = datas.map { |data| quote_record(schema_name, type, data, elem_types: elem_types) }
352
- "array[#{records.join(", ")}]::#{qual_name}"
329
+ # Quote an array of records. The type is the record type, not the type of
330
+ # the enclosing array
331
+ def quote_records(data, schema_name = nil, type, elem_types: nil)
332
+ quote_record_impl(data, schema_name, type, elem_types: elem_types, array: true)
353
333
  end
354
334
 
355
335
  # :call-seq:
@@ -980,6 +960,42 @@ module PgConn
980
960
  end
981
961
  end
982
962
 
963
+ # Common implementation for #quote_record and #quote_records that avoids
964
+ # query the database multiple times while not duplication the code. the
965
+ # :array flag controls the mode
966
+ def quote_record_impl(datas, schema_name = nil, type, elem_types: nil, array: nil)
967
+ pg_type = [schema_name, type].compact.join('.')
968
+ fields = self.values(%(
969
+ select attname
970
+ from pg_attribute
971
+ where
972
+ attrelid = '#{pg_type}'::regclass
973
+ and attnum > 0
974
+ and not attisdropped
975
+ order by attnum
976
+ )).map(&:to_sym)
977
+
978
+ datas = [datas] if !array
979
+
980
+ literals = datas.map { |data|
981
+ values =
982
+ case data
983
+ when Hash; fields.map { |f| data[f] }
984
+ when OpenStruct; fields.map { |f| data.send(f) }
985
+ when Array; data
986
+ else
987
+ raise Error, "Illegal value #{data.inspect}"
988
+ end
989
+ "(#{quote_tuple(values, elem_types: elem_types)})::#{pg_type}"
990
+ }
991
+
992
+ if array
993
+ "array[#{literals.join(', ')}]::#{pg_type}[]"
994
+ else
995
+ literals.first
996
+ end
997
+ end
998
+
983
999
  # :call-seq:
984
1000
  # pg_exec(string)
985
1001
  # pg_exec(array)
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.26.0
4
+ version: 0.26.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: 2024-11-16 00:00:00.000000000 Z
11
+ date: 2024-11-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pg