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.
- data/Gemfile +8 -0
- data/Gemfile.lock +22 -0
- data/LICENSE.md +23 -0
- data/README.rdoc +59 -0
- data/Rakefile +32 -0
- data/VERSION +1 -0
- data/doc/BUGS +2 -0
- data/doc/examples/README +6 -0
- data/doc/examples/connection.rb +16 -0
- data/doc/examples/connection_auto.rb +22 -0
- data/doc/examples/connection_ctor.rb +18 -0
- data/doc/examples/connection_default.rb +15 -0
- data/doc/examples/connection_exec.rb +18 -0
- data/doc/examples/connection_manual.rb +12 -0
- data/doc/examples/connection_wrapped_new.rb +13 -0
- data/doc/examples/connection_wrapped_open.rb +13 -0
- data/doc/examples/cursor.rb +38 -0
- data/doc/examples/include_module.rb +9 -0
- data/doc/examples/include_module2.rb +12 -0
- data/doc/examples/insert.rb +30 -0
- data/doc/examples/insert2.rb +36 -0
- data/doc/examples/insert_bytea.rb +16 -0
- data/doc/examples/insert_bytea_array.rb +17 -0
- data/doc/examples/insert_default_values.rb +16 -0
- data/doc/examples/insert_insert.rb +16 -0
- data/doc/examples/insert_insert_default.rb +16 -0
- data/doc/examples/insert_insert_select.rb +20 -0
- data/doc/examples/insert_select.rb +20 -0
- data/doc/examples/interval.rb +17 -0
- data/doc/examples/savepoint.rb +38 -0
- data/doc/examples/select.rb +33 -0
- data/doc/examples/select2.rb +36 -0
- data/doc/examples/select_cross_join.rb +18 -0
- data/doc/examples/select_distinct.rb +18 -0
- data/doc/examples/select_distinct_on +19 -0
- data/doc/examples/select_for_update.rb +18 -0
- data/doc/examples/select_from.rb +17 -0
- data/doc/examples/select_from_subselect.rb +20 -0
- data/doc/examples/select_group_by.rb +19 -0
- data/doc/examples/select_having.rb +20 -0
- data/doc/examples/select_join_on.rb +18 -0
- data/doc/examples/select_join_using.rb +18 -0
- data/doc/examples/select_limit.rb +19 -0
- data/doc/examples/select_natural_join.rb +18 -0
- data/doc/examples/select_offset.rb +19 -0
- data/doc/examples/select_order_by.rb +20 -0
- data/doc/examples/select_select.rb +30 -0
- data/doc/examples/select_select_alias.rb +30 -0
- data/doc/examples/select_select_expression.rb +31 -0
- data/doc/examples/select_select_literal.rb +24 -0
- data/doc/examples/select_union.rb +21 -0
- data/doc/examples/select_where_array.rb +18 -0
- data/doc/examples/select_where_in.rb +18 -0
- data/doc/examples/select_where_string.rb +18 -0
- data/doc/examples/simple.rb +34 -0
- data/doc/examples/transaction.rb +30 -0
- data/doc/examples/transaction_abort.rb +30 -0
- data/doc/examples/transaction_commit.rb +34 -0
- data/doc/examples/translate_substitute_values.rb +17 -0
- data/doc/examples/update.rb +32 -0
- data/doc/examples/update2.rb +44 -0
- data/doc/examples/update_only.rb +17 -0
- data/doc/examples/update_set.rb +17 -0
- data/doc/examples/update_set_array.rb +16 -0
- data/doc/examples/update_set_bytea.rb +16 -0
- data/doc/examples/update_set_expression.rb +16 -0
- data/doc/examples/update_set_subselect.rb +20 -0
- data/doc/examples/update_where.rb +17 -0
- data/doc/examples/use_prefix.rb +8 -0
- data/doc/examples/use_prefix2.rb +11 -0
- data/doc/index.html +31 -0
- data/doc/insertexamples.rb +9 -0
- data/doc/makemanual +4 -0
- data/doc/makerdoc +5 -0
- data/doc/manual.dbk +622 -0
- data/lib/sqlpostgres/Connection.rb +198 -0
- data/lib/sqlpostgres/Cursor.rb +157 -0
- data/lib/sqlpostgres/Delete.rb +67 -0
- data/lib/sqlpostgres/Exceptions.rb +15 -0
- data/lib/sqlpostgres/Insert.rb +279 -0
- data/lib/sqlpostgres/NullConnection.rb +22 -0
- data/lib/sqlpostgres/PgBit.rb +73 -0
- data/lib/sqlpostgres/PgBox.rb +37 -0
- data/lib/sqlpostgres/PgCidr.rb +21 -0
- data/lib/sqlpostgres/PgCircle.rb +75 -0
- data/lib/sqlpostgres/PgInet.rb +21 -0
- data/lib/sqlpostgres/PgInterval.rb +208 -0
- data/lib/sqlpostgres/PgLineSegment.rb +37 -0
- data/lib/sqlpostgres/PgMacAddr.rb +21 -0
- data/lib/sqlpostgres/PgPath.rb +64 -0
- data/lib/sqlpostgres/PgPoint.rb +65 -0
- data/lib/sqlpostgres/PgPolygon.rb +56 -0
- data/lib/sqlpostgres/PgTime.rb +77 -0
- data/lib/sqlpostgres/PgTimeWithTimeZone.rb +98 -0
- data/lib/sqlpostgres/PgTimestamp.rb +93 -0
- data/lib/sqlpostgres/PgTwoPoints.rb +54 -0
- data/lib/sqlpostgres/PgType.rb +34 -0
- data/lib/sqlpostgres/PgWrapper.rb +41 -0
- data/lib/sqlpostgres/Savepoint.rb +98 -0
- data/lib/sqlpostgres/Select.rb +855 -0
- data/lib/sqlpostgres/Transaction.rb +120 -0
- data/lib/sqlpostgres/Translate.rb +436 -0
- data/lib/sqlpostgres/Update.rb +188 -0
- data/lib/sqlpostgres.rb +67 -0
- data/test/Assert.rb +72 -0
- data/test/Connection.test.rb +246 -0
- data/test/Cursor.test.rb +190 -0
- data/test/Delete.test.rb +68 -0
- data/test/Insert.test.rb +123 -0
- data/test/MockPGconn.rb +62 -0
- data/test/NullConnection.test.rb +32 -0
- data/test/PgBit.test.rb +98 -0
- data/test/PgBox.test.rb +108 -0
- data/test/PgCidr.test.rb +61 -0
- data/test/PgCircle.test.rb +107 -0
- data/test/PgInet.test.rb +61 -0
- data/test/PgInterval.test.rb +180 -0
- data/test/PgLineSegment.test.rb +108 -0
- data/test/PgMacAddr.test.rb +61 -0
- data/test/PgPath.test.rb +106 -0
- data/test/PgPoint.test.rb +100 -0
- data/test/PgPolygon.test.rb +95 -0
- data/test/PgTime.test.rb +120 -0
- data/test/PgTimeWithTimeZone.test.rb +117 -0
- data/test/PgTimestamp.test.rb +134 -0
- data/test/RandomThings.rb +25 -0
- data/test/Savepoint.test.rb +286 -0
- data/test/Select.test.rb +930 -0
- data/test/Test.rb +62 -0
- data/test/TestConfig.rb +21 -0
- data/test/TestSetup.rb +13 -0
- data/test/TestUtil.rb +92 -0
- data/test/Transaction.test.rb +275 -0
- data/test/Translate.test.rb +354 -0
- data/test/Update.test.rb +227 -0
- data/test/roundtrip.test.rb +565 -0
- data/test/test +34 -0
- data/tools/exampleinserter/ExampleInserter.rb +177 -0
- data/tools/rdoc/ChangeLog +796 -0
- data/tools/rdoc/EXAMPLE.rb +48 -0
- data/tools/rdoc/MANIFEST +58 -0
- data/tools/rdoc/Makefile +27 -0
- data/tools/rdoc/NEW_FEATURES +226 -0
- data/tools/rdoc/README +390 -0
- data/tools/rdoc/ToDo +6 -0
- data/tools/rdoc/contrib/Index +6 -0
- data/tools/rdoc/contrib/xslfo/ChangeLog +181 -0
- data/tools/rdoc/contrib/xslfo/README +106 -0
- data/tools/rdoc/contrib/xslfo/TODO +10 -0
- data/tools/rdoc/contrib/xslfo/convert.xsl +151 -0
- data/tools/rdoc/contrib/xslfo/demo/README +21 -0
- data/tools/rdoc/contrib/xslfo/demo/rdocfo +99 -0
- data/tools/rdoc/contrib/xslfo/fcm.xsl +54 -0
- data/tools/rdoc/contrib/xslfo/files.xsl +62 -0
- data/tools/rdoc/contrib/xslfo/labeled-lists.xsl +66 -0
- data/tools/rdoc/contrib/xslfo/lists.xsl +44 -0
- data/tools/rdoc/contrib/xslfo/modules.xsl +152 -0
- data/tools/rdoc/contrib/xslfo/rdoc.xsl +75 -0
- data/tools/rdoc/contrib/xslfo/source.xsl +66 -0
- data/tools/rdoc/contrib/xslfo/styles.xsl +69 -0
- data/tools/rdoc/contrib/xslfo/tables.xsl +67 -0
- data/tools/rdoc/contrib/xslfo/utils.xsl +21 -0
- data/tools/rdoc/debian/changelog +33 -0
- data/tools/rdoc/debian/compat +1 -0
- data/tools/rdoc/debian/control +20 -0
- data/tools/rdoc/debian/copyright +10 -0
- data/tools/rdoc/debian/dirs +2 -0
- data/tools/rdoc/debian/docs +2 -0
- data/tools/rdoc/debian/rdoc.1 +252 -0
- data/tools/rdoc/debian/rdoc.manpages +1 -0
- data/tools/rdoc/debian/rdoc.pod +149 -0
- data/tools/rdoc/debian/rules +9 -0
- data/tools/rdoc/dot/dot.rb +255 -0
- data/tools/rdoc/etc/rdoc.dtd +203 -0
- data/tools/rdoc/install.rb +137 -0
- data/tools/rdoc/markup/install.rb +43 -0
- data/tools/rdoc/markup/sample/sample.rb +42 -0
- data/tools/rdoc/markup/simple_markup/fragments.rb +323 -0
- data/tools/rdoc/markup/simple_markup/inline.rb +348 -0
- data/tools/rdoc/markup/simple_markup/lines.rb +147 -0
- data/tools/rdoc/markup/simple_markup/preprocess.rb +68 -0
- data/tools/rdoc/markup/simple_markup/to_html.rb +281 -0
- data/tools/rdoc/markup/simple_markup.rb +474 -0
- data/tools/rdoc/markup/test/AllTests.rb +2 -0
- data/tools/rdoc/markup/test/TestInline.rb +151 -0
- data/tools/rdoc/markup/test/TestParse.rb +411 -0
- data/tools/rdoc/rdoc/code_objects.rb +536 -0
- data/tools/rdoc/rdoc/diagram.rb +331 -0
- data/tools/rdoc/rdoc/generators/chm_generator.rb +112 -0
- data/tools/rdoc/rdoc/generators/html_generator.rb +1268 -0
- data/tools/rdoc/rdoc/generators/template/chm/chm.rb +86 -0
- data/tools/rdoc/rdoc/generators/template/html/html.rb +705 -0
- data/tools/rdoc/rdoc/generators/template/html/kilmer.rb +377 -0
- data/tools/rdoc/rdoc/generators/template/xml/rdf.rb +110 -0
- data/tools/rdoc/rdoc/generators/template/xml/xml.rb +110 -0
- data/tools/rdoc/rdoc/generators/xml_generator.rb +130 -0
- data/tools/rdoc/rdoc/options.rb +451 -0
- data/tools/rdoc/rdoc/parsers/parse_c.rb +287 -0
- data/tools/rdoc/rdoc/parsers/parse_f95.rb +118 -0
- data/tools/rdoc/rdoc/parsers/parse_rb.rb +2311 -0
- data/tools/rdoc/rdoc/parsers/parse_simple.rb +37 -0
- data/tools/rdoc/rdoc/parsers/parserfactory.rb +75 -0
- data/tools/rdoc/rdoc/rdoc.rb +219 -0
- data/tools/rdoc/rdoc/template.rb +234 -0
- data/tools/rdoc/rdoc/tokenstream.rb +25 -0
- data/tools/rdoc/rdoc.rb +9 -0
- 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:
|
data/test/TestConfig.rb
ADDED
|
@@ -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:
|