ruby-postgres 0.7.1.2005.11.27-mswin32 → 0.7.1.2005.12.19-mswin32
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.
- data/postgres.c +101 -19
- data/postgres.o +0 -0
- data/postgres.so +0 -0
- data/ruby-postgres-0.7.1.2005.12.19.gem +0 -0
- data/tests/tc_postgres.rb +7 -15
- metadata +46 -38
data/postgres.c
CHANGED
@@ -78,7 +78,8 @@ static VALUE rb_cPGlarge;
|
|
78
78
|
static VALUE rb_cPGrow;
|
79
79
|
|
80
80
|
static VALUE pgconn_lastval _((VALUE));
|
81
|
-
|
81
|
+
static VALUE pgresult_fields _((VALUE));
|
82
|
+
static VALUE pgresult_clear _((VALUE));
|
82
83
|
static VALUE pgresult_result_with_clear _((VALUE));
|
83
84
|
static VALUE pgresult_new _((PGresult*));
|
84
85
|
|
@@ -252,8 +253,8 @@ format_array_element(obj)
|
|
252
253
|
VALUE obj;
|
253
254
|
{
|
254
255
|
if (TYPE(obj) == T_STRING) {
|
255
|
-
obj = rb_funcall(obj, rb_intern("gsub"), 2, rb_reg_new("(?=[\\\\\"])", 9, 0), "\\");
|
256
|
-
return rb_funcall(obj, rb_intern("gsub!"), 2, rb_reg_new("^|$", 3, 0), "\"");
|
256
|
+
obj = rb_funcall(obj, rb_intern("gsub"), 2, rb_reg_new("(?=[\\\\\"])", 9, 0), rb_str_new2("\\"));
|
257
|
+
return rb_funcall(obj, rb_intern("gsub!"), 2, rb_reg_new("^|$", 3, 0), rb_str_new2("\""));
|
257
258
|
}
|
258
259
|
else {
|
259
260
|
return pgconn_s_format(NULL, obj);
|
@@ -546,7 +547,7 @@ pgconn_exec(argc, argv, obj)
|
|
546
547
|
result = PQexecParams(conn, StringValuePtr(command), len, NULL, values, NULL, NULL, 0);
|
547
548
|
#else
|
548
549
|
for (i = 0; i < len; i++) {
|
549
|
-
|
550
|
+
rb_ary_push(params, pgconn_s_quote(NULL, rb_ary_entry(params, i)));
|
550
551
|
}
|
551
552
|
result = PQexecParams_compat(conn, command, params);
|
552
553
|
#endif
|
@@ -1277,6 +1278,86 @@ pgresult_status(obj)
|
|
1277
1278
|
* Returns an array of tuples (rows, which are themselves arrays) that represent the query result.
|
1278
1279
|
*/
|
1279
1280
|
|
1281
|
+
static VALUE
|
1282
|
+
fetch_pgrow(self, fields, row_num)
|
1283
|
+
VALUE self, fields;
|
1284
|
+
int row_num;
|
1285
|
+
{
|
1286
|
+
PGresult *result = get_pgresult(self);
|
1287
|
+
VALUE row = rb_funcall(rb_cPGrow, rb_intern("new"), 1, fields);
|
1288
|
+
int field_num;
|
1289
|
+
for (field_num = 0; field_num < RARRAY(fields)->len; field_num++) {
|
1290
|
+
rb_ary_push(row, fetch_pgresult(result, row_num, field_num));
|
1291
|
+
}
|
1292
|
+
return row;
|
1293
|
+
}
|
1294
|
+
|
1295
|
+
/*
|
1296
|
+
* call-seq:
|
1297
|
+
* conn.select_one(query, *bind_values)
|
1298
|
+
*
|
1299
|
+
* Return the first row of the query results.
|
1300
|
+
* Equivalent to conn.query(query, *bind_values).first
|
1301
|
+
*/
|
1302
|
+
static VALUE
|
1303
|
+
pgconn_select_one(argc, argv, self)
|
1304
|
+
int argc;
|
1305
|
+
VALUE *argv;
|
1306
|
+
VALUE self;
|
1307
|
+
{
|
1308
|
+
VALUE result = pgconn_exec(argc, argv, self);
|
1309
|
+
VALUE row = fetch_pgrow(result, pgresult_fields(self), 0);
|
1310
|
+
pgresult_clear(result);
|
1311
|
+
return row;
|
1312
|
+
}
|
1313
|
+
|
1314
|
+
/*
|
1315
|
+
* call-seq:
|
1316
|
+
* conn.select_value(query, *bind_values)
|
1317
|
+
*
|
1318
|
+
* Return the first value of the first row of the query results.
|
1319
|
+
* Equivalent to conn.query(query, *bind_values).first.first
|
1320
|
+
*/
|
1321
|
+
static VALUE
|
1322
|
+
pgconn_select_value(argc, argv, self)
|
1323
|
+
int argc;
|
1324
|
+
VALUE *argv;
|
1325
|
+
VALUE self;
|
1326
|
+
{
|
1327
|
+
PGresult *result = get_pgresult(pgconn_exec(argc, argv, self));
|
1328
|
+
VALUE value = fetch_pgresult(result, 0, 0);
|
1329
|
+
PQclear(result);
|
1330
|
+
return value;
|
1331
|
+
}
|
1332
|
+
|
1333
|
+
/*
|
1334
|
+
* call-seq:
|
1335
|
+
* conn.select_values(query, *bind_values)
|
1336
|
+
*
|
1337
|
+
* Equivalent to conn.query(query, *bind_values).flatten
|
1338
|
+
*/
|
1339
|
+
static VALUE
|
1340
|
+
pgconn_select_values(argc, argv, self)
|
1341
|
+
int argc;
|
1342
|
+
VALUE *argv;
|
1343
|
+
VALUE self;
|
1344
|
+
{
|
1345
|
+
PGresult *result = get_pgresult(pgconn_exec(argc, argv, self));
|
1346
|
+
int ntuples = PQntuples(result);
|
1347
|
+
int nfields = PQnfields(result);
|
1348
|
+
|
1349
|
+
VALUE values = rb_ary_new2(ntuples * nfields);
|
1350
|
+
int row_num, field_num;
|
1351
|
+
for (row_num = 0; row_num < ntuples; row_num++) {
|
1352
|
+
for (field_num = 0; field_num < nfields; field_num++) {
|
1353
|
+
rb_ary_push(values, fetch_pgresult(result, row_num, field_num));
|
1354
|
+
}
|
1355
|
+
}
|
1356
|
+
|
1357
|
+
PQclear(result);
|
1358
|
+
return values;
|
1359
|
+
}
|
1360
|
+
|
1280
1361
|
/*
|
1281
1362
|
* call-seq:
|
1282
1363
|
* res.each{ |tuple| ... }
|
@@ -1289,21 +1370,13 @@ static VALUE
|
|
1289
1370
|
pgresult_each(self)
|
1290
1371
|
VALUE self;
|
1291
1372
|
{
|
1292
|
-
int i, j;
|
1293
|
-
|
1294
1373
|
PGresult *result = get_pgresult(self);
|
1295
|
-
int
|
1296
|
-
|
1297
|
-
VALUE fields[1] = { rb_ary_new2(nf) };
|
1298
|
-
|
1299
|
-
for (i = 0; i < nf; i++)
|
1300
|
-
rb_ary_push(fields[0], rb_tainted_str_new2(PQfname(result, i)));
|
1374
|
+
int row_count = PQntuples(result);
|
1375
|
+
VALUE fields = pgresult_fields(self);
|
1301
1376
|
|
1302
|
-
|
1303
|
-
|
1304
|
-
|
1305
|
-
rb_ary_store(row, j, fetch_pgresult(result, i, j));
|
1306
|
-
}
|
1377
|
+
int row_num;
|
1378
|
+
for (row_num = 0; row_num < row_count; row_num++) {
|
1379
|
+
VALUE row = fetch_pgrow(self, fields, row_num);
|
1307
1380
|
rb_yield(row);
|
1308
1381
|
}
|
1309
1382
|
|
@@ -2261,8 +2334,13 @@ pgrow_aref(argc, argv, self)
|
|
2261
2334
|
{
|
2262
2335
|
if (TYPE(argv[0]) == T_STRING) {
|
2263
2336
|
VALUE keys = pgrow_keys(self);
|
2264
|
-
|
2265
|
-
|
2337
|
+
VALUE index = rb_funcall(keys, rb_intern("index"), 1, argv[0]);
|
2338
|
+
if (index == Qnil) {
|
2339
|
+
rb_raise(rb_ePGError, "%s: field not found", StringValuePtr(argv[0]));
|
2340
|
+
}
|
2341
|
+
else {
|
2342
|
+
return rb_ary_entry(self, NUM2INT(index));
|
2343
|
+
}
|
2266
2344
|
}
|
2267
2345
|
else {
|
2268
2346
|
return rb_call_super(argc, argv);
|
@@ -2418,6 +2496,7 @@ Init_postgres()
|
|
2418
2496
|
rb_cDateTime = RUBY_CLASS("DateTime");
|
2419
2497
|
|
2420
2498
|
rb_ePGError = rb_define_class("PGError", rb_eStandardError);
|
2499
|
+
rb_define_alias(rb_ePGError, "error", "message");
|
2421
2500
|
|
2422
2501
|
rb_cPGconn = rb_define_class("PGconn", rb_cObject);
|
2423
2502
|
#ifdef HAVE_RB_DEFINE_ALLOC_FUNC
|
@@ -2456,6 +2535,9 @@ Init_postgres()
|
|
2456
2535
|
rb_define_method(rb_cPGconn, "untrace", pgconn_untrace, 0);
|
2457
2536
|
rb_define_method(rb_cPGconn, "exec", pgconn_exec, -1);
|
2458
2537
|
rb_define_method(rb_cPGconn, "query", pgconn_query, -1);
|
2538
|
+
rb_define_method(rb_cPGconn, "select_one", pgconn_select_one, -1);
|
2539
|
+
rb_define_method(rb_cPGconn, "select_value", pgconn_select_value, -1);
|
2540
|
+
rb_define_method(rb_cPGconn, "select_values", pgconn_select_values, -1);
|
2459
2541
|
rb_define_method(rb_cPGconn, "async_exec", pgconn_async_exec, 1);
|
2460
2542
|
rb_define_method(rb_cPGconn, "async_query", pgconn_async_query, 1);
|
2461
2543
|
rb_define_method(rb_cPGconn, "get_notify", pgconn_get_notify, 0);
|
data/postgres.o
CHANGED
Binary file
|
data/postgres.so
CHANGED
Binary file
|
Binary file
|
data/tests/tc_postgres.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'postgres'
|
2
|
-
require 'date'
|
3
2
|
require 'test/unit'
|
4
3
|
|
5
4
|
class PostgresTestCase < Test::Unit::TestCase
|
@@ -16,33 +15,26 @@ class PostgresTestCase < Test::Unit::TestCase
|
|
16
15
|
query = <<-EOT
|
17
16
|
select true as true_value,
|
18
17
|
false as false_value,
|
19
|
-
|
18
|
+
$1::bytea as bytea_value,
|
20
19
|
'2005-11-30'::date as date_value,
|
21
20
|
'12:00:00'::time as time_value,
|
22
|
-
|
21
|
+
'2005-11-30 12:00:00'::timestamp as date_time_value,
|
23
22
|
1.5::float as float_value,
|
24
23
|
12345.5678::numeric as numeric_value,
|
25
24
|
1234.56::numeric(10) as numeric_10_value,
|
26
25
|
12345.12345::numeric(10,5) as numeric_10_5_value
|
27
26
|
EOT
|
28
|
-
res = @conn.exec(query)
|
27
|
+
res = @conn.exec(query, '12345\111\000\111TEST')
|
29
28
|
assert_equal(res.num_tuples, 1)
|
30
29
|
assert_equal(res.num_fields, 10)
|
31
|
-
tuple = res.result
|
32
|
-
puts tuple
|
30
|
+
tuple = res.result.first
|
33
31
|
assert_equal(true, tuple['true_value'])
|
34
32
|
assert_equal(false, tuple['false_value'])
|
35
|
-
assert_equal("
|
36
|
-
puts PGconn.escape_bytea(tuple['bytea_value'])
|
37
|
-
assert_equal("12345I\\\\000ITEST", PGconn.escape_bytea(tuple['bytea_value']))
|
33
|
+
assert_equal("12345I\000ITEST", tuple['bytea_value'])
|
38
34
|
assert_equal(Date.parse('2005-11-30'), tuple['date_value'])
|
39
|
-
|
40
|
-
|
41
|
-
puts tuple['time_value']
|
42
|
-
assert_kind_of(DateTime, tuple['date_time_value'])
|
43
|
-
puts tuple['date_time_value']
|
35
|
+
assert_equal(Time.parse('12:00:00'), tuple['time_value'])
|
36
|
+
assert_equal(DateTime.parse('2005-11-30 12:00:00'), tuple['date_time_value'])
|
44
37
|
assert_equal(1.5, tuple['float_value'])
|
45
|
-
puts PGconn.quote(tuple['numeric_value'])
|
46
38
|
assert_equal(BigDecimal("12345.5678"), tuple['numeric_value'])
|
47
39
|
assert_equal(1235, tuple['numeric_10_value'])
|
48
40
|
assert_kind_of(Integer, tuple['numeric_10_value'])
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
|
-
|
2
|
-
rubygems_version: 0.8.
|
1
|
+
!ruby/object:Gem::Specification
|
2
|
+
rubygems_version: 0.8.11
|
3
3
|
specification_version: 1
|
4
4
|
name: ruby-postgres
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.7.1.2005.
|
7
|
-
date: 2005-
|
6
|
+
version: 0.7.1.2005.12.19
|
7
|
+
date: 2005-12-19 00:00:00 -07:00
|
8
8
|
summary: Ruby extension for PostgreSQL database coordination
|
9
9
|
require_paths:
|
10
|
-
|
10
|
+
- .
|
11
11
|
email: davelee.com@gmail.com
|
12
12
|
homepage: http://ruby.scripting.ca/postgres/
|
13
13
|
rubyforge_project: ruby-postgres
|
@@ -18,46 +18,54 @@ bindir: bin
|
|
18
18
|
has_rdoc: true
|
19
19
|
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
20
|
requirements:
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
version: 0.0.0
|
21
|
+
- - ">"
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.0.0
|
25
24
|
version:
|
26
25
|
platform: mswin32
|
26
|
+
signing_key:
|
27
|
+
cert_chain:
|
27
28
|
authors:
|
28
|
-
|
29
|
+
- Yukihiro Matsumoto, Eiji Matsumoto, Noboru Saitou, Dave Lee
|
29
30
|
files:
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
31
|
+
- ChangeLog
|
32
|
+
- Contributors
|
33
|
+
- doc
|
34
|
+
- extconf.rb
|
35
|
+
- libpq-compat.c
|
36
|
+
- Makefile
|
37
|
+
- MANIFEST
|
38
|
+
- mkmf.log
|
39
|
+
- postgres.c
|
40
|
+
- postgres.o
|
41
|
+
- postgres.so
|
42
|
+
- README
|
43
|
+
- README.ja
|
44
|
+
- ruby-postgres-0.7.1.2005.12.19.gem
|
45
|
+
- ruby-postgres.gemspec
|
46
|
+
- sample
|
47
|
+
- tests
|
48
|
+
- type-oids.h
|
49
|
+
- doc/postgres.html
|
50
|
+
- doc/postgres.jp.html
|
51
|
+
- sample/losample.rb
|
52
|
+
- sample/psql.rb
|
53
|
+
- sample/psqlHelp.rb
|
54
|
+
- sample/test1.rb
|
55
|
+
- sample/test2.rb
|
56
|
+
- sample/test4.rb
|
57
|
+
- tests/tc_postgres.rb
|
56
58
|
test_files: []
|
59
|
+
|
57
60
|
rdoc_options: []
|
61
|
+
|
58
62
|
extra_rdoc_files: []
|
63
|
+
|
59
64
|
executables: []
|
65
|
+
|
60
66
|
extensions: []
|
67
|
+
|
61
68
|
requirements:
|
62
|
-
|
63
|
-
dependencies: []
|
69
|
+
- PostgreSQL libpq library and headers
|
70
|
+
dependencies: []
|
71
|
+
|