pg 0.17.0-x64-mingw32 → 0.17.1-x64-mingw32

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
- ---
2
- SHA1:
3
- metadata.gz: 21f53fb93db689d13bbec315cbf5190e22581120
4
- data.tar.gz: 59fe2cf2c7bedfe9d1295779e434e52812a0cb26
5
- SHA512:
6
- metadata.gz: 79f561112dee71eec9cfeb84f94a253f1ac2c9cdfc1e5227a7c96ea1e07a37940a6c35be804d425ebe282cd7a3cf8e2ddfd9fff20ccf67aa5ec099fd2afd1634
7
- data.tar.gz: 26ec759a2af8b649ea4a11b3521a99536f2af838da7e94ea77b7c2a4916bcbd209876b58fc50fa3990e7f15fd9e060a8706e7bdcddd4191d6e5168df6765cf32
1
+ ---
2
+ SHA1:
3
+ metadata.gz: bcac8eb5aa5042ec253210dabf4c4c10c8d1f8db
4
+ data.tar.gz: be57835fbc8c00b842724c1bf4d123d41c92da35
5
+ SHA512:
6
+ metadata.gz: 55820d1831e4c4618804db28a48f97d89facf6350f89b4f9c97aa67a34b1f2c01fdfc224d222f140a462e6a18c55e5d32ff1d8a83a95516d358d6501868e439c
7
+ data.tar.gz: 84e7a45a5485ac90c861085c49be80ffa4eff8fb28284b83ff00536865a47689b10e7a10edfa601a69d5429fa78d7cf87e8ad68ee7e44eaa40ac85bff9d77d7f
Binary file
data.tar.gz.sig CHANGED
Binary file
data/ChangeLog CHANGED
@@ -1,8 +1,46 @@
1
+ 2013-12-09 Lars Kanis <kanis@comcard.de>
2
+
3
+ * ext/gvl_wrappers.c, ext/gvl_wrappers.h, ext/pg_connection.c,
4
+ spec/pg/connection_spec.rb:
5
+ Revert commit e0492d4 "Ensure a query is canceled, if a thread is
6
+ about to be killed."
7
+
8
+ This is due to this discussion: https://groups.google.com/d/topic
9
+ /ruby-pg/5_ylGmog1S4/discussion
10
+
11
+ We were using rb_thread_call_without_gvl() with an ubf which
12
+ canceled the query currently being processed. This turned out to be
13
+ incompatible with possibly registered signal handlers (by
14
+ Signal.trap). A ubf is unconditionally invoked if ANY signal fires
15
+ on a process (eg even: USR1 or PROF) and Ruby has handlers
16
+ registered. Cancelling queries in those conditions does no make
17
+ sense.
18
+
19
+ This commit re-enables Connection#async_exec based on the async API
20
+ for all ruby versions, because async_exec allowes cancelation of
21
+ queries by signals like Control+C.
22
+
23
+ Thanks to Sam Saffron for highlighting this issue.
24
+ [97c3ec224be9] [tip] <revert_query_cancel_on_ubf>
25
+
26
+ 2013-09-23 Michael Granger <ged@FaerieMUD.org>
27
+
28
+ * ext/pg_connection.c, lib/pg/connection.rb:
29
+ Fix documentation for PG::Connection::conndefaults.
30
+ [9812218e0654]
31
+
32
+ 2013-09-20 Lars Kanis <lars@greiz-reinsdorf.de>
33
+
34
+ * ext/gvl_wrappers.h, ext/pg_connection.c:
35
+ Wrap PQcancel to be called without GVL. It internally waits for
36
+ close of the connection to be canceled.
37
+ [0ed6451d10a5]
38
+
1
39
  2013-09-16 Michael Granger <ged@FaerieMUD.org>
2
40
 
3
41
  * .hgtags:
4
42
  Added tag v0.17.0 for changeset 30da9c169efc
5
- [46f35f5b396e] [tip]
43
+ [46f35f5b396e]
6
44
 
7
45
  * .hgsigs:
8
46
  Added signature for changeset eed93df350a6
@@ -78,17 +116,6 @@
78
116
  * merge tip
79
117
  [90252df3c5c8]
80
118
 
81
- 2013-08-15 Lars Kanis <lars@greiz-reinsdorf.de>
82
-
83
- * Rakefile.cross:
84
- Use RbConfig::CONFIG['CC'] instead of ['host'] for determining cross
85
- compilation platform.
86
-
87
- This is 'i586-mingw32msvc-gcc' versus 'i586-pc-mingw32msvc'.
88
- [fbee9586e8f7]
89
-
90
- 2013-08-18 Lars Kanis <lars@greiz-reinsdorf.de>
91
-
92
119
  * lib/pg/connection.rb, spec/pg/connection_spec.rb:
93
120
  Add PG::Connection#copy_data as a convenience method.
94
121
  [5096385267ab]
@@ -98,6 +125,15 @@
98
125
  stack method calls.
99
126
  [8255d4f73334]
100
127
 
128
+ 2013-08-15 Lars Kanis <lars@greiz-reinsdorf.de>
129
+
130
+ * Rakefile.cross:
131
+ Use RbConfig::CONFIG['CC'] instead of ['host'] for determining cross
132
+ compilation platform.
133
+
134
+ This is 'i586-mingw32msvc-gcc' versus 'i586-pc-mingw32msvc'.
135
+ [fbee9586e8f7]
136
+
101
137
  2013-08-14 Lars Kanis <lars@greiz-reinsdorf.de>
102
138
 
103
139
  * Gemfile, Rakefile:
@@ -139,10 +175,6 @@
139
175
  Travis: Allow failures on rbx.
140
176
  [7be3b156c8fb]
141
177
 
142
- * spec/pg/column_mapping_spec.rb:
143
- Too less quoting. Should fix compat with PostgreSQL 8.4.
144
- [45fc78971757]
145
-
146
178
  2013-07-18 Lars Kanis <kanis@comcard.de>
147
179
 
148
180
  * spec/pg/connection_spec.rb:
@@ -178,92 +210,6 @@
178
210
  This test failed on Windows x64.
179
211
  [6894f73d7039]
180
212
 
