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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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