pgsql 1.2 → 1.6
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 +6 -14
- data/LICENSE +2 -8
- data/README +26 -25
- data/lib/Rakefile +1 -1
- data/lib/conn.c +30 -21
- data/lib/conn_exec.c +54 -51
- data/lib/conn_quote.c +57 -29
- data/lib/conn_quote.h +1 -2
- data/lib/mkrf_conf +7 -15
- data/lib/module.c +4 -5
- data/lib/module.h +3 -9
- data/lib/result.c +32 -39
- metadata +28 -34
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
metadata.gz: !binary |-
|
9
|
-
ZjNlNzJjZjBmYWZkYTc2NzM2YmZlNjY0MzA2MDQ1ZmEzY2Q2NGVlMDBlMGI4
|
10
|
-
NjFlYTM0MTk4Yjk1ZjJmN2M1ODRhNGQzOGY3MWJjNGU4ZmE0NmJjYjA4NzZj
|
11
|
-
ZjA2NjY3NmE2ZjcwYmEyNWU5MDQ0MTJiZmMyMTMwMmQzN2UxNmY=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
NDI2NGYzYzczNzFkODcxMDM2YzAyZWU2NzFjNjBhYjk2MWNmOWVlOTAxNjJk
|
14
|
-
ODIyZDUwOGYwYzUzOTY5YWZlOGI1YzQzZWQzMmY5NjgyOWFkZTYwYzFjOGRm
|
15
|
-
NjVlMzA2YzAxZjMwMWI0MmFmMWYyMjYwNTA3ZTYwMzJhOGI4NTY=
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 5906425e386ca8404df02a1d14dec2ec92e730cabd03c8192f624112d537c3d2
|
4
|
+
data.tar.gz: 5bc40a7923bc2076aef6cdd8a2af71b679f01bee63fed44bbc475bf8e3a12dbb
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: a32d74928d3a5c2d04dd30d4453e11a346ce7f4bb24db40665d375776b6caa89dabed59fa87774ab52fdb1d09a9d37e3e8eca13118e04a35572c33c8e827856c
|
7
|
+
data.tar.gz: c405985704ae2c8a1bb52d957965a9b6ad4811bec41fe9785b3c56dba79c463fe1569ab27426a5853bfb1c5dfea4b10ae85505f7944bf5f6cdb6a0595174b895
|
data/LICENSE
CHANGED
@@ -1,12 +1,6 @@
|
|
1
|
-
|
2
|
-
_ __ __ _ ___ __ _| |
|
3
|
-
| '_ \ / _` / __|/ _` | |
|
4
|
-
| |_) | (_| \__ \ (_| | |
|
5
|
-
| .__/ \__, |___/\__, |_|
|
6
|
-
|_| |___/ |_|
|
1
|
+
= pgsql Ruby Gem
|
7
2
|
|
8
|
-
|
9
|
-
Copyright (c) 2011-2013, Bertram Scharpf <software@bertram-scharpf.de>.
|
3
|
+
Copyright (C) 2011-2020, Bertram Scharpf <software@bertram-scharpf.de>.
|
10
4
|
All rights reserved.
|
11
5
|
|
12
6
|
Redistribution and use in source and binary forms, with or without
|
data/README
CHANGED
@@ -1,14 +1,13 @@
|
|
1
|
-
|
2
|
-
_ __ __ _ ___ __ _| |
|
3
|
-
| '_ \ / _` / __|/ _` | |
|
4
|
-
| |_) | (_| \__ \ (_| | |
|
5
|
-
| .__/ \__, |___/\__, |_|
|
6
|
-
|_| |___/ |_|
|
7
|
-
|
8
|
-
== Description
|
1
|
+
= pgsql Ruby Gem
|
9
2
|
|
10
3
|
A PostgreSQL library that was carefully designed.
|
11
4
|
|
5
|
+
|
6
|
+
== Author
|
7
|
+
|
8
|
+
Bertram Scharpf <software@bertram-scharpf.de>
|
9
|
+
|
10
|
+
|
12
11
|
== Features
|
13
12
|
|
14
13
|
* Connection parameters from hash
|
@@ -18,28 +17,30 @@ A PostgreSQL library that was carefully designed.
|
|
18
17
|
* Full PostgreSQL quoting support
|
19
18
|
* Built-in transactions and savepoints by Ruby blocks
|
20
19
|
|
20
|
+
|
21
21
|
== Example
|
22
22
|
|
23
23
|
Write something like this:
|
24
24
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
25
|
+
require "pgsql"
|
26
|
+
|
27
|
+
Pg::Conn.open :dbname => "test1", :user => "jdoe" do |conn|
|
28
|
+
conn.exec "SELECT * FROM mytable;" do |result|
|
29
|
+
result.each { |row|
|
30
|
+
l = row.join ", "
|
31
|
+
...
|
32
|
+
}
|
33
|
+
end
|
34
|
+
cmd = <<-ENDSQL
|
35
|
+
SELECT * FROM mytable WHERE num=$1::INTEGER;
|
36
|
+
ENDSQL
|
37
|
+
conn.query cmd, 42 do |row|
|
38
|
+
l = row.join ", "
|
39
|
+
...
|
40
|
+
end
|
41
|
+
...
|
33
42
|
end
|
34
|
-
|
35
|
-
select * from mytable where num=$1::integer;
|
36
|
-
ENDSQL
|
37
|
-
conn.query cmd, 42 do |row|
|
38
|
-
l = row.join ", "
|
39
|
-
...
|
40
|
-
end
|
41
|
-
...
|
42
|
-
end
|
43
|
+
|
43
44
|
|
44
45
|
== Thanks
|
45
46
|
|
data/lib/Rakefile
CHANGED
data/lib/conn.c
CHANGED
@@ -5,6 +5,8 @@
|
|
5
5
|
|
6
6
|
#include "conn.h"
|
7
7
|
|
8
|
+
#include "conn_quote.h"
|
9
|
+
#include "conn_exec.h"
|
8
10
|
|
9
11
|
#if defined( HAVE_HEADER_ST_H)
|
10
12
|
#include <st.h>
|
@@ -29,7 +31,7 @@ static VALUE pgconn_init( int argc, VALUE *argv, VALUE self);
|
|
29
31
|
static int set_connect_params( st_data_t key, st_data_t val, st_data_t args);
|
30
32
|
static void connstr_to_hash( VALUE params, VALUE str);
|
31
33
|
static void connstr_passwd( VALUE self, VALUE params);
|
32
|
-
static VALUE connstr_getparam(
|
34
|
+
static VALUE connstr_getparam( RB_BLOCK_CALL_FUNC_ARGLIST( yielded, params));
|
33
35
|
|
34
36
|
static VALUE pgconn_close( VALUE self);
|
35
37
|
static VALUE pgconn_reset( VALUE self);
|
@@ -198,7 +200,7 @@ pgconn_alloc( VALUE cls)
|
|
198
200
|
}
|
199
201
|
|
200
202
|
/*
|
201
|
-
* Document-method: connect
|
203
|
+
* Document-method: Pg::Conn.connect
|
202
204
|
*
|
203
205
|
* call-seq:
|
204
206
|
* Pg::Conn.connect( hash) -> conn
|
@@ -239,7 +241,7 @@ pgconn_s_parse( VALUE cls, VALUE str)
|
|
239
241
|
|
240
242
|
|
241
243
|
/*
|
242
|
-
* Document-method: new
|
244
|
+
* Document-method: Pg::Conn.new
|
243
245
|
*
|
244
246
|
* call-seq:
|
245
247
|
* Pg::Conn.new( hash) -> conn
|
@@ -391,7 +393,8 @@ connstr_passwd( VALUE self, VALUE params)
|
|
391
393
|
}
|
392
394
|
}
|
393
395
|
|
394
|
-
VALUE
|
396
|
+
VALUE
|
397
|
+
connstr_getparam( RB_BLOCK_CALL_FUNC_ARGLIST( yielded, params))
|
395
398
|
{
|
396
399
|
return rb_hash_aref( params, yielded);
|
397
400
|
}
|
@@ -454,7 +457,7 @@ pgconn_set_client_encoding( VALUE self, VALUE str)
|
|
454
457
|
{
|
455
458
|
StringValue( str);
|
456
459
|
if ((PQsetClientEncoding( get_pgconn( self)->conn, RSTRING_PTR( str))) == -1)
|
457
|
-
rb_raise( rb_ePgError, "Invalid encoding name %s", str);
|
460
|
+
rb_raise( rb_ePgError, "Invalid encoding name %s", RSTRING_PTR( str));
|
458
461
|
return Qnil;
|
459
462
|
}
|
460
463
|
|
@@ -491,6 +494,8 @@ pgconn_set_externalenc( VALUE self, VALUE enc)
|
|
491
494
|
e = NIL_P( enc) ? rb_to_encoding( enc) : rb_default_external_encoding();
|
492
495
|
Data_Get_Struct( self, struct pgconn_data, c);
|
493
496
|
c->external = rb_enc_from_encoding( e);
|
497
|
+
|
498
|
+
return Qnil;
|
494
499
|
}
|
495
500
|
|
496
501
|
/*
|
@@ -523,6 +528,8 @@ pgconn_set_internalenc( VALUE self, VALUE enc)
|
|
523
528
|
e = NIL_P( enc) ? rb_to_encoding( enc) : rb_default_internal_encoding();
|
524
529
|
Data_Get_Struct( self, struct pgconn_data, c);
|
525
530
|
c->internal = rb_enc_from_encoding( e);
|
531
|
+
|
532
|
+
return Qnil;
|
526
533
|
}
|
527
534
|
|
528
535
|
#endif
|
@@ -769,14 +776,14 @@ pgconn_untrace( VALUE self)
|
|
769
776
|
* == Example
|
770
777
|
*
|
771
778
|
* conn.exec <<-EOT
|
772
|
-
*
|
773
|
-
*
|
774
|
-
*
|
775
|
-
*
|
776
|
-
* $$
|
779
|
+
* CREATE OR REPLACE FUNCTION noise() RETURNS VOID AS $$
|
780
|
+
* BEGIN
|
781
|
+
* RAISE NOTICE 'Hi!';
|
782
|
+
* END;
|
783
|
+
* $$ LANGUAGE plpgsql;
|
777
784
|
* EOT
|
778
785
|
* conn.on_notice { |e| puts e.inspect }
|
779
|
-
* conn.exec "
|
786
|
+
* conn.exec "SELECT noise();"
|
780
787
|
*/
|
781
788
|
VALUE
|
782
789
|
pgconn_on_notice( VALUE self)
|
@@ -808,23 +815,20 @@ notice_receiver( void *self, const PGresult *result)
|
|
808
815
|
|
809
816
|
|
810
817
|
|
811
|
-
|
812
|
-
*
|
818
|
+
/*
|
813
819
|
* Document-class: Pg::Conn::Failed
|
814
820
|
*
|
815
821
|
* Error while establishing a connection to the PostgreSQL server.
|
816
822
|
*/
|
817
823
|
|
818
|
-
|
819
|
-
*
|
824
|
+
/*
|
820
825
|
* Document-class: Pg::Conn::Invalid
|
821
826
|
*
|
822
827
|
* Invalid (closed) connection.
|
823
828
|
*/
|
824
829
|
|
825
830
|
|
826
|
-
|
827
|
-
*
|
831
|
+
/*
|
828
832
|
* Document-class: Pg::Conn
|
829
833
|
*
|
830
834
|
* The class to access a PostgreSQL database.
|
@@ -833,7 +837,7 @@ notice_receiver( void *self, const PGresult *result)
|
|
833
837
|
*
|
834
838
|
* require "pgsql"
|
835
839
|
* conn = Pg::Conn.open :dbname => "test1"
|
836
|
-
* res = conn.exec "
|
840
|
+
* res = conn.exec "SELECT * FROM mytable;"
|
837
841
|
*
|
838
842
|
* See the Pg::Result class for information on working with the results of a
|
839
843
|
* query.
|
@@ -842,9 +846,14 @@ notice_receiver( void *self, const PGresult *result)
|
|
842
846
|
void
|
843
847
|
Init_pgsql_conn( void)
|
844
848
|
{
|
845
|
-
|
846
|
-
|
847
|
-
|
849
|
+
{
|
850
|
+
ID id_require;
|
851
|
+
|
852
|
+
id_require = rb_intern( "require");
|
853
|
+
rb_funcall( Qnil, id_require, 1, rb_str_new2( "date"));
|
854
|
+
rb_funcall( Qnil, id_require, 1, rb_str_new2( "time"));
|
855
|
+
rb_funcall( Qnil, id_require, 1, rb_str_new2( "bigdecimal"));
|
856
|
+
}
|
848
857
|
|
849
858
|
rb_cPgConn = rb_define_class_under( rb_mPg, "Conn", rb_cObject);
|
850
859
|
|
data/lib/conn_exec.c
CHANGED
@@ -9,13 +9,6 @@
|
|
9
9
|
#include "result.h"
|
10
10
|
|
11
11
|
|
12
|
-
#ifdef HAVE_FUNC_RB_ERRINFO
|
13
|
-
#define RB_ERRINFO (rb_errinfo())
|
14
|
-
#else
|
15
|
-
#define RB_ERRINFO ruby_errinfo
|
16
|
-
#endif
|
17
|
-
|
18
|
-
|
19
12
|
static void pg_raise_connexec( struct pgconn_data *c);
|
20
13
|
|
21
14
|
static VALUE pg_statement_exec( VALUE conn, VALUE cmd, VALUE par);
|
@@ -37,10 +30,12 @@ static VALUE pgconn_select_values( int argc, VALUE *argv, VALUE self);
|
|
37
30
|
static VALUE pgconn_get_notify( VALUE self);
|
38
31
|
|
39
32
|
static VALUE pgconn_transaction( int argc, VALUE *argv, VALUE self);
|
40
|
-
static VALUE
|
33
|
+
static VALUE rollback_transaction( VALUE self, VALUE err);
|
34
|
+
static VALUE commit_transaction( VALUE self);
|
41
35
|
static VALUE yield_transaction( VALUE self);
|
42
36
|
static VALUE pgconn_subtransaction( int argc, VALUE *argv, VALUE self);
|
43
|
-
static VALUE
|
37
|
+
static VALUE rollback_subtransaction( VALUE ary, VALUE err);
|
38
|
+
static VALUE release_subtransaction( VALUE ary);
|
44
39
|
static VALUE yield_subtransaction( VALUE ary);
|
45
40
|
static VALUE pgconn_transaction_status( VALUE self);
|
46
41
|
|
@@ -67,7 +62,7 @@ static ID id_to_a;
|
|
67
62
|
void
|
68
63
|
pg_raise_connexec( struct pgconn_data *c)
|
69
64
|
{
|
70
|
-
rb_raise( rb_ePgConnExec, PQerrorMessage( c->conn));
|
65
|
+
rb_raise( rb_ePgConnExec, "%s", PQerrorMessage( c->conn));
|
71
66
|
}
|
72
67
|
|
73
68
|
|
@@ -142,7 +137,7 @@ params_to_strings( VALUE conn, VALUE params, int *len)
|
|
142
137
|
|
143
138
|
q = pgconn_destring( c, pgconn_stringize( conn, *ptr), &n);
|
144
139
|
a = ALLOC_N( char, n + 1);
|
145
|
-
for (p = a; *p = n ? *q : '\0'; ++p, ++q, --n)
|
140
|
+
for (p = a; (*p = n ? *q : '\0'); ++p, ++q, --n)
|
146
141
|
;
|
147
142
|
*v = a;
|
148
143
|
}
|
@@ -164,8 +159,6 @@ free_strings( char **strs, int len)
|
|
164
159
|
void
|
165
160
|
pg_parse_parameters( int argc, VALUE *argv, VALUE *cmd, VALUE *par)
|
166
161
|
{
|
167
|
-
int len;
|
168
|
-
|
169
162
|
rb_scan_args( argc, argv, "1*", cmd, par);
|
170
163
|
StringValue( *cmd);
|
171
164
|
if (RARRAY_LEN( *par) <= 0)
|
@@ -205,7 +198,7 @@ pgconn_exec( int argc, VALUE *argv, VALUE self)
|
|
205
198
|
* Use Pg::Conn#fetch to fetch the results after you waited for data.
|
206
199
|
*
|
207
200
|
* Pg::Conn.connect do |conn|
|
208
|
-
* conn.send "
|
201
|
+
* conn.send "SELECT pg_sleep(3), * FROM t;" do
|
209
202
|
* ins = [ conn.socket]
|
210
203
|
* loop do
|
211
204
|
* r = IO.select ins, nil, nil, 0.5
|
@@ -242,7 +235,6 @@ pgconn_fetch( VALUE self)
|
|
242
235
|
{
|
243
236
|
struct pgconn_data *c;
|
244
237
|
PGresult *result;
|
245
|
-
VALUE res;
|
246
238
|
|
247
239
|
Data_Get_Struct( self, struct pgconn_data, c);
|
248
240
|
pg_check_conninvalid( c);
|
@@ -258,9 +250,6 @@ pgconn_fetch( VALUE self)
|
|
258
250
|
VALUE
|
259
251
|
yield_or_return_result( VALUE result)
|
260
252
|
{
|
261
|
-
struct pgresult_data *r;
|
262
|
-
|
263
|
-
Data_Get_Struct( result, struct pgresult_data, r);
|
264
253
|
return rb_block_given_p() ?
|
265
254
|
rb_ensure( rb_yield, result, pgresult_clear, result) : result;
|
266
255
|
}
|
@@ -460,25 +449,32 @@ pgconn_transaction( int argc, VALUE *argv, VALUE self)
|
|
460
449
|
rb_raise( rb_ePgConnTrans,
|
461
450
|
"Nested transaction block. Use Conn#subtransaction.");
|
462
451
|
pgresult_clear( pg_statement_exec( self, cmd, Qnil));
|
463
|
-
return
|
452
|
+
return rb_ensure( yield_transaction, self, commit_transaction, self);
|
453
|
+
}
|
454
|
+
|
455
|
+
VALUE
|
456
|
+
yield_transaction( VALUE self)
|
457
|
+
{
|
458
|
+
return rb_rescue( rb_yield, self, rollback_transaction, self);
|
464
459
|
}
|
465
460
|
|
466
461
|
VALUE
|
467
|
-
|
462
|
+
rollback_transaction( VALUE self, VALUE err)
|
468
463
|
{
|
469
|
-
pgresult_clear( pg_statement_exec( self, rb_str_new2( "
|
470
|
-
rb_exc_raise(
|
464
|
+
pgresult_clear( pg_statement_exec( self, rb_str_new2( "ROLLBACK;"), Qnil));
|
465
|
+
rb_exc_raise( err);
|
471
466
|
return Qnil;
|
472
467
|
}
|
473
468
|
|
474
469
|
VALUE
|
475
|
-
|
470
|
+
commit_transaction( VALUE self)
|
476
471
|
{
|
477
|
-
|
472
|
+
struct pgconn_data *c;
|
478
473
|
|
479
|
-
|
480
|
-
|
481
|
-
|
474
|
+
Data_Get_Struct( self, struct pgconn_data, c);
|
475
|
+
if (PQtransactionStatus( c->conn) > PQTRANS_IDLE)
|
476
|
+
pgresult_clear( pg_statement_exec( self, rb_str_new2( "COMMIT;"), Qnil));
|
477
|
+
return Qnil;
|
482
478
|
}
|
483
479
|
|
484
480
|
|
@@ -514,11 +510,17 @@ pgconn_subtransaction( int argc, VALUE *argv, VALUE self)
|
|
514
510
|
rb_str_buf_cat2( cmd, ";");
|
515
511
|
|
516
512
|
pgresult_clear( pg_statement_exec( self, cmd, Qnil));
|
517
|
-
return
|
513
|
+
return rb_ensure( yield_subtransaction, ya, release_subtransaction, ya);
|
514
|
+
}
|
515
|
+
|
516
|
+
VALUE
|
517
|
+
yield_subtransaction( VALUE ary)
|
518
|
+
{
|
519
|
+
return rb_rescue( rb_yield, ary, rollback_subtransaction, ary);
|
518
520
|
}
|
519
521
|
|
520
522
|
VALUE
|
521
|
-
|
523
|
+
rollback_subtransaction( VALUE ary, VALUE err)
|
522
524
|
{
|
523
525
|
VALUE cmd;
|
524
526
|
|
@@ -526,21 +528,25 @@ rescue_subtransaction( VALUE ary)
|
|
526
528
|
rb_str_buf_append( cmd, rb_ary_entry( ary, 1));
|
527
529
|
rb_str_buf_cat2( cmd, ";");
|
528
530
|
pgresult_clear( pg_statement_exec( rb_ary_entry( ary, 0), cmd, Qnil));
|
529
|
-
|
531
|
+
rb_ary_store( ary, 1, Qnil);
|
532
|
+
rb_exc_raise( err);
|
530
533
|
return Qnil;
|
531
534
|
}
|
532
535
|
|
533
536
|
VALUE
|
534
|
-
|
537
|
+
release_subtransaction( VALUE ary)
|
535
538
|
{
|
536
|
-
VALUE
|
537
|
-
|
538
|
-
|
539
|
-
|
540
|
-
|
541
|
-
|
542
|
-
|
543
|
-
|
539
|
+
VALUE cmd;
|
540
|
+
VALUE n;
|
541
|
+
|
542
|
+
n = rb_ary_entry( ary, 1);
|
543
|
+
if (!NIL_P( n)) {
|
544
|
+
cmd = rb_str_buf_new2( "release savepoint ");
|
545
|
+
rb_str_buf_append( cmd, n);
|
546
|
+
rb_str_buf_cat2( cmd, ";");
|
547
|
+
pgresult_clear( pg_statement_exec( rb_ary_entry( ary, 0), cmd, Qnil));
|
548
|
+
}
|
549
|
+
return Qnil;
|
544
550
|
}
|
545
551
|
|
546
552
|
|
@@ -576,7 +582,7 @@ pgconn_transaction_status( VALUE self)
|
|
576
582
|
* Write lines into a +COPY+ command. See +stringize_line+ for how to build
|
577
583
|
* standard lines.
|
578
584
|
*
|
579
|
-
* conn.copy_stdin "
|
585
|
+
* conn.copy_stdin "COPY t FROM STDIN;" do
|
580
586
|
* ary = ...
|
581
587
|
* l = stringize_line ary
|
582
588
|
* conn.put l
|
@@ -606,7 +612,7 @@ put_end( VALUE self)
|
|
606
612
|
Data_Get_Struct( self, struct pgconn_data, c);
|
607
613
|
/*
|
608
614
|
* I would like to hand over something like
|
609
|
-
* RSTRING_PTR( rb_obj_as_string(
|
615
|
+
* RSTRING_PTR( rb_obj_as_string( rb_errinfo()))
|
610
616
|
* here but when execution is inside a rescue block
|
611
617
|
* the error info will be non-null even though the
|
612
618
|
* exception just has been caught.
|
@@ -681,7 +687,7 @@ pgconn_putline( VALUE self, VALUE arg)
|
|
681
687
|
* Read lines from a +COPY+ command. The form of the lines depends
|
682
688
|
* on the statement's parameters.
|
683
689
|
*
|
684
|
-
* conn.copy_stdout "
|
690
|
+
* conn.copy_stdout "COPY t TO STDOUT;" do
|
685
691
|
* l = conn.getline
|
686
692
|
* ary = l.split /\t/
|
687
693
|
* ary.map! { |x|
|
@@ -802,7 +808,7 @@ pgconn_backup( VALUE self, VALUE label)
|
|
802
808
|
{
|
803
809
|
VALUE cmd, arg;
|
804
810
|
|
805
|
-
cmd = rb_str_new2( "
|
811
|
+
cmd = rb_str_new2( "SELECT pg_start_backup($1);");
|
806
812
|
arg = rb_ary_new3( 1, label);
|
807
813
|
pgresult_clear( pg_statement_exec( self, cmd, arg));
|
808
814
|
return rb_ensure( rb_yield, Qnil, backup_end, self);
|
@@ -814,31 +820,28 @@ backup_end( VALUE self)
|
|
814
820
|
{
|
815
821
|
VALUE cmd;
|
816
822
|
|
817
|
-
cmd = rb_str_new2( "
|
823
|
+
cmd = rb_str_new2( "SELECT pg_stop_backup();");
|
818
824
|
pgresult_clear( pg_statement_exec( self, cmd, Qnil));
|
819
825
|
return Qnil;
|
820
826
|
}
|
821
827
|
|
822
828
|
|
823
829
|
|
824
|
-
|
825
|
-
*
|
830
|
+
/*
|
826
831
|
* Document-class: Pg::Conn::ExecError
|
827
832
|
*
|
828
833
|
* Error while querying from a PostgreSQL connection.
|
829
834
|
*/
|
830
835
|
|
831
836
|
|
832
|
-
|
833
|
-
*
|
837
|
+
/*
|
834
838
|
* Document-class: Pg::Conn::TransactionError
|
835
839
|
*
|
836
840
|
* Nested transaction blocks. Use savepoints.
|
837
841
|
*/
|
838
842
|
|
839
843
|
|
840
|
-
|
841
|
-
*
|
844
|
+
/*
|
842
845
|
* Document-class: Pg::Conn::CopyError
|
843
846
|
*
|
844
847
|
* Nested transaction blocks. Use savepoints.
|
@@ -892,6 +895,6 @@ Init_pgsql_conn_exec( void)
|
|
892
895
|
|
893
896
|
rb_define_method( rb_cPgConn, "backup", &pgconn_backup, 1);
|
894
897
|
|
895
|
-
|
898
|
+
id_to_a = 0;
|
896
899
|
}
|
897
900
|
|
data/lib/conn_quote.c
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
#include "conn_quote.h"
|
7
7
|
|
8
8
|
|
9
|
-
extern VALUE
|
9
|
+
extern VALUE pg_monetary_class( void);
|
10
10
|
|
11
11
|
static VALUE pgconn_format( VALUE self, VALUE obj);
|
12
12
|
|
@@ -23,7 +23,8 @@ extern VALUE pgconn_for_copy( VALUE self, VALUE str);
|
|
23
23
|
static int needs_dquote_string( VALUE str);
|
24
24
|
static VALUE dquote_string( VALUE str);
|
25
25
|
static VALUE stringize_array( VALUE self, VALUE result, VALUE ary);
|
26
|
-
static VALUE gsub_escape_i(
|
26
|
+
static VALUE gsub_escape_i( RB_BLOCK_CALL_FUNC_ARGLIST( c, arg));
|
27
|
+
|
27
28
|
|
28
29
|
static VALUE pgconn_quote( VALUE self, VALUE obj);
|
29
30
|
static VALUE pgconn_quote_all( int argc, VALUE *argv, VALUE self);
|
@@ -34,33 +35,60 @@ static void quote_all( VALUE self, VALUE ary, VALUE res);
|
|
34
35
|
static VALUE pgconn_quote_identifier( VALUE self, VALUE value);
|
35
36
|
|
36
37
|
|
37
|
-
|
38
38
|
VALUE rb_cDate;
|
39
39
|
VALUE rb_cDateTime;
|
40
|
-
|
40
|
+
|
41
|
+
static VALUE rb_cMoney;
|
41
42
|
|
42
43
|
static ID id_format;
|
43
44
|
static ID id_iso8601;
|
44
45
|
static ID id_raw;
|
45
46
|
static ID id_to_postgres;
|
46
47
|
static ID id_gsub;
|
47
|
-
|
48
|
+
|
49
|
+
static int lookup_monetary;
|
48
50
|
|
49
51
|
static VALUE pg_string_null;
|
50
52
|
static VALUE pg_string_bsl_N;
|
51
53
|
static VALUE pg_escape_regex;
|
52
54
|
|
53
55
|
|
56
|
+
static const char *monetary[] = { "Money", "Monetary", "Amount", "Currency"};
|
54
57
|
|
58
|
+
/*
|
59
|
+
* Document-class: Pg::Money
|
60
|
+
*
|
61
|
+
* The class the PostgreSQL-builtin type +MONEY+ wil be mapped to.
|
62
|
+
* If not set, some global classes will be searched
|
63
|
+
* (+Money+, +Monetary+, +Amount+, +Currency+) and the constant will be
|
64
|
+
* set to that.
|
65
|
+
*
|
66
|
+
* Set this constant to your own class before you do the first query,
|
67
|
+
* or set it to +nil+ to inhibit the auto-detect.
|
68
|
+
*
|
69
|
+
* The resulting class must have a method +parse+ to build a new object
|
70
|
+
* from a string. It may respond to +raw+ which overwrites +to_s+.
|
71
|
+
*
|
72
|
+
*/
|
55
73
|
VALUE
|
56
|
-
|
74
|
+
pg_monetary_class( void)
|
57
75
|
{
|
58
|
-
if (
|
59
|
-
|
60
|
-
|
61
|
-
|
76
|
+
if (lookup_monetary) {
|
77
|
+
ID id_MONEY = rb_intern( "Money");
|
78
|
+
if (rb_const_defined( rb_mPg, id_MONEY))
|
79
|
+
rb_cMoney = rb_const_get( rb_mPg, id_MONEY);
|
80
|
+
else {
|
81
|
+
int i;
|
82
|
+
for (i = 0; i < (sizeof monetary) / sizeof (char *) && NIL_P( rb_cMoney); i++) {
|
83
|
+
ID id = rb_intern( monetary[ i]);
|
84
|
+
if (rb_const_defined( rb_cObject, id))
|
85
|
+
rb_cMoney = rb_const_get( rb_cObject, id);
|
86
|
+
}
|
87
|
+
rb_const_set( rb_mPg, id_MONEY, rb_cMoney);
|
88
|
+
}
|
89
|
+
lookup_monetary = 0;
|
62
90
|
}
|
63
|
-
return
|
91
|
+
return rb_cMoney;
|
64
92
|
}
|
65
93
|
|
66
94
|
|
@@ -80,8 +108,8 @@ pg_currency_class( void)
|
|
80
108
|
* class MyConn < Pg::Conn
|
81
109
|
* def format obj
|
82
110
|
* case obj
|
83
|
-
* when
|
84
|
-
* else
|
111
|
+
* when Money then obj.to_s_by_locale
|
112
|
+
* else obj
|
85
113
|
* end
|
86
114
|
* end
|
87
115
|
* end
|
@@ -121,7 +149,7 @@ VALUE
|
|
121
149
|
pgconn_escape_bytea( VALUE self, VALUE str)
|
122
150
|
{
|
123
151
|
unsigned char *s;
|
124
|
-
|
152
|
+
size_t l;
|
125
153
|
VALUE ret;
|
126
154
|
|
127
155
|
if (NIL_P( str))
|
@@ -172,11 +200,11 @@ pgconn_unescape_bytea( VALUE self, VALUE obj)
|
|
172
200
|
size_t l;
|
173
201
|
VALUE ret;
|
174
202
|
|
175
|
-
if (NIL_P( obj))
|
176
|
-
return Qnil;
|
177
203
|
#ifdef RUBY_ENCODING
|
178
204
|
rb_scan_args( argc, argv, "11", &obj, &enc);
|
179
205
|
#endif
|
206
|
+
if (NIL_P( obj))
|
207
|
+
return Qnil;
|
180
208
|
StringValue( obj);
|
181
209
|
|
182
210
|
s = PQunescapeBytea( (unsigned char *) RSTRING_PTR( obj), &l);
|
@@ -264,7 +292,7 @@ pgconn_stringize( VALUE self, VALUE obj)
|
|
264
292
|
result = rb_obj_as_string( obj);
|
265
293
|
else if (co == rb_cDateTime)
|
266
294
|
result = rb_obj_as_string( obj);
|
267
|
-
else if (co ==
|
295
|
+
else if (co == pg_monetary_class() &&
|
268
296
|
rb_respond_to( obj, id_raw))
|
269
297
|
result = rb_funcall( obj, id_raw, 0);
|
270
298
|
else if (rb_respond_to( obj, id_to_postgres)) {
|
@@ -292,7 +320,7 @@ pgconn_stringize_line( VALUE self, VALUE ary)
|
|
292
320
|
VALUE a;
|
293
321
|
VALUE *p;
|
294
322
|
int l;
|
295
|
-
VALUE ret
|
323
|
+
VALUE ret;
|
296
324
|
|
297
325
|
a = rb_check_convert_type( ary, T_ARRAY, "Array", "to_ary");
|
298
326
|
if (NIL_P(a))
|
@@ -384,13 +412,13 @@ dquote_string( VALUE str)
|
|
384
412
|
VALUE
|
385
413
|
stringize_array( VALUE self, VALUE result, VALUE ary)
|
386
414
|
{
|
387
|
-
long i
|
415
|
+
long i;
|
388
416
|
VALUE *o;
|
389
417
|
VALUE cf, co;
|
390
418
|
VALUE r;
|
391
419
|
|
392
420
|
cf = Qundef;
|
393
|
-
for (o = RARRAY_PTR( ary),
|
421
|
+
for (o = RARRAY_PTR( ary), i = RARRAY_LEN( ary); i; ++o, --i) {
|
394
422
|
co = CLASS_OF( *o);
|
395
423
|
if (cf == Qundef)
|
396
424
|
cf = co;
|
@@ -411,7 +439,7 @@ stringize_array( VALUE self, VALUE result, VALUE ary)
|
|
411
439
|
|
412
440
|
|
413
441
|
VALUE
|
414
|
-
gsub_escape_i(
|
442
|
+
gsub_escape_i( RB_BLOCK_CALL_FUNC_ARGLIST( c, arg))
|
415
443
|
{
|
416
444
|
const char *r;
|
417
445
|
|
@@ -453,7 +481,9 @@ gsub_escape_i( VALUE c, VALUE arg)
|
|
453
481
|
* Call Pg::Conn#escape_bytea first if you want to tell your string is a byte
|
454
482
|
* array and the quote that result.
|
455
483
|
*/
|
456
|
-
VALUE pgconn_quote( VALUE self, VALUE obj)
|
484
|
+
VALUE pgconn_quote( VALUE self, VALUE obj)
|
485
|
+
{
|
486
|
+
VALUE o, res;
|
457
487
|
|
458
488
|
o = rb_funcall( self, id_format, 1, obj);
|
459
489
|
if (!NIL_P( o))
|
@@ -494,7 +524,7 @@ VALUE pgconn_quote( VALUE self, VALUE obj) { VALUE o, res;
|
|
494
524
|
} else if (co == rb_cDateTime) {
|
495
525
|
res = rb_obj_as_string( obj);
|
496
526
|
type = "timestamptz";
|
497
|
-
} else if (co ==
|
527
|
+
} else if (co == pg_monetary_class() &&
|
498
528
|
rb_respond_to( obj, id_raw)) {
|
499
529
|
res = rb_funcall( obj, id_raw, 0);
|
500
530
|
StringValue( res);
|
@@ -555,12 +585,12 @@ quote_string( VALUE conn, VALUE str)
|
|
555
585
|
VALUE
|
556
586
|
quote_array( VALUE self, VALUE result, VALUE ary)
|
557
587
|
{
|
558
|
-
long i
|
588
|
+
long i;
|
559
589
|
VALUE *o;
|
560
590
|
VALUE cf, co;
|
561
591
|
|
562
592
|
cf = Qundef;
|
563
|
-
for (o = RARRAY_PTR( ary),
|
593
|
+
for (o = RARRAY_PTR( ary), i = RARRAY_LEN( ary); i; ++o, --i) {
|
564
594
|
co = CLASS_OF( *o);
|
565
595
|
if (cf == Qundef)
|
566
596
|
cf = co;
|
@@ -622,11 +652,9 @@ pgconn_quote_identifier( VALUE self, VALUE str)
|
|
622
652
|
void
|
623
653
|
Init_pgsql_conn_quote( void)
|
624
654
|
{
|
625
|
-
rb_require( "date");
|
626
|
-
rb_require( "time");
|
627
655
|
rb_cDate = rb_const_get( rb_cObject, rb_intern( "Date"));
|
628
656
|
rb_cDateTime = rb_const_get( rb_cObject, rb_intern( "DateTime"));
|
629
|
-
|
657
|
+
rb_cMoney = Qnil;
|
630
658
|
|
631
659
|
#ifdef RDOC_NEEDS_THIS
|
632
660
|
rb_cPgConn = rb_define_class_under( rb_mPg, "Conn", rb_cObject);
|
@@ -660,7 +688,7 @@ Init_pgsql_conn_quote( void)
|
|
660
688
|
id_to_postgres = rb_intern( "to_postgres");
|
661
689
|
id_gsub = rb_intern( "gsub");
|
662
690
|
|
663
|
-
|
691
|
+
lookup_monetary = 1;
|
664
692
|
|
665
693
|
pg_string_null = rb_str_new2( "NULL"); rb_global_variable( &pg_string_null); rb_str_freeze( pg_string_null);
|
666
694
|
pg_string_bsl_N = rb_str_new2( "\\N"); rb_global_variable( &pg_string_bsl_N); rb_str_freeze( pg_string_bsl_N);
|
data/lib/conn_quote.h
CHANGED
data/lib/mkrf_conf
CHANGED
@@ -10,27 +10,19 @@ Autorake.configure {
|
|
10
10
|
|
11
11
|
extending_ruby
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
have_header "st.h"
|
17
|
-
else
|
18
|
-
have_header "ruby/ruby.h"
|
19
|
-
have_header "ruby/io.h"
|
20
|
-
end
|
13
|
+
need_header "ruby/ruby.h"
|
14
|
+
need_header "ruby/io.h"
|
15
|
+
|
21
16
|
|
22
17
|
incdir :postgres, `pg_config --pkgincludedir`
|
23
18
|
incdir :postgres_server, `pg_config --includedir-server`
|
24
19
|
|
25
|
-
|
26
|
-
have_library "ssl"
|
27
|
-
have_library "pq"
|
20
|
+
need_library "pq"
|
28
21
|
|
29
|
-
|
30
|
-
|
31
|
-
|
22
|
+
need_header "postgres.h"
|
23
|
+
need_header "libpq-fe.h"
|
24
|
+
need_header "catalog/pg_type.h"
|
32
25
|
|
33
|
-
have_func "rb_errinfo"
|
34
26
|
have_func "rb_io_stdio_file"
|
35
27
|
have_func "rb_locale_encoding"
|
36
28
|
|
data/lib/module.c
CHANGED
@@ -5,17 +5,17 @@
|
|
5
5
|
#include "module.h"
|
6
6
|
|
7
7
|
#include "conn.h"
|
8
|
+
#include "result.h"
|
8
9
|
|
9
10
|
|
10
|
-
#define PGSQL_VERSION "1.
|
11
|
+
#define PGSQL_VERSION "1.6"
|
11
12
|
|
12
13
|
|
13
14
|
VALUE rb_mPg;
|
14
15
|
VALUE rb_ePgError;
|
15
16
|
|
16
17
|
|
17
|
-
|
18
|
-
*
|
18
|
+
/*
|
19
19
|
* Document-module: Pg
|
20
20
|
*
|
21
21
|
* The module to enclose everything.
|
@@ -24,8 +24,7 @@ VALUE rb_ePgError;
|
|
24
24
|
* connection.
|
25
25
|
*/
|
26
26
|
|
27
|
-
|
28
|
-
*
|
27
|
+
/*
|
29
28
|
* Document-class: Pg::Error
|
30
29
|
*
|
31
30
|
* Generic PostgreSQL error.
|
data/lib/module.h
CHANGED
@@ -18,15 +18,9 @@
|
|
18
18
|
#endif
|
19
19
|
#include "undef.h"
|
20
20
|
|
21
|
-
#
|
22
|
-
|
23
|
-
#
|
24
|
-
#ifdef HAVE_HEADER_LIBPQ_FE_H
|
25
|
-
#include <libpq-fe.h>
|
26
|
-
#endif
|
27
|
-
#ifdef HAVE_HEADER_CATALOG_PG_TYPE_H
|
28
|
-
#include <catalog/pg_type.h>
|
29
|
-
#endif
|
21
|
+
#include <postgres.h>
|
22
|
+
#include <libpq-fe.h>
|
23
|
+
#include <catalog/pg_type.h>
|
30
24
|
#include "undef.h"
|
31
25
|
|
32
26
|
|
data/lib/result.c
CHANGED
@@ -11,9 +11,6 @@
|
|
11
11
|
static void pgresult_init( struct pgresult_data *r, PGresult *result, struct pgconn_data *conn);
|
12
12
|
static VALUE pgreserror_new( VALUE result, VALUE cmd, VALUE par);
|
13
13
|
|
14
|
-
static VALUE pgreserror_command( VALUE self);
|
15
|
-
static VALUE pgreserror_params( VALUE self);
|
16
|
-
|
17
14
|
static struct pgresult_data *pgreserror_result( VALUE self);
|
18
15
|
static VALUE pgreserror_status( VALUE self);
|
19
16
|
static VALUE pgreserror_sqlst( VALUE self);
|
@@ -25,7 +22,6 @@ static VALUE pgreserror_diag( VALUE self, VALUE field);
|
|
25
22
|
|
26
23
|
static VALUE pgresult_s_translate_results_set( VALUE cls, VALUE fact);
|
27
24
|
|
28
|
-
static void pgresult_mark( struct pgresult_data *ptr);
|
29
25
|
static void pgresult_free( struct pgresult_data *ptr);
|
30
26
|
extern VALUE pgresult_new( PGresult *result, struct pgconn_data *conn, VALUE cmd, VALUE par);
|
31
27
|
|
@@ -57,8 +53,6 @@ static VALUE pgresult_cmdstatus( VALUE self);
|
|
57
53
|
static VALUE pgresult_oid( VALUE self);
|
58
54
|
|
59
55
|
|
60
|
-
static VALUE rb_cBigDecimal;
|
61
|
-
|
62
56
|
static VALUE rb_cPgResult;
|
63
57
|
static VALUE rb_ePgResError;
|
64
58
|
|
@@ -216,13 +210,6 @@ pgresult_s_translate_results_set( VALUE cls, VALUE fact)
|
|
216
210
|
|
217
211
|
|
218
212
|
|
219
|
-
void
|
220
|
-
pgresult_mark( struct pgresult_data *ptr)
|
221
|
-
{
|
222
|
-
rb_gc_mark( ptr->fields);
|
223
|
-
rb_gc_mark( ptr->indices);
|
224
|
-
}
|
225
|
-
|
226
213
|
void
|
227
214
|
pgresult_free( struct pgresult_data *ptr)
|
228
215
|
{
|
@@ -280,8 +267,8 @@ pgresult_clear( VALUE self)
|
|
280
267
|
|
281
268
|
Data_Get_Struct( self, struct pgresult_data, r);
|
282
269
|
if (r->res != NULL) {
|
283
|
-
|
284
|
-
|
270
|
+
PQclear( r->res);
|
271
|
+
r->res = NULL;
|
285
272
|
}
|
286
273
|
return Qnil;
|
287
274
|
}
|
@@ -513,7 +500,7 @@ pg_fetchrow( struct pgresult_data *r, int num)
|
|
513
500
|
n = PQnfields( r->res);
|
514
501
|
if (num < PQntuples( r->res)) {
|
515
502
|
row = rb_ary_new2( n);
|
516
|
-
for (i = 0
|
503
|
+
for (i = 0; n; ++i, --n)
|
517
504
|
rb_ary_store( row, i, pg_fetchresult( r, num, i));
|
518
505
|
} else
|
519
506
|
row = Qnil;
|
@@ -525,7 +512,7 @@ pg_fetchresult( struct pgresult_data *r, int row, int col)
|
|
525
512
|
{
|
526
513
|
char *string;
|
527
514
|
Oid typ;
|
528
|
-
VALUE ret;
|
515
|
+
VALUE cls, ret;
|
529
516
|
|
530
517
|
if (PQgetisnull( r->res, row, col))
|
531
518
|
return Qnil;
|
@@ -538,50 +525,59 @@ pg_fetchresult( struct pgresult_data *r, int row, int col)
|
|
538
525
|
return pgconn_mkstring( r->conn, string);
|
539
526
|
|
540
527
|
typ = PQftype( r->res, col);
|
528
|
+
cls = Qnil;
|
529
|
+
ret = Qnil;
|
541
530
|
switch (typ) {
|
542
531
|
case NUMERICOID:
|
543
532
|
{
|
544
533
|
int typmod;
|
545
534
|
|
546
535
|
typmod = PQfmod( r->res, col);
|
547
|
-
if (typmod == -1 || (typmod - VARHDRSZ) & 0xffff)
|
536
|
+
if (typmod == -1 || (typmod - VARHDRSZ) & 0xffff) {
|
537
|
+
ret = rb_funcall( Qnil, rb_intern( "BigDecimal"), 1, rb_str_new2( string));
|
548
538
|
break;
|
539
|
+
}
|
549
540
|
}
|
550
|
-
/* if scale == 0
|
541
|
+
/* fall through if scale == 0 */
|
551
542
|
case INT8OID:
|
552
543
|
case INT4OID:
|
553
544
|
case INT2OID:
|
554
545
|
case OIDOID:
|
555
|
-
|
546
|
+
ret = rb_cstr_to_inum( string, 10, 0);
|
547
|
+
break;
|
556
548
|
case FLOAT8OID:
|
557
549
|
case FLOAT4OID:
|
558
|
-
|
550
|
+
ret = rb_float_new( rb_cstr_to_dbl( string, Qfalse));
|
551
|
+
break;
|
559
552
|
case BOOLOID:
|
560
|
-
|
561
|
-
|
553
|
+
ret = strchr( "tTyY", *string) != NULL ? Qtrue : Qfalse;
|
554
|
+
break;
|
562
555
|
case BYTEAOID:
|
563
|
-
|
564
|
-
default:
|
556
|
+
ret = rb_str_new2( string);
|
565
557
|
break;
|
566
|
-
}
|
567
|
-
ret = pgconn_mkstring( r->conn, string);
|
568
|
-
switch (typ) {
|
569
|
-
case NUMERICOID:
|
570
|
-
return rb_funcall( rb_cBigDecimal, id_new, 1, ret);
|
571
558
|
case DATEOID:
|
572
|
-
|
559
|
+
cls = rb_cDate;
|
560
|
+
break;
|
573
561
|
case TIMEOID:
|
574
562
|
case TIMETZOID:
|
575
|
-
|
563
|
+
cls = rb_cTime;
|
564
|
+
break;
|
576
565
|
case TIMESTAMPOID:
|
577
566
|
case TIMESTAMPTZOID:
|
578
|
-
|
567
|
+
cls = rb_cDateTime;
|
568
|
+
break;
|
579
569
|
case CASHOID:
|
580
|
-
|
581
|
-
|
570
|
+
cls = pg_monetary_class();
|
571
|
+
break;
|
582
572
|
default:
|
583
|
-
|
573
|
+
break;
|
584
574
|
}
|
575
|
+
if (NIL_P( ret)) {
|
576
|
+
ret = pgconn_mkstring( r->conn, string);
|
577
|
+
if (RTEST( cls))
|
578
|
+
ret = rb_funcall( cls, id_parse, 1, ret);
|
579
|
+
}
|
580
|
+
return ret;
|
585
581
|
}
|
586
582
|
|
587
583
|
/*
|
@@ -803,9 +799,6 @@ pgresult_oid( VALUE self)
|
|
803
799
|
void
|
804
800
|
Init_pgsql_result( void)
|
805
801
|
{
|
806
|
-
rb_require( "bigdecimal");
|
807
|
-
rb_cBigDecimal = rb_const_get( rb_cObject, rb_intern( "BigDecimal"));
|
808
|
-
|
809
802
|
rb_cPgResult = rb_define_class_under( rb_mPg, "Result", rb_cObject);
|
810
803
|
|
811
804
|
|
metadata
CHANGED
@@ -1,38 +1,34 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pgsql
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '1.
|
4
|
+
version: '1.6'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bertram Scharpf
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-12-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: autorake
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '2.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '2.0'
|
27
|
-
description:
|
28
|
-
by Guy
|
29
|
-
|
30
|
-
Decoux. As the project wasn''t maintained a long time after Guy''s decease, I
|
31
|
-
|
27
|
+
description: |
|
28
|
+
This is not the official PostgreSQL library that was originally written by Guy
|
29
|
+
Decoux. As the project wasn't maintained a long time after Guy's decease, I
|
32
30
|
decided to fork my own project.
|
33
|
-
|
34
|
-
'
|
35
|
-
email: <software@bertram-scharpf.de>
|
31
|
+
email: "<software@bertram-scharpf.de>"
|
36
32
|
executables: []
|
37
33
|
extensions:
|
38
34
|
- lib/mkrf_conf
|
@@ -40,47 +36,45 @@ extra_rdoc_files:
|
|
40
36
|
- README
|
41
37
|
- LICENSE
|
42
38
|
files:
|
39
|
+
- LICENSE
|
40
|
+
- README
|
43
41
|
- lib/Rakefile
|
44
|
-
- lib/mkrf_conf
|
45
|
-
- lib/undef.h
|
46
|
-
- lib/module.h
|
47
|
-
- lib/module.c
|
48
|
-
- lib/conn.h
|
49
42
|
- lib/conn.c
|
50
|
-
- lib/
|
51
|
-
- lib/conn_quote.c
|
52
|
-
- lib/conn_exec.h
|
43
|
+
- lib/conn.h
|
53
44
|
- lib/conn_exec.c
|
54
|
-
- lib/
|
45
|
+
- lib/conn_exec.h
|
46
|
+
- lib/conn_quote.c
|
47
|
+
- lib/conn_quote.h
|
48
|
+
- lib/mkrf_conf
|
49
|
+
- lib/module.c
|
50
|
+
- lib/module.h
|
55
51
|
- lib/result.c
|
56
|
-
-
|
57
|
-
-
|
52
|
+
- lib/result.h
|
53
|
+
- lib/undef.h
|
58
54
|
homepage: http://www.bertram-scharpf.de/software/pgsql
|
59
|
-
licenses:
|
55
|
+
licenses:
|
56
|
+
- BSD-2-Clause
|
60
57
|
metadata: {}
|
61
|
-
post_install_message:
|
58
|
+
post_install_message:
|
62
59
|
rdoc_options:
|
63
|
-
- --
|
64
|
-
- utf-8
|
65
|
-
- --main
|
60
|
+
- "--main"
|
66
61
|
- README
|
67
62
|
require_paths:
|
68
63
|
- lib
|
69
64
|
required_ruby_version: !ruby/object:Gem::Requirement
|
70
65
|
requirements:
|
71
|
-
- -
|
66
|
+
- - ">="
|
72
67
|
- !ruby/object:Gem::Version
|
73
68
|
version: '0'
|
74
69
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
75
70
|
requirements:
|
76
|
-
- -
|
71
|
+
- - ">="
|
77
72
|
- !ruby/object:Gem::Version
|
78
73
|
version: '0'
|
79
74
|
requirements:
|
80
75
|
- PostgreSQL
|
81
|
-
|
82
|
-
|
83
|
-
signing_key:
|
76
|
+
rubygems_version: 3.0.8
|
77
|
+
signing_key:
|
84
78
|
specification_version: 4
|
85
79
|
summary: PostgreSQL-API for Ruby
|
86
80
|
test_files: []
|