181
- * Manifest.txt:
182
- Add missing files to Manifest.txt.
183
- [3b4bc9524bb3]
184
-
185
- * Manifest.txt, ext/pg_column_mapping.c, ext/util.c, ext/util.h:
186
- Add compat with Windows platform.
187
- [3ac02d0ccf19]
188
-
189
- * ext/pg_column_mapping.c, spec/pg/column_mapping_spec.rb:
190
- Add compat with Ruby-1.8.7.
191
- [7bcb3040fe34]
192
-
193
- * spec/pg/column_mapping_spec.rb:
194
- Use old BYTEA escaping for compat with PostgreSQL 8.4
195
- [2fad9e274ad3]
196
-
197
- 2013-07-04 Lars Kanis <lars@greiz-reinsdorf.de>
198
-
199
- * ext/pg_column_mapping.c, spec/pg/column_mapping_spec.rb:
200
- Add BinaryBolean converter.
201
-
202
- Refactor converter tests.
203
- [06c99b04f572]
204
-
205
- * ext/pg_column_mapping.c, spec/pg/column_mapping_spec.rb:
206
- Add BinaryFloat converter.
207
- [493b0354c678]
208
-
209
- 2013-07-03 Lars Kanis <lars@greiz-reinsdorf.de>
210
-
211
- * ext/pg_column_mapping.c, lib/pg/result.rb,
212
- spec/pg/column_mapping_spec.rb, spec/pg/result_spec.rb:
213
- Change ColumnMapping#initialize to take one Array arg rather than a
214
- parameter list.
215
-
216
- Suggested by Aaron: https://groups.google.com/d/msg/ruby-
217
- pg/PE5K6q9RzBs/M5prOno39DEJ
218
- [c2ca10bf93c5]
219
-
220
- * spec/pg/result_spec.rb:
221
- Add test case for all value retrieving methods of PG::Result .
222
- [e1055f877c58]
223
-
224
- * spec/pg/column_mapping_spec.rb:
225
- Add test case for default_mapping in Result#map_types!
226
- [489220119795]
227
-
228
- * lib/pg/result.rb, spec/pg/column_mapping_spec.rb:
229
- Add convenience method PG::Result#map_types!
230
- [de02df7fb198]
231
-
232
- * spec/pg/column_mapping_spec.rb:
233
- Add Boolean ColumnMapping spec and do Integer a bit more compact.
234
- [4256841e088f]
235
-
236
- 2013-07-01 Lars Kanis <kanis@comcard.de>
237
-
238
- * ext/pg_column_mapping.c, spec/pg/column_mapping_spec.rb:
239
- Add converter BinaryInteger.
240
- [6f0c8f72962f]
241
-
242
- * ext/pg_column_mapping.c, spec/pg/column_mapping_spec.rb,
243
- spec/pg/result_spec.rb:
244
- Use instances of PG::ColumnMapping::CConverter as representation of
245
- the buildin converters instead of plain symbols. Symbol arguments
246
- are converted to these instances, for convenience.
247
-
248
- This allows to store and retrieve additional informations to the
249
- conversion and also which conversions are supported.
250
- [e4f6c37b5449]
251
-
252
- * ext/pg_column_mapping.c:
253
- Don't depend on TYPE(obj)==T_DATA of a proc object for compat with
254
- rubinius.
255
- [c33c4ac01aaf]
256
-
257
- 2013-06-29 Lars Kanis <lars@greiz-reinsdorf.de>
258
-
259
- * ext/pg.c, ext/pg.h, ext/pg_column_mapping.c, ext/pg_result.c,
260
- spec/pg/result_spec.rb:
261
- Add column based type mapping.
262
-
263
- This allowes to speed up result retrieval by directly converting
264
- integer and float values to proper ruby types.
265
- [160c71c0b584]
266
-
267
213
  2013-07-06 Lars Kanis <lars@greiz-reinsdorf.de>
268
214
 
269
215
  * ext/pg_connection.c, spec/pg/connection_spec.rb:
@@ -549,14 +495,14 @@
549
495
  avoid warnings about truncated identifier.
550
496
 
551
497
  Thanks to Svoop for this report.
552
- [9a6791fe9409]
498
+ [134e067259ee] <v0.15-stable>
553
499
 
554
500
  * lib/pg/connection.rb, spec/pg/connection_spec.rb:
555
501
  Send a shortened $0 as application_name to the server in order to
556
502
  avoid warnings about truncated identifier.
557
503
 
558
504
  Thanks to Svoop for this report.
559
- [134e067259ee] <v0.15-stable>
505
+ [9a6791fe9409]
560
506
 
561
507
  2013-03-26 Michael Granger <ged@FaerieMUD.org>
562
508
 
@@ -644,6 +590,17 @@
644
590
  Merge with https://bitbucket.org/ged/ruby-pg
645
591
  [3230e6c245e0]
646
592
 
593
+ * Rakefile, Rakefile.cross:
594
+ Add support for cross build for multiple platforms (i386-mingw32 and
595
+ x64-mingw32).
596
+
597
+ Update OpenSSL for cross build to 1.0.1e Update PostgreSQL for cross
598
+ build to 9.2.3
599
+
600
+ Remove -lws2_32 for PostgreSQL build. It fails to compile for
601
+ x64-mingw32 elsewise.
602
+ [6a2a1a53dedc]
603
+
647
604
  2013-03-12 Michael Granger <ged@FaerieMUD.org>
648
605
 
649
606
  * Rakefile.cross:
@@ -658,19 +615,6 @@
658
615
  Bump versions of dev dependencies
659
616
  [cba92fb4b89e]
660
617
 
661
- 2013-03-13 Lars Kanis <kanis@comcard.de>
662
-
663
- * Rakefile, Rakefile.cross:
664
- Add support for cross build for multiple platforms (i386-mingw32 and
665
- x64-mingw32).
666
-
667
- Update OpenSSL for cross build to 1.0.1e Update PostgreSQL for cross
668
- build to 9.2.3
669
-
670
- Remove -lws2_32 for PostgreSQL build. It fails to compile for
671
- x64-mingw32 elsewise.
672
- [6a2a1a53dedc]
673
-
674
618
  2013-03-06 Michael Granger <ged@FaerieMUD.org>
675
619
 
676
620
  * README.rdoc:
@@ -922,6 +866,61 @@
922
866
  Make source settings override TM2 defaults
923
867
  [c5706b3f73af]
924
868
 
869
+ 2012-12-26 Lars Kanis <kanis@comcard.de>
870
+
871
+ * ext/extconf.rb, ext/pg_connection.c, spec/pg/connection_spec.rb:
872
+ merge in default branch
873
+ [ca39e311d1eb] <use_gvl_for_blocking_functions>
874
+
875
+ * ext/gvl_wrappers.h:
876
+ Add some documentation to gvl_wrappers
877
+ [ffeb6a0afd1f] <use_gvl_for_blocking_functions>
878
+
879
+ * spec/pg/connection_spec.rb:
880
+ Add test case for threading with Connection#exec in ruby 1.9
881
+ [73b9aa38e8c0] <use_gvl_for_blocking_functions>
882
+
883
+ * ext/extconf.rb, ext/gvl_wrappers.c, ext/gvl_wrappers.h, ext/pg.h,
884
+ ext/pg_connection.c:
885
+ Add wrappers to blocking functions and callbacks in order to release
886
+ the GVL of ruby 1.9 as long as not in ruby code
887
+ [2f2c681424ed] <use_gvl_for_blocking_functions>
888
+
889
+ 2012-07-02 Lars Kanis <kanis@comcard.de>
890
+
891
+ * ext/pg_connection.c, spec/pg/connection_spec.rb:
892
+ Fix encoding of values delivered to the row processor and add specs
893
+ for binary and text data.
894
+ [bb9c6625fbc9] <row_processor>
895
+
896
+ * ext/pg_connection.c:
897
+ Polish the documentation a little bit
898
+ [b7633be3c941] <row_processor>
899
+
900
+ 2012-07-01 Lars Kanis <kanis@comcard.de>
901
+
902
+ * ext/pg_connection.c:
903
+ Get rid of gcc warning about (non-)const PGresult to
904
+ pg_new_result_for_callback()
905
+ [1a25786ed8f3] <row_processor>
906
+
907
+ * ext/pg_connection.c, spec/pg/connection_spec.rb:
908
+ Fix wrong encoding for Result object passed to a notice-receiver
909
+ block. Add proper specs for #set_notice_receiver.
910
+ [4280826bb9b9] <row_processor>
911
+
912
+ * ext/extconf.rb, ext/pg.h, ext/pg_connection.c, ext/pg_result.c,
913
+ spec/lib/helpers.rb, spec/pg/connection_spec.rb:
914
+ Implement PostgreSQL-9.2 functions PG::Connection#set_row_processor,
915
+ get_row_processor, skip_result
916
+ [b7ce4843f4d1] <row_processor>
917
+
918
+ 2012-06-28 Lars Kanis <kanis@comcard.de>
919
+
920
+ * ext/pg_result.c:
921
+ Add PGRES_COPY_BOTH to documentation of PG::Result#result_status
922
+ [63998b47da6e] <copy_both_docu>
923
+
925
924
  2013-01-29 Aaron Patterson <aaron.patterson@gmail.com>
