sqlite3-ruby 1.2.3-x86-mingw32 → 1.2.5-x86-mingw32

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 (43) hide show
  1. data/ChangeLog.cvs +88 -0
  2. data/History.txt +68 -0
  3. data/LICENSE +27 -0
  4. data/Manifest.txt +41 -0
  5. data/{README.rdoc → README.txt} +6 -1
  6. data/Rakefile +5 -0
  7. data/ext/sqlite3_api/extconf.rb +3 -9
  8. data/ext/sqlite3_api/sqlite3_api.i +4 -0
  9. data/ext/sqlite3_api/sqlite3_api_wrap.c +4977 -3053
  10. data/{doc/faq → faq}/faq.rb +0 -0
  11. data/{doc/faq → faq}/faq.yml +0 -0
  12. data/lib/1.8/sqlite3_api.so +0 -0
  13. data/lib/1.9/sqlite3_api.so +0 -0
  14. data/lib/sqlite3/database.rb +13 -7
  15. data/lib/sqlite3/driver/dl/api.rb +1 -1
  16. data/lib/sqlite3/driver/native/driver.rb +9 -1
  17. data/lib/sqlite3/resultset.rb +5 -1
  18. data/lib/sqlite3/statement.rb +3 -2
  19. data/lib/sqlite3/version.rb +4 -2
  20. data/setup.rb +1333 -0
  21. data/tasks/benchmark.rake +9 -0
  22. data/tasks/faq.rake +9 -0
  23. data/tasks/gem.rake +32 -0
  24. data/tasks/native.rake +35 -0
  25. data/tasks/vendor_sqlite3.rake +104 -0
  26. data/test/{mocks.rb → helper.rb} +23 -1
  27. data/test/{tc_database.rb → test_database.rb} +25 -6
  28. data/test/{tc_errors.rb → test_errors.rb} +1 -5
  29. data/test/test_integration.rb +542 -0
  30. data/test/test_integration_open_close.rb +30 -0
  31. data/test/test_integration_pending.rb +111 -0
  32. data/test/test_integration_resultset.rb +159 -0
  33. data/test/test_integration_statement.rb +195 -0
  34. metadata +90 -43
  35. data/doc/faq/faq.html +0 -408
  36. data/ext/sqlite3_api/MANIFEST +0 -4
  37. data/ext/sqlite3_api/Makefile +0 -142
  38. data/ext/sqlite3_api/mkmf.log +0 -66
  39. data/ext/sqlite3_api/sqlite3_api.so +0 -0
  40. data/ext/sqlite3_api/sqlite3_api_wrap.o +0 -0
  41. data/ext/sqlite3_api/win32/build.bat +0 -7
  42. data/test/tc_integration.rb +0 -1044
  43. data/test/tests.rb +0 -6
