pg_conn 0.22.0 → 0.23.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/TODO +2 -1
- data/lib/pg_conn/version.rb +1 -1
- data/lib/pg_conn.rb +37 -15
- 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: d7de75668042e3abdc5b983e0b9a3f6c909ff69aeed2f22c632d1c693f3baac0
|
4
|
+
data.tar.gz: 90cecbdd79e6478d7f6bd1bc3ae042917bc2683771c89de61aab6c05fa2e5279
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 76b775138260668bf75e5bc31e220561f665dffc901349a9ec875e7ec594dee2750e0d979bde80e9045e38e44a3894fe55c2be37faefbe7f35173812cea2a22a
|
7
|
+
data.tar.gz: f0e2e9169cd734814cce4e8b73f7ec017cf3fd9a2622290c4acbf06620ddb3b943957ab5dab527ee0e29a9d71ad4efb511f4f219543ca86301d9fd5c4f5838ad
|
data/TODO
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
TODO
|
2
|
-
o
|
2
|
+
o Use :elem_type everywhere
|
3
|
+
o Use 'drop ... cascade' everywhere
|
3
4
|
o db.context(schema: app_portal, transaction: true) { ... }
|
4
5
|
db.context(set: app_portal, transaction: true) { ... }
|
5
6
|
db.context(add: app_portal, transaction: true) { ... }
|
data/lib/pg_conn/version.rb
CHANGED
data/lib/pg_conn.rb
CHANGED
@@ -239,12 +239,16 @@ module PgConn
|
|
239
239
|
end
|
240
240
|
end
|
241
241
|
|
242
|
-
# Quote
|
242
|
+
# Quote argument as an identifier. The argument should be a non-nil string
|
243
|
+
# or a symbol
|
243
244
|
def quote_identifier(s)
|
244
245
|
s = s.to_s if s.is_a?(Symbol)
|
245
246
|
@pg_connection.escape_identifier(s)
|
246
247
|
end
|
247
248
|
|
249
|
+
# Quote identifiers and concatenate them using ',' as separator
|
250
|
+
def quote_identifiers(idents) = idents.map { |ident| quote_identifier(ident) }.join(", ")
|
251
|
+
|
248
252
|
# Quote the value as a string. Emit 'null' if value is nil
|
249
253
|
#
|
250
254
|
# The value can be of any type but is converted to a string using #to_s
|
@@ -255,7 +259,13 @@ module PgConn
|
|
255
259
|
# Note that a tuple value (an array) must be quoted using #quote_tuple
|
256
260
|
# because #quote_value would quote the tuple as an array instead of a list
|
257
261
|
# of values
|
258
|
-
|
262
|
+
#
|
263
|
+
# The :elem_type option can be a postgres type name (String or Symbol) or
|
264
|
+
# an array of type names. They are used as the required explicit element
|
265
|
+
# type when the argument is an empty array. The element types shoud be in
|
266
|
+
# the same order as the array arguments. Nested arrays is not supported
|
267
|
+
#
|
268
|
+
def quote_value(value, elem_type: nil)
|
259
269
|
case value
|
260
270
|
when String; @pg_connection.escape_literal(value)
|
261
271
|
when Integer, Float; value.to_s
|
@@ -263,23 +273,34 @@ module PgConn
|
|
263
273
|
when nil; 'null'
|
264
274
|
when Date, DateTime; "'#{value}'"
|
265
275
|
when Time; "'#{value.strftime("%FT%T%:z")}'"
|
266
|
-
when Array
|
276
|
+
when Array
|
277
|
+
if value.empty?
|
278
|
+
elem_type or raise Error, "Empty array without elem_type"
|
279
|
+
"array[]::#{elem_type}[]"
|
280
|
+
else
|
281
|
+
"array[#{value.map { |elem| quote_value(elem) }.join(', ')}]"
|
282
|
+
end
|
267
283
|
else
|
268
284
|
@pg_connection.escape_literal(value.to_s)
|
269
285
|
end
|
270
286
|
end
|
271
287
|
|
272
|
-
# Quote an array of values as a tuple. Just an alias for #quote_values
|
273
|
-
def quote_tuple(tuple) = quote_values(tuple)
|
274
|
-
|
275
|
-
# Quote identifiers and concatenate them using ',' as separator
|
276
|
-
def quote_identifiers(idents) = idents.map { |ident| quote_identifier(ident) }.join(", ")
|
277
|
-
|
278
288
|
# Quote values and concatenate them using ',' as separator
|
279
|
-
def quote_values(values
|
289
|
+
def quote_values(values, elem_type: nil)
|
290
|
+
elem_types = Array(elem_type)
|
291
|
+
values.map { |value|
|
292
|
+
elem_type = value.is_a?(Array) ? elem_types&.shift : nil
|
293
|
+
quote_value(value, elem_type: elem_type)
|
294
|
+
}.join(", ")
|
295
|
+
end
|
296
|
+
|
297
|
+
# Quote an array of values as a tuple. Just an alias for #quote_values
|
298
|
+
def quote_tuple(tuple, elem_type: nil) = quote_values(tuple, elem_type: elem_type)
|
280
299
|
|
281
300
|
# Quote an array of tuples
|
282
|
-
def quote_tuples(tuples
|
301
|
+
def quote_tuples(tuples, elem_type: nil)
|
302
|
+
tuples.map { |tuple| "(#{quote_values(tuple, elem_type: elem_type)})" }.join(", ")
|
303
|
+
end
|
283
304
|
|
284
305
|
# :call-seq:
|
285
306
|
# exist?(query)
|
@@ -564,10 +585,11 @@ module PgConn
|
|
564
585
|
# values if the result contained only one column (like #value or #values),
|
565
586
|
# a tuple if the record has multiple columns (like #tuple), and an array of
|
566
587
|
# of tuples if the result contained more than one record with multiple
|
567
|
-
# columns (like #tuples)
|
588
|
+
# columns (like #tuples). If the :proc option is true the "function" is
|
589
|
+
# assumed to be a procedure
|
568
590
|
#
|
569
|
-
def call(name, *args, proc: false) # :proc may interfere with hashes
|
570
|
-
args_seq = quote_values(args)
|
591
|
+
def call(name, *args, elem_type: nil, proc: false) # :proc may interfere with hashes
|
592
|
+
args_seq = quote_values(args, elem_type: elem_type)
|
571
593
|
if proc
|
572
594
|
pg_exec "call #{name}(#{args_seq})"
|
573
595
|
return nil
|
@@ -589,7 +611,7 @@ module PgConn
|
|
589
611
|
end
|
590
612
|
end
|
591
613
|
|
592
|
-
# :call-seq
|
614
|
+
# :call-seq:
|
593
615
|
# insert(table, record|records)
|
594
616
|
# insert(table, fields, record|records|tuples)
|
595
617
|
# insert(schema, table, record|records)
|
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.
|
4
|
+
version: 0.23.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: 2024-08-
|
11
|
+
date: 2024-08-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pg
|