926
925
 
927
926
  * ext/pg_result.c, lib/pg/result.rb, spec/pg/result_spec.rb:
@@ -950,22 +949,8 @@
950
949
  Fix encoding of messages delivered by notice callbacks
951
950
  [048d07d14867]
952
951
 
953
- 2012-12-29 Lars Kanis <kanis@comcard.de>
954
-
955
- * ext/gvl_wrappers.h:
956
- Simplify function declaration for gvl_wrappers a bit more
957
- [39ba7e52207e] <use_gvl_for_blocking_functions>
958
-
959
952
  2012-12-26 Lars Kanis <kanis@comcard.de>
960
953
 
961
- * ext/extconf.rb, ext/pg_connection.c, spec/pg/connection_spec.rb:
962
- merge in default branch
963
- [ca39e311d1eb] <use_gvl_for_blocking_functions>
964
-
965
- * ext/gvl_wrappers.h:
966
- Add some documentation to gvl_wrappers
967
- [ffeb6a0afd1f] <use_gvl_for_blocking_functions>
968
-
969
954
  * ext/pg.c:
970
955
  Use proper const check instead of implicit relation
971
956
  [d0c5d5f7f1e8]
@@ -985,23 +970,12 @@
985
970
  single row mode of PostgreSQL 9.2)
986
971
  [49e3fe1dafdf]
987
972
 
988
- 2012-12-26 Lars Kanis <kanis@comcard.de>
989
-
990
- * spec/pg/connection_spec.rb:
991
- Add test case for threading with Connection#exec in ruby 1.9
992
- [73b9aa38e8c0] <use_gvl_for_blocking_functions>
993
-
994
- * ext/extconf.rb, ext/gvl_wrappers.c, ext/gvl_wrappers.h, ext/pg.h,
995
- ext/pg_connection.c:
996
- Add wrappers to blocking functions and callbacks in order to release
997
- the GVL of ruby 1.9 as long as not in ruby code
998
- [2f2c681424ed] <use_gvl_for_blocking_functions>
973
+ 2012-12-19 Lars Kanis <kanis@comcard.de>
999
974
 
1000
- * ext/extconf.rb, ext/gvl_wrappers.c, ext/gvl_wrappers.h, ext/pg.h,
1001
- ext/pg_connection.c:
1002
- Add wrappers to blocking functions and callbacks in order to release
1003
- the GVL of ruby 1.9 as long as not in ruby code
1004
- [6ad8aa8e10a5] <use_gvl_for_blocking_functions>
975
+ * ext/extconf.rb, ext/pg.c, ext/pg_connection.c,
976
+ spec/pg/connection_spec.rb:
977
+ Add single row mode of PostgreSQL 9.2
978
+ [5cf348b75c1c] <single_row_mode>
1005
979
 
1006
980
  2012-12-19 Michael Granger <ged@FaerieMUD.org>
1007
981
 
@@ -1025,14 +999,6 @@
1025
999
  fix spacing on README.rdoc:21 to improve display on Github
1026
1000
  [807f040166da]
1027
1001
 
1028
- 2012-12-26 Lars Kanis <kanis@comcard.de>
1029
-
1030
- * ext/extconf.rb, ext/gvl_wrappers.c, ext/gvl_wrappers.h, ext/pg.h,
1031
- ext/pg_connection.c:
1032
- Add wrappers to blocking functions and callbacks in order to release
1033
- the GVL of ruby 1.9 while not in ruby code
1034
- [c31ea26b15e9] <use_gvl_for_blocking_functions>
1035
-
1036
1002
  2012-12-19 Lars Kanis <kanis@comcard.de>
1037
1003
 
1038
1004
  * spec/pg/connection_spec.rb:
@@ -1049,11 +1015,6 @@
1049
1015
  Add spec for PG::Result#field_values
1050
1016
  [3618eb238aba]
1051
1017
 
1052
- * ext/extconf.rb, ext/pg.c, ext/pg_connection.c,
1053
- spec/pg/connection_spec.rb:
1054
- Add single row mode of PostgreSQL 9.2
1055
- [5cf348b75c1c] <single_row_mode>
1056
-
1057
1018
  * lib/pg/connection.rb, spec/lib/helpers.rb:
1058
1019
  Restore compatibility with PostgreSQL down to 8.3
1059
1020
  [e4900f62e56d]
@@ -1175,15 +1136,6 @@
1175
1136
  Add PGRES_COPY_BOTH to documentation of PG::Result#result_status
1176
1137
  [5e0e06440b1a]
1177
1138
 
1178
- * ext/pg_connection.c, spec/pg/connection_spec.rb:
1179
- Fix encoding of values delivered to the row processor and add specs
1180
- for binary and text data.
1181
- [bb9c6625fbc9] <row_processor>
1182
-
1183
- * ext/pg_connection.c:
1184
- Polish the documentation a little bit
1185
- [b7633be3c941] <row_processor>
1186
-
1187
1139
  2012-06-23 Michael Granger <ged@FaerieMUD.org>
1188
1140
 
1189
1141
  * .hgtags:
@@ -1194,33 +1146,6 @@
1194
1146
  Added signature for changeset a45710f8db30
1195
1147
  [634e0a42a101] [v0.14.0]
1196
1148
 
1197
- 2012-07-01 Lars Kanis <kanis@comcard.de>
1198
-
1199
- * merge copy_both_docu
1200
- [6e8ef5d4d216]
1201
-
1202
- * ext/pg_connection.c:
1203
- Get rid of gcc warning about (non-)const PGresult to
1204
- pg_new_result_for_callback()
1205
- [1a25786ed8f3] <row_processor>
1206
-
1207
- * ext/pg_connection.c, spec/pg/connection_spec.rb:
1208
- Fix wrong encoding for Result object passed to a notice-receiver
1209
- block. Add proper specs for #set_notice_receiver.
1210
- [4280826bb9b9] <row_processor>
1211
-
1212
- * ext/extconf.rb, ext/pg.h, ext/pg_connection.c, ext/pg_result.c,
1213
- spec/lib/helpers.rb, spec/pg/connection_spec.rb:
1214
- Implement PostgreSQL-9.2 functions PG::Connection#set_row_processor,
1215
- get_row_processor, skip_result
1216
- [b7ce4843f4d1] <row_processor>
1217
-
1218
- 2012-06-28 Lars Kanis <kanis@comcard.de>
1219
-
1220
- * ext/pg_result.c:
1221
- Add PGRES_COPY_BOTH to documentation of PG::Result#result_status
1222
- [63998b47da6e] <copy_both_docu>
1223
-
1224
1149
  2012-06-17 Lars Kanis <kanis@comcard.de>
1225
1150
 
