dbd-pg 0.3.3 → 0.3.4
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/lib/dbd/Pg.rb +1 -1
- data/lib/dbd/pg/statement.rb +11 -3
- data/test/dbd/general/test_statement.rb +11 -2
- data/test/dbd/postgresql/testdbipg.rb +29 -0
- metadata +2 -2
data/lib/dbd/Pg.rb
CHANGED
data/lib/dbd/pg/statement.rb
CHANGED
@@ -71,8 +71,7 @@ class DBI::DBD::Pg::Statement < DBI::BaseStatement
|
|
71
71
|
end
|
72
72
|
|
73
73
|
def finish
|
74
|
-
|
75
|
-
@result.finish if @result
|
74
|
+
internal_finish
|
76
75
|
@result = nil
|
77
76
|
@db = nil
|
78
77
|
end
|
@@ -123,6 +122,15 @@ class DBI::DBD::Pg::Statement < DBI::BaseStatement
|
|
123
122
|
end
|
124
123
|
end
|
125
124
|
|
125
|
+
# finish the statement at a lower level
|
126
|
+
def internal_finish
|
127
|
+
@result.finish if @result
|
128
|
+
statement_exists = @db._exec("select * from pg_prepared_statements where name='#{@stmt_name}'")
|
129
|
+
if statement_exists.num_tuples > 0
|
130
|
+
@db._exec("DEALLOCATE \"#{@stmt_name}\"")
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
126
134
|
# prepare the statement at a lower level.
|
127
135
|
def internal_prepare
|
128
136
|
if @db["pg_native_binding"]
|
@@ -130,7 +138,7 @@ class DBI::DBD::Pg::Statement < DBI::BaseStatement
|
|
130
138
|
@stmt = @db._prepare(@stmt_name, translate_param_markers(@sql))
|
131
139
|
end
|
132
140
|
else
|
133
|
-
|
141
|
+
internal_finish
|
134
142
|
@stmt = @db._prepare(@stmt_name, DBI::SQL::PreparedStatement.new(DBI::DBD::Pg, @sql).bind(@bindvars))
|
135
143
|
end
|
136
144
|
@prepared = true
|
@@ -1,4 +1,13 @@
|
|
1
1
|
@class = Class.new(DBDConfig.testbase(DBDConfig.current_dbtype)) do
|
2
|
+
|
3
|
+
def test_execute
|
4
|
+
assert_nothing_raised do
|
5
|
+
@dbh.execute("select * from names order by age") do |sth|
|
6
|
+
assert_equal([["Joe", 19], ["Bob", 21], ["Jim", 30]], sth.fetch_all)
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
2
11
|
def test_quoting # FIXME breaks sqlite-ruby to a segfault - research
|
3
12
|
@sth = nil
|
4
13
|
|
@@ -114,7 +123,7 @@
|
|
114
123
|
@sth.finish
|
115
124
|
end
|
116
125
|
|
117
|
-
def
|
126
|
+
def test_prepare_execute
|
118
127
|
assert_nothing_raised do
|
119
128
|
@sth = @dbh.prepare("select * from names")
|
120
129
|
@sth.execute
|
@@ -134,7 +143,7 @@
|
|
134
143
|
end
|
135
144
|
end
|
136
145
|
|
137
|
-
def
|
146
|
+
def test_prepare_execute_with_transactions
|
138
147
|
@dbh["AutoCommit"] = false
|
139
148
|
config = DBDConfig.get_config['sqlite3']
|
140
149
|
|
@@ -18,6 +18,35 @@ class TestDbdPostgres < DBDConfig.testbase(:postgresql)
|
|
18
18
|
# dbd.disconnect if dbd
|
19
19
|
# end
|
20
20
|
|
21
|
+
# this monkeypatch is used for the following test... NEVER integrate this into DBI proper.
|
22
|
+
class DBI::StatementHandle < DBI::Handle
|
23
|
+
def stmt_name
|
24
|
+
@handle.instance_variable_get(:@stmt_name)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_statement_finish_deallocates_sth
|
29
|
+
assert_nothing_raised do
|
30
|
+
@sth = @dbh.prepare("select * from names")
|
31
|
+
@sth.execute
|
32
|
+
sth_internal_name = @sth.stmt_name
|
33
|
+
assert(sth_internal_name)
|
34
|
+
assert(!sth_internal_name.empty?)
|
35
|
+
@sth.finish
|
36
|
+
|
37
|
+
# at this point, the statement name should no longer exist
|
38
|
+
#
|
39
|
+
# XXX this is a potentially horrible way of doing it since it'll
|
40
|
+
# create another prepared statement, but *at this time*, I don't
|
41
|
+
# see any drawbacks and the alternative is considerably uglier.
|
42
|
+
|
43
|
+
@sth = @dbh.prepare("select count(*) from pg_prepared_statements where name = ?")
|
44
|
+
@sth.execute(sth_internal_name)
|
45
|
+
assert_equal([0], @sth.fetch)
|
46
|
+
@sth.finish
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
21
50
|
def test_binding
|
22
51
|
assert(@dbh["pg_native_binding"])
|
23
52
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dbd-pg
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Erik Hollensbe
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2008-
|
13
|
+
date: 2008-09-02 00:00:00 -07:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|