pg_typecast 0.1.0 → 0.1.1
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/README.rdoc +3 -11
- data/Rakefile +12 -0
- data/VERSION +1 -1
- data/ext/pg_typecast.c +4 -2
- data/pg_typecast.gemspec +12 -5
- data/test/helper.rb +5 -0
- data/test/test_types.rb +43 -0
- metadata +35 -12
data/README.rdoc
CHANGED
@@ -4,19 +4,15 @@
|
|
4
4
|
|
5
5
|
== Description
|
6
6
|
|
7
|
-
Provides typecasting support for the pg gem. The code is extracted from
|
8
|
-
a drop-in enhancement for users of
|
7
|
+
Provides typecasting support for the pg gem. The code is extracted from
|
8
|
+
swift (http://github.com/shanna/swift) as a drop-in enhancement for users of
|
9
|
+
pg.
|
9
10
|
|
10
11
|
== Dependencies
|
11
12
|
|
12
13
|
* ruby >= 1.9.1
|
13
14
|
* pg >= 0.9.0
|
14
15
|
|
15
|
-
== Alternatives
|
16
|
-
|
17
|
-
Swift (http://github.com/shanna/swift) is as fast as the pg gem with typecasting support
|
18
|
-
and drivers for mysql, postgresql and db2.
|
19
|
-
|
20
16
|
== Caveats
|
21
17
|
|
22
18
|
* This gem overrides the PGresult#each method.
|
@@ -59,10 +55,6 @@ The following table illustrates the typecasting done from postgresql types to na
|
|
59
55
|
+--------------------+---------------------------+
|
60
56
|
|
61
57
|
|
62
|
-
== TODO
|
63
|
-
|
64
|
-
* tests.
|
65
|
-
|
66
58
|
== License
|
67
59
|
|
68
60
|
See LICENSE.
|
data/Rakefile
CHANGED
@@ -13,8 +13,20 @@ begin
|
|
13
13
|
gem.files.reject!{|f| f =~ %r{\.gitignore}}
|
14
14
|
|
15
15
|
gem.add_dependency 'pg', '>= 0.9.0'
|
16
|
+
|
17
|
+
gem.required_ruby_version = '>= 1.9.1'
|
16
18
|
end
|
17
19
|
Jeweler::GemcutterTasks.new
|
18
20
|
rescue LoadError
|
19
21
|
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
20
22
|
end
|
23
|
+
|
24
|
+
require 'rake/testtask'
|
25
|
+
Rake::TestTask.new(:test) do |test|
|
26
|
+
test.libs << 'lib' << 'test'
|
27
|
+
test.pattern = 'test/**/test_*.rb'
|
28
|
+
test.verbose = true
|
29
|
+
end
|
30
|
+
|
31
|
+
task :test => :check_dependencies
|
32
|
+
task :default => :test
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.1
|
data/ext/pg_typecast.c
CHANGED
@@ -104,7 +104,7 @@ inline VALUE typecast(const char* data, uint64_t len, int pgtype) {
|
|
104
104
|
}
|
105
105
|
|
106
106
|
VALUE result_each(VALUE self) {
|
107
|
-
int r, c, rows, cols, *types;
|
107
|
+
int r, c, rows, cols, *types, failed;
|
108
108
|
PGresult *res;
|
109
109
|
Data_Get_Struct(self, PGresult, res);
|
110
110
|
|
@@ -123,7 +123,9 @@ VALUE result_each(VALUE self) {
|
|
123
123
|
rb_hash_aset(tuple, rb_ary_entry(fields, c),
|
124
124
|
PQgetisnull(res, r, c) ? Qnil : typecast(PQgetvalue(res, r, c), PQgetlength(res, r, c), types[c]));
|
125
125
|
}
|
126
|
-
rb_yield
|
126
|
+
rb_protect(rb_yield, tuple, &failed);
|
127
|
+
if (failed)
|
128
|
+
rb_jump_tag(failed);
|
127
129
|
}
|
128
130
|
|
129
131
|
free(types);
|
data/pg_typecast.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{pg_typecast}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Bharanee Rathna"]
|
12
|
-
s.date = %q{2010-09-
|
12
|
+
s.date = %q{2010-09-17}
|
13
13
|
s.description = %q{Extensions to pg gem supporting typecasting.}
|
14
14
|
s.email = ["deepfryed@gmail.com"]
|
15
15
|
s.extensions = ["ext/extconf.rb"]
|
@@ -24,19 +24,26 @@ Gem::Specification.new do |s|
|
|
24
24
|
"VERSION",
|
25
25
|
"ext/extconf.rb",
|
26
26
|
"ext/pg_typecast.c",
|
27
|
-
"pg_typecast.gemspec"
|
27
|
+
"pg_typecast.gemspec",
|
28
|
+
"test/helper.rb",
|
29
|
+
"test/test_types.rb"
|
28
30
|
]
|
29
31
|
s.homepage = %q{http://github.com/deepfryed/pg_typecast}
|
30
32
|
s.rdoc_options = ["--charset=UTF-8"]
|
31
33
|
s.require_paths = ["lib"]
|
32
|
-
s.
|
34
|
+
s.required_ruby_version = Gem::Requirement.new(">= 1.9.1")
|
35
|
+
s.rubygems_version = %q{1.3.7}
|
33
36
|
s.summary = %q{Extensions to pg gem supporting typecasting.}
|
37
|
+
s.test_files = [
|
38
|
+
"test/helper.rb",
|
39
|
+
"test/test_types.rb"
|
40
|
+
]
|
34
41
|
|
35
42
|
if s.respond_to? :specification_version then
|
36
43
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
37
44
|
s.specification_version = 3
|
38
45
|
|
39
|
-
if Gem::Version.new(Gem::
|
46
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
40
47
|
s.add_runtime_dependency(%q<pg>, [">= 0.9.0"])
|
41
48
|
else
|
42
49
|
s.add_dependency(%q<pg>, [">= 0.9.0"])
|
data/test/helper.rb
ADDED
data/test/test_types.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
require_relative 'helper'
|
2
|
+
|
3
|
+
describe 'typecasting' do
|
4
|
+
before do
|
5
|
+
@db = PGconn.connect 'host=127.0.0.1 dbname=test'
|
6
|
+
@db.exec %q{drop table if exists users}
|
7
|
+
@db.exec %q{
|
8
|
+
create table users(
|
9
|
+
id serial,
|
10
|
+
name text,
|
11
|
+
age integer,
|
12
|
+
height float,
|
13
|
+
hacker bool,
|
14
|
+
slacker bool,
|
15
|
+
nil text default null,
|
16
|
+
created date not null default now(),
|
17
|
+
updated timestamp with time zone not null default now()
|
18
|
+
)
|
19
|
+
}
|
20
|
+
|
21
|
+
bind = [ 'jim', 32, 178.71, true, false ]
|
22
|
+
@db.exec %q{insert into users(name,age,height,hacker,slacker) values($1, $2, $3, $4, $5)}, bind
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'should typecast correctly' do
|
26
|
+
result = @db.exec(%q{select * from users limit 1}).first
|
27
|
+
assert_kind_of Integer, result[:id]
|
28
|
+
assert_kind_of String, result[:name]
|
29
|
+
assert_kind_of Integer, result[:age]
|
30
|
+
assert_kind_of Float, result[:height]
|
31
|
+
assert_kind_of TrueClass, result[:hacker]
|
32
|
+
assert_kind_of FalseClass, result[:slacker]
|
33
|
+
assert_kind_of Date, result[:created]
|
34
|
+
assert_kind_of Time, result[:updated]
|
35
|
+
assert_equal nil, result[:nil]
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'should cascade exceptions in yield' do
|
39
|
+
assert_raises(RuntimeError) do
|
40
|
+
@db.exec(%q{select * from users limit 1}).each { raise "foo" }
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pg_typecast
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 25
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
- 1
|
10
|
+
version: 0.1.1
|
5
11
|
platform: ruby
|
6
12
|
authors:
|
7
13
|
- Bharanee Rathna
|
@@ -9,19 +15,25 @@ autorequire:
|
|
9
15
|
bindir: bin
|
10
16
|
cert_chain: []
|
11
17
|
|
12
|
-
date: 2010-09-
|
18
|
+
date: 2010-09-17 00:00:00 +10:00
|
13
19
|
default_executable:
|
14
20
|
dependencies:
|
15
21
|
- !ruby/object:Gem::Dependency
|
16
22
|
name: pg
|
17
|
-
|
18
|
-
|
19
|
-
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
20
26
|
requirements:
|
21
27
|
- - ">="
|
22
28
|
- !ruby/object:Gem::Version
|
29
|
+
hash: 59
|
30
|
+
segments:
|
31
|
+
- 0
|
32
|
+
- 9
|
33
|
+
- 0
|
23
34
|
version: 0.9.0
|
24
|
-
|
35
|
+
type: :runtime
|
36
|
+
version_requirements: *id001
|
25
37
|
description: Extensions to pg gem supporting typecasting.
|
26
38
|
email:
|
27
39
|
- deepfryed@gmail.com
|
@@ -40,6 +52,8 @@ files:
|
|
40
52
|
- ext/extconf.rb
|
41
53
|
- ext/pg_typecast.c
|
42
54
|
- pg_typecast.gemspec
|
55
|
+
- test/helper.rb
|
56
|
+
- test/test_types.rb
|
43
57
|
has_rdoc: true
|
44
58
|
homepage: http://github.com/deepfryed/pg_typecast
|
45
59
|
licenses: []
|
@@ -50,23 +64,32 @@ rdoc_options:
|
|
50
64
|
require_paths:
|
51
65
|
- lib
|
52
66
|
required_ruby_version: !ruby/object:Gem::Requirement
|
67
|
+
none: false
|
53
68
|
requirements:
|
54
69
|
- - ">="
|
55
70
|
- !ruby/object:Gem::Version
|
56
|
-
|
57
|
-
|
71
|
+
hash: 49
|
72
|
+
segments:
|
73
|
+
- 1
|
74
|
+
- 9
|
75
|
+
- 1
|
76
|
+
version: 1.9.1
|
58
77
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
78
|
+
none: false
|
59
79
|
requirements:
|
60
80
|
- - ">="
|
61
81
|
- !ruby/object:Gem::Version
|
82
|
+
hash: 3
|
83
|
+
segments:
|
84
|
+
- 0
|
62
85
|
version: "0"
|
63
|
-
version:
|
64
86
|
requirements: []
|
65
87
|
|
66
88
|
rubyforge_project:
|
67
|
-
rubygems_version: 1.3.
|
89
|
+
rubygems_version: 1.3.7
|
68
90
|
signing_key:
|
69
91
|
specification_version: 3
|
70
92
|
summary: Extensions to pg gem supporting typecasting.
|
71
|
-
test_files:
|
72
|
-
|
93
|
+
test_files:
|
94
|
+
- test/helper.rb
|
95
|
+
- test/test_types.rb
|