1226
1151
  * Rakefile.cross, ext/extconf.rb,
@@ -1,3 +1,19 @@
1
+ == v0.17.1 [2013-12-18] Michael Granger <ged@FaerieMUD.org>
2
+
3
+ Bugfixes:
4
+
5
+ - Fix compatibility with signal handlers defined in Ruby. This reverts
6
+ cancelation of queries running on top of the blocking libpq API (like
7
+ Connection#exec) in case of signals. As an alternative the #async_exec
8
+ can be used, which is reverted to use the non-blocking API, again.
9
+ - Wrap PQcancel to be called without GVL. It internally waits for
10
+ the canceling connection.
11
+
12
+ Documentation fixes:
13
+
14
+ - Fix documentation for PG::Connection::conndefaults.
15
+
16
+
1
17
  == v0.17.0 [2013-09-15] Michael Granger <ged@FaerieMUD.org>
2
18
 
3
19
  Bugfixes:
@@ -210,6 +210,7 @@ class CrossLibrary < OpenStruct
210
210
  cmd << "LDFLAGS=-L#{static_openssl_builddir}"
211
211
  cmd << "LDFLAGS_SL=-L#{static_openssl_builddir}"
212
212
  cmd << "LIBS=-lwsock32 -lgdi32"
213
+ cmd << "DLLWRAP_FLAGS=-lcrypt32"
213
214
  cmd << "CPPFLAGS=-I#{static_openssl_builddir}/include"
214
215
 
215
216
  run( *cmd )
@@ -11,9 +11,3 @@ FOR_EACH_BLOCKING_FUNCTION( DEFINE_GVL_STUB );
11
11
  FOR_EACH_CALLBACK_FUNCTION( DEFINE_GVL_WRAPPER_STRUCT );
12
12
  FOR_EACH_CALLBACK_FUNCTION( DEFINE_GVLCB_SKELETON );
13
13
  FOR_EACH_CALLBACK_FUNCTION( DEFINE_GVLCB_STUB );
14
-
15
- void ubf_cancel_running_command(void *c)
16
- {
17
- PGconn *conn = (PGconn*) c;
18
- PQrequestCancel(conn);
19
- }
@@ -24,8 +24,6 @@ extern void *rb_thread_call_without_gvl(void *(*func)(void *), void *data1,
24
24
  rb_unblock_function_t *ubf, void *data2);
25
25
  #endif
26
26
 
27
- void ubf_cancel_running_command(void *c);
28
-
29
27
  #define DEFINE_PARAM_LIST1(type, name) \
30
28
  name,
31
29
 
@@ -38,7 +36,7 @@ void ubf_cancel_running_command(void *c);
38
36
  #define DEFINE_PARAM_DECL(type, name) \
39
37
  type name;
40
38
 
41
- #define DEFINE_GVL_WRAPPER_STRUCT(name, cancel_params, when_non_void, rettype, lastparamtype, lastparamname) \
39
+ #define DEFINE_GVL_WRAPPER_STRUCT(name, when_non_void, rettype, lastparamtype, lastparamname) \
42
40
  struct gvl_wrapper_##name##_params { \
43
41
  struct { \
44
42
  FOR_EACH_PARAM_OF_##name(DEFINE_PARAM_DECL) \
@@ -47,7 +45,7 @@ void ubf_cancel_running_command(void *c);
47
45
  when_non_void( rettype retval; ) \
48
46
  };
49
47
 
50
- #define DEFINE_GVL_SKELETON(name, cancel_params, when_non_void, rettype, lastparamtype, lastparamname) \
48
+ #define DEFINE_GVL_SKELETON(name, when_non_void, rettype, lastparamtype, lastparamname) \
51
49
  static void * gvl_##name##_skeleton( void *data ){ \
52
50
  struct gvl_wrapper_##name##_params *p = (struct gvl_wrapper_##name##_params*)data; \
53
51
  when_non_void( p->retval = ) \
@@ -56,25 +54,25 @@ void ubf_cancel_running_command(void *c);
56
54
  }
57
55
 
58
56
  #if defined(HAVE_RB_THREAD_CALL_WITHOUT_GVL)
59
- #define DEFINE_GVL_STUB(name, cancel_params, when_non_void, rettype, lastparamtype, lastparamname) \
57
+ #define DEFINE_GVL_STUB(name, when_non_void, rettype, lastparamtype, lastparamname) \
60
58
  rettype gvl_##name(FOR_EACH_PARAM_OF_##name(DEFINE_PARAM_LIST3) lastparamtype lastparamname){ \
61
59
  struct gvl_wrapper_##name##_params params = { \
62
60
  {FOR_EACH_PARAM_OF_##name(DEFINE_PARAM_LIST1) lastparamname}, when_non_void((rettype)0) \
63
61
  }; \
64
- rb_thread_call_without_gvl(gvl_##name##_skeleton, &params, cancel_params); \
62
+ rb_thread_call_without_gvl(gvl_##name##_skeleton, &params, RUBY_UBF_IO, 0); \
65
63
  when_non_void( return params.retval; ) \
66
64
  }
67
65
  #else
68
- #define DEFINE_GVL_STUB(name, cancel_params, when_non_void, rettype, lastparamtype, lastparamname) \
66
+ #define DEFINE_GVL_STUB(name, when_non_void, rettype, lastparamtype, lastparamname) \
69
67
  rettype gvl_##name(FOR_EACH_PARAM_OF_##name(DEFINE_PARAM_LIST3) lastparamtype lastparamname){ \
70
68
  return name( FOR_EACH_PARAM_OF_##name(DEFINE_PARAM_LIST1) lastparamname ); \
71
69
  }
72
70
  #endif
73
71
 
74
- #define DEFINE_GVL_STUB_DECL(name, cancel_params, when_non_void, rettype, lastparamtype, lastparamname) \
72
+ #define DEFINE_GVL_STUB_DECL(name, when_non_void, rettype, lastparamtype, lastparamname) \
75
73
  rettype gvl_##name(FOR_EACH_PARAM_OF_##name(DEFINE_PARAM_LIST3) lastparamtype lastparamname);
76
74
 
77
- #define DEFINE_GVLCB_SKELETON(name, cancel_params, when_non_void, rettype, lastparamtype, lastparamname) \
75
+ #define DEFINE_GVLCB_SKELETON(name, when_non_void, rettype, lastparamtype, lastparamname) \
78
76
  static void * gvl_##name##_skeleton( void *data ){ \
79
77
  struct gvl_wrapper_##name##_params *p = (struct gvl_wrapper_##name##_params*)data; \
80
78
  when_non_void( p->retval = ) \
@@ -83,7 +81,7 @@ void ubf_cancel_running_command(void *c);
83
81
  }
84
82
 
85
83
  #if defined(HAVE_RB_THREAD_CALL_WITH_GVL)
86
- #define DEFINE_GVLCB_STUB(name, cancel_params, when_non_void, rettype, lastparamtype, lastparamname) \
84
+ #define DEFINE_GVLCB_STUB(name, when_non_void, rettype, lastparamtype, lastparamname) \
87
85
  rettype gvl_##name(FOR_EACH_PARAM_OF_##name(DEFINE_PARAM_LIST3) lastparamtype lastparamname){ \
88
86
  struct gvl_wrapper_##name##_params params = { \
89
87
  {FOR_EACH_PARAM_OF_##name(DEFINE_PARAM_LIST1) lastparamname}, when_non_void((rettype)0) \
@@ -92,7 +90,7 @@ void ubf_cancel_running_command(void *c);
92
90
  when_non_void( return params.retval; ) \
93
91
  }
94
92
  #else
95
- #define DEFINE_GVLCB_STUB(name, cancel_params, when_non_void, rettype, lastparamtype, lastparamname) \
93
+ #define DEFINE_GVLCB_STUB(name, when_non_void, rettype, lastparamtype, lastparamname) \
96
94
  rettype gvl_##name(FOR_EACH_PARAM_OF_##name(DEFINE_PARAM_LIST3) lastparamtype lastparamname){ \
97
95
  return name( FOR_EACH_PARAM_OF_##name(DEFINE_PARAM_LIST1) lastparamname ); \
98
96
  }
@@ -101,9 +99,6 @@ void ubf_cancel_running_command(void *c);
101
99
  #define GVL_TYPE_VOID(string)
102
100
  #define GVL_TYPE_NONVOID(string) string
103
101
 
104
- #define GVL_CANCELABLE ubf_cancel_running_command, conn
105
- #define GVL_NONCANCELABLE RUBY_UBF_IO, 0
106
-
107
102
 
108
103
  /*
109
104
  * Definitions of blocking functions and their parameters
@@ -202,32 +197,37 @@ void ubf_cancel_running_command(void *c);
202
197
 
203
198
  #define FOR_EACH_PARAM_OF_PQisBusy(param)
204
199
 
205
- /* function( name, cancel, void_or_nonvoid, returntype, lastparamtype, lastparamname ) */
200
+ #define FOR_EACH_PARAM_OF_PQcancel(param) \
201
+ param(PGcancel *, cancel) \
202
+ param(char *, errbuf)
203
+
204
+ /* function( name, void_or_nonvoid, returntype, lastparamtype, lastparamname ) */
206
205
  #define FOR_EACH_BLOCKING_FUNCTION(function) \
207
- function(PQconnectdb, GVL_NONCANCELABLE, GVL_TYPE_NONVOID, PGconn *, const char *, conninfo) \
208
- function(PQconnectStart, GVL_NONCANCELABLE, GVL_TYPE_NONVOID, PGconn *, const char *, conninfo) \
209
- function(PQconnectPoll, GVL_CANCELABLE, GVL_TYPE_NONVOID, PostgresPollingStatusType, PGconn *, conn) \
210
- function(PQreset, GVL_CANCELABLE, GVL_TYPE_VOID, void, PGconn *, conn) \
211
- function(PQresetStart, GVL_CANCELABLE, GVL_TYPE_NONVOID, int, PGconn *, conn) \
212
- function(PQresetPoll, GVL_CANCELABLE, GVL_TYPE_NONVOID, PostgresPollingStatusType, PGconn *, conn) \
213
- function(PQexec, GVL_CANCELABLE, GVL_TYPE_NONVOID, PGresult *, const char *, command) \
214
- function(PQexecParams, GVL_CANCELABLE, GVL_TYPE_NONVOID, PGresult *, int, resultFormat) \
215
- function(PQexecPrepared, GVL_CANCELABLE, GVL_TYPE_NONVOID, PGresult *, int, resultFormat) \
216
- function(PQprepare, GVL_CANCELABLE, GVL_TYPE_NONVOID, PGresult *, const Oid *, paramTypes) \
217
- function(PQdescribePrepared, GVL_CANCELABLE, GVL_TYPE_NONVOID, PGresult *, const char *, stmtName) \
218
- function(PQdescribePortal, GVL_CANCELABLE, GVL_TYPE_NONVOID, PGresult *, const char *, portalName) \
219
- function(PQgetResult, GVL_CANCELABLE, GVL_TYPE_NONVOID, PGresult *, PGconn *, conn) \
220
- function(PQputCopyData, GVL_CANCELABLE, GVL_TYPE_NONVOID, int, int, nbytes) \
221
- function(PQputCopyEnd, GVL_CANCELABLE, GVL_TYPE_NONVOID, int, const char *, errormsg) \
222
- function(PQgetCopyData, GVL_CANCELABLE, GVL_TYPE_NONVOID, int, int, async) \
223
- function(PQnotifies, GVL_CANCELABLE, GVL_TYPE_NONVOID, PGnotify *, PGconn *, conn) \
224
- function(PQsendQuery, GVL_CANCELABLE, GVL_TYPE_NONVOID, int, const char *, query) \
225
- function(PQsendQueryParams, GVL_CANCELABLE, GVL_TYPE_NONVOID, int, int, resultFormat) \
226
- function(PQsendPrepare, GVL_CANCELABLE, GVL_TYPE_NONVOID, int, const Oid *, paramTypes) \
227
- function(PQsendQueryPrepared, GVL_CANCELABLE, GVL_TYPE_NONVOID, int, int, resultFormat) \
228
- function(PQsendDescribePrepared, GVL_CANCELABLE, GVL_TYPE_NONVOID, int, const char *, stmt) \
229
- function(PQsendDescribePortal, GVL_CANCELABLE, GVL_TYPE_NONVOID, int, const char *, portal) \
230
- function(PQisBusy, GVL_CANCELABLE, GVL_TYPE_NONVOID, int, PGconn *, conn);
206
+ function(PQconnectdb, GVL_TYPE_NONVOID, PGconn *, const char *, conninfo) \
207
+ function(PQconnectStart, GVL_TYPE_NONVOID, PGconn *, const char *, conninfo) \
208
+ function(PQconnectPoll, GVL_TYPE_NONVOID, PostgresPollingStatusType, PGconn *, conn) \
209
+ function(PQreset, GVL_TYPE_VOID, void, PGconn *, conn) \
210
+ function(PQresetStart, GVL_TYPE_NONVOID, int, PGconn *, conn) \
211
+ function(PQresetPoll, GVL_TYPE_NONVOID, PostgresPollingStatusType, PGconn *, conn) \
212
+ function(PQexec, GVL_TYPE_NONVOID, PGresult *, const char *, command) \
213
+ function(PQexecParams, GVL_TYPE_NONVOID, PGresult *, int, resultFormat) \
214
+ function(PQexecPrepared, GVL_TYPE_NONVOID, PGresult *, int, resultFormat) \
215
+ function(PQprepare, GVL_TYPE_NONVOID, PGresult *, const Oid *, paramTypes) \
216
+ function(PQdescribePrepared, GVL_TYPE_NONVOID, PGresult *, const char *, stmtName) \
217
+ function(PQdescribePortal, GVL_TYPE_NONVOID, PGresult *, const char *, portalName) \
218
+ function(PQgetResult, GVL_TYPE_NONVOID, PGresult *, PGconn *, conn) \
219
+ function(PQputCopyData, GVL_TYPE_NONVOID, int, int, nbytes) \
220
+ function(PQputCopyEnd, GVL_TYPE_NONVOID, int, const char *, errormsg) \
221
+ function(PQgetCopyData, GVL_TYPE_NONVOID, int, int, async) \
222
+ function(PQnotifies, GVL_TYPE_NONVOID, PGnotify *, PGconn *, conn) \
223
+ function(PQsendQuery, GVL_TYPE_NONVOID, int, const char *, query) \
224
+ function(PQsendQueryParams, GVL_TYPE_NONVOID, int, int, resultFormat) \
225
+ function(PQsendPrepare, GVL_TYPE_NONVOID, int, const Oid *, paramTypes) \
226
+ function(PQsendQueryPrepared, GVL_TYPE_NONVOID, int, int, resultFormat) \
227
+ function(PQsendDescribePrepared, GVL_TYPE_NONVOID, int, const char *, stmt) \
228
+ function(PQsendDescribePortal, GVL_TYPE_NONVOID, int, const char *, portal) \
229
+ function(PQisBusy, GVL_TYPE_NONVOID, int, PGconn *, conn) \
230
+ function(PQcancel, GVL_TYPE_NONVOID, int, int, errbufsize);
231
231
 
232
232
 
233
233
  FOR_EACH_BLOCKING_FUNCTION( DEFINE_GVL_STUB_DECL );
@@ -243,10 +243,10 @@ FOR_EACH_BLOCKING_FUNCTION( DEFINE_GVL_STUB_DECL );
243
243
  #define FOR_EACH_PARAM_OF_notice_receiver_proxy(param) \
244
244
  param(void *, arg)
245
245
 
246
- /* function( name, cancel, void_or_nonvoid, returntype, lastparamtype, lastparamname ) */
246
+ /* function( name, void_or_nonvoid, returntype, lastparamtype, lastparamname ) */
247
247
  #define FOR_EACH_CALLBACK_FUNCTION(function) \
248
- function(notice_processor_proxy,, GVL_TYPE_VOID, void, const char *, message) \
249
- function(notice_receiver_proxy,, GVL_TYPE_VOID, void, const PGresult *, result) \
248
+ function(notice_processor_proxy, GVL_TYPE_VOID, void, const char *, message) \
249
+ function(notice_receiver_proxy, GVL_TYPE_VOID, void, const PGresult *, result) \
250
250
 
251
251
  FOR_EACH_CALLBACK_FUNCTION( DEFINE_GVL_STUB_DECL );
252
252
 
@@ -292,7 +292,10 @@ pgconn_s_ping( int argc, VALUE *argv, VALUE klass )
292
292
  }
293
293
  #endif
294
294
 
295
+
295
296
  /*
297
+ * Document-method: conndefaults
298
+ *
296
299
  * call-seq:
297
300
  * PG::Connection.conndefaults() -> Array
298
301
  *
@@ -503,6 +506,7 @@ pgconn_reset_poll(VALUE self)
503
506
  return INT2FIX((int)status);
504
507
  }
505
508
 
509
+
506
510
  /*
507
511
  * call-seq:
508
512
  * conn.db()
@@ -838,6 +842,13 @@ static VALUE pgconn_exec_params( int, VALUE *, VALUE );
838
842
  * If the optional code block is given, it will be passed <i>result</i> as an argument,
839
843
  * and the PG::Result object will automatically be cleared when the block terminates.
840
844
  * In this instance, <code>conn.exec</code> returns the value of the block.
845
+ *
846
+ * #exec is implemented on the synchronous command processing API of libpq, whereas
847
+ * #async_exec is implemented on the asynchronous API.
848
+ * #exec is somewhat faster that #async_exec, but blocks any signals to be processed until
849
+ * the query is finished. This is most notably visible by a delayed reaction to Control+C.
850
+ * Both methods ensure that other threads can process while waiting for the server to
851
+ * complete the request.
841
852
  */
842
853
  static VALUE
843
854
  pgconn_exec(int argc, VALUE *argv, VALUE self)
@@ -2103,7 +2114,7 @@ pgconn_cancel(VALUE self)
2103
2114
  if(cancel == NULL)
2104
2115
  rb_raise(rb_ePGerror,"Invalid connection!");
2105
2116
 
2106
- ret = PQcancel(cancel, errbuf, 256);
2117
+ ret = gvl_PQcancel(cancel, errbuf, 256);
2107
2118
  if(ret == 1)
2108
2119
  retval = Qnil;
2109
2120
  else
@@ -3010,22 +3021,14 @@ pgconn_get_last_result(VALUE self)
3010
3021
  return rb_pgresult;
3011
3022
  }
3012
3023
 
3013
- #if !defined(HAVE_RB_THREAD_CALL_WITHOUT_GVL)
3014
-
3015
3024
  /*
3016
3025
  * call-seq:
3017
3026
  * conn.async_exec(sql [, params, result_format ] ) -> PG::Result
3018
3027
  * conn.async_exec(sql [, params, result_format ] ) {|pg_result| block }
3019
3028
  *
3020
3029
  * This function has the same behavior as #exec,
3021
- * but ensures that other threads can process while
3022
- * waiting for the server to complete the request.
3023
- *
3024
- * On Ruby platforms with native threads (MRI-1.9+ and all others)
3025
- * this method is an alias to #exec.
3026
- *
3027
- * On MRI-1.8 it's implemented using asynchronous command
3028
- * processing and ruby's +rb_thread_select+ .
3030
+ * but is implemented using the asynchronous command
3031
+ * processing API of libpq.
3029
3032
  */
3030
3033
  static VALUE
3031
3034
  pgconn_async_exec(int argc, VALUE *argv, VALUE self)
@@ -3046,8 +3049,6 @@ pgconn_async_exec(int argc, VALUE *argv, VALUE self)
3046
3049
  return rb_pgresult;
3047
3050
  }
3048
3051
 
3049
- #endif
3050
-
3051
3052
  /**************************************************************************
3052
3053
  * LARGE OBJECT SUPPORT
3053
3054
  **************************************************************************/
@@ -3508,7 +3509,6 @@ init_pg_connection()
3508
3509
  rb_define_method(rb_cPGconn, "reset", pgconn_reset, 0);
3509
3510
  rb_define_method(rb_cPGconn, "reset_start", pgconn_reset_start, 0);
3510
3511
  rb_define_method(rb_cPGconn, "reset_poll", pgconn_reset_poll, 0);
3511
- rb_define_method(rb_cPGconn, "conndefaults", pgconn_s_conndefaults, 0);
3512
3512
  rb_define_alias(rb_cPGconn, "close", "finish");
3513
3513
 
3514
3514
  /****** PG::Connection INSTANCE METHODS: Connection Status ******/
@@ -3600,11 +3600,7 @@ init_pg_connection()
3600
3600
  rb_define_method(rb_cPGconn, "wait_for_notify", pgconn_wait_for_notify, -1);
3601
3601
  rb_define_alias(rb_cPGconn, "notifies_wait", "wait_for_notify");
3602
3602
  rb_define_method(rb_cPGconn, "quote_ident", pgconn_s_quote_ident, 1);
3603
- #if defined(HAVE_RB_THREAD_CALL_WITHOUT_GVL)
3604
- rb_define_alias(rb_cPGconn, "async_exec", "exec");
3605
- #else
3606
3603
  rb_define_method(rb_cPGconn, "async_exec", pgconn_async_exec, -1);
3607
- #endif
3608
3604
  rb_define_alias(rb_cPGconn, "async_query", "async_exec");
3609
3605
  rb_define_method(rb_cPGconn, "get_last_result", pgconn_get_last_result, 0);
3610
3606
 
Binary file
data/lib/pg.rb CHANGED
@@ -19,7 +19,7 @@ end
19
19
  module PG
20
20
 
21
21
  # Library version
22
- VERSION = '0.17.0'
22
+ VERSION = '0.17.1'
23
23
 
24
24
  # VCS revision
25
25
  REVISION = %q$Revision$
