pg 0.18.0.pre20141117110243 → 0.18.0

Sign up to get free protection for your applications and to get access to all the features.
data/ext/util.c CHANGED
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * util.c - Utils for ruby-pg
3
- * $Id$
3
+ * $Id: util.c,v 117fb5c5eed7 2014/10/15 18:36:39 lars $
4
4
  *
5
5
  */
6
6
 
data/lib/pg.rb CHANGED
@@ -24,10 +24,10 @@ end
24
24
  module PG
25
25
 
26
26
  # Library version
27
- VERSION = '0.18.0.pre20141117110243'
27
+ VERSION = '0.18.0'
28
28
 
29
29
  # VCS revision
30
- REVISION = %q$Revision$
30
+ REVISION = %q$Revision: b2bf034e3b9f $
31
31
 
32
32
  class NotAllCopyDataRetrieved < PG::Error
33
33
  end
@@ -71,11 +71,13 @@ module PG::BasicTypeRegistry
71
71
  @coders = coder_map.values
72
72
  @coders_by_name = @coders.inject({}){|h, t| h[t.name] = t; h }
73
73
  @coders_by_oid = @coders.inject({}){|h, t| h[t.oid] = t; h }
74
+ @typenames_by_oid = result.inject({}){|h, t| h[t['oid'].to_i] = t['typname']; h }
74
75
  end
75
76
 
76
77
  attr_reader :coders
77
78
  attr_reader :coders_by_oid
78
79
  attr_reader :coders_by_name
80
+ attr_reader :typenames_by_oid
79
81
 
80
82
  def coder_by_name(name)
81
83
  @coders_by_name[name]
@@ -125,7 +127,7 @@ module PG::BasicTypeRegistry
125
127
  raise(ArgumentError, "Invalid format value %p" % format) unless ValidFormats[format]
126
128
  raise(ArgumentError, "Invalid direction %p" % direction) unless ValidDirections[direction]
127
129
  end
128
-
130
+ protected :check_format_and_direction
129
131
 
130
132
  # The key of this hash maps to the `typname` column from the table.
131
133
  # encoder_map is then dynamically built with oids as the key and Type
@@ -239,6 +241,23 @@ end
239
241
  class PG::BasicTypeMapForResults < PG::TypeMapByOid
240
242
  include PG::BasicTypeRegistry
241
243
 
244
+ class WarningTypeMap < PG::TypeMapInRuby
245
+ def initialize(typenames)
246
+ @already_warned = Hash.new{|h, k| h[k] = {} }
247
+ @typenames_by_oid = typenames
248
+ end
249
+
250
+ def typecast_result_value(result, _tuple, field)
251
+ format = result.fformat(field)
252
+ oid = result.ftype(field)
253
+ unless @already_warned[format][oid]
254
+ STDERR.puts "Warning: no type cast defined for type #{@typenames_by_oid[format][oid].inspect} with oid #{oid}. Please cast this type explicitly to TEXT to be safe for future changes."
255
+ @already_warned[format][oid] = true
256
+ end
257
+ super
258
+ end
259
+ end
260
+
242
261
  def initialize(connection)
243
262
  @coder_maps = build_coder_maps(connection)
244
263
 
@@ -246,6 +265,9 @@ class PG::BasicTypeMapForResults < PG::TypeMapByOid
246
265
  @coder_maps.map{|f| f[:decoder].coders }.flatten.each do |coder|
247
266
  add_coder(coder)
248
267
  end
268
+
269
+ typenames = @coder_maps.map{|f| f[:decoder].typenames_by_oid }
270
+ self.default_type_map = WarningTypeMap.new(typenames)
249
271
  end
250
272
  end
251
273
 
@@ -259,7 +281,7 @@ end
259
281
  # the given result OIDs, but encoders. So it can be used to type cast field values based on
260
282
  # the type OID retrieved by a separate SQL query.
261
283
  #
