sqlpostgres 1.2.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.
Files changed (207) hide show
  1. data/Gemfile +8 -0
  2. data/Gemfile.lock +22 -0
  3. data/LICENSE.md +23 -0
  4. data/README.rdoc +59 -0
  5. data/Rakefile +32 -0
  6. data/VERSION +1 -0
  7. data/doc/BUGS +2 -0
  8. data/doc/examples/README +6 -0
  9. data/doc/examples/connection.rb +16 -0
  10. data/doc/examples/connection_auto.rb +22 -0
  11. data/doc/examples/connection_ctor.rb +18 -0
  12. data/doc/examples/connection_default.rb +15 -0
  13. data/doc/examples/connection_exec.rb +18 -0
  14. data/doc/examples/connection_manual.rb +12 -0
  15. data/doc/examples/connection_wrapped_new.rb +13 -0
  16. data/doc/examples/connection_wrapped_open.rb +13 -0
  17. data/doc/examples/cursor.rb +38 -0
  18. data/doc/examples/include_module.rb +9 -0
  19. data/doc/examples/include_module2.rb +12 -0
  20. data/doc/examples/insert.rb +30 -0
  21. data/doc/examples/insert2.rb +36 -0
  22. data/doc/examples/insert_bytea.rb +16 -0
  23. data/doc/examples/insert_bytea_array.rb +17 -0
  24. data/doc/examples/insert_default_values.rb +16 -0
  25. data/doc/examples/insert_insert.rb +16 -0
  26. data/doc/examples/insert_insert_default.rb +16 -0
  27. data/doc/examples/insert_insert_select.rb +20 -0
  28. data/doc/examples/insert_select.rb +20 -0
  29. data/doc/examples/interval.rb +17 -0
  30. data/doc/examples/savepoint.rb +38 -0
  31. data/doc/examples/select.rb +33 -0
  32. data/doc/examples/select2.rb +36 -0
  33. data/doc/examples/select_cross_join.rb +18 -0
  34. data/doc/examples/select_distinct.rb +18 -0
  35. data/doc/examples/select_distinct_on +19 -0
  36. data/doc/examples/select_for_update.rb +18 -0
  37. data/doc/examples/select_from.rb +17 -0
  38. data/doc/examples/select_from_subselect.rb +20 -0
  39. data/doc/examples/select_group_by.rb +19 -0
  40. data/doc/examples/select_having.rb +20 -0
  41. data/doc/examples/select_join_on.rb +18 -0
  42. data/doc/examples/select_join_using.rb +18 -0
  43. data/doc/examples/select_limit.rb +19 -0
  44. data/doc/examples/select_natural_join.rb +18 -0
  45. data/doc/examples/select_offset.rb +19 -0
  46. data/doc/examples/select_order_by.rb +20 -0
  47. data/doc/examples/select_select.rb +30 -0
  48. data/doc/examples/select_select_alias.rb +30 -0
  49. data/doc/examples/select_select_expression.rb +31 -0
  50. data/doc/examples/select_select_literal.rb +24 -0
  51. data/doc/examples/select_union.rb +21 -0
  52. data/doc/examples/select_where_array.rb +18 -0
  53. data/doc/examples/select_where_in.rb +18 -0
  54. data/doc/examples/select_where_string.rb +18 -0
  55. data/doc/examples/simple.rb +34 -0
  56. data/doc/examples/transaction.rb +30 -0
  57. data/doc/examples/transaction_abort.rb +30 -0
  58. data/doc/examples/transaction_commit.rb +34 -0
  59. data/doc/examples/translate_substitute_values.rb +17 -0
  60. data/doc/examples/update.rb +32 -0
  61. data/doc/examples/update2.rb +44 -0
  62. data/doc/examples/update_only.rb +17 -0
  63. data/doc/examples/update_set.rb +17 -0
  64. data/doc/examples/update_set_array.rb +16 -0
  65. data/doc/examples/update_set_bytea.rb +16 -0
  66. data/doc/examples/update_set_expression.rb +16 -0
  67. data/doc/examples/update_set_subselect.rb +20 -0
  68. data/doc/examples/update_where.rb +17 -0
  69. data/doc/examples/use_prefix.rb +8 -0
  70. data/doc/examples/use_prefix2.rb +11 -0
  71. data/doc/index.html +31 -0
  72. data/doc/insertexamples.rb +9 -0
  73. data/doc/makemanual +4 -0
  74. data/doc/makerdoc +5 -0
  75. data/doc/manual.dbk +622 -0
  76. data/lib/sqlpostgres/Connection.rb +198 -0
  77. data/lib/sqlpostgres/Cursor.rb +157 -0
  78. data/lib/sqlpostgres/Delete.rb +67 -0
  79. data/lib/sqlpostgres/Exceptions.rb +15 -0
  80. data/lib/sqlpostgres/Insert.rb +279 -0
  81. data/lib/sqlpostgres/NullConnection.rb +22 -0
  82. data/lib/sqlpostgres/PgBit.rb +73 -0
  83. data/lib/sqlpostgres/PgBox.rb +37 -0
  84. data/lib/sqlpostgres/PgCidr.rb +21 -0
  85. data/lib/sqlpostgres/PgCircle.rb +75 -0
  86. data/lib/sqlpostgres/PgInet.rb +21 -0
  87. data/lib/sqlpostgres/PgInterval.rb +208 -0
  88. data/lib/sqlpostgres/PgLineSegment.rb +37 -0
  89. data/lib/sqlpostgres/PgMacAddr.rb +21 -0
  90. data/lib/sqlpostgres/PgPath.rb +64 -0
  91. data/lib/sqlpostgres/PgPoint.rb +65 -0
  92. data/lib/sqlpostgres/PgPolygon.rb +56 -0
  93. data/lib/sqlpostgres/PgTime.rb +77 -0
  94. data/lib/sqlpostgres/PgTimeWithTimeZone.rb +98 -0
  95. data/lib/sqlpostgres/PgTimestamp.rb +93 -0
  96. data/lib/sqlpostgres/PgTwoPoints.rb +54 -0
  97. data/lib/sqlpostgres/PgType.rb +34 -0
  98. data/lib/sqlpostgres/PgWrapper.rb +41 -0
  99. data/lib/sqlpostgres/Savepoint.rb +98 -0
  100. data/lib/sqlpostgres/Select.rb +855 -0
  101. data/lib/sqlpostgres/Transaction.rb +120 -0
  102. data/lib/sqlpostgres/Translate.rb +436 -0
  103. data/lib/sqlpostgres/Update.rb +188 -0
  104. data/lib/sqlpostgres.rb +67 -0
  105. data/test/Assert.rb +72 -0
  106. data/test/Connection.test.rb +246 -0
  107. data/test/Cursor.test.rb +190 -0
  108. data/test/Delete.test.rb +68 -0
  109. data/test/Insert.test.rb +123 -0
  110. data/test/MockPGconn.rb +62 -0
  111. data/test/NullConnection.test.rb +32 -0
  112. data/test/PgBit.test.rb +98 -0
  113. data/test/PgBox.test.rb +108 -0
  114. data/test/PgCidr.test.rb +61 -0
  115. data/test/PgCircle.test.rb +107 -0
  116. data/test/PgInet.test.rb +61 -0
  117. data/test/PgInterval.test.rb +180 -0
  118. data/test/PgLineSegment.test.rb +108 -0
  119. data/test/PgMacAddr.test.rb +61 -0
  120. data/test/PgPath.test.rb +106 -0
  121. data/test/PgPoint.test.rb +100 -0
  122. data/test/PgPolygon.test.rb +95 -0
  123. data/test/PgTime.test.rb +120 -0
  124. data/test/PgTimeWithTimeZone.test.rb +117 -0
  125. data/test/PgTimestamp.test.rb +134 -0
  126. data/test/RandomThings.rb +25 -0
  127. data/test/Savepoint.test.rb +286 -0
  128. data/test/Select.test.rb +930 -0
  129. data/test/Test.rb +62 -0
  130. data/test/TestConfig.rb +21 -0
  131. data/test/TestSetup.rb +13 -0
  132. data/test/TestUtil.rb +92 -0
  133. data/test/Transaction.test.rb +275 -0
  134. data/test/Translate.test.rb +354 -0
  135. data/test/Update.test.rb +227 -0
  136. data/test/roundtrip.test.rb +565 -0
  137. data/test/test +34 -0
  138. data/tools/exampleinserter/ExampleInserter.rb +177 -0
  139. data/tools/rdoc/ChangeLog +796 -0
  140. data/tools/rdoc/EXAMPLE.rb +48 -0
  141. data/tools/rdoc/MANIFEST +58 -0
  142. data/tools/rdoc/Makefile +27 -0
  143. data/tools/rdoc/NEW_FEATURES +226 -0
  144. data/tools/rdoc/README +390 -0
  145. data/tools/rdoc/ToDo +6 -0
  146. data/tools/rdoc/contrib/Index +6 -0
  147. data/tools/rdoc/contrib/xslfo/ChangeLog +181 -0
  148. data/tools/rdoc/contrib/xslfo/README +106 -0
  149. data/tools/rdoc/contrib/xslfo/TODO +10 -0
  150. data/tools/rdoc/contrib/xslfo/convert.xsl +151 -0
  151. data/tools/rdoc/contrib/xslfo/demo/README +21 -0
  152. data/tools/rdoc/contrib/xslfo/demo/rdocfo +99 -0
  153. data/tools/rdoc/contrib/xslfo/fcm.xsl +54 -0
  154. data/tools/rdoc/contrib/xslfo/files.xsl +62 -0
  155. data/tools/rdoc/contrib/xslfo/labeled-lists.xsl +66 -0
  156. data/tools/rdoc/contrib/xslfo/lists.xsl +44 -0
  157. data/tools/rdoc/contrib/xslfo/modules.xsl +152 -0
  158. data/tools/rdoc/contrib/xslfo/rdoc.xsl +75 -0
  159. data/tools/rdoc/contrib/xslfo/source.xsl +66 -0
  160. data/tools/rdoc/contrib/xslfo/styles.xsl +69 -0
  161. data/tools/rdoc/contrib/xslfo/tables.xsl +67 -0
  162. data/tools/rdoc/contrib/xslfo/utils.xsl +21 -0
  163. data/tools/rdoc/debian/changelog +33 -0
  164. data/tools/rdoc/debian/compat +1 -0
  165. data/tools/rdoc/debian/control +20 -0
  166. data/tools/rdoc/debian/copyright +10 -0
  167. data/tools/rdoc/debian/dirs +2 -0
  168. data/tools/rdoc/debian/docs +2 -0
  169. data/tools/rdoc/debian/rdoc.1 +252 -0
  170. data/tools/rdoc/debian/rdoc.manpages +1 -0
  171. data/tools/rdoc/debian/rdoc.pod +149 -0
  172. data/tools/rdoc/debian/rules +9 -0
  173. data/tools/rdoc/dot/dot.rb +255 -0
  174. data/tools/rdoc/etc/rdoc.dtd +203 -0
  175. data/tools/rdoc/install.rb +137 -0
  176. data/tools/rdoc/markup/install.rb +43 -0
  177. data/tools/rdoc/markup/sample/sample.rb +42 -0
  178. data/tools/rdoc/markup/simple_markup/fragments.rb +323 -0
  179. data/tools/rdoc/markup/simple_markup/inline.rb +348 -0
  180. data/tools/rdoc/markup/simple_markup/lines.rb +147 -0
  181. data/tools/rdoc/markup/simple_markup/preprocess.rb +68 -0
  182. data/tools/rdoc/markup/simple_markup/to_html.rb +281 -0
  183. data/tools/rdoc/markup/simple_markup.rb +474 -0
  184. data/tools/rdoc/markup/test/AllTests.rb +2 -0
  185. data/tools/rdoc/markup/test/TestInline.rb +151 -0
  186. data/tools/rdoc/markup/test/TestParse.rb +411 -0
  187. data/tools/rdoc/rdoc/code_objects.rb +536 -0
  188. data/tools/rdoc/rdoc/diagram.rb +331 -0
  189. data/tools/rdoc/rdoc/generators/chm_generator.rb +112 -0
  190. data/tools/rdoc/rdoc/generators/html_generator.rb +1268 -0
  191. data/tools/rdoc/rdoc/generators/template/chm/chm.rb +86 -0
  192. data/tools/rdoc/rdoc/generators/template/html/html.rb +705 -0
  193. data/tools/rdoc/rdoc/generators/template/html/kilmer.rb +377 -0
  194. data/tools/rdoc/rdoc/generators/template/xml/rdf.rb +110 -0
  195. data/tools/rdoc/rdoc/generators/template/xml/xml.rb +110 -0
  196. data/tools/rdoc/rdoc/generators/xml_generator.rb +130 -0
  197. data/tools/rdoc/rdoc/options.rb +451 -0
  198. data/tools/rdoc/rdoc/parsers/parse_c.rb +287 -0
  199. data/tools/rdoc/rdoc/parsers/parse_f95.rb +118 -0
  200. data/tools/rdoc/rdoc/parsers/parse_rb.rb +2311 -0
  201. data/tools/rdoc/rdoc/parsers/parse_simple.rb +37 -0
  202. data/tools/rdoc/rdoc/parsers/parserfactory.rb +75 -0
  203. data/tools/rdoc/rdoc/rdoc.rb +219 -0
  204. data/tools/rdoc/rdoc/template.rb +234 -0
  205. data/tools/rdoc/rdoc/tokenstream.rb +25 -0
  206. data/tools/rdoc/rdoc.rb +9 -0
  207. metadata +291 -0