@@ -1,4 +0,0 @@
1
- extconf.rb
2
- post-clean.rb
3
- post-distclean.rb
4
- sqlite3_api.i
@@ -1,142 +0,0 @@
1
-
2
- SHELL = /bin/sh
3
-
4
- #### Start of system configuration section. ####
5
-
6
- srcdir = .
7
- topdir = c:/ruby18/lib/ruby/1.8/i386-mingw32
8
- hdrdir = $(topdir)
9
- VPATH = $(srcdir);$(topdir);$(hdrdir)
10
-
11
- DESTDIR = c:
12
- prefix = $(DESTDIR)/ruby18
13
- exec_prefix = $(prefix)
14
- sitedir = $(prefix)/lib/ruby/site_ruby
15
- rubylibdir = $(libdir)/ruby/$(ruby_version)
16
- archdir = $(rubylibdir)/$(arch)
17
- sbindir = $(exec_prefix)/sbin
18
- datadir = $(prefix)/share
19
- includedir = $(prefix)/include
20
- infodir = $(prefix)/info
21
- sysconfdir = $(prefix)/etc
22
- mandir = $(prefix)/man
23
- libdir = $(exec_prefix)/lib
24
- sharedstatedir = $(prefix)/com
25
- oldincludedir = $(DESTDIR)/usr/include
26
- sitearchdir = $(sitelibdir)/$(sitearch)
27
- bindir = $(exec_prefix)/bin
28
- localstatedir = $(prefix)/var
29
- sitelibdir = $(sitedir)/$(ruby_version)
30
- libexecdir = $(exec_prefix)/libexec
31
-
32
- CC = gcc
33
- LIBRUBY = lib$(LIBRUBY_SO).a
34
- LIBRUBY_A = lib$(RUBY_SO_NAME)-static.a
35
- LIBRUBYARG_SHARED = -l$(RUBY_SO_NAME)
36
- LIBRUBYARG_STATIC = -l$(RUBY_SO_NAME)-static
37
-
38
- RUBY_EXTCONF_H =
39
- CFLAGS = -g -O2
40
- INCFLAGS = -I. -I. -Ic:/ruby18/lib/ruby/1.8/i386-mingw32 -I.
41
- DEFS =
42
- CPPFLAGS = -DHAVE_SQLITE3_H -Ic:/src/include
43
- CXXFLAGS = $(CFLAGS)
44
- DLDFLAGS = -L. -Wl,--enable-auto-image-base,--enable-auto-import,--export-all
45
- LDSHARED = gcc -shared -s
46
- AR = ar
47
- EXEEXT = .exe
48
-
49
- RUBY_INSTALL_NAME = ruby
50
- RUBY_SO_NAME = msvcrt-ruby18
51
- arch = i386-mingw32
52
- sitearch = i386-msvcrt
53
- ruby_version = 1.8
54
- ruby = c:/ruby18/bin/ruby
55
- RUBY = $(ruby)
56
- RM = rm -f
57
- MAKEDIRS = mkdir -p
58
- INSTALL = /bin/install -c
59
- INSTALL_PROG = $(INSTALL) -m 0755
60
- INSTALL_DATA = $(INSTALL) -m 644
61
- COPY = cp
62
-
63
- #### End of system configuration section. ####
64
-
65
- preload =
66
-
67
- libpath = . $(libdir) c:/src/lib
68
- LIBPATH = -L. -L$(libdir) -Lc:/src/lib
69
- DEFFILE =
70
-
71
- CLEANFILES = mkmf.log
72
- DISTCLEANFILES =
73
-
74
- extout =
75
- extout_prefix =
76
- target_prefix =
77
- LOCAL_LIBS =
78
- LIBS = $(LIBRUBYARG_SHARED) -lsqlite3 -lshell32 -lws2_32
79
- SRCS = sqlite3_api_wrap.c
80
- OBJS = sqlite3_api_wrap.o
81
- TARGET = sqlite3_api
82
- DLLIB = $(TARGET).so
83
- EXTSTATIC =
84
- STATIC_LIB =
85
-
86
- RUBYCOMMONDIR = $(sitedir)$(target_prefix)
87
- RUBYLIBDIR = $(sitelibdir)$(target_prefix)
88
- RUBYARCHDIR = $(sitearchdir)$(target_prefix)
89
-
90
- TARGET_SO = $(DLLIB)
91
- CLEANLIBS = $(TARGET).so $(TARGET).il? $(TARGET).tds $(TARGET).map
92
- CLEANOBJS = *.o *.a *.s[ol] *.pdb *.exp *.bak
93
-
94
- all: $(DLLIB)
95
- static: $(STATIC_LIB)
96
-
97
- clean:
98
- @-$(RM) $(CLEANLIBS) $(CLEANOBJS) $(CLEANFILES)
99
-
100
- distclean: clean
101
- @-$(RM) Makefile $(RUBY_EXTCONF_H) conftest.* mkmf.log
102
- @-$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES)
103
-
104
- realclean: distclean
105
- install: install-so install-rb
106
-
107
- install-so: $(RUBYARCHDIR)
108
- install-so: $(RUBYARCHDIR)/$(DLLIB)
109
- $(RUBYARCHDIR)/$(DLLIB): $(DLLIB)
110
- $(INSTALL_PROG) $(DLLIB) $(RUBYARCHDIR)
111
- install-rb: pre-install-rb install-rb-default
112
- install-rb-default: pre-install-rb-default
113
- pre-install-rb: Makefile
114
- pre-install-rb-default: Makefile
115
- $(RUBYARCHDIR):
116
- $(MAKEDIRS) $@
117
-
118
- site-install: site-install-so site-install-rb
119
- site-install-so: install-so
120
- site-install-rb: install-rb
121
-
122
- .SUFFIXES: .c .m .cc .cxx .cpp .o
123
-
124
- .cc.o:
125
- $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $<
126
-
127
- .cxx.o:
128
- $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $<
129
-
130
- .cpp.o:
131
- $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $<
132
-
133
- .c.o:
134
- $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) -c $<
135
-
136
- $(DLLIB): $(OBJS)
137
- @-$(RM) $@
138
- $(LDSHARED) -o $@ $(OBJS) $(LIBPATH) $(DLDFLAGS) $(LOCAL_LIBS) $(LIBS)
139
-
140
-
141
-
142
- $(OBJS): ruby.h defines.h
@@ -1,66 +0,0 @@
1
- have_library: checking for fdatasync() in -lrt... -------------------- no
2
-
3
- "gcc -o conftest -I. -Ic:/ruby18/lib/ruby/1.8/i386-mingw32 -I. -Ic:/src/include -g -O2 conftest.c -L. -Lc:/ruby18/lib -Lc:/src/lib -L. -lmsvcrt-ruby18-static -lrt -lshell32 -lws2_32 "
4
- conftest.c: In function `t':
5
- conftest.c:6: error: `fdatasync' undeclared (first use in this function)
6
- conftest.c:6: error: (Each undeclared identifier is reported only once
7
- conftest.c:6: error: for each function it appears in.)
8
- checked program was:
9
- /* begin */
10
- 1: #include <windows.h>
11
- 2: #include <winsock.h>
12
- 3:
13
- 4: /*top*/
14
- 5: int main() { return 0; }
15
- 6: int t() { void ((*volatile p)()); p = (void ((*)()))fdatasync; return 0; }
16
- /* end */
17
-
18
- "gcc -o conftest -I. -Ic:/ruby18/lib/ruby/1.8/i386-mingw32 -I. -Ic:/src/include -g -O2 conftest.c -L. -Lc:/ruby18/lib -Lc:/src/lib -L. -lmsvcrt-ruby18-static -lrt -lshell32 -lws2_32 "
19
- C:\Ruby18\devkit\mingw\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\mingw32\bin\ld.exe: cannot find -lrt
20
- collect2: ld returned 1 exit status
21
- checked program was:
22
- /* begin */
23
- 1: /*top*/
24
- 2: int main() { return 0; }
25
- 3: int t() { fdatasync(); return 0; }
26
- /* end */
27
-
28
- --------------------
29
-
30
- have_header: checking for sqlite3.h... -------------------- yes
31
-
32
- "gcc -E -I. -Ic:/ruby18/lib/ruby/1.8/i386-mingw32 -I. -Ic:/src/include -g -O2 conftest.c -o conftest.i"
33
- checked program was:
34
- /* begin */
35
- 1: #include <sqlite3.h>
36
- /* end */
37
-
38
- --------------------
39
-
40
- have_library: checking for sqlite3_open() in -lsqlite3... -------------------- yes
41
-
42
- "gcc -o conftest -I. -Ic:/ruby18/lib/ruby/1.8/i386-mingw32 -I. -Ic:/src/include -g -O2 conftest.c -L. -Lc:/ruby18/lib -Lc:/src/lib -L. -lmsvcrt-ruby18-static -lsqlite3 -lshell32 -lws2_32 "
43
- conftest.c: In function `t':
44
- conftest.c:6: error: `sqlite3_open' undeclared (first use in this function)
45
- conftest.c:6: error: (Each undeclared identifier is reported only once
46
- conftest.c:6: error: for each function it appears in.)
47
- checked program was:
48
- /* begin */
49
- 1: #include <windows.h>
50
- 2: #include <winsock.h>
51
- 3:
52
- 4: /*top*/
53
- 5: int main() { return 0; }
54
- 6: int t() { void ((*volatile p)()); p = (void ((*)()))sqlite3_open; return 0; }
55
- /* end */
56
-
57
- "gcc -o conftest -I. -Ic:/ruby18/lib/ruby/1.8/i386-mingw32 -I. -Ic:/src/include -g -O2 conftest.c -L. -Lc:/ruby18/lib -Lc:/src/lib -L. -lmsvcrt-ruby18-static -lsqlite3 -lshell32 -lws2_32 "
58
- checked program was:
59
- /* begin */
60
- 1: /*top*/
61
- 2: int main() { return 0; }
62
- 3: int t() { sqlite3_open(); return 0; }
63
- /* end */
64
-
65
- --------------------
66
-
@@ -1,7 +0,0 @@
1
- REM This is not guaranteed to work, ever. It's just a little helper
2
- REM script that I threw together to help me build the win32 version of
3
- REM the library. If someone with more win32-fu than I wants to make
4
- REM something more robust, please feel free! I'd love to include it.
5
- REM -- Jamis Buck
6
-
7
- cl /LD /Ie:\WinSDK\Include /Ic:\ruby\lib\ruby\1.8\i386-mswin32 /Ic:\ruby\sqlite3 /Ic:\ruby\src\ruby-1.8.4_2006-04-14 sqlite3_api_wrap.c /link /LIBPATH:c:\ruby\sqlite3 /LIBPATH:e:\WinSDK\Lib /LIBPATH:c:\ruby\lib sqlite3.lib msvcrt-ruby18.lib
@@ -1,1044 +0,0 @@
1
- $:.unshift "#{File.dirname(__FILE__)}/../lib"
2
- $:.unshift "#{File.dirname(__FILE__)}/../ext/sqlite3_api"
3
-
4
- require 'test/unit'
5
- require 'benchmark'
6
- require 'sqlite3/database'
7
- require 'thread'
8
-
9
- class String
10
- def to_utf16(terminate=false)
11
- self.split(//).map { |c| c[0] }.pack("v*") +
12
- (terminate ? "\0\0" : "")
13
- end
14
-
15
- def from_utf16
16
- result = ""
17
- length.times do |i|
18
- result << self[i,1] if i % 2 == 0 && self[i] != 0
19
- end
20
- result
21
- end
22
- end
23
-
24
- module Integration
25
-
26
- drivers_to_test = ( ENV["SQLITE3_DRIVERS"] || "Native" ).split(',')
27
- drivers_to_test.each do |driver|
28
-
29
- # == TC_OpenClose =========================================================
30
-
31
- test_case = Class.new( Test::Unit::TestCase ) do
32
- define_method( "test_create_close" ) do
33
- begin
34
- db = SQLite3::Database.new( "test-create.db",
35
- :driver => driver )
36
- assert File.exist?( "test-create.db" )
37
- assert_nothing_raised { db.close }
38
- ensure
39
- File.delete( "test-create.db" ) rescue nil
40
- end
41
- end
42
-
43
- define_method( "test_open_close" ) do
44
- begin
45
- File.open( "test-open.db", "w" ) { |f| }
46
- assert File.exist?( "test-open.db" )
47
- db = SQLite3::Database.new( "test-open.db",
48
- :driver => driver )
49
- assert_nothing_raised { db.close }
50
- ensure
51
- File.delete( "test-open.db" ) rescue nil
52
- end
53
- end
54
-
55
- define_method( "test_bad_open" ) do
56
- assert_raise( SQLite3::CantOpenException ) do
57
- SQLite3::Database.new( ".", :driver => driver )
58
- end
59
- end
60
- end
61
- const_set( "TC_OpenClose_#{driver}", test_case )
62
-
63
- # == TC_Database ==========================================================
64
-
65
- test_case = Class.new( Test::Unit::TestCase ) do
66
- define_method( "setup" ) do
67
- @db = SQLite3::Database.new( "test.db", :driver=>driver )
68
- @db.transaction do
69
- @db.execute "create table foo ( a integer primary key, b text )"
70
- @db.execute "insert into foo ( b ) values ( 'foo' )"
71
- @db.execute "insert into foo ( b ) values ( 'bar' )"
72
- @db.execute "insert into foo ( b ) values ( 'baz' )"
73
- end
74
- end
75
-
76
- define_method( "teardown" ) do
77
- @db.close
78
- File.delete( "test.db" )
79
- end
80
-
81
- define_method( "test_table_info_with_type_translation_active" ) do
82
- @db.type_translation = true
83
- assert_nothing_raised { @db.table_info("foo") }
84
- end
85
-
86
- define_method( "test_table_info_with_defaults_for_version_3_3_8_and_higher" ) do
87
- @db.transaction do
88
- @db.execute "create table defaults_test ( a string default NULL, b string default 'Hello' )"
89
- data = @db.table_info( "defaults_test" )
90
- assert_equal({"name" => "a", "type" => "string", "dflt_value" => nil, "notnull" => "0", "cid" => "0", "pk" => "0"},
91
- data[0])
92
- assert_equal({"name" => "b", "type" => "string", "dflt_value" => "Hello", "notnull" => "0", "cid" => "1", "pk" => "0"},
93
- data[1])
94
- end
95
- end
96
-
97
- define_method( "test_table_info_without_defaults_for_version_3_3_8_and_higher" ) do
98
- @db.transaction do
99
- @db.execute "create table no_defaults_test ( a integer default 1, b integer )"
100
- data = @db.table_info( "no_defaults_test" )
101
- assert_equal({"name" => "a", "type" => "integer", "dflt_value" => "1", "notnull" => "0", "cid" => "0", "pk" => "0"},
102
- data[0])
103
- assert_equal({"name" => "b", "type" => "integer", "dflt_value" => nil, "notnull" => "0", "cid" => "1", "pk" => "0"},
104
- data[1])
105
- end
106
- end
107
-
108
- define_method( "test_complete_fail" ) do
109
- assert !@db.complete?( "select * from foo" )
110
- end
111
- define_method( "test_complete_success" ) do
112
- assert @db.complete?( "select * from foo;" )
113
- end
114
-
115
- define_method( "test_complete_fail_utf16" ) do
116
- assert !@db.complete?( "select * from foo".to_utf16(false), true )
117
- end
118
-
119
- define_method( "test_complete_success_utf16" ) do
120
- assert @db.complete?( "select * from foo;".to_utf16(true), true )
121
- end
122
-
123
- define_method( "test_errmsg" ) do
124
- assert_equal "not an error", @db.errmsg
125
- end
126
-
127
- define_method( "test_errmsg_utf16" ) do
128
- assert_equal "not an error".to_utf16, @db.errmsg(true)
129
- end
130
-
131
- define_method( "test_errcode" ) do
132
- assert_equal 0, @db.errcode
133
- end
134
-
135
- define_method( "test_trace" ) do
136
- result = nil
137
- @db.trace( "data" ) { |data,sql| result = [ data, sql ]; 0 }
138
- @db.execute "select * from foo"
139
- assert_equal ["data","select * from foo"], result
140
- end
141
-
142
- define_method( "test_authorizer_okay" ) do
143
- @db.authorizer( "data" ) { |data,type,a,b,c,d| 0 }
144
- rows = @db.execute "select * from foo"
145
- assert_equal 3, rows.length
146
- end
147
-
148
- define_method( "test_authorizer_error" ) do
149
- @db.authorizer( "data" ) { |data,type,a,b,c,d| 1 }
150
- assert_raise( SQLite3::AuthorizationException ) do
151
- @db.execute "select * from foo"
152
- end
153
- end
154
-
155
- # FIXME: this test is failing with sqlite3 3.2.5
156
- # define_method( "test_authorizer_silent" ) do
157
- # @db.authorizer( "data" ) { |data,type,a,b,c,d| 2 }
158
- # rows = @db.execute "select * from foo"
159
- # assert rows.empty?
160
- # end
161
-
162
- define_method( "test_prepare_invalid_syntax" ) do
163
- assert_raise( SQLite3::SQLException ) do
164
- @db.prepare "select from foo"
165
- end
166
- end
167
-
168
- define_method( "test_prepare_invalid_column" ) do
169
- assert_raise( SQLite3::SQLException ) do
170
- @db.prepare "select k from foo"
171
- end
172
- end
173
-
174
- define_method( "test_prepare_invalid_table" ) do
175
- assert_raise( SQLite3::SQLException ) do
176
- @db.prepare "select * from barf"
177
- end
178
- end
179
-
180
- define_method( "test_prepare_no_block" ) do
181
- stmt = @db.prepare "select * from foo"
182
- assert stmt.respond_to?(:execute)
183
- stmt.close
184
- end
185
-
186
- define_method( "test_prepare_with_block" ) do
187
- called = false
188
- @db.prepare "select * from foo" do |stmt|
189
- called = true
190
- assert stmt.respond_to?(:execute)
191
- end
192
- assert called
193
- end
194
-
195
- define_method( "test_execute_no_block_no_bind_no_match" ) do
196
- rows = @db.execute( "select * from foo where a > 100" )
197
- assert rows.empty?
198
- end
199
-
200
- define_method( "test_execute_with_block_no_bind_no_match" ) do
201
- called = false
202
- @db.execute( "select * from foo where a > 100" ) do |row|
203
- called = true
204
- end
205
- assert !called
206
- end
207
-
208
- define_method( "test_execute_no_block_with_bind_no_match" ) do
209
- rows = @db.execute( "select * from foo where a > ?", 100 )
210
- assert rows.empty?
211
- end
212
-
213
- define_method( "test_execute_with_block_with_bind_no_match" ) do
214
- called = false
215
- @db.execute( "select * from foo where a > ?", 100 ) do |row|
216
- called = true
217
- end
218
- assert !called
219
- end
220
-
221
- define_method( "test_execute_no_block_no_bind_with_match" ) do
222
- rows = @db.execute( "select * from foo where a = 1" )
223
- assert_equal 1, rows.length
224
- end
225
-
226
- define_method( "test_execute_with_block_no_bind_with_match" ) do
227
- called = 0
228
- @db.execute( "select * from foo where a = 1" ) do |row|
229
- called += 1
230
- end
231
- assert_equal 1, called
232
- end
233
-
234
- define_method( "test_execute_no_block_with_bind_with_match" ) do
235
- rows = @db.execute( "select * from foo where a = ?", 1 )
236
- assert_equal 1, rows.length
237
- end
238
-
239
- define_method( "test_execute_with_block_with_bind_with_match" ) do
240
- called = 0
241
- @db.execute( "select * from foo where a = ?", 1 ) do |row|
242
- called += 1
243
- end
244
- assert_equal 1, called
245
- end
246
-
247
- define_method( "test_execute2_no_block_no_bind_no_match" ) do
248
- columns, *rows = @db.execute2( "select * from foo where a > 100" )
249
- assert rows.empty?
250
- assert [ "a", "b" ], columns
251
- end
252
-
253
- define_method( "test_execute2_with_block_no_bind_no_match" ) do
254
- called = 0
255
- @db.execute2( "select * from foo where a > 100" ) do |row|
256
- assert [ "a", "b" ], row unless called == 0
257
- called += 1
258
- end
259
- assert_equal 1, called
260
- end
261
-
262
- define_method( "test_execute2_no_block_with_bind_no_match" ) do
263
- columns, *rows = @db.execute2( "select * from foo where a > ?", 100 )
264
- assert rows.empty?
265
- assert [ "a", "b" ], columns
266
- end
267
-
268
- define_method( "test_execute2_with_block_with_bind_no_match" ) do
269
- called = 0
270
- @db.execute2( "select * from foo where a > ?", 100 ) do |row|
271
- assert [ "a", "b" ], row unless called == 0
272
- called += 1
273
- end
274
- assert_equal 1, called
275
- end
276
-
277
- define_method( "test_execute2_no_block_no_bind_with_match" ) do
278
- columns, *rows = @db.execute2( "select * from foo where a = 1" )
279
- assert_equal 1, rows.length
280
- assert [ "a", "b" ], columns
281
- end
282
-
283
- define_method( "test_execute2_with_block_no_bind_with_match" ) do
284
- called = 0
285
- @db.execute2( "select * from foo where a = 1" ) do |row|
286
- assert [ "a", "b" ], row unless called == 0
287
- called += 1
288
- end
289
- assert_equal 2, called
290
- end
291
-
292
- define_method( "test_execute2_no_block_with_bind_with_match" ) do
293
- columns, *rows = @db.execute2( "select * from foo where a = ?", 1 )
294
- assert_equal 1, rows.length
295
- assert [ "a", "b" ], columns
296
- end
297
-
298
- define_method( "test_execute2_with_block_with_bind_with_match" ) do
299
- called = 0
300
- @db.execute2( "select * from foo where a = ?", 1 ) do |row|
301
- called += 1
302
- end
303
- assert_equal 2, called
304
- end
305
-
306
- define_method( "test_execute_batch_empty" ) do
307
- assert_nothing_raised { @db.execute_batch "" }
308
- end
309
-
310
- define_method( "test_execute_batch_no_bind" ) do
311
- @db.transaction do
312
- @db.execute_batch <<-SQL
313
- create table bar ( a, b, c );
314
- insert into bar values ( 'one', 2, 'three' );
315
- insert into bar values ( 'four', 5, 'six' );
316
- insert into bar values ( 'seven', 8, 'nine' );
317
- SQL
318
- end
319
- rows = @db.execute( "select * from bar" )
320
- assert_equal 3, rows.length
321
- end
322
-
323
- define_method( "test_execute_batch_with_bind" ) do
324
- @db.execute_batch( <<-SQL, 1 )
325
- create table bar ( a, b, c );
326
- insert into bar values ( 'one', 2, ? );
327
- insert into bar values ( 'four', 5, ? );
328
- insert into bar values ( 'seven', 8, ? );
329
- SQL
330
- rows = @db.execute( "select * from bar" ).map { |a,b,c| c }
331
- assert_equal %w{1 1 1}, rows
332
- end
333
-
334
- define_method( "test_query_no_block_no_bind_no_match" ) do
335
- result = @db.query( "select * from foo where a > 100" )
336
- assert_nil result.next
337
- result.close
338
- end
339
-
340
- define_method( "test_query_with_block_no_bind_no_match" ) do
341
- r = nil
342
- @db.query( "select * from foo where a > 100" ) do |result|
343
- assert_nil result.next
344
- r = result
345
- end
346
- assert r.closed?
347
- end
348
-
349
- define_method( "test_query_no_block_with_bind_no_match" ) do
350
- result = @db.query( "select * from foo where a > ?", 100 )
351
- assert_nil result.next
352
- result.close
353
- end
354
-
355
- define_method( "test_query_with_block_with_bind_no_match" ) do
356
- r = nil
357
- @db.query( "select * from foo where a > ?", 100 ) do |result|
358
- assert_nil result.next
359
- r = result
360
- end
361
- assert r.closed?
362
- end
363
-
364
- define_method( "test_query_no_block_no_bind_with_match" ) do
365
- result = @db.query( "select * from foo where a = 1" )
366
- assert_not_nil result.next
367
- assert_nil result.next
368
- result.close
369
- end
370
-
371
- define_method( "test_query_with_block_no_bind_with_match" ) do
372
- r = nil
373
- @db.query( "select * from foo where a = 1" ) do |result|
374
- assert_not_nil result.next
375
- assert_nil result.next
376
- r = result
377
- end
378
- assert r.closed?
379
- end
380
-
381
- define_method( "test_query_no_block_with_bind_with_match" ) do
382
- result = @db.query( "select * from foo where a = ?", 1 )
383
- assert_not_nil result.next
384
- assert_nil result.next
385
- result.close
386
- end
387
-
388
- define_method( "test_query_with_block_with_bind_with_match" ) do
389
- r = nil
390
- @db.query( "select * from foo where a = ?", 1 ) do |result|
391
- assert_not_nil result.next
392
- assert_nil result.next
393
- r = result
394
- end
395
- assert r.closed?
396
- end
397
-
398
- define_method( "test_get_first_row_no_bind_no_match" ) do
399
- result = @db.get_first_row( "select * from foo where a=100" )
400
- assert_nil result
401
- end
402
-
403
- define_method( "test_get_first_row_no_bind_with_match" ) do
404
- result = @db.get_first_row( "select * from foo where a=1" )
405
- assert_equal [ "1", "foo" ], result
406
- end
407
-
408
- define_method( "test_get_first_row_with_bind_no_match" ) do
409
- result = @db.get_first_row( "select * from foo where a=?", 100 )
410
- assert_nil result
411
- end
412
-
413
- define_method( "test_get_first_row_with_bind_with_match" ) do
414
- result = @db.get_first_row( "select * from foo where a=?", 1 )
415
- assert_equal [ "1", "foo" ], result
416
- end
417
-
418
- define_method( "test_get_first_value_no_bind_no_match" ) do
419
- result = @db.get_first_value( "select b, a from foo where a=100" )
420
- assert_nil result
421
- end
422
-
423
- define_method( "test_get_first_value_no_bind_with_match" ) do
424
- result = @db.get_first_value( "select b, a from foo where a=1" )
425
- assert_equal "foo", result
426
- end
427
-
428
- define_method( "test_get_first_value_with_bind_no_match" ) do
429
- result = @db.get_first_value( "select b, a from foo where a=?", 100 )
430
- assert_nil result
431
- end
432
-
433
- define_method( "test_get_first_value_with_bind_with_match" ) do
434
- result = @db.get_first_value( "select b, a from foo where a=?", 1 )
435
- assert_equal "foo", result
436
- end
437
-
438
- define_method( "test_last_insert_row_id" ) do
439
- @db.execute "insert into foo ( b ) values ( 'test' )"
440
- assert_equal 4, @db.last_insert_row_id
441
- @db.execute "insert into foo ( b ) values ( 'again' )"
442
- assert_equal 5, @db.last_insert_row_id
443
- end
444
-
445
- define_method( "test_changes" ) do
446
- @db.execute "insert into foo ( b ) values ( 'test' )"
447
- assert_equal 1, @db.changes
448
- @db.execute "delete from foo where 1=1"
449
- assert_equal 4, @db.changes
450
- end
451
-
452
- define_method( "test_total_changes" ) do
453
- assert_equal 3, @db.total_changes
454
- @db.execute "insert into foo ( b ) values ( 'test' )"
455
- @db.execute "delete from foo where 1=1"
456
- assert_equal 8, @db.total_changes
457
- end
458
-
459
- define_method( "test_transaction_nest" ) do
460
- assert_raise( SQLite3::SQLException ) do
461
- @db.transaction do
462
- @db.transaction do
463
- end
464
- end
465
- end
466
- end
467
-
468
- define_method( "test_transaction_rollback" ) do
469
- @db.transaction
470
- @db.execute_batch <<-SQL
471
- insert into foo (b) values ( 'test1' );
472
- insert into foo (b) values ( 'test2' );
473
- insert into foo (b) values ( 'test3' );
474
- insert into foo (b) values ( 'test4' );
475
- SQL
476
- assert_equal 7, @db.get_first_value("select count(*) from foo").to_i
477
- @db.rollback
478
- assert_equal 3, @db.get_first_value("select count(*) from foo").to_i
479
- end
480
-
481
- define_method( "test_transaction_commit" ) do
482
- @db.transaction
483
- @db.execute_batch <<-SQL
484
- insert into foo (b) values ( 'test1' );
485
- insert into foo (b) values ( 'test2' );
486
- insert into foo (b) values ( 'test3' );
487
- insert into foo (b) values ( 'test4' );
488
- SQL
489
- assert_equal 7, @db.get_first_value("select count(*) from foo").to_i
490
- @db.commit
491
- assert_equal 7, @db.get_first_value("select count(*) from foo").to_i
492
- end
493
-
494
- define_method( "test_transaction_rollback_in_block" ) do
495
- assert_raise( SQLite3::SQLException ) do
496
- @db.transaction do
497
- @db.rollback
498
- end
499
- end
500
- end
501
-
502
- define_method( "test_transaction_commit_in_block" ) do
503
- assert_raise( SQLite3::SQLException ) do
504
- @db.transaction do
505
- @db.commit
506
- end
507
- end
508
- end
509
-
510
- define_method( "test_transaction_active" ) do
511
- assert !@db.transaction_active?
512
- @db.transaction
513
- assert @db.transaction_active?
514
- @db.commit
515
- assert !@db.transaction_active?
516
- end
517
-
518
- define_method( "no_tests_at" ) do |file,line,method|
519
- warn "[(#{self.class}):#{file}:#{line}] no tests for #{method}"
520
- end
521
-
522
- define_method( "test_interrupt" ) do
523
- @db.create_function( "abort", 1 ) do |func,x|
524
- @db.interrupt
525
- func.result = x
526
- end
527
-
528
- assert_raise( SQLite3::SQLException ) do
529
- @db.execute "select abort(a) from foo"
530
- end
531
- end
532
-
533
- define_method( "test_busy_handler_outwait" ) do
534
- busy = Mutex.new
535
- busy.lock
536
- handler_call_count = 0
537
-
538
- t = Thread.new do
539
- begin
540
- db2 = SQLite3::Database.open( "test.db", :driver=>driver )
541
- db2.transaction( :exclusive ) do
542
- busy.lock
543
- end
544
- ensure
545
- db2.close if db2
546
- end
547
- end
548
-
549
- @db.busy_handler do |data,count|
550
- handler_call_count += 1
551
- busy.unlock
552
- true
553
- end
554
-
555
- assert_nothing_raised do
556
- @db.execute "insert into foo (b) values ( 'from 2' )"
557
- end
558
-
559
- t.join
560
-
561
- assert_equal 1, handler_call_count
562
- end
563
-
564
- define_method( "test_busy_handler_impatient" ) do
565
- busy = Mutex.new
566
- busy.lock
567
- handler_call_count = 0
568
-
569
- t = Thread.new do
570
- begin
571
- db2 = SQLite3::Database.open( "test.db", :driver=>driver )
572
- db2.transaction( :exclusive ) do
573
- busy.lock
574
- end
575
- ensure
576
- db2.close if db2
577
- end
578
- end
579
-
580
- @db.busy_handler do |data, count|
581
- handler_call_count += 1
582
- false
583
- end
584
-
585
- assert_raise( SQLite3::BusyException ) do
586
- @db.execute "insert into foo (b) values ( 'from 2' )"
587
- end
588
-
589
- busy.unlock
590
- t.join
591
-
592
- assert_equal 1, handler_call_count
593
- end
594
-
595
- define_method( "test_busy_timeout" ) do
596
- @db.busy_timeout 1000
597
- busy = Mutex.new
598
- busy.lock
599
-
600
- t = Thread.new do
601
- begin
602
- db2 = SQLite3::Database.open( "test.db", :driver=>driver )
603
- db2.transaction( :exclusive ) do
604
- busy.lock
605
- end
606
- ensure
607
- db2.close if db2
608
- end
609
- end
610
-
611
- time = Benchmark.measure do
612
- assert_raise( SQLite3::BusyException ) do
613
- @db.execute "insert into foo (b) values ( 'from 2' )"
614
- end
615
- end
616
-
617
- busy.unlock
618
- t.join
619
-
620
- assert time.real*1000 >= 1000
621
- end
622
-
623
- define_method( "test_create_function" ) do
624
- @db.create_function( "munge", 1 ) do |func,x|
625
- func.result = ">>>#{x}<<<"
626
- end
627
-
628
- value = @db.get_first_value( "select munge(b) from foo where a=1" )
629
- assert_match( />>>.*<<</, value )
630
- end
631
-
632
- define_method( "test_create_aggregate_without_block" ) do
633
- step = proc do |ctx,a|
634
- ctx[:sum] ||= 0
635
- ctx[:sum] += a.to_i
636
- end
637
-
638
- final = proc { |ctx| ctx.result = ctx[:sum] }
639
-
640
- @db.create_aggregate( "accumulate", 1, step, final )
641
-
642
- value = @db.get_first_value( "select accumulate(a) from foo" )
643
- assert_equal "6", value
644
- end
645
-
646
- define_method( "test_create_aggregate_with_block" ) do
647
- @db.create_aggregate( "accumulate", 1 ) do
648
- step do |ctx,a|
649
- ctx[:sum] ||= 0
650
- ctx[:sum] += a.to_i
651
- end
652
-
653
- finalize { |ctx| ctx.result = ctx[:sum] }
654
- end
655
-
656
- value = @db.get_first_value( "select accumulate(a) from foo" )
657
- assert_equal "6", value
658
- end
659
-
660
- define_method( "test_create_aggregate_with_no_data" ) do
661
- @db.create_aggregate( "accumulate", 1 ) do
662
- step do |ctx,a|
663
- ctx[:sum] ||= 0
664
- ctx[:sum] += a.to_i
665
- end
666
-
667
- finalize { |ctx| ctx.result = ctx[:sum] || 0 }
668
- end
669
-
670
- value = @db.get_first_value(
671
- "select accumulate(a) from foo where a = 100" )
672
- assert_equal "0", value
673
- end
674
-
675
- define_method( "test_create_aggregate_handler" ) do
676
- handler = Class.new do
677
- class << self
678
- define_method( "arity" ) { 1 }
679
- define_method( "text_rep" ) { SQLite3::Constants::TextRep::ANY }
680
- define_method( "name" ) { "multiply" }
681
- end
682
- define_method( "step" ) do |ctx,a|
683
- ctx[:buffer] ||= 1
684
- ctx[:buffer] *= a.to_i
685
- end
686
- define_method( "finalize" ) { |ctx| ctx.result = ctx[:buffer] }
687
- end
688
-
689
- @db.create_aggregate_handler( handler )
690
- value = @db.get_first_value( "select multiply(a) from foo" )
691
- assert_equal "6", value
692
- end
693
-
694
- define_method( "test_bind_array_parameter" ) do
695
- result = @db.get_first_value( "select b from foo where a=? and b=?",
696
- [ 1, "foo" ] )
697
- assert_equal "foo", result
698
- end
699
- end
700
- const_set( "TC_Database_#{driver}", test_case )
701
-
702
- # == TC_Statement =========================================================
703
-
704
- test_case = Class.new( Test::Unit::TestCase ) do
705
- define_method( "setup" ) do
706
- @db = SQLite3::Database.new( "test.db", :driver=>driver )
707
- @db.transaction do
708
- @db.execute "create table foo ( a integer primary key, b text )"
709
- @db.execute "insert into foo ( b ) values ( 'foo' )"
710
- @db.execute "insert into foo ( b ) values ( 'bar' )"
711
- @db.execute "insert into foo ( b ) values ( 'baz' )"
712
- end
713
- @stmt = @db.prepare( "select * from foo where a in ( ?, :named )" )
714
- end
715
-
716
- define_method( "teardown" ) do
717
- @stmt.close
718
- @db.close
719
- File.delete( "test.db" )
720
- end
721
-
722
- define_method( "test_remainder_empty" ) do
723
- assert_equal "", @stmt.remainder
724
- end
725
-
726
- define_method( "test_remainder_nonempty" ) do
727
- called = false
728
- @db.prepare( "select * from foo;\n blah" ) do |stmt|
729
- called = true
730
- assert_equal "\n blah", stmt.remainder
731
- end
732
- assert called
733
- end
734
-
735
- define_method( "test_bind_params_empty" ) do
736
- assert_nothing_raised { @stmt.bind_params }
737
- assert @stmt.execute!.empty?
738
- end
739
-
740
- define_method( "test_bind_params_array" ) do
741
- @stmt.bind_params 1, 2
742
- assert_equal 2, @stmt.execute!.length
743
- end
744
-
745
- define_method( "test_bind_params_hash" ) do
746
- @stmt.bind_params ":named" => 2
747
- assert_equal 1, @stmt.execute!.length
748
- end
749
-
750
- define_method( "test_bind_params_hash_without_colon" ) do
751
- @stmt.bind_params "named" => 2
752
- assert_equal 1, @stmt.execute!.length
753
- end
754
-
755
- define_method( "test_bind_params_hash_as_symbol" ) do
756
- @stmt.bind_params :named => 2
757
- assert_equal 1, @stmt.execute!.length
758
- end
759
-
760
- define_method( "test_bind_params_mixed" ) do
761
- @stmt.bind_params( 1, ":named" => 2 )
762
- assert_equal 2, @stmt.execute!.length
763
- end
764
-
765
- define_method( "test_bind_param_by_index" ) do
766
- @stmt.bind_params( 1, 2 )
767
- assert_equal 2, @stmt.execute!.length
768
- end
769
-
770
- define_method( "test_bind_param_by_name_bad" ) do
771
- assert_raise( SQLite3::Exception ) { @stmt.bind_param( "@named", 2 ) }
772
- end
773
-
774
- define_method( "test_bind_param_by_name_good" ) do
775
- @stmt.bind_param( ":named", 2 )
776
- assert_equal 1, @stmt.execute!.length
777
- end
778
-
779
- define_method( "test_bind_param_with_various_types" ) do
780
- @db.transaction do
781
- @db.execute "create table all_types ( a integer primary key, b float, c string, d integer )"
782
- @db.execute "insert into all_types ( b, c, d ) values ( 1.4, 'hello', 68719476735 )"
783
- end
784
-
785
- assert_equal 1, @db.execute( "select * from all_types where b = ?", 1.4 ).length
786
- assert_equal 1, @db.execute( "select * from all_types where c = ?", 'hello').length
787
- assert_equal 1, @db.execute( "select * from all_types where d = ?", 68719476735).length
788
- end
789
-
790
- define_method( "test_execute_no_bind_no_block" ) do
791
- assert_instance_of SQLite3::ResultSet, @stmt.execute
792
- end
793
-
794
- define_method( "test_execute_with_bind_no_block" ) do
795
- assert_instance_of SQLite3::ResultSet, @stmt.execute( 1, 2 )
796
- end
797
-
798
- define_method( "test_execute_no_bind_with_block" ) do
799
- called = false
800
- @stmt.execute { |row| called = true }
801
- assert called
802
- end
803
-
804
- define_method( "test_execute_with_bind_with_block" ) do
805
- called = 0
806
- @stmt.execute( 1, 2 ) { |row| called += 1 }
807
- assert_equal 1, called
808
- end
809
-
810
- define_method( "test_reexecute" ) do
811
- r = @stmt.execute( 1, 2 )
812
- assert_equal 2, r.to_a.length
813
- assert_nothing_raised { r = @stmt.execute( 1, 2 ) }
814
- assert_equal 2, r.to_a.length
815
- end
816
-
817
- define_method( "test_execute_bang_no_bind_no_block" ) do
818
- assert @stmt.execute!.empty?
819
- end
820
-
821
- define_method( "test_execute_bang_with_bind_no_block" ) do
822
- assert_equal 2, @stmt.execute!( 1, 2 ).length
823
- end
824
-
825
- define_method( "test_execute_bang_no_bind_with_block" ) do
826
- called = 0
827
- @stmt.execute! { |row| called += 1 }
828
- assert_equal 0, called
829
- end
830
-
831
- define_method( "test_execute_bang_with_bind_with_block" ) do
832
- called = 0
833
- @stmt.execute!( 1, 2 ) { |row| called += 1 }
834
- assert_equal 2, called
835
- end
836
-
837
- define_method( "test_columns" ) do
838
- c1 = @stmt.columns
839
- c2 = @stmt.columns
840
- assert_same c1, c2
841
- assert_equal 2, c1.length
842
- end
843
-
844
- define_method( "test_columns_computed" ) do
845
- called = false
846
- @db.prepare( "select count(*) from foo" ) do |stmt|
847
- called = true
848
- assert_equal [ "count(*)" ], stmt.columns
849
- end
850
- assert called
851
- end
852
-
853
- define_method( "test_types" ) do
854
- t1 = @stmt.types
855
- t2 = @stmt.types
856
- assert_same t1, t2
857
- assert_equal 2, t1.length
858
- end
859
-
860
- define_method( "test_types_computed" ) do
861
- called = false
862
- @db.prepare( "select count(*) from foo" ) do |stmt|
863
- called = true
864
- assert_equal [ nil ], stmt.types
865
- end
866
- assert called
867
- end
868
-
869
- define_method( "test_close" ) do
870
- stmt = @db.prepare( "select * from foo" )
871
- assert !stmt.closed?
872
- stmt.close
873
- assert stmt.closed?
874
- assert_raise( SQLite3::Exception ) { stmt.execute }
875
- assert_raise( SQLite3::Exception ) { stmt.execute! }
876
- assert_raise( SQLite3::Exception ) { stmt.close }
877
- assert_raise( SQLite3::Exception ) { stmt.bind_params 5 }
878
- assert_raise( SQLite3::Exception ) { stmt.bind_param 1, 5 }
879
- assert_raise( SQLite3::Exception ) { stmt.columns }
880
- assert_raise( SQLite3::Exception ) { stmt.types }
881
- end
882
-
883
- define_method( "test_committing_tx_with_statement_active" ) do
884
- called = false
885
- @db.prepare( "select count(*) from foo" ) do |stmt|
886
- called = true
887
- count = stmt.execute!.first.first.to_i
888
- @db.transaction do
889
- @db.execute "insert into foo ( b ) values ( 'hello' )"
890
- end
891
- new_count = stmt.execute!.first.first.to_i
892
- assert_equal new_count, count+1
893
- end
894
- assert called
895
- end
896
- end
897
- const_set( "TC_Statement_#{driver}", test_case )
898
-
899
- # == TC_ResultSet =========================================================
900
-
901
- test_case = Class.new( Test::Unit::TestCase ) do
902
- define_method( "setup" ) do
903
- @db = SQLite3::Database.new( "test.db", :driver=>driver )
904
- @db.transaction do
905
- @db.execute "create table foo ( a integer primary key, b text )"
906
- @db.execute "insert into foo ( b ) values ( 'foo' )"
907
- @db.execute "insert into foo ( b ) values ( 'bar' )"
908
- @db.execute "insert into foo ( b ) values ( 'baz' )"
909
- end
910
- @stmt = @db.prepare( "select * from foo where a in ( ?, ? )" )
911
- @result = @stmt.execute
912
- end
913
-
914
- define_method( "teardown" ) do
915
- @stmt.close
916
- @db.close
917
- File.delete( "test.db" )
918
- end
919
-
920
- define_method( "test_reset_unused" ) do
921
- assert_nothing_raised { @result.reset }
922
- assert @result.to_a.empty?
923
- end
924
-
925
- define_method( "test_reset_used" ) do
926
- @result.to_a
927
- assert_nothing_raised { @result.reset }
928
- assert @result.to_a.empty?
929
- end
930
-
931
- define_method( "test_reset_with_bind" ) do
932
- @result.to_a
933
- assert_nothing_raised { @result.reset( 1, 2 ) }
934
- assert_equal 2, @result.to_a.length
935
- end
936
-
937
- define_method( "test_eof_inner" ) do
938
- @result.reset( 1 )
939
- assert !@result.eof?
940
- end
941
-
942
- define_method( "test_eof_edge" ) do
943
- @result.reset( 1 )
944
- @result.next # to first row
945
- @result.next # to end of result set
946
- assert @result.eof?
947
- end
948
-
949
- define_method( "test_next_eof" ) do
950
- @result.reset( 1 )
951
- assert_not_nil @result.next
952
- assert_nil @result.next
953
- end
954
-
955
- define_method( "test_next_no_type_translation_no_hash" ) do
956
- @result.reset( 1 )
957
- assert_equal [ "1", "foo" ], @result.next
958
- end
959
-
960
- define_method( "test_next_type_translation" ) do
961
- @db.type_translation = true
962
- @result.reset( 1 )
963
- assert_equal [ 1, "foo" ], @result.next
964
- end
965
-
966
- define_method( "test_next_type_translation_with_untyped_column" ) do
967
- @db.type_translation = true
968
- @db.query( "select count(*) from foo" ) do |result|
969
- assert_equal ["3"], result.next
970
- end
971
- end
972
-
973
- define_method( "test_type_translation_with_null_column" ) do
974
- @db.type_translation = true
975
- @db.execute "create table bar ( a integer, b time, c string )"
976
- @db.execute "insert into bar (a, b, c) values (NULL, '1974-07-25 14:39:00', 'hello')"
977
- @db.execute "insert into bar (a, b, c) values (1, NULL, 'hello')"
978
- @db.execute "insert into bar (a, b, c) values (2, '1974-07-25 14:39:00', NULL)"
979
- @db.query( "select * from bar" ) do |result|
980
- assert_equal [nil, Time.local(1974, 7, 25, 14, 39, 0), 'hello'], result.next
981
- assert_equal [1, nil, 'hello'], result.next
982
- assert_equal [2, Time.local(1974, 7, 25, 14, 39, 0), nil], result.next
983
- end
984
- end
985
-
986
- define_method( "test_date_and_time_translation" ) do
987
- @db.type_translation = true
988
- @db.execute "create table bar ( a date, b datetime, c time, d timestamp )"
989
- @db.execute "insert into bar (a, b, c, d) values ('1999-01-08', '1997-12-17 07:37:16', '07:37:16', '2004-10-19 10:23:54')"
990
- @db.query( "select * from bar" ) do |result|
991
- result = result.next
992
- assert result[0].is_a?(Date)
993
- assert result[1].is_a?(DateTime)
994
- assert result[2].is_a?(Time)
995
- assert result[3].is_a?(Time)
996
- end
997
- end
998
-
999
- define_method( "test_next_results_as_hash" ) do
1000
- @db.results_as_hash = true
1001
- @result.reset( 1 )
1002
- assert_equal( { "a" => "1", "b" => "foo", 0 => "1", 1 => "foo" },
1003
- @result.next )
1004
- end
1005
-
1006
- define_method( "test_each" ) do
1007
- called = 0
1008
- @result.reset( 1, 2 )
1009
- @result.each { |row| called += 1 }
1010
- assert_equal 2, called
1011
- end
1012
-
1013
- define_method( "test_enumerable" ) do
1014
- @result.reset( 1, 2 )
1015
- assert_equal 2, @result.to_a.length
1016
- end
1017
-
1018
- define_method( "test_types" ) do
1019
- assert_equal [ "integer", "text" ], @result.types
1020
- end
1021
-
1022
- define_method( "test_columns" ) do
1023
- assert_equal [ "a", "b" ], @result.columns
1024
- end
1025
-
1026
- define_method( "test_close" ) do
1027
- stmt = @db.prepare( "select * from foo" )
1028
- result = stmt.execute
1029
- assert !result.closed?
1030
- result.close
1031
- assert result.closed?
1032
- assert stmt.closed?
1033
- assert_raise( SQLite3::Exception ) { result.reset }
1034
- assert_raise( SQLite3::Exception ) { result.next }
1035
- assert_raise( SQLite3::Exception ) { result.each }
1036
- assert_raise( SQLite3::Exception ) { result.close }
1037
- assert_raise( SQLite3::Exception ) { result.types }
1038
- assert_raise( SQLite3::Exception ) { result.columns }
1039
- end
1040
- end
1041
- const_set( "TC_ResultSet_#{driver}", test_case )
1042
- end
1043
-
1044
- end