262
- # PG::TypeMapByOid#fit_to_result(result, false) can be used to generate a result independent
284
+ # PG::TypeMapByOid#build_column_map(result) can be used to generate a result independent
263
285
  # PG::TypeMapByColumn type map, which can subsequently be used to cast query bind parameters
264
286
  # or #put_copy_data fields.
265
287
  #
@@ -268,7 +290,7 @@ end
268
290
  #
269
291
  # # Retrieve table OIDs per empty result set.
270
292
  # res = conn.exec( "SELECT * FROM copytable LIMIT 0" )
271
- # tm = basic_type_mapping.fit_to_result( res, false )
293
+ # tm = basic_type_mapping.build_column_map( res )
272
294
  # row_encoder = PG::TextEncoder::CopyRow.new type_map: tm
273
295
  #
274
296
  # conn.copy_data( "COPY copytable FROM STDIN", row_encoder ) do |res|
@@ -101,7 +101,7 @@ class PG::Connection
101
101
  #
102
102
  # Example with CSV input format:
103
103
  # conn.exec "create table my_table (a text,b text,c text,d text,e text)"
104
- # conn.copy_data "COPY my_table FROM STDOUT CSV" do
104
+ # conn.copy_data "COPY my_table FROM STDIN CSV" do
105
105
  # conn.put_copy_data "some,csv,data,to,copy\n"
106
106
  # conn.put_copy_data "more,csv,data,to,copy\n"
107
107
  # end
@@ -24,7 +24,7 @@ rescue LoadError # 1.8 support
24
24
  raise
25
25
  end
26
26
 
27
- SCRIPT_VERSION = %q$Id$
27
+ SCRIPT_VERSION = %q$Id: disk_usage_report.rb,v 76ebae01c937 2013/03/26 17:50:02 ged $
28
28
 
29
29
 
30
30
  ### Gather data and output it to $stdout.
@@ -32,7 +32,7 @@ end
32
32
  ### Optionally run in a continuous loop, displaying deltas.
33
33
  ###
34
34
  class Stats
35
- VERSION = %q$Id$
35
+ VERSION = %q$Id: pg_statistics.rb,v 36ca5b412583 2012/04/17 23:32:25 mahlon $
36
36
 
37
37
  def initialize( opts )
38
38
  @opts = opts
@@ -36,7 +36,7 @@ end
36
36
  ###
37
37
  class PGMonitor
38
38
 
39
- VERSION = %q$Id$
39
+ VERSION = %q$Id: replication_monitor.rb,v 36ca5b412583 2012/04/17 23:32:25 mahlon $
40
40
 
41
41
  # When to consider a slave as 'behind', measured in WAL segments.
42
42
  # The default WAL segment size is 16, so we'll alert after
@@ -195,7 +195,7 @@ describe 'Basic type mapping' do
195
195
 
196
196
  # Retrieve table OIDs per empty result.
197
197
  res = @conn.exec( "SELECT * FROM copytable LIMIT 0" )
198
- tm = basic_type_mapping.fit_to_result( res, false )
198
+ tm = basic_type_mapping.build_column_map( res )
199
199
  row_decoder = PG::TextDecoder::CopyRow.new type_map: tm
200
200
 
201
201
  rows = []
@@ -221,7 +221,7 @@ describe 'Basic type mapping' do
221
221
 
222
222
  # Retrieve table OIDs per empty result.
223
223
  res = @conn.exec( "SELECT * FROM copytable LIMIT 0" )
224
- tm = basic_type_mapping.fit_to_result( res, false )
224
+ tm = basic_type_mapping.build_column_map( res )
225
225
 
226
226
  @conn.exec_params( "INSERT INTO copytable VALUES ($1, $2, $3)", ['a', 123, [5,4,3]], 0, tm )
227
227
  @conn.exec_params( "INSERT INTO copytable VALUES ($1, $2, $3)", ['b', 234, [2,3]], 0, tm )
@@ -236,7 +236,7 @@ describe 'Basic type mapping' do
236
236
 
