pg_conn 0.27.0 → 0.28.0

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: 735772bb654f60ebbd736fb3cd13cb9af8dfe00a3b796d5447457adea435dddd
4
- data.tar.gz: 6ee452ddb1a6e49d46b735b27d8a2f106959637d4e4373bf33d5ec72db757b9f
3
+ metadata.gz: 1ecec863d9bc5362325174cc0b8808850857fb6458bf7ebfe935d4c1c7fed8f1
4
+ data.tar.gz: cd377b8f0b6b52dd315643a25e5a965f14f28602ac1e804ec5f14ed65e3dc7fe
5
5
  SHA512:
6
- metadata.gz: 4bf460966a99794fc05a134638acca681da79700ec1be145fcde276bcad2070c1a743fcf8ee8fde6c7d65a07d21026ef96b2cedb24e54b8fa61aa80ce59694ca
7
- data.tar.gz: fa3e00167e8323f410def0d42c0e568f0185c90939e3891033a6a7e55dcdd5a0b0f50a5343f95c5f3ca2b0bba22312fd65fef25bc323f26956dfca3b9f45844a
6
+ metadata.gz: f8c2acce15051e71533db05379da6939882e5e077f1c002cdce9f904bc026b5c09b317d5a948ca0341ed7af1b6ef4a5a974c3dfed3edd96333aa90bc169c97d7
7
+ data.tar.gz: 827c0194d8a9897ccc27b5acb7b8c2210a0a7ca611648b9acb0852f09afd3c7378e014552256fede9e8da635f22fd475d923eb67b06231adaaf01bc5f6d5d366
@@ -1,3 +1,3 @@
1
1
  module PgConn
2
- VERSION = "0.27.0"
2
+ VERSION = "0.28.0"
3
3
  end
data/lib/pg_conn.rb CHANGED
@@ -31,6 +31,10 @@ module PgConn
31
31
  end
32
32
  end
33
33
 
34
+ # Used to mark strings as literals that should not be quoted. This is the
35
+ # case for row and record values
36
+ class Literal < String; end
37
+
34
38
  # All results from the database are converted into native Ruby types
35
39
  class Connection
36
40
  # Make PgConn::Connection pretend to be an instance of the PgConn module
@@ -246,6 +250,8 @@ module PgConn
246
250
  end
247
251
  end
248
252
 
253
+ def literal(arg) Literal.new(arg) end
254
+
249
255
  # Quote argument as an identifier. The argument should be a non-nil string
250
256
  # or a symbol
251
257
  def quote_identifier(s)
@@ -274,6 +280,7 @@ module PgConn
274
280
  #
275
281
  def quote_value(value, elem_type: nil)
276
282
  case value
283
+ when Literal; value
277
284
  when String; @pg_connection.escape_literal(value)
278
285
  when Integer, Float; value.to_s
279
286
  when true, false; value.to_s
@@ -363,6 +370,13 @@ module PgConn
363
370
  value("select count(*) from (#{inner_query}) as inner_query")
364
371
  end
365
372
 
373
+ # TODO (but breaks a lot of code)
374
+ # value 1
375
+ # value? 0 or 1
376
+ #
377
+ # values 1 or more
378
+ # values? 0 or more
379
+
366
380
  # Return a single value. It is an error if the query doesn't return a
367
381
  # single record with a single column.
368
382
  #
@@ -983,7 +997,10 @@ module PgConn
983
997
 
984
998
  # :call-seq
985
999
  # parse_query(query)
986
- # parse_query(table, id_or_where_clause = "true", fields = [])
1000
+ # parse_query(table, id, fields...)
1001
+ # parse_query(table, where_clause, fields...)
1002
+ # parse_query(table, hash, fields...)
1003
+ # parse_query(table, fields...)
987
1004
  #
988
1005
  # Parse a query. Used in query-functions (#value etc.). The fields argument
989
1006
  # can be a list of fields or arrays of fields
@@ -998,6 +1015,10 @@ module PgConn
998
1015
  case args.first
999
1016
  when Integer; where_clause = "id = #{args.shift}"
1000
1017
  when String; where_clause = args.shift
1018
+ when Hash
1019
+ where_clause = args.shift.map { |k,v|
1020
+ "#{self.quote_identifier(k)} = #{self.quote_value(v) }"
1021
+ }.join(" and ")
1001
1022
  when Symbol; fields << args.shift
1002
1023
  when Array; fields = args.shift
1003
1024
  when nil; where_clause = "true"
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.27.0
4
+ version: 0.28.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-11-23 00:00:00.000000000 Z
11
+ date: 2024-11-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pg