sqlite3-ironruby 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,126 @@
1
+ $:.unshift "../lib", "../ext/sqlite3_api"
2
+
3
+ require 'sqlite3'
4
+
5
+ require 'benchmark'
6
+
7
+ N = 1000
8
+
9
+ $VERBOSE=nil
10
+
11
+ puts "database creation..."
12
+ Benchmark.bm( 7 ) do |x|
13
+ x.report('dl') do
14
+ N.times do
15
+ File.delete "test.db" rescue nil
16
+ SQLite3::Database.open( "test.db", :driver => "DL" ).close
17
+ end
18
+ end
19
+ x.report('native') do
20
+ N.times do
21
+ File.delete "test.db" rescue nil
22
+ SQLite3::Database.open( "test.db", :driver => "Native" ).close
23
+ end
24
+ end
25
+ end
26
+ File.delete "test.db" rescue nil
27
+
28
+ SQLite3::Database.open( "test.db" ).close
29
+
30
+ puts
31
+ puts "database open..."
32
+ Benchmark.bm( 7 ) do |x|
33
+ x.report('dl') do
34
+ N.times do
35
+ SQLite3::Database.open( "test.db", :driver => "DL" ).close
36
+ end
37
+ end
38
+ x.report('native') do
39
+ N.times do
40
+ SQLite3::Database.open( "test.db", :driver => "Native" ).close
41
+ end
42
+ end
43
+ end
44
+ File.delete "test.db" rescue nil
45
+
46
+ dl = SQLite3::Database.open( "test-dl.db", :driver => "DL" )
47
+ native = SQLite3::Database.open( "test-native.db", :driver => "Native" )
48
+
49
+ dl.execute "create table foo (a,b)"
50
+ native.execute "create table foo (a,b)"
51
+
52
+ puts
53
+ puts "insertions"
54
+ Benchmark.bm( 7 ) do |x|
55
+ x.report('dl') do
56
+ dl.transaction do
57
+ N.times do |i|
58
+ dl.execute "insert into foo values (#{i}, #{i+1})"
59
+ end
60
+ end
61
+ end
62
+ x.report('native') do
63
+ native.transaction do
64
+ N.times do |i|
65
+ native.execute "insert into foo values (#{i}, #{i+1})"
66
+ end
67
+ end
68
+ end
69
+ end
70
+
71
+ puts
72
+ puts "insertions using prepared statement"
73
+ Benchmark.bm( 7 ) do |x|
74
+ x.report('dl') do
75
+ dl.transaction do
76
+ dl.prepare "insert into foo values (?,?)" do |stmt|
77
+ N.times { |i| stmt.execute i, i+1 }
78
+ end
79
+ end
80
+ end
81
+ x.report('native') do
82
+ native.transaction do
83
+ native.prepare( "insert into foo values (?,?)" ) do |stmt|
84
+ N.times { |i| stmt.execute i, i+1 }
85
+ end
86
+ end
87
+ end
88
+ end
89
+
90
+ dl.close
91
+ native.close
92
+ File.delete "test-dl.db" rescue nil
93
+ File.delete "test-native.db" rescue nil
94
+
95
+ dl = SQLite3::Database.open( "test-dl.db", :driver => "DL" )
96
+ native = SQLite3::Database.open( "test-native.db", :driver => "Native" )
97
+
98
+ dl.execute "create table foo (a,b)"
99
+ dl.execute "insert into foo values (1,2)"
100
+ dl.execute "insert into foo values (3,4)"
101
+ dl.execute "insert into foo values (5,6)"
102
+
103
+ native.execute "create table foo (a,b)"
104
+ native.execute "insert into foo values (1,2)"
105
+ native.execute "insert into foo values (3,4)"
106
+ native.execute "insert into foo values (5,6)"
107
+
108
+ puts
109
+ puts "queries"
110
+ Benchmark.bm( 7 ) do |x|
111
+ x.report('dl') do
112
+ N.times do
113
+ dl.execute "select * from foo"
114
+ end
115
+ end
116
+ x.report('native') do
117
+ N.times do
118
+ native.execute "select * from foo"
119
+ end
120
+ end
121
+ end
122
+
123
+ dl.close
124
+ native.close
125
+ File.delete "test-dl.db" rescue nil
126
+ File.delete "test-native.db" rescue nil
@@ -0,0 +1,198 @@
1
+ $:.unshift "../lib"
2
+
3
+ require 'sqlite3/database'
4
+ require 'test/unit'
5
+
6
+ require 'mocks'
7
+
8
+ class TC_Database_Init < Test::Unit::TestCase
9
+ def test_new
10
+ # any_instance fails here...
11
+ driver = Driver.new
12
+ driver.expects(:open).once.with('foo.db', false).returns([0, 'cookie'])
13
+ Driver.stubs(:new).returns(driver)
14
+ db = SQLite3::Database.new( 'foo.db', :driver => Driver )
15
+ assert !db.closed?
16
+ assert !db.results_as_hash
17
+ assert !db.type_translation
18
+ end
19
+
20
+ def test_open
21
+ driver = Driver.new
22
+ driver.expects(:open).once.with('foo.db', false).returns([0, 'cookie'])
23
+ Driver.stubs(:new).returns(driver)
24
+ db = SQLite3::Database.open( "foo.db", :driver => Driver )
25
+ assert !db.closed?
26
+ assert !db.results_as_hash
27
+ assert !db.type_translation
28
+ end
29
+
30
+ def test_with_type_translation
31
+ db = SQLite3::Database.open( "foo.db", :driver => Driver,
32
+ :type_translation => true )
33
+ assert db.type_translation
34
+ end
35
+
36
+ def test_with_results_as_hash
37
+ db = SQLite3::Database.open( "foo.db", :driver => Driver,
38
+ :results_as_hash => true )
39
+ assert db.results_as_hash
40
+ end
41
+
42
+ def test_with_type_translation_and_results_as_hash
43
+ db = SQLite3::Database.open( "foo.db", :driver => Driver,
44
+ :results_as_hash => true,
45
+ :type_translation => true )
46
+ assert db.results_as_hash
47
+ assert db.type_translation
48
+ end
49
+ end
50
+
51
+ class TC_Database < Test::Unit::TestCase
52
+ def setup
53
+ @db = SQLite3::Database.open( "foo.db",
54
+ :driver => Driver, :statement_factory => Statement )
55
+ end
56
+
57
+ def test_quote
58
+ assert_equal "''one''two''three''", SQLite3::Database.quote(
59
+ "'one'two'three'" )
60
+ end
61
+
62
+ def test_complete
63
+ Driver.any_instance.expects(:complete?)
64
+ @db.complete? "foo"
65
+ end
66
+
67
+ def test_errmsg
68
+ Driver.any_instance.expects(:errmsg)
69
+ @db.errmsg
70
+ end
71
+
72
+ def test_errcode
73
+ Driver.any_instance.expects(:errcode)
74
+ @db.errcode
75
+ end
76
+
77
+ def test_translator
78
+ translator = @db.translator
79
+ assert_instance_of SQLite3::Translator, translator
80
+ end
81
+
82
+ def test_close
83
+ Driver.any_instance.expects(:close).returns(0)
84
+ @db.close
85
+ assert @db.closed?
86
+ Driver.any_instance.expects(:close).never
87
+ @db.close
88
+ end
89
+
90
+ #def test_trace
91
+ # Driver.any_instance.expects(:trace).with('cookie', 15)
92
+ # @db.trace( 15 ) { "foo" }
93
+ # # assert_equal 1, driver.mock_blocks[:trace].length
94
+ #end
95
+
96
+ #def test_authorizer
97
+ # Driver.any_instance.expects(:set_authorizer).with('cookie', 15).returns(0)
98
+ # @db.authorizer( 15 ) { "foo" }
99
+ # # assert_equal 1, driver.mock_blocks[:set_authorizer].length
100
+ #end
101
+
102
+ def test_prepare_no_block
103
+ Statement.any_instance.expects(:close).never
104
+ assert_nothing_raised { @db.prepare( "foo" ) }
105
+ end
106
+
107
+ def test_prepare_with_block
108
+ called = false
109
+ # any_instance fails here...
110
+ statement = Statement.new('cookie', 'foo')
111
+ statement.expects(:close).once
112
+ Statement.stubs(:new).returns(statement)
113
+ @db.prepare( "foo" ) { |stmt| called = true }
114
+ assert called
115
+ end
116
+
117
+ def test_execute_no_block
118
+ # any_instance fails here...
119
+ statement = Statement.new('cookie', 'foo')
120
+ statement.expects(:execute).with('bar', 'baz').returns(MockResultSet.new)
121
+ Statement.stubs(:new).returns(statement)
122
+ MockResultSet.any_instance.stubs(:inject).returns([['foo']])
123
+ result = @db.execute( "foo", "bar", "baz" )
124
+ assert_equal [["foo"]], result
125
+ end
126
+
127
+ def test_execute_with_block
128
+ called = false
129
+ # any_instance fails here...
130
+ statement = Statement.new('cookie', 'foo')
131
+ statement.expects(:execute).with('bar', 'baz').returns(MockResultSet.new)
132
+ Statement.stubs(:new).returns(statement)
133
+ @db.execute( "foo", "bar", "baz" ) do |row|
134
+ called = true
135
+ assert_equal ["foo"], row
136
+ end
137
+
138
+ assert called
139
+ end
140
+
141
+ def test_execute2_no_block
142
+ # any_instance fails here...
143
+ statement = Statement.new('cookie', 'foo')
144
+ statement.expects(:execute).with('bar', 'baz').returns(MockResultSet.new)
145
+ Statement.stubs(:new).returns(statement)
146
+ MockResultSet.any_instance.stubs(:inject).returns([['name'], ['foo']])
147
+ result = @db.execute2( "foo", "bar", "baz" )
148
+ assert_equal [["name"],["foo"]], result
149
+ end
150
+
151
+ def test_execute2_with_block
152
+ called = false
153
+ parts = [ ["name"],["foo"] ]
154
+ # any_instance fails here...
155
+ statement = Statement.new('cookie', 'foo')
156
+ statement.expects(:execute).with('bar', 'baz').returns(MockResultSet.new)
157
+ Statement.stubs(:new).returns(statement)
158
+ @db.execute2( "foo", "bar", "baz" ) do |row|
159
+ called = true
160
+ assert_equal parts.shift, row
161
+ end
162
+
163
+ assert called
164
+ end
165
+
166
+ def test_execute_batch
167
+ # any_instance fails here...
168
+ statement = Statement.new('cookie', 'foo')
169
+ statement.expects(:execute).with('bar', 'baz').returns(MockResultSet.new)
170
+ Statement.stubs(:new).returns(statement)
171
+ @db.execute_batch( "foo", "bar", "baz" )
172
+ end
173
+
174
+ def test_get_first_row
175
+ result = @db.get_first_row( "foo", "bar", "baz" )
176
+ assert_equal ["foo"], result
177
+ end
178
+
179
+ def test_get_first_value
180
+ result = @db.get_first_value( "foo", "bar", "baz" )
181
+ assert_equal "foo", result
182
+ end
183
+
184
+ def test_changes
185
+ Driver.any_instance.expects(:changes).returns(14)
186
+ assert_equal 14, @db.changes
187
+ end
188
+
189
+ def test_total_changes
190
+ Driver.any_instance.expects(:total_changes).returns(28)
191
+ assert_equal 28, @db.total_changes
192
+ end
193
+
194
+ def test_interrupt
195
+ Driver.any_instance.expects(:interrupt)
196
+ @db.interrupt
197
+ end
198
+ end
data/test/tc_errors.rb ADDED
@@ -0,0 +1,21 @@
1
+ $:.unshift "../lib"
2
+
3
+ require 'sqlite3/errors'
4
+ require 'test/unit'
5
+ require 'mocha'
6
+
7
+ class TC_Errors < Test::Unit::TestCase
8
+ (1..26).each do |code|
9
+ define_method( "test_error_code_%02d" % code ) do
10
+ db = stub('database', :errmsg => 'message')
11
+ begin
12
+ SQLite3::Error.check( code, db )
13
+ rescue SQLite3::Exception => e
14
+ assert_instance_of SQLite3::EXCEPTIONS[code], e
15
+ assert_equal code, e.code
16
+ assert_equal code, e.class.code
17
+ assert_equal "message", e.message
18
+ end
19
+ end
20
+ end
21
+ end