237
237
  # Retrieve table OIDs per empty result set.
238
238
  res = @conn.exec( "SELECT * FROM copytable LIMIT 0" )
239
- tm = basic_type_mapping.fit_to_result( res, false )
239
+ tm = basic_type_mapping.build_column_map( res )
240
240
  row_encoder = PG::TextEncoder::CopyRow.new type_map: tm
241
241
 
242
242
  @conn.copy_data( "COPY copytable FROM STDIN", row_encoder ) do |res|
@@ -133,6 +133,6 @@ describe PG::TypeMapByClass do
133
133
  tm[TrueClass] = "dummy"
134
134
  expect{
135
135
  res = @conn.exec_params( "SELECT $1", [true], 0, tm )
136
- }.to raise_error(NoMethodError, /undefined method.*call.*dummy/)
136
+ }.to raise_error(NoMethodError, /undefined method.*call/)
137
137
  end
138
138
  end
@@ -77,10 +77,7 @@ describe PG::TypeMapByOid do
77
77
 
78
78
  it "should allow building new TypeMapByColumn for a given result" do
79
79
  res = @conn.exec( "SELECT 1, 'a', 2.0::FLOAT, '2013-06-30'::DATE" )
80
- tm2 = tm.fit_to_result(res, true)
81
- expect( tm2 ).to eq( tm )
82
-
83
- tm2 = tm.fit_to_result(res, false)
80
+ tm2 = tm.build_column_map(res)
84
81
  expect( tm2 ).to be_a_kind_of(PG::TypeMapByColumn)
85
82
  expect( tm2.coders ).to eq( [textdec_int, nil, textdec_float, pass_through_type] )
86
83
  end
@@ -118,7 +115,6 @@ describe PG::TypeMapByOid do
118
115
 
119
116
  it "should build a TypeMapByColumn when assigned and the number of rows is high enough" do
120
117
  res = @conn.exec( "SELECT generate_series(1,20), 'a', 2.0::FLOAT, '2013-06-30'::DATE" )
121
- expect( tm.fit_to_result(res) ).to be_a_kind_of(PG::TypeMapByColumn)
122
118
  res.type_map = tm
123
119
  expect( res.type_map ).to be_kind_of( PG::TypeMapByColumn )
124
120
  expect( res.type_map.coders ).to eq( [textdec_int, nil, textdec_float, pass_through_type] )
@@ -126,7 +122,6 @@ describe PG::TypeMapByOid do
126
122
 
127
123
  it "should use TypeMapByOid for online lookup and the number of rows is low enough" do
128
124
  res = @conn.exec( "SELECT 1, 'a', 2.0::FLOAT, '2013-06-30'::DATE" )
129
- expect( tm.fit_to_result(res) ).to eq( tm )
130
125
  res.type_map = tm
131
126
  expect( res.type_map ).to be_kind_of( PG::TypeMapByOid )
132
127
  end