@@ -164,6 +164,14 @@ class PG::Connection
164
164
  class << self
165
165
  define_method( :isthreadsafe, &PG.method(:isthreadsafe) )
166
166
  end
167
+
168
+
169
+ ### Returns an array of Hashes with connection defaults. See ::conndefaults
170
+ ### for details.
171
+ def conndefaults
172
+ return self.class.conndefaults
173
+ end
174
+
167
175
  end # class PG::Connection
168
176
 
169
177
  # Backward-compatible alias
@@ -262,7 +262,7 @@ describe PG::Connection do
262
262
  error.should == true
263
263
  end
264
264
 
265
- it "can stop a thread that runs a blocking query" do
265
+ it "can stop a thread that runs a blocking query with async_exec" do
266
266
  start = Time.now
267
267
  t = Thread.new do
268
268
  @conn.async_exec( 'select pg_sleep(10)' )
@@ -274,6 +274,29 @@ describe PG::Connection do
274
274
  (Time.now - start).should < 10
275
275
  end
276
276
 
277
+ it "should work together with signal handlers" do
278
+ signal_received = false
279
+ trap 'USR1' do
280
+ signal_received = true
281
+ end
282
+
283
+ Thread.new do
284
+ sleep 0.1
285
+ Process.kill("USR1", Process.pid)
286
+ end
287
+ @conn.exec("select pg_sleep(0.3)")
288
+ signal_received.should be_true
289
+
290
+ signal_received = false
291
+ Thread.new do
292
+ sleep 0.1
293
+ Process.kill("USR1", Process.pid)
294
+ end
295
+ @conn.async_exec("select pg_sleep(0.3)")
296
+ signal_received.should be_true
297
+ end
298
+
299
+
277
300
  it "automatically rolls back a transaction started with Connection#transaction if an exception " +
278
301
  "is raised" do
279
302
  # abort the per-example transaction so we can test our own
metadata CHANGED
@@ -1,119 +1,119 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: pg
3
- version: !ruby/object:Gem::Version
4
- version: 0.17.0
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.17.1
5
5
  platform: x64-mingw32
6
- authors:
6
+ authors:
7
7
  - Michael Granger
8
8
  - Lars Kanis
9
9
  autorequire:
10
10
  bindir: bin
11
- cert_chain:
11
+ cert_chain:
12
12
  - |
13
13
  -----BEGIN CERTIFICATE-----
14
- MIIDPDCCAiSgAwIBAgIBADANBgkqhkiG9w0BAQUFADBEMQ0wCwYDVQQDDARsYXJz
15
- MR8wHQYKCZImiZPyLGQBGRYPZ3JlaXotcmVpbnNkb3JmMRIwEAYKCZImiZPyLGQB
16
- GRYCZGUwHhcNMTMwMzExMjAyMjIyWhcNMTQwMzExMjAyMjIyWjBEMQ0wCwYDVQQD
17
- DARsYXJzMR8wHQYKCZImiZPyLGQBGRYPZ3JlaXotcmVpbnNkb3JmMRIwEAYKCZIm
18
- iZPyLGQBGRYCZGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZb4Uv
19
- RFJfRu/VEWiy3psh2jinETjiuBrL0NeRFGf8H7iU9+gx/DI/FFhfHGLrDeIskrJx
20
- YIWDMmEjVO10UUdj7wu4ZhmU++0Cd7Kq9/TyP/shIP3IjqHjVLCnJ3P6f1cl5rxZ
21
- gqo+d3BAoDrmPk0rtaf6QopwUw9RBiF8V4HqvpiY+ruJotP5UQDP4/lVOKvA8PI9
22
- P0GmVbFBrbc7Zt5h78N3UyOK0u+nvOC23BvyHXzCtcFsXCoEkt+Wwh0RFqVZdnjM
23
- LMO2vULHKKHDdX54K/sbVCj9pN9h1aotNzrEyo55zxn0G9PHg/G3P8nMvAXPkUTe
24
- brhXrfCwWRvOXA4TAgMBAAGjOTA3MAsGA1UdDwQEAwIEsDAJBgNVHRMEAjAAMB0G
25
- A1UdDgQWBBRAHK81igrXodaDj8a8/BIKsaZrETANBgkqhkiG9w0BAQUFAAOCAQEA
26
- Iswhcol3ytXthaUH3k5LopZ09viZrZHzAw0QleI3Opl/9QEGJ2BPV9+93iC0OrNL
27
- hmnxig6vKK1EeJ5PHXJ8hOI3nTZBrOmQcEXNBqyToP1FHMWZqwZ8wiBPXtiCqDBR
28
- ePQ25J9xFNzQ1ItgzNSpx5cs67QNKrx5woocoBHD6kStFbshZPJx4axl3GbUFQd5
29
- H//3YdPQOH3jaVeUXhS+pz/gfbx8fhFAtsQ+855A3HO7g2ZRIg/atAp/0MFyn5s5
30
- 0rq+VHOIPyvxF5khT0mYAcNmZTC8z1yPsqdgwfYNDjsSWwiIRSPUSmJRvfjM8hsW
31
- mMFp4kPUHbWOqCp2mz9gCA==
14
+ MIIDaDCCAlCgAwIBAgIBATANBgkqhkiG9w0BAQUFADA9MQ4wDAYDVQQDDAVrYW5p
15
+ czEXMBUGCgmSJomT8ixkARkWB2NvbWNhcmQxEjAQBgoJkiaJk/IsZAEZFgJkZTAe
16
+ Fw0xMzAyMjYwODQ1NTlaFw0xNDAyMjYwODQ1NTlaMD0xDjAMBgNVBAMMBWthbmlz
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
+ AQABo3MwcTAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUvgTdT7fe
25
+ x17ugO3IOsjEJwW7KP4wGwYDVR0RBBQwEoEQa2FuaXNAY29tY2FyZC5kZTAbBgNV
26
+ HRIEFDASgRBrYW5pc0Bjb21jYXJkLmRlMA0GCSqGSIb3DQEBBQUAA4IBAQCa3ThZ
27
+ 9qjyuFXe0kN4IwgHTTSqob3zPOyXAxAq1k65w1/hI/6e4HxCSH7Ds+dKj/xhScEu
28
+ K5gaya1D69Fo+JTnzLvuSt2X8+mEHclduC9j++oSGc+szd7LKdeEQ7J4RefJjhD+
29
+ vWI6lqglL4PijN0nOWtm0ygzXEELDcGYpb2WJ++KKNVLIU6pkiWpZUmGcFB7NclV
30
+ I64m9iNdgWnDwedgUlqSMfVCUUB9S1Y5jI+doxYloPvIB6+6VsI4cmN2LcK0rQO6
31
+ N3pmmsS0N5772vAmRMyNl8PV1OzCLIMhgPgdeLpfU7LUSYWj67q5VuyjAaH5h68g
32
+ MlGgwc//cCsBG8sa
32
33
  -----END CERTIFICATE-----
33
-
34
- date: 2013-09-16 00:00:00 Z
35
- dependencies:
36
- - !ruby/object:Gem::Dependency
37
- name: hoe-mercurial
38
- prerelease: false
39
- requirement: &id001 !ruby/object:Gem::Requirement
40
- requirements:
34
+ date: 2013-12-19 00:00:00.000000000 Z
35
+ dependencies:
36
+ - !ruby/object:Gem::Dependency
37
+ name: rdoc
38
+ requirement: !ruby/object:Gem::Requirement
39
+ requirements:
41
40
  - - ~>
