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.
- checksums.yaml +4 -4
- data/lib/pg_conn/version.rb +1 -1
- data/lib/pg_conn.rb +44 -28
- 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: 6dc75936f3c9bd5db772a2f8a80aa8e8bb25cbd1ae2181492766a7ed6ab9104a
|
4
|
+
data.tar.gz: 8ac094777a20c074f4a018b4bb0ea53efff219eb2401e18bf9c5887721fbb1fe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8651be5de05b08d991cc257dab9cc060c4dfe22f8c22b2489f7e9ecc3654d51c55ad8494287b1cb829dc92a50cf60eb777b8814bcc23b348143caf9339729a8c
|
7
|
+
data.tar.gz: 8c11d1e8cb3ceb859438e9ccb98fe38de9ed9126c449c58972cef97d9fb3108c87ea2a18899aea9d500eaa249625d0a1a783176e3fd4e8bc7ebe035cec31f67b
|
data/lib/pg_conn/version.rb
CHANGED
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
|
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,
|
325
|
-
|
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
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
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.
|
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-
|
11
|
+
date: 2024-11-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pg
|