@@ -0,0 +1,164 @@
1
+ #!/usr/bin/env rspec
2
+ # encoding: utf-8
3
+
4
+ require_relative '../helpers'
5
+
6
+ require 'pg'
7
+
8
+
9
+ describe PG::TypeMapInRuby do
10
+
11
+ context "result values" do
12
+ it "should be usable non-derived" do
13
+ tm = PG::TypeMapInRuby.new
14
+ res = @conn.exec("select 5").map_types!(tm)
15
+ expect( res.getvalue(0,0) ).to eq( "5" )
16
+ end
17
+
18
+ it "should call derived result mapping methods" do
19
+ tm = Class.new(PG::TypeMapInRuby) do
20
+ attr_reader :fit_to_result_args
21
+
22
+ def fit_to_result(*args)
23
+ @fit_to_result_args = args
24
+ self
25
+ end
26
+
27
+ def typecast_result_value(*args)
28
+ [args, super]
29
+ end
30
+ end.new
31
+
32
+ res = @conn.exec("select 5,6").map_types!(tm)
33
+ expect( res.getvalue(0,1) ).to eq( [[res, 0, 1], "6"] )
34
+ expect( tm.fit_to_result_args ).to eq( [res] )
35
+ end
36
+
37
+ it "should accept only a type map object from fit_to_result" do
38
+ tm = Class.new(PG::TypeMapInRuby) do
39
+ def fit_to_result(*args)
40
+ :invalid
41
+ end
42
+ end.new
43
+
44
+ res = @conn.exec("select 5,6")
45
+ expect{ res.map_types!(tm) }.to raise_error(TypeError, /kind of PG::TypeMap/)
46
+ end
47
+ end
48
+
49
+ context "query bind params" do
50
+ it "should be usable non-derived" do
51
+ tm = PG::TypeMapInRuby.new
52
+ res = @conn.exec_params("select $1::int, $2::text", [5, 6], 0, tm)
53
+ expect( res.values ).to eq( [["5", "6"]] )
54
+ end
55
+
56
+ it "should call derived param mapping methods" do
57
+ tm = Class.new(PG::TypeMapInRuby) do
58
+ attr_reader :fit_to_query_args
59
+ attr_reader :typecast_query_param_args
60
+
61
+ def fit_to_query(params)
62
+ @fit_to_query_args = params
63
+ @typecast_query_param_args = []
64
+ self
65
+ end
66
+
67
+ def typecast_query_param(*args)
68
+ @typecast_query_param_args << [args, super]
69
+ PG::TextEncoder::Integer.new name: 'INT4', oid: 23
70
+ end
71
+ end.new
72
+
73
+ res = @conn.exec_params("select $1, $2", [5, 6], 0, tm)
74
+ expect( res.ftype(0) ).to eq( 23 )
75
+ expect( tm.fit_to_query_args ).to eq( [5, 6] )
76
+ expect( tm.typecast_query_param_args ).to eq( [[[5, 0], nil], [[6, 1], nil]] )
77
+ end
78
+ end
79
+
80
+ context "put_copy_data" do
81
+ it "should be usable non-derived" do
82
+ tm = PG::TypeMapInRuby.new
83
+ ce = PG::TextEncoder::CopyRow.new type_map: tm
84
+ res = ce.encode([5, 6])
85
+ expect( res ).to eq( "5\t6\n" )
86
+ end
87
+
88
+ it "should call derived data mapping methods" do
89
+ tm = Class.new(PG::TypeMapInRuby) do
90
+ attr_reader :fit_to_query_args
91
+ attr_reader :typecast_query_param_args
92
+
93
+ def fit_to_query(params)
94
+ @fit_to_query_args = params
95
+ @typecast_query_param_args = []
96
+ self
97
+ end
98
+
99
+ def typecast_query_param(*args)
100
+ @typecast_query_param_args << [args, super]
101
+ PG::TextEncoder::Integer.new name: 'INT4', oid: 23
102
+ end
103
+ end.new
104
+
105
+ ce = PG::TextEncoder::CopyRow.new type_map: tm
106
+ res = ce.encode([5, 6])
107
+ expect( res ).to eq( "5\t6\n" )
108
+ expect( tm.fit_to_query_args ).to eq( [5, 6] )
109
+ expect( tm.typecast_query_param_args ).to eq( [[[5, 0], nil], [[6, 1], nil]] )
110
+ end
111
+
112
+ it "shouldn't accept invalid return from typecast_query_param" do
113
+ tm = Class.new(PG::TypeMapInRuby) do
114
+ def typecast_query_param(*args)
115
+ :invalid
116
+ end
117
+ end.new
118
+
119
+ ce = PG::TextEncoder::CopyRow.new type_map: tm
120
+ expect{ ce.encode([5, 6]) }.to raise_error(TypeError, /nil or kind of PG::Coder/)
121
+ end
122
+ end
123
+
124
+ context "get_copy_data" do
125
+ it "should be usable non-derived" do
126
+ tm = PG::TypeMapInRuby.new
127
+ ce = PG::TextDecoder::CopyRow.new type_map: tm
128
+ res = ce.decode("5\t6\n")
129
+ expect( res ).to eq( ["5", "6"] )
130
+ end
131
+
132
+ it "should call derived data mapping methods" do
133
+ tm = Class.new(PG::TypeMapInRuby) do
134
+ attr_reader :fit_to_copy_get_args
135
+
136
+ def fit_to_copy_get(*args)
137
+ @fit_to_copy_get_args = args
138
+ 0
139
+ end
140
+
141
+ def typecast_copy_get(field_str, fieldno, format, enc)
142
+ [field_str, fieldno, format, enc, super]
143
+ end
144
+ end.new
145
+
146
+ ce = PG::TextDecoder::CopyRow.new type_map: tm
147
+ res = ce.decode("5\t6\n")
148
+ expect( tm.fit_to_copy_get_args ).to eq( [] )
149
+ expect( res ).to eq( [["5", 0, 0, Encoding::UTF_8, "5"], ["6", 1, 0, Encoding::UTF_8, "6"]] )
150
+ end
151
+
152
+ it "shouldn't accept invalid return from fit_to_copy_get" do
153
+ tm = Class.new(PG::TypeMapInRuby) do
154
+ def fit_to_copy_get
155
+ :invalid
156
+ end
157
+ end.new
158
+
159
+ ce = PG::TextDecoder::CopyRow.new type_map: tm
160
+ expect{ ce.decode("5\t6\n") }.to raise_error(TypeError, /kind of Integer/)
161
+ end
162
+ end
163
+
164
+ end
@@ -9,23 +9,6 @@ require 'pg'
9
9
  describe PG::TypeMap do