42
- - !ruby/object:Gem::Version
43
- version: 1.4.0
41
+ - !ruby/object:Gem::Version
42
+ version: '4.0'
44
43
  type: :development
45
- version_requirements: *id001
46
- - !ruby/object:Gem::Dependency
47
- name: hoe-highline
48
44
  prerelease: false
49
- requirement: &id002 !ruby/object:Gem::Requirement
50
- requirements:
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
51
47
  - - ~>
52
- - !ruby/object:Gem::Version
53
- version: 0.1.0
54
- type: :development
55
- version_requirements: *id002
56
- - !ruby/object:Gem::Dependency
57
- name: rdoc
58
- prerelease: false
59
- requirement: &id003 !ruby/object:Gem::Requirement
60
- requirements:
48
+ - !ruby/object:Gem::Version
49
+ version: '4.0'
50
+ - !ruby/object:Gem::Dependency
51
+ name: rake-compiler
52
+ requirement: !ruby/object:Gem::Requirement
53
+ requirements:
61
54
  - - ~>
62
- - !ruby/object:Gem::Version
63
- version: "4.0"
55
+ - !ruby/object:Gem::Version
56
+ version: '0.9'
64
57
  type: :development
65
- version_requirements: *id003
66
- - !ruby/object:Gem::Dependency
67
- name: rake-compiler
68
58
  prerelease: false
69
- requirement: &id004 !ruby/object:Gem::Requirement
70
- requirements:
59
+ version_requirements: !ruby/object:Gem::Requirement
60
+ requirements:
71
61
  - - ~>
72
- - !ruby/object:Gem::Version
73
- version: "0.9"
74
- type: :development
75
- version_requirements: *id004
76
- - !ruby/object:Gem::Dependency
62
+ - !ruby/object:Gem::Version
63
+ version: '0.9'
64
+ - !ruby/object:Gem::Dependency
77
65
  name: hoe
78
- prerelease: false
79
- requirement: &id005 !ruby/object:Gem::Requirement
80
- requirements:
66
+ requirement: !ruby/object:Gem::Requirement
67
+ requirements:
81
68
  - - ~>
82
- - !ruby/object:Gem::Version
69
+ - !ruby/object:Gem::Version
83
70
  version: 3.5.1
84
71
  type: :development
85
- version_requirements: *id005
86
- - !ruby/object:Gem::Dependency
87
- name: hoe-deveiate
88
72
  prerelease: false
89
- requirement: &id006 !ruby/object:Gem::Requirement
90
- requirements:
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ requirements:
91
75
  - - ~>
92
- - !ruby/object:Gem::Version
93
- version: "0.2"
76
+ - !ruby/object:Gem::Version
77
+ version: 3.5.1
78
+ - !ruby/object:Gem::Dependency
79
+ name: hoe-deveiate
80
+ requirement: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ~>
83
+ - !ruby/object:Gem::Version
84
+ version: '0.2'
94
85
  type: :development
95
- version_requirements: *id006
96
- - !ruby/object:Gem::Dependency
97
- name: hoe-bundler
98
86
  prerelease: false
99
- requirement: &id007 !ruby/object:Gem::Requirement
100
- requirements:
87
+ version_requirements: !ruby/object:Gem::Requirement
88
+ requirements:
101
89
  - - ~>
102
- - !ruby/object:Gem::Version
103
- version: "1.0"
90
+ - !ruby/object:Gem::Version
91
+ version: '0.2'
92
+ - !ruby/object:Gem::Dependency
93
+ name: hoe-bundler
94
+ requirement: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - ~>
97
+ - !ruby/object:Gem::Version
98
+ version: '1.0'
104
99
  type: :development
105
- version_requirements: *id007
100
+ prerelease: false
101
+ version_requirements: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - ~>
104
+ - !ruby/object:Gem::Version
105
+ version: '1.0'
106
106
  description: |-
107
107
  Pg is the Ruby interface to the {PostgreSQL RDBMS}[http://www.postgresql.org/].
108
-
108
+
109
109
  It works with {PostgreSQL 8.4 and later}[http://www.postgresql.org/support/versioning/].
110
-
110
+
111
111
  A small example usage:
112
-
112
+
113
113
  #!/usr/bin/env ruby
114
-
114
+
115
115
  require 'pg'
116
-
116
+
117
117
  # Output a table of current connections to the DB
118
118
  conn = PG.connect( dbname: 'sales' )
119
119
  conn.exec( "SELECT * FROM pg_stat_activity" ) do |result|
@@ -123,14 +123,12 @@ description: |-
123
123
  row.values_at('procpid', 'usename', 'current_query')
124
124
  end
125
125
  end
126
- email:
126
+ email:
127
127
  - ged@FaerieMUD.org
128
128
  - lars@greiz-reinsdorf.de
129
129
  executables: []
130
-
131
130
  extensions: []
132
-
133
- extra_rdoc_files:
131
+ extra_rdoc_files:
134
132
  - Contributors.rdoc
135
133
  - History.rdoc
136
134
  - Manifest.txt
@@ -146,7 +144,7 @@ extra_rdoc_files:
146
144
  - ext/pg_connection.c
147
145
  - ext/pg_errors.c
148
146
  - ext/pg_result.c
149
- files:
147
+ files:
150
148
  - .gemtest
151
149
  - BSDL
152
150
  - ChangeLog
@@ -206,38 +204,35 @@ files:
206
204
  - spec/pg_spec.rb
207
205
  - lib/2.0/pg_ext.so
208
206
  homepage: https://bitbucket.org/ged/ruby-pg
209
- licenses:
207
+ licenses:
210
208
  - BSD
211
209
  - Ruby
212
210
  - GPL
213
211
  metadata: {}
214
-
215
212
  post_install_message:
216
- rdoc_options:
213
+ rdoc_options:
217
214
  - -f
218
215
  - fivefish
219
216
  - -t
220
- - "pg: The Ruby Interface to PostgreSQL"
217
+ - 'pg: The Ruby Interface to PostgreSQL'
221
218
  - -m
222
219
  - README.rdoc
223
- require_paths:
220
+ require_paths:
224
221
  - lib
225
- required_ruby_version: !ruby/object:Gem::Requirement
226
- requirements:
227
- - - ">="
228
- - !ruby/object:Gem::Version
222
+ required_ruby_version: !ruby/object:Gem::Requirement
223
+ requirements:
224
+ - - '>='
225
+ - !ruby/object:Gem::Version
229
226
  version: 1.8.7
230
- required_rubygems_version: !ruby/object:Gem::Requirement
231
- requirements:
232
- - - ">="
233
- - !ruby/object:Gem::Version
234
- version: "0"
227
+ required_rubygems_version: !ruby/object:Gem::Requirement
228
+ requirements:
229
+ - - '>='
230
+ - !ruby/object:Gem::Version
231
+ version: '0'
235
232
  requirements: []
236
-
237
233
  rubyforge_project: pg
238
234
  rubygems_version: 2.0.3
239
235
  signing_key:
240
236
  specification_version: 4
241
237
  summary: Pg is the Ruby interface to the {PostgreSQL RDBMS}[http://www.postgresql.org/]
242
238
  test_files: []
243
-
metadata.gz.sig CHANGED
Binary file