pg-ct 0.10.0

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.
@@ -0,0 +1,215 @@
1
+ #!/usr/bin/env spec
2
+ # encoding: utf-8
3
+
4
+ BEGIN {
5
+ require 'pathname'
6
+ require 'rbconfig'
7
+
8
+ basedir = Pathname( __FILE__ ).dirname.parent
9
+ libdir = basedir + 'lib'
10
+ archlib = libdir + Config::CONFIG['sitearch']
11
+
12
+ $LOAD_PATH.unshift( basedir.to_s ) unless $LOAD_PATH.include?( basedir.to_s )
13
+ $LOAD_PATH.unshift( libdir.to_s ) unless $LOAD_PATH.include?( libdir.to_s )
14
+ $LOAD_PATH.unshift( archlib.to_s ) unless $LOAD_PATH.include?( archlib.to_s )
15
+ }
16
+
17
+ require 'rspec'
18
+ require 'spec/lib/helpers'
19
+ require 'pg'
20
+
21
+ describe PGresult do
22
+ include PgTestingHelpers
23
+
24
+ before( :all ) do
25
+ @conn = setup_testing_db( "PGresult" )
26
+ end
27
+
28
+ before( :each ) do
29
+ @conn.exec( 'BEGIN' )
30
+ end
31
+
32
+
33
+ it "should act as an array of hashes" do
34
+ res = @conn.exec("SELECT 1 AS a, 2 AS b")
35
+ res[0]['a'].should== '1'
36
+ res[0]['b'].should== '2'
37
+ end
38
+
39
+ it "should insert nil AS NULL and return NULL as nil" do
40
+ res = @conn.exec("SELECT $1::int AS n", [nil])
41
+ res[0]['n'].should == nil
42
+ end
43
+
44
+ it "should detect division by zero as SQLSTATE 22012" do
45
+ sqlstate = nil
46
+ begin
47
+ res = @conn.exec("SELECT 1/0")
48
+ rescue PGError => e
49
+ sqlstate = e.result.result_error_field(
50
+ PGresult::PG_DIAG_SQLSTATE).to_i
51
+ end
52
+ sqlstate.should == 22012
53
+ end
54
+
55
+ it "should return the same bytes in binary format that are sent in binary format" do
56
+ binary_file = File.join(Dir.pwd, 'spec/data', 'random_binary_data')
57
+ bytes = File.open(binary_file, 'rb').read
58
+ res = @conn.exec('VALUES ($1::bytea)',
59
+ [ { :value => bytes, :format => 1 } ], 1)
60
+ res[0]['column1'].should== bytes
61
+ end
62
+
63
+ it "should return the same bytes in binary format that are sent as inline text" do
64
+ binary_file = File.join(Dir.pwd, 'spec/data', 'random_binary_data')
65
+ in_bytes = File.open(binary_file, 'rb').read
66
+ out_bytes = nil
67
+ @conn.exec("SET standard_conforming_strings=on")
68
+ res = @conn.exec("VALUES ('#{PGconn.escape_bytea(in_bytes)}'::bytea)", [], 1)
69
+ out_bytes = res[0]['column1']
70
+ out_bytes.should == in_bytes
71
+ end
72
+
73
+ it "should return the same bytes in text format that are sent in binary format" do
74
+ binary_file = File.join(Dir.pwd, 'spec/data', 'random_binary_data')
75
+ bytes = File.open(binary_file, 'rb').read
76
+ res = @conn.exec('VALUES ($1::bytea)',
77
+ [ { :value => bytes, :format => 1 } ])
78
+ PGconn.unescape_bytea(res[0]['column1']).should== bytes
79
+ end
80
+
81
+ it "should return the same bytes in text format that are sent as inline text" do
82
+ binary_file = File.join(Dir.pwd, 'spec/data', 'random_binary_data')
83
+ in_bytes = File.open(binary_file, 'rb').read
84
+
85
+ out_bytes = nil
86
+ @conn.exec("SET standard_conforming_strings=on")
87
+ res = @conn.exec("VALUES ('#{PGconn.escape_bytea(in_bytes)}'::bytea)", [], 0)
88
+ out_bytes = PGconn.unescape_bytea(res[0]['column1'])
89
+ out_bytes.should == in_bytes
90
+ end
91
+
92
+ it "should return the parameter type of the specified prepared statment parameter" do
93
+ query = 'SELECT * FROM pg_stat_activity WHERE user = $1::name AND current_query = $2::text'
94
+ @conn.prepare( 'queryfinder', query )
95
+ res = @conn.describe_prepared( 'queryfinder' )
96
+
97
+ @conn.exec( 'SELECT format_type($1, -1)', [res.paramtype(0)] ).getvalue( 0, 0 ).
98
+ should == 'name'
99
+ @conn.exec( 'SELECT format_type($1, -1)', [res.paramtype(1)] ).getvalue( 0, 0 ).
100
+ should == 'text'
101
+ end
102
+
103
+ it "should raise an exception when a negative index is given to #fformat" do
104
+ res = @conn.exec('SELECT * FROM pg_stat_activity')
105
+ expect {
106
+ res.fformat( -1 )
107
+ }.to raise_error( ArgumentError, /column number/i )
108
+ end
109
+
110
+ it "should raise an exception when a negative index is given to #fmod" do
111
+ res = @conn.exec('SELECT * FROM pg_stat_activity')
112
+ expect {
113
+ res.fmod( -1 )
114
+ }.to raise_error( ArgumentError, /column number/i )
115
+ end
116
+
117
+ it "should raise an exception when a negative index is given to #[]" do
118
+ res = @conn.exec('SELECT * FROM pg_stat_activity')
119
+ expect {
120
+ res[ -1 ]
121
+ }.to raise_error( IndexError, /-1 is out of range/i )
122
+ end
123
+
124
+ # PQfmod
125
+ it "can return the type modifier for a result column" do
126
+ @conn.exec( 'CREATE TABLE fmodtest ( foo varchar(33) )' )
127
+ res = @conn.exec( 'SELECT * FROM fmodtest' )
128
+ res.fmod( 0 ).should == 33 + 4 # Column length + varlena size (4)
129
+ end
130
+
131
+ it "should raise an exception when an invalid index is passed to PGresult#fmod" do
132
+ @conn.exec( 'CREATE TABLE fmodtest ( foo varchar(33) )' )
133
+ res = @conn.exec( 'SELECT * FROM fmodtest' )
134
+ expect { res.fmod(1) }.to raise_error( ArgumentError )
135
+ end
136
+
137
+ it "should raise an exception when an invalid (negative) index is passed to PGresult#fmod" do
138
+ @conn.exec( 'CREATE TABLE fmodtest ( foo varchar(33) )' )
139
+ res = @conn.exec( 'SELECT * FROM fmodtest' )
140
+ expect { res.fmod(-11) }.to raise_error( ArgumentError )
141
+ end
142
+
143
+ it "shouldn't raise an exception when a valid index is passed to PGresult#fmod for a column with no typemod" do
144
+ @conn.exec( 'CREATE TABLE fmodtest ( foo text )' )
145
+ res = @conn.exec( 'SELECT * FROM fmodtest' )
146
+ res.fmod( 0 ).should == -1 # and it shouldn't raise an exception, either
147
+ end
148
+
149
+ # PQftable
150
+ it "can return the oid of the table from which a result column was fetched" do
151
+ @conn.exec( 'CREATE TABLE ftabletest ( foo text )' )
152
+ res = @conn.exec( 'SELECT * FROM ftabletest' )
153
+
154
+ res.ftable( 0 ).should == be_nonzero()
155
+ end
156
+
157
+ it "should raise an exception when an invalid index is passed to PGresult#ftable" do
158
+ @conn.exec( 'CREATE TABLE ftabletest ( foo text )' )
159
+ res = @conn.exec( 'SELECT * FROM ftabletest' )
160
+
161
+ expect { res.ftable(18) }.to raise_error( ArgumentError )
162
+ end
163
+
164
+ it "should raise an exception when an invalid (negative) index is passed to PGresult#ftable" do
165
+ @conn.exec( 'CREATE TABLE ftabletest ( foo text )' )
166
+ res = @conn.exec( 'SELECT * FROM ftabletest' )
167
+
168
+ expect { res.ftable(-2) }.to raise_error( ArgumentError )
169
+ end
170
+
171
+ it "shouldn't raise an exception when a valid index is passed to PGresult#ftable for a " +
172
+ "column with no corresponding table" do
173
+ @conn.exec( 'CREATE TABLE ftabletest ( foo text )' )
174
+ res = @conn.exec( 'SELECT foo, LENGTH(foo) as length FROM ftabletest' )
175
+ res.ftable( 1 ).should == PGresult::InvalidOid # and it shouldn't raise an exception, either
176
+ end
177
+
178
+ # PQftablecol
179
+ it "can return the column number (within its table) of a column in a result" do
180
+ @conn.exec( 'CREATE TABLE ftablecoltest ( foo text, bar numeric )' )
181
+ res = @conn.exec( 'SELECT * FROM ftablecoltest' )
182
+
183
+ res.ftablecol( 0 ).should == 1
184
+ res.ftablecol( 1 ).should == 2
185
+ end
186
+
187
+ it "should raise an exception when an invalid index is passed to PGresult#ftablecol" do
188
+ @conn.exec( 'CREATE TABLE ftablecoltest ( foo text, bar numeric )' )
189
+ res = @conn.exec( 'SELECT * FROM ftablecoltest' )
190
+
191
+ expect { res.ftablecol(32) }.to raise_error( ArgumentError )
192
+ end
193
+
194
+ it "should raise an exception when an invalid (negative) index is passed to PGresult#ftablecol" do
195
+ @conn.exec( 'CREATE TABLE ftablecoltest ( foo text, bar numeric )' )
196
+ res = @conn.exec( 'SELECT * FROM ftablecoltest' )
197
+
198
+ expect { res.ftablecol(-1) }.to raise_error( ArgumentError )
199
+ end
200
+
201
+ it "shouldn't raise an exception when a valid index is passed to PGresult#ftablecol for a " +
202
+ "column with no corresponding table" do
203
+ @conn.exec( 'CREATE TABLE ftablecoltest ( foo text )' )
204
+ res = @conn.exec( 'SELECT foo, LENGTH(foo) as length FROM ftablecoltest' )
205
+ res.ftablecol(1).should == 0 # and it shouldn't raise an exception, either
206
+ end
207
+
208
+ after( :each ) do
209
+ @conn.exec( 'ROLLBACK' )
210
+ end
211
+
212
+ after( :all ) do
213
+ teardown_testing_db( @conn )
214
+ end
215
+ end
metadata ADDED
@@ -0,0 +1,126 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pg-ct
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 10
8
+ - 0
9
+ version: 0.10.0
10
+ platform: ruby
11
+ authors:
12
+ - Jeff Davis
13
+ - Michael Granger
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-11-29 00:00:00 +01:00
19
+ default_executable:
20
+ dependencies: []
21
+
22
+ description: |-
23
+ This is the extension library to access a PostgreSQL database from Ruby.
24
+ This library works with PostgreSQL 7.4 and later.
25
+ email:
26
+ - ruby-pg@j-davis.com
27
+ - ged@FaerieMUD.org
28
+ executables: []
29
+
30
+ extensions:
31
+ - ext/extconf.rb
32
+ extra_rdoc_files:
33
+ - ChangeLog
34
+ - README
35
+ - README.ja
36
+ - README.OS_X
37
+ - README.windows
38
+ - LICENSE
39
+ files:
40
+ - Rakefile
41
+ - ChangeLog
42
+ - README
43
+ - README.ja
44
+ - README.OS_X
45
+ - README.windows
46
+ - LICENSE
47
+ - spec/m17n_spec.rb
48
+ - spec/pgconn_spec.rb
49
+ - spec/pgresult_spec.rb
50
+ - spec/lib/helpers.rb
51
+ - lib/pg.rb
52
+ - ext/compat.c
53
+ - ext/pg.c
54
+ - ext/compat.h
55
+ - ext/pg.h
56
+ - ext/extconf.rb
57
+ - rake/191_compat.rb
58
+ - rake/dependencies.rb
59
+ - rake/documentation.rb
60
+ - rake/helpers.rb
61
+ - rake/hg.rb
62
+ - rake/manual.rb
63
+ - rake/packaging.rb
64
+ - rake/publishing.rb
65
+ - rake/style.rb
66
+ - rake/svn.rb
67
+ - rake/testing.rb
68
+ - rake/verifytask.rb
69
+ - ./README.ja
70
+ - ./README.OS_X
71
+ - ./README.windows
72
+ - ./GPL
73
+ - ./BSD
74
+ - ./Contributors
75
+ - Rakefile.local
76
+ - spec/data/expected_trace.out
77
+ - spec/data/random_binary_data
78
+ has_rdoc: true
79
+ homepage: http://bitbucket.org/ged/ruby-pg/
80
+ licenses:
81
+ - Ruby
82
+ - GPL
83
+ - BSD
84
+ post_install_message:
85
+ rdoc_options:
86
+ - --tab-width=4
87
+ - --show-hash
88
+ - --include
89
+ - .
90
+ - --main=README
91
+ - --title=pg-ct
92
+ require_paths:
93
+ - lib
94
+ - ext
95
+ required_ruby_version: !ruby/object:Gem::Requirement
96
+ none: false
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ segments:
101
+ - 1
102
+ - 8
103
+ - 7
104
+ version: 1.8.7
105
+ required_rubygems_version: !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ segments:
111
+ - 0
112
+ version: "0"
113
+ requirements:
114
+ - PostgreSQL >=7.4
115
+ rubyforge_project:
116
+ rubygems_version: 1.3.7
117
+ signing_key:
118
+ specification_version: 3
119
+ summary: A Ruby interface to the PostgreSQL RDBMS
120
+ test_files:
121
+ - spec/m17n_spec.rb
122
+ - spec/pgconn_spec.rb
123
+ - spec/pgresult_spec.rb
124
+ - spec/lib/helpers.rb
125
+ - spec/data/expected_trace.out
126
+ - spec/data/random_binary_data