10
10
  let!(:tm){ PG::TypeMap.new }
11
11
 
12
- it "should respond to fit_to_query" do
13
- expect{ tm.fit_to_query( [123] ) }.to raise_error(NotImplementedError, /not suitable to map query params/)
14
- end
15
-
16
- it "should respond to fit_to_result" do
17
- res = @conn.exec( "SELECT 1" )
18
- expect{ tm.fit_to_result( res ) }.to raise_error(NotImplementedError, /not suitable to map result values/)
19
- end
20
-
21
- it "should check params type" do
22
- expect{ tm.fit_to_query( :invalid ) }.to raise_error(TypeError, /expected Array/)
23
- end
24
-
25
- it "should check result class" do
26
- expect{ tm.fit_to_result( :invalid ) }.to raise_error(TypeError, /expected kind of PG::Result/)
27
- end
28
-
29
12
  it "should raise an error when used for param type casts" do
30
13
  expect{
31
14
  @conn.exec_params( "SELECT $1", [5], 0, tm )
@@ -138,15 +138,11 @@ describe "PG::Type derivations" do
138
138
  expect( textenc_int.encode(" 123-xyz ") ).to eq( "123" )
139
139
  end
140
140
 
141
- it "should encode false and 0 to SQL FALSE value" do
142
- [false, 0, '0', 'f', 'F', 'false', 'FALSE', 'off', 'OFF'].each do |value|
143
- expect( textenc_boolean.encode(value) ).to eq( "f" )
144
- end
145
- end
146
-
147
- it "should encode true, 1 to SQL TRUE value" do
148
- [true, 1, '1', 't', 'T', 'true', 'TRUE', 'on', 'ON'].each do |value|
149
- expect( textenc_boolean.encode(value) ).to eq( "t" )
141
+ it "should encode boolean values" do
142
+ expect( textenc_boolean.encode(false) ).to eq( "f" )
143
+ expect( textenc_boolean.encode(true) ).to eq( "t" )
144
+ ["any", :other, "value", 0, 1, 2].each do |value|
145
+ expect( textenc_boolean.encode(value) ).to eq( value.to_s )
150
146
  end
151
147
  end
152
148
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pg
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.18.0.pre20141117110243
4
+ version: 0.18.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Granger
@@ -11,26 +11,27 @@ bindir: bin
11
11
  cert_chain:
12
12
  - |
13
13
  -----BEGIN CERTIFICATE-----
14
- MIIDLjCCAhagAwIBAgIBAjANBgkqhkiG9w0BAQUFADA9MQ4wDAYDVQQDDAVrYW5p
15
- czEXMBUGCgmSJomT8ixkARkWB2NvbWNhcmQxEjAQBgoJkiaJk/IsZAEZFgJkZTAe
16
- Fw0xNDAyMjYwOTMzMDBaFw0xNTAyMjYwOTMzMDBaMD0xDjAMBgNVBAMMBWthbmlz
17
- MRcwFQYKCZImiZPyLGQBGRYHY29tY2FyZDESMBAGCgmSJomT8ixkARkWAmRlMIIB
18
- IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApop+rNmg35bzRugZ21VMGqI6
19
- HGzPLO4VHYncWn/xmgPU/ZMcZdfj6MzIaZJ/czXyt4eHpBk1r8QOV3gBXnRXEjVW
20
- 9xi+EdVOkTV2/AVFKThcbTAQGiF/bT1n2M+B1GTybRzMg6hyhOJeGPqIhLfJEpxn
21
- lJi4+ENAVT4MpqHEAGB8yFoPC0GqiOHQsdHxQV3P3c2OZqG+yJey74QtwA2tLcLn
22
- Q53c63+VLGsOjODl1yPn/2ejyq8qWu6ahfTxiIlSar2UbwtaQGBDFdb2CXgEufXT
23
- L7oaPxlmj+Q2oLOfOnInd2Oxop59HoJCQPsg8f921J43NCQGA8VHK6paxIRDLQID
24
- AQABozkwNzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUvgTdT7fe
25
- x17ugO3IOsjEJwW7KP4wDQYJKoZIhvcNAQEFBQADggEBAFmIAhRT0awqLQN9e4Uv
26
- ZEk+jUWv4zkb+TWiKFJXlwjPyjGbZY9gVfOwAwMibYOK/t/+57ZzW3d0L12OUwvo
27
- on84NVvYtIr1/iskJFWFkMoIquAFCdi9p68stSPMQK2XcrJJuRot29fJtropsZBa
28
- 2cpaNd/sRYdK4oep2usdKifA1lI0hIkPb3r5nLfwG2lAqBH7WZsUICHcTgR0VEbG
29
- z9Ug5qQp9Uz73xC9YdGvGiuOX53LYobHAR4MWi2xxDlHI+ER8mRz0eY2FUuNu/Wj
30
- GrqF74zpLl7/KFdHC8VmzwZS18hvDjxeLVuVI2gIGnBInqnlqv05g/l4/1pISh5j
31
- dS4=
14
+ MIIDbDCCAlSgAwIBAgIBATANBgkqhkiG9w0BAQUFADA+MQwwCgYDVQQDDANnZWQx
15
+ GTAXBgoJkiaJk/IsZAEZFglGYWVyaWVNVUQxEzARBgoJkiaJk/IsZAEZFgNvcmcw
16
+ HhcNMTQwMzE5MDQzNTI2WhcNMTUwMzE5MDQzNTI2WjA+MQwwCgYDVQQDDANnZWQx
17
+ GTAXBgoJkiaJk/IsZAEZFglGYWVyaWVNVUQxEzARBgoJkiaJk/IsZAEZFgNvcmcw
18
+ ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDb92mkyYwuGBg1oRxt2tkH
19
+ +Uo3LAsaL/APBfSLzy8o3+B3AUHKCjMUaVeBoZdWtMHB75X3VQlvXfZMyBxj59Vo
20
+ cDthr3zdao4HnyrzAIQf7BO5Y8KBwVD+yyXCD/N65TTwqsQnO3ie7U5/9ut1rnNr
21
+ OkOzAscMwkfQxBkXDzjvAWa6UF4c5c9kR/T79iA21kDx9+bUMentU59aCJtUcbxa
22
+ 7kcKJhPEYsk4OdxR9q2dphNMFDQsIdRO8rywX5FRHvcb+qnXC17RvxLHtOjysPtp
23
+ EWsYoZMxyCDJpUqbwoeiM+tAHoz2ABMv3Ahie3Qeb6+MZNAtMmaWfBx3dg2u+/WN
24
+ AgMBAAGjdTBzMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBSZ0hCV
25
+ qoHr122fGKelqffzEQBhszAcBgNVHREEFTATgRFnZWRARmFlcmllTVVELm9yZzAc
26
+ BgNVHRIEFTATgRFnZWRARmFlcmllTVVELm9yZzANBgkqhkiG9w0BAQUFAAOCAQEA
27
+ TuL1Bzl6TBs1YEzEubFHb9XAPgehWzzUudjDKzTRd+uyZmxnomBqTCQjT5ucNRph
28
+ 3jZ6bhLNooLQxTjIuHodeGcEMHZdt4Yi7SyPmw5Nry12z6wrDp+5aGps3HsE5WsQ
29
+ Zq2EuyEOc96g31uoIvjNdieKs+1kE+K+dJDjtw+wTH2i63P7r6N/NfPPXpxsFquo
30
+ wcYRRrHdR7GhdJeT+V8Q8Bi5bglCUGdx+8scMgkkePc98k9osQHypbACmzO+Bqkv
31
+ c7ZKPJcWBv0sm81+FCZXNACn2f9jfF8OQinxVs0O052KbGuEQaaiGIYeuuwQE2q6
32
+ ggcrPfcYeTwWlfZPu2LrBg==
32
33
  -----END CERTIFICATE-----
33
- date: 2014-11-17 00:00:00.000000000 Z
34
+ date: 2015-01-03 00:00:00.000000000 Z
34
35
  dependencies:
35
36
  - !ruby/object:Gem::Dependency
36
37
  name: hoe-mercurial
@@ -198,6 +199,7 @@ extra_rdoc_files:
198
199
  - ext/pg_type_map_by_column.c
199
200
  - ext/pg_type_map_by_mri_type.c
200
201
  - ext/pg_type_map_by_oid.c
202
+ - ext/pg_type_map_in_ruby.c
201
203
  - ext/util.c
202
204
  files:
203
205
  - ".gemtest"
@@ -237,6 +239,7 @@ files:
237
239
  - ext/pg_type_map_by_column.c
238
240
  - ext/pg_type_map_by_mri_type.c
239
241
  - ext/pg_type_map_by_oid.c
242
+ - ext/pg_type_map_in_ruby.c
240
243
  - ext/util.c
241
244
  - ext/util.h
242
245
  - ext/vc/pg.sln
@@ -280,6 +283,7 @@ files:
280
283
  - spec/pg/type_map_by_column_spec.rb
281
284
  - spec/pg/type_map_by_mri_type_spec.rb
282
285
  - spec/pg/type_map_by_oid_spec.rb
286
+ - spec/pg/type_map_in_ruby_spec.rb
283
287
  - spec/pg/type_map_spec.rb
284
288
  - spec/pg/type_spec.rb
285
289
  - spec/pg_spec.rb
@@ -306,12 +310,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
306
310
  version: 1.8.7
307
311
  required_rubygems_version: !ruby/object:Gem::Requirement
308
312
  requirements:
309
- - - ">"
313
+ - - ">="
310
314
  - !ruby/object:Gem::Version
311
- version: 1.3.1
315
+ version: '0'
312
316
  requirements: []
313
317
  rubyforge_project:
314
- rubygems_version: 2.2.2
318
+ rubygems_version: 2.4.5
315
319
  signing_key:
316
320
  specification_version: 4
317
321
  summary: Pg is the Ruby interface to the {PostgreSQL RDBMS}[http://www.postgresql.org/]