data/test/Test.rb ADDED
@@ -0,0 +1,62 @@
1
+ require 'Assert'
2
+ require 'TestUtil'
3
+
4
+ class Test
5
+
6
+ include Assert
7
+ include TestUtil
8
+
9
+ private
10
+
11
+ def allInstanceMethods
12
+ self.class.public_instance_methods(false) +
13
+ self.class.private_instance_methods(false)
14
+ end
15
+
16
+ public
17
+
18
+ def doRun
19
+ testForTestDb
20
+ allInstanceMethods.each { |methodName|
21
+ case methodName
22
+ when /^skip_test/
23
+ $stderr.puts "Warning: Commented out test #{methodName}"
24
+ when /^test/
25
+ aMethod = method(methodName)
26
+ if aMethod.arity == 0
27
+ #$stderr.puts methodName
28
+ setup
29
+ begin
30
+ aMethod.call
31
+ ensure
32
+ tearDown
33
+ end
34
+ end
35
+ end
36
+ }
37
+ end
38
+
39
+ def run
40
+ begin
41
+ doRun
42
+ rescue Exception => e
43
+ $stderr.puts "#{e.class}: #{e}", e.backtrace
44
+ exit 1
45
+ end
46
+ end
47
+
48
+ private
49
+
50
+ def setup
51
+ end
52
+
53
+ def tearDown
54
+ end
55
+
56
+ end
57
+
58
+ # Local Variables:
59
+ # tab-width: 2
60
+ # ruby-indent-level: 2
61
+ # indent-tabs-mode: nil
62
+ # End:
@@ -0,0 +1,21 @@
1
+ module TestConfig
2
+
3
+ # The path to the library
4
+
5
+ LIB_PATH = "../lib/sqlpostgres"
6
+
7
+ # The name of the database to use for testing.
8
+
9
+ TEST_DB_NAME = "sqlpostgres_test"
10
+
11
+ # The prefix for temporary database objects.
12
+
13
+ TEST_DB_PREFIX = "SQLPOSTGRES_TEST_"
14
+
15
+ end
16
+
17
+ # Local Variables:
18
+ # tab-width: 2
19
+ # ruby-indent-level: 2
20
+ # indent-tabs-mode: nil
21
+ # End:
data/test/TestSetup.rb ADDED
@@ -0,0 +1,13 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+ $:.unshift(File.join(File.dirname(__FILE__), "../lib"))
4
+ require "sqlpostgres"
5
+ require 'TestConfig'
6
+ require 'Test'
7
+ require 'TestUtil'
8
+
9
+ # Local Variables:
10
+ # tab-width: 2
11
+ # ruby-indent-level: 2
12
+ # indent-tabs-mode: nil
13
+ # End:
data/test/TestUtil.rb ADDED
@@ -0,0 +1,92 @@
1
+ module TestUtil
2
+
3
+ require 'TestConfig'
4
+
5
+ include TestConfig
6
+ include SqlPostgres
7
+
8
+ def testDbArgs
9
+ {'db_name'=>TEST_DB_NAME}
10
+ end
11
+
12
+ def testForTestDb
13
+ begin
14
+ Connection.new(testDbArgs)
15
+ rescue PGError => message
16
+ puts "Creating test database"
17
+ system("psql -c 'create database #{TEST_DB_NAME}' template1 > /dev/null 2>&1")
18
+ end
19
+ end
20
+
21
+ def removeTestDb
22
+ puts "Removing test database"
23
+ system("psql -c 'drop database #{TEST_DB_NAME}' template1 > /dev/null 2>&1")
24
+ end
25
+
26
+ def makeTestConnection
27
+ if block_given?
28
+ Connection.open(testDbArgs) do |connection|
29
+ yield(connection)
30
+ end
31
+ else
32
+ Connection.new(testDbArgs)
33
+ end
34
+ end
35
+
36
+ def setDefaultConnection(connection)
37
+ oldDefault = Connection.default
38
+ Connection.default = connection
39
+ begin
40
+ yield
41
+ ensure
42
+ Connection.default = oldDefault
43
+ end
44
+ end
45
+
46
+ def testTableName(suffix)
47
+ [TEST_DB_PREFIX, suffix].join('')
48
+ end
49
+
50
+ def table1
51
+ testTableName("foo")
52
+ end
53
+
54
+ def table2
55
+ testTableName("bar")
56
+ end
57
+
58
+ def table3
59
+ testTableName("baz")
60
+ end
61
+
62
+ def allCharactersExceptNull
63
+ allCharacters(1)
64
+ end
65
+
66
+ def allCharacters(floor = 0)
67
+ s = (floor..255).to_a.collect do |i|
68
+ i.chr
69
+ end.join
70
+ if s.respond_to?(:force_encoding)
71
+ s = s.force_encoding('ASCII-8BIT')
72
+ end
73
+ s
74
+ end
75
+
76
+ def setenv(name, value)
77
+ old_value = ENV[name]
78
+ ENV[name] = value
79
+ begin
80
+ yield
81
+ ensure
82
+ ENV[name] = old_value
83
+ end
84
+ end
85
+
86
+ end
87
+
88
+ # Local Variables:
89
+ # tab-width: 2
90
+ # ruby-indent-level: 2
91
+ # indent-tabs-mode: nil
92
+ # End:
@@ -0,0 +1,275 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require 'bundler/setup'
5
+ $:.unshift(File.dirname(__FILE__))
6
+ require 'TestSetup'
7
+
8
+ require 'MockPGconn'
9
+
10
+ class TransactionTest < Test
11
+
12
+ include SqlPostgres
13
+ include TestUtil
14
+
15
+ def testSuccess
16
+ Connection.mockPgClass do
17
+ connection = Connection.new
18
+ assertEquals(MockPGconn.state[:statements], nil)
19
+ Transaction.new(connection) do
20
+ connection.exec("foo")
21
+ assertEquals(MockPGconn.state[:statements],
22
+ ["begin transaction", "foo"])
23
+ end
24
+ assertEquals(MockPGconn.state[:statements],
25
+ ["begin transaction", "foo", "end transaction"])
26
+ end
27
+ end
28
+
29
+ def testManualCommit
30
+ Connection.mockPgClass do
31
+ connection = Connection.new
32
+ assertEquals(MockPGconn.state[:statements], nil)
33
+ Transaction.new(connection) do
34
+ connection.exec("foo")
35
+ assertEquals(MockPGconn.state[:statements],
36
+ ["begin transaction", "foo"])
37
+ end
38
+ assertEquals(MockPGconn.state[:statements],
39
+ ["begin transaction", "foo", "end transaction"])
40
+ end
41
+ end
42
+
43
+ def testSuccess_Real
44
+ makeTestConnection do |connection|
45
+ connection.exec("create temporary table #{table1} (i int)")
46
+ Transaction.new(connection) do
47
+ connection.exec("insert into #{table1} values (1)")
48
+ end
49
+ assertEquals(connection.query("select i from #{table1}"), [["1"]])
50
+ end
51
+ end
52
+
53
+ def testSuccess_Real_DefaultConnection
54
+ makeTestConnection do |connection|
55
+ setDefaultConnection(connection) do
56
+ connection.exec("create temporary table #{table1} (i int)")
57
+ Transaction.new do
58
+ connection.exec("insert into #{table1} values (1)")
59
+ end
60
+ assertEquals(connection.query("select i from #{table1}"),
61
+ [["1"]])
62
+ end
63
+ end
64
+ end
65
+
66
+ def testRuntimeError
67
+ Connection.mockPgClass do
68
+ connection = Connection.new
69
+ assertEquals(MockPGconn.state[:statements], nil)
70
+ assertException(RuntimeError, "Oh no!") do
71
+ Transaction.new(connection) do
72
+ connection.exec("foo")
73
+ assertEquals(MockPGconn.state[:statements],
74
+ ["begin transaction", "foo"])
75
+ raise "Oh no!"
76
+ end
77
+ end
78
+ assertEquals(MockPGconn.state[:statements],
79
+ ["begin transaction", "foo", "abort transaction"])
80
+ end
81
+ end
82
+
83
+ class Sorry < Exception
84
+ end
85
+
86
+ def testException
87
+ Connection.mockPgClass do
88
+ connection = Connection.new
89
+ assertEquals(MockPGconn.state[:statements], nil)
90
+ assertException(Sorry, "Oh no!") do
91
+ Transaction.new(connection) do
92
+ connection.exec("foo")
93
+ assertEquals(MockPGconn.state[:statements],
94
+ ["begin transaction", "foo"])
95
+ raise Sorry, "Oh no!"
96
+ end
97
+ end
98
+ assertEquals(MockPGconn.state[:statements],
99
+ ["begin transaction", "foo", "abort transaction"])
100
+ end
101
+ end
102
+
103
+ def testException
104
+ Connection.mockPgClass do
105
+ connection = Connection.new
106
+ assertEquals(MockPGconn.state[:statements], nil)
107
+ assertException(Sorry, "Oh no!") do
108
+ Transaction.new(connection) do
109
+ connection.exec("foo")
110
+ assertEquals(MockPGconn.state[:statements],
111
+ ["begin transaction", "foo"])
112
+ raise Sorry, "Oh no!"
113
+ end
114
+ end
115
+ assertEquals(MockPGconn.state[:statements],
116
+ ["begin transaction", "foo", "abort transaction"])
117
+ end
118
+ end
119
+
120
+ def testRuntimeError_Real
121
+ makeTestConnection do |connection|
122
+ connection.exec("create temporary table #{table1} (i int)")
123
+ assertException(RuntimeError, "Oh no!") do
124
+ Transaction.new(connection) do
125
+ connection.exec("insert into #{table1} values (1)")
126
+ assertEquals(connection.query("select i from #{table1}"),
127
+ [["1"]])
128
+ raise "Oh no!"
129
+ end
130
+ end
131
+ assertEquals(connection.query("select i from #{table1}"), [])
132
+ end
133
+ end
134
+
135
+ def testManualCommit
136
+ Connection.mockPgClass do
137
+ connection = Connection.new
138
+ assertEquals(MockPGconn.state[:statements], nil)
139
+ Transaction.new(connection) do |transaction|
140
+ connection.exec("foo")
141
+ transaction.commit
142
+ assertEquals(MockPGconn.state[:statements],
143
+ ["begin transaction", "foo", "end transaction"])
144
+ end
145
+ assertEquals(MockPGconn.state[:statements],
146
+ ["begin transaction", "foo", "end transaction"])
147
+ end
148
+ end
149
+
150
+ def testManualCommitTwice
151
+ Connection.mockPgClass do
152
+ connection = Connection.new
153
+ assertEquals(MockPGconn.state[:statements], nil)
154
+ Transaction.new(connection) do |transaction|
155
+ connection.exec("foo")
156
+ transaction.commit
157
+ transaction.commit
158
+ assertEquals(MockPGconn.state[:statements],
159
+ ["begin transaction", "foo", "end transaction"])
160
+ end
161
+ assertEquals(MockPGconn.state[:statements],
162
+ ["begin transaction", "foo", "end transaction"])
163
+ end
164
+ end
165
+
166
+ def testManualAbortAfterCommit
167
+ Connection.mockPgClass do
168
+ connection = Connection.new
169
+ assertEquals(MockPGconn.state[:statements], nil)
170
+ Transaction.new(connection) do |transaction|
171
+ connection.exec("foo")
172
+ transaction.commit
173
+ transaction.abort
174
+ assertEquals(MockPGconn.state[:statements],
175
+ ["begin transaction", "foo", "end transaction"])
176
+ end
177
+ assertEquals(MockPGconn.state[:statements],
178
+ ["begin transaction", "foo", "end transaction"])
179
+ end
180
+ end
181
+
182
+ def testManualCommitWithException
183
+ Connection.mockPgClass do
184
+ connection = Connection.new
185
+ assertEquals(MockPGconn.state[:statements], nil)
186
+ begin
187
+ Transaction.new(connection) do |transaction|
188
+ connection.exec("foo")
189
+ transaction.commit
190
+ assertEquals(MockPGconn.state[:statements],
191
+ ["begin transaction", "foo", "end transaction"])
192
+ raise Sorry
193
+ end
194
+ rescue Sorry => e
195
+ end
196
+ assertEquals(MockPGconn.state[:statements],
197
+ ["begin transaction", "foo", "end transaction"])
198
+ end
199
+ end
200
+
201
+ def testManualAbort
202
+ Connection.mockPgClass do
203
+ connection = Connection.new
204
+ assertEquals(MockPGconn.state[:statements], nil)
205
+ Transaction.new(connection) do |transaction|
206
+ connection.exec("foo")
207
+ transaction.abort
208
+ assertEquals(MockPGconn.state[:statements],
209
+ ["begin transaction", "foo", "abort transaction"])
210
+ end
211
+ assertEquals(MockPGconn.state[:statements],
212
+ ["begin transaction", "foo", "abort transaction"])
213
+ end
214
+ end
215
+
216
+ def testManualAbortTwice
217
+ Connection.mockPgClass do
218
+ connection = Connection.new
219
+ assertEquals(MockPGconn.state[:statements], nil)
220
+ Transaction.new(connection) do |transaction|
221
+ connection.exec("foo")
222
+ transaction.abort
223
+ transaction.abort
224
+ assertEquals(MockPGconn.state[:statements],
225
+ ["begin transaction", "foo", "abort transaction"])
226
+ end
227
+ assertEquals(MockPGconn.state[:statements],
228
+ ["begin transaction", "foo", "abort transaction"])
229
+ end
230
+ end
231
+
232
+ def testManualCommitAfterAbort
233
+ Connection.mockPgClass do
234
+ connection = Connection.new
235
+ assertEquals(MockPGconn.state[:statements], nil)
236
+ Transaction.new(connection) do |transaction|
237
+ connection.exec("foo")
238
+ transaction.abort
239
+ transaction.commit
240
+ assertEquals(MockPGconn.state[:statements],
241
+ ["begin transaction", "foo", "abort transaction"])
242
+ end
243
+ assertEquals(MockPGconn.state[:statements],
244
+ ["begin transaction", "foo", "abort transaction"])
245
+ end
246
+ end
247
+
248
+ def testManualAbortWithException
249
+ Connection.mockPgClass do
250
+ connection = Connection.new
251
+ assertEquals(MockPGconn.state[:statements], nil)
252
+ begin
253
+ Transaction.new(connection) do |transaction|
254
+ connection.exec("foo")
255
+ transaction.abort
256
+ assertEquals(MockPGconn.state[:statements],
257
+ ["begin transaction", "foo", "abort transaction"])
258
+ raise Sorry
259
+ end
260
+ rescue Sorry => e
261
+ end
262
+ assertEquals(MockPGconn.state[:statements],
263
+ ["begin transaction", "foo", "abort transaction"])
264
+ end
265
+ end
266
+
267
+ end
268
+
269
+ TransactionTest.new.run if $0 == __FILE__
270
+
271
+ # Local Variables:
272
+ # tab-width: 2
273
+ # ruby-indent-level: 2
274
+ # indent-tabs-mode: nil
275
+ # End: