sqlite3-ruby 1.2.5-x86-mswin32

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 (44) 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.txt +56 -0
  6. data/Rakefile +5 -0
  7. data/ext/sqlite3_api/extconf.rb +10 -0
  8. data/ext/sqlite3_api/sqlite3_api.i +362 -0
  9. data/ext/sqlite3_api/sqlite3_api_wrap.c +5018 -0
  10. data/faq/faq.rb +145 -0
  11. data/faq/faq.yml +426 -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.rb +1 -0
  15. data/lib/sqlite3/constants.rb +49 -0
  16. data/lib/sqlite3/database.rb +721 -0
  17. data/lib/sqlite3/driver/dl/api.rb +152 -0
  18. data/lib/sqlite3/driver/dl/driver.rb +307 -0
  19. data/lib/sqlite3/driver/native/driver.rb +219 -0
  20. data/lib/sqlite3/errors.rb +68 -0
  21. data/lib/sqlite3/pragmas.rb +271 -0
  22. data/lib/sqlite3/resultset.rb +180 -0
  23. data/lib/sqlite3/statement.rb +231 -0
  24. data/lib/sqlite3/translator.rb +109 -0
  25. data/lib/sqlite3/value.rb +57 -0
  26. data/lib/sqlite3/version.rb +16 -0
  27. data/setup.rb +1333 -0
  28. data/tasks/benchmark.rake +9 -0
  29. data/tasks/faq.rake +9 -0
  30. data/tasks/gem.rake +32 -0
  31. data/tasks/native.rake +35 -0
  32. data/tasks/vendor_sqlite3.rake +104 -0
  33. data/test/bm.rb +140 -0
  34. data/test/driver/dl/tc_driver.rb +292 -0
  35. data/test/helper.rb +67 -0
  36. data/test/native-vs-dl.rb +126 -0
  37. data/test/test_database.rb +217 -0
  38. data/test/test_errors.rb +17 -0
  39. data/test/test_integration.rb +542 -0
  40. data/test/test_integration_open_close.rb +30 -0
  41. data/test/test_integration_pending.rb +111 -0
  42. data/test/test_integration_resultset.rb +159 -0
  43. data/test/test_integration_statement.rb +195 -0
  44. metadata +143 -0
@@ -0,0 +1,9 @@
1
+ desc "Run benchmarks vs. sqlite-ruby"
2
+ task :benchmark do
3
+ ruby "test/bm.rb"
4
+ end
5
+
6
+ desc "Run benchmarks dl vs. native"
7
+ task :benchmark2 do
8
+ ruby "test/native-vs-dl.rb"
9
+ end
@@ -0,0 +1,9 @@
1
+ # Generate FAQ
2
+ desc "Generate the FAQ document"
3
+ task :faq => ['faq/faq.html']
4
+
5
+ file 'faq/faq.html' => ['faq/faq.rb', 'faq/faq.yml'] do
6
+ cd 'faq' do
7
+ ruby "faq.rb > faq.html"
8
+ end
9
+ end
@@ -0,0 +1,32 @@
1
+ require 'rubygems/package_task'
2
+ require 'hoe'
3
+
4
+ HOE = Hoe.spec 'sqlite3-ruby' do
5
+ self.rubyforge_name = 'sqlite-ruby'
6
+ self.author = ['Jamis Buck']
7
+ self.email = %w[jamis@37signals.com]
8
+ self.readme_file = 'README.txt'
9
+ self.need_tar = false
10
+ self.need_zip = false
11
+
12
+ spec_extras[:required_ruby_version] = Gem::Requirement.new('> 1.8.5')
13
+
14
+ spec_extras[:extensions] = ["ext/sqlite3_api/extconf.rb"]
15
+
16
+ extra_dev_deps << 'mocha'
17
+ extra_dev_deps << ['rake-compiler', "~> 0.5.0"]
18
+
19
+ spec_extras['rdoc_options'] = proc do |rdoc_options|
20
+ rdoc_options << "--main=README.txt"
21
+ end
22
+
23
+ clean_globs.push('**/test.db')
24
+ end
25
+
26
+ file "#{HOE.spec.name}.gemspec" => ['Rakefile', 'tasks/gem.rake', 'lib/sqlite3/version.rb'] do |t|
27
+ puts "Generating #{t.name}"
28
+ File.open(t.name, 'w') { |f| f.puts HOE.spec.to_yaml }
29
+ end
30
+
31
+ desc "Generate or update the standalone gemspec file for the project"
32
+ task :gemspec => ["#{HOE.spec.name}.gemspec"]
@@ -0,0 +1,35 @@
1
+ # use rake-compiler for building the extension
2
+ require 'rake/extensiontask'
3
+
4
+ # build sqlite3_api C extension
5
+ Rake::ExtensionTask.new('sqlite3_api', HOE.spec) do |ext|
6
+ # reference to the sqlite3 library
7
+ sqlite3_lib = File.expand_path(File.join(File.dirname(__FILE__), '..', 'vendor', 'sqlite3'))
8
+
9
+ # define target for extension (supporting fat binaries)
10
+ if RUBY_PLATFORM =~ /mingw/ then
11
+ ruby_ver = RUBY_VERSION.match(/(\d+\.\d+)/)[1]
12
+ ext.lib_dir = "lib/#{ruby_ver}"
13
+ end
14
+
15
+ # automatically add build options to avoid need of manual input
16
+ if RUBY_PLATFORM =~ /mswin|mingw/ then
17
+ ext.config_options << "--with-sqlite3-dir=#{sqlite3_lib}"
18
+ else
19
+ ext.cross_compile = true
20
+ ext.cross_platform = ['i386-mswin32', 'i386-mingw32']
21
+ ext.cross_config_options << "--with-sqlite3-dir=#{sqlite3_lib}"
22
+ end
23
+ end
24
+
25
+ # C wrapper depends on swig file to be generated
26
+ file 'ext/sqlite3_api/sqlite3_api_wrap.c' => ['ext/sqlite3_api/sqlite3_api.i'] do |t|
27
+ begin
28
+ sh "swig -ruby -o #{t.name} #{t.prerequisites.first}"
29
+ rescue
30
+ fail "could not build wrapper via swig (perhaps swig is not installed?)"
31
+ end
32
+ end
33
+
34
+ # ensure things are compiled prior testing
35
+ task :test => [:compile]
@@ -0,0 +1,104 @@
1
+ require 'rake/clean'
2
+ require 'rake/extensioncompiler'
3
+
4
+ # download sqlite3 library and headers
5
+
6
+ # only on Windows or cross platform compilation
7
+ def dlltool(dllname, deffile, libfile)
8
+ # define if we are using GCC or not
9
+ if Rake::ExtensionCompiler.mingw_gcc_executable then
10
+ dir = File.dirname(Rake::ExtensionCompiler.mingw_gcc_executable)
11
+ tool = case RUBY_PLATFORM
12
+ when /mingw/
13
+ File.join(dir, 'dlltool.exe')
14
+ when /linux|darwin/
15
+ File.join(dir, "#{Rake::ExtensionCompiler.mingw_host}-dlltool")
16
+ end
17
+ return "#{tool} --dllname #{dllname} --def #{deffile} --output-lib #{libfile}"
18
+ else
19
+ if RUBY_PLATFORM =~ /mswin/ then
20
+ tool = 'lib.exe'
21
+ else
22
+ fail "Unsupported platform for cross-compilation (please, contribute some patches)."
23
+ end
24
+ return "#{tool} /DEF:#{deffile} /OUT:#{libfile}"
25
+ end
26
+ end
27
+
28
+ version = '3_6_16'
29
+
30
+ # required folder structure for --with-sqlite3-dir (include + lib)
31
+ directory "vendor/sqlite3/lib"
32
+ directory "vendor/sqlite3/include"
33
+
34
+ # download amalgamation version (for include files)
35
+ file "vendor/sqlite-amalgamation-#{version}.zip" => ['vendor'] do |t|
36
+ url = "http://www.sqlite.org/#{File.basename(t.name)}"
37
+ when_writing "downloading #{t.name}" do
38
+ cd File.dirname(t.name) do
39
+ system "wget -c #{url} || curl -C - -O #{url}"
40
+ end
41
+ end
42
+ end
43
+
44
+ # download dll binaries
45
+ file "vendor/sqlitedll-#{version}.zip" => ['vendor'] do |t|
46
+ url = "http://www.sqlite.org/#{File.basename(t.name)}"
47
+ when_writing "downloading #{t.name}" do
48
+ cd File.dirname(t.name) do
49
+ system "wget -c #{url} || curl -C - -O #{url}"
50
+ end
51
+ end
52
+ end
53
+
54
+ # extract header files into include folder
55
+ file "vendor/sqlite3/include/sqlite3.h" => ['vendor/sqlite3/include', "vendor/sqlite-amalgamation-#{version}.zip"] do |t|
56
+ full_file = File.expand_path(t.prerequisites.last)
57
+ when_writing "creating #{t.name}" do
58
+ cd File.dirname(t.name) do
59
+ sh "unzip #{full_file}"
60
+ # update file timestamp to avoid Rake perform this extraction again.
61
+ touch File.basename(t.name)
62
+ end
63
+ end
64
+ end
65
+
66
+ # extract dll files into lib folder
67
+ file "vendor/sqlite3/lib/sqlite3.dll" => ['vendor/sqlite3/lib', "vendor/sqlitedll-#{version}.zip"] do |t|
68
+ full_file = File.expand_path(t.prerequisites.last)
69
+ when_writing "creating #{t.name}" do
70
+ cd File.dirname(t.name) do
71
+ sh "unzip #{full_file}"
72
+ # update file timestamp to avoid Rake perform this extraction again.
73
+ touch File.basename(t.name)
74
+ end
75
+ end
76
+ end
77
+
78
+ # generate import library from definition and dll file
79
+ file "vendor/sqlite3/lib/sqlite3.lib" => ["vendor/sqlite3/lib/sqlite3.dll"] do |t|
80
+ libfile = t.name
81
+ dllname = libfile.ext('dll')
82
+ deffile = libfile.ext('def')
83
+
84
+ when_writing "creating #{t.name}" do
85
+ sh dlltool(dllname, deffile, libfile)
86
+ end
87
+ end
88
+
89
+ # clean and clobber actions
90
+ # All the uncompressed files must be removed at clean
91
+ CLEAN.include('vendor/sqlite3')
92
+
93
+ # clobber vendored packages
94
+ CLOBBER.include('vendor')
95
+
96
+ # vendor:sqlite3
97
+ task 'vendor:sqlite3' => ["vendor/sqlite3/lib/sqlite3.lib", "vendor/sqlite3/include/sqlite3.h"]
98
+
99
+ # hook into cross compilation vendored sqlite3 dependency
100
+ if RUBY_PLATFORM =~ /mingw|mswin/ then
101
+ Rake::Task['compile'].prerequisites.unshift 'vendor:sqlite3'
102
+ else
103
+ Rake::Task['cross'].prerequisites.unshift 'vendor:sqlite3'
104
+ end
@@ -0,0 +1,140 @@
1
+ require 'benchmark'
2
+
3
+ N = 1000
4
+
5
+ $VERBOSE=nil
6
+
7
+ puts "file require"
8
+ Benchmark.bm( 7 ) do |x|
9
+ x.report('sqlite') do
10
+ N.times do
11
+ $".delete_if { |i| i =~ /sqlite/ }
12
+ require 'sqlite'
13
+ end
14
+ end
15
+ x.report('sqlite3') do
16
+ N.times do
17
+ $".delete_if { |i| i =~ /sqlite3/ }
18
+ require 'sqlite3'
19
+ end
20
+ end
21
+ end
22
+
23
+ puts
24
+ puts "database creation..."
25
+ Benchmark.bm( 7 ) do |x|
26
+ x.report('sqlite') do
27
+ N.times do
28
+ File.delete "test.db" rescue nil
29
+ SQLite::Database.open( "test.db" ).close
30
+ end
31
+ end
32
+ x.report('sqlite3') do
33
+ N.times do
34
+ File.delete "test.db" rescue nil
35
+ SQLite3::Database.open( "test.db" ).close
36
+ end
37
+ end
38
+ end
39
+ File.delete "test.db" rescue nil
40
+
41
+ SQLite::Database.open( "test.db" ).close
42
+ SQLite3::Database.open( "test3.db" ).close
43
+
44
+ puts
45
+ puts "database open..."
46
+ Benchmark.bm( 7 ) do |x|
47
+ x.report('sqlite') do
48
+ N.times do
49
+ SQLite::Database.open( "test.db" ).close
50
+ end
51
+ end
52
+ x.report('sqlite3') do
53
+ N.times do
54
+ SQLite3::Database.open( "test3.db" ).close
55
+ end
56
+ end
57
+ end
58
+ File.delete "test.db" rescue nil
59
+ File.delete "test3.db" rescue nil
60
+
61
+ db = SQLite::Database.open( "test.db" )
62
+ db3 = SQLite3::Database.open( "test3.db" )
63
+
64
+ db.execute "create table foo (a,b)"
65
+ db3.execute "create table foo (a,b)"
66
+
67
+ puts
68
+ puts "insertions"
69
+ Benchmark.bm( 7 ) do |x|
70
+ x.report('sqlite') do
71
+ db.transaction do
72
+ N.times do |i|
73
+ db.execute "insert into foo values (#{i}, #{i+1})"
74
+ end
75
+ end
76
+ end
77
+ x.report('sqlite3') do
78
+ db3.transaction do
79
+ N.times do |i|
80
+ db3.execute "insert into foo values (#{i}, #{i+1})"
81
+ end
82
+ end
83
+ end
84
+ end
85
+
86
+ puts
87
+ puts "insertions using prepared statement"
88
+ Benchmark.bm( 7 ) do |x|
89
+ x.report('sqlite') do
90
+ db.transaction do
91
+ stmt = db.prepare "insert into foo values (?,?)"
92
+ N.times { |i| stmt.execute i, i+1 }
93
+ end
94
+ end
95
+ x.report('sqlite3') do
96
+ db3.transaction do
97
+ db3.prepare( "insert into foo values (?,?)" ) do |stmt|
98
+ N.times { |i| stmt.execute i, i+1 }
99
+ end
100
+ end
101
+ end
102
+ end
103
+
104
+ db.close
105
+ db3.close
106
+ File.delete "test.db" rescue nil
107
+ File.delete "test3.db" rescue nil
108
+
109
+ db = SQLite::Database.open( "test.db" )
110
+ db3 = SQLite3::Database.open( "test3.db" )
111
+
112
+ db.execute "create table foo (a,b)"
113
+ db.execute "insert into foo values (1,2)"
114
+ db.execute "insert into foo values (3,4)"
115
+ db.execute "insert into foo values (5,6)"
116
+
117
+ db3.execute "create table foo (a,b)"
118
+ db3.execute "insert into foo values (1,2)"
119
+ db3.execute "insert into foo values (3,4)"
120
+ db3.execute "insert into foo values (5,6)"
121
+
122
+ puts
123
+ puts "queries"
124
+ Benchmark.bm( 7 ) do |x|
125
+ x.report('sqlite') do
126
+ N.times do
127
+ db.execute "select * from foo"
128
+ end
129
+ end
130
+ x.report('sqlite3') do
131
+ N.times do
132
+ db3.execute "select * from foo"
133
+ end
134
+ end
135
+ end
136
+
137
+ db.close
138
+ db3.close
139
+ File.delete "test.db" rescue nil
140
+ File.delete "test3.db" rescue nil
@@ -0,0 +1,292 @@
1
+ if (ENV["SQLITE3_DRIVERS"] || "Native").split(/,/).include?("DL")
2
+ $:.unshift "../../../lib"
3
+
4
+ require 'sqlite3/constants'
5
+ require 'sqlite3/driver/dl/driver'
6
+ require 'test/unit'
7
+
8
+ class TC_DL_Driver < Test::Unit::TestCase
9
+
10
+ def utf16ify( str )
11
+ chars = str.split(//)
12
+ chars.zip(["\0"] * chars.length).flatten.join
13
+ end
14
+
15
+ def setup
16
+ @driver = SQLite3::Driver::DL::Driver.new
17
+ @dbname = "test.db"
18
+ @db = nil
19
+ end
20
+
21
+ def teardown
22
+ @driver.close( @db ) rescue nil
23
+ File.delete @dbname rescue nil
24
+ end
25
+
26
+ def test_open
27
+ result, @db = @driver.open( @dbname )
28
+ assert_equal SQLite3::Constants::ErrorCode::OK, result
29
+ assert File.exist?( @dbname )
30
+ end
31
+
32
+ def test_open_utf16
33
+ name = utf16ify( @dbname )
34
+ result, @db = @driver.open( name, true )
35
+ assert_equal SQLite3::Constants::ErrorCode::OK, result
36
+ assert File.exist?( @dbname )
37
+ end
38
+
39
+ def test_errmsg
40
+ result, @db = @driver.open( @dbname )
41
+ msg = @driver.errmsg( @db )
42
+ assert_equal msg, "not an error"
43
+ end
44
+
45
+ def test_errmsg16
46
+ result, @db = @driver.open( @dbname )
47
+ msg = @driver.errmsg( @db, true )
48
+ assert_equal msg, utf16ify( "not an error" )
49
+ end
50
+
51
+ def test_prepare
52
+ result, @db = @driver.open( @dbname )
53
+ sql = "create table foo ( a, b )"
54
+ result, handle, remainder = @driver.prepare( @db, sql )
55
+ assert_equal SQLite3::Constants::ErrorCode::OK, result
56
+ assert_equal "", remainder
57
+ @driver.finalize( handle )
58
+ end
59
+
60
+ def test_prepare_error
61
+ result, @db = @driver.open( @dbname )
62
+ sql = "create tble foo ( a, b )"
63
+ result, handle, remainder = @driver.prepare( @db, sql )
64
+ assert_equal SQLite3::Constants::ErrorCode::ERROR, result
65
+ end
66
+
67
+ def test_prepare_remainder
68
+ result, @db = @driver.open( @dbname )
69
+ sql = "create table foo ( a, b ); select * from foo"
70
+ result, handle, remainder = @driver.prepare( @db, sql )
71
+ assert_equal SQLite3::Constants::ErrorCode::OK, result
72
+ assert_equal " select * from foo", remainder
73
+ @driver.finalize( handle )
74
+ end
75
+
76
+ def test_prepare16
77
+ result, @db = @driver.open( @dbname )
78
+ sql = utf16ify( "create table foo ( a, b )" )
79
+ result, handle, remainder = @driver.prepare( @db, sql, true )
80
+ assert_equal SQLite3::Constants::ErrorCode::OK, result
81
+ assert_equal "", remainder
82
+ @driver.finalize( handle )
83
+ end
84
+
85
+ def test_prepare16_remainder
86
+ result, @db = @driver.open( @dbname )
87
+ sql = utf16ify( "create table foo ( a, b ); select * from foo" )
88
+ result, handle, remainder = @driver.prepare( @db, sql, true )
89
+ assert_equal SQLite3::Constants::ErrorCode::OK, result
90
+ assert_equal utf16ify( " select * from foo" ), remainder
91
+ @driver.finalize( handle )
92
+ end
93
+
94
+ def test_complete
95
+ assert @driver.complete?( "select * from foo;" )
96
+ end
97
+
98
+ def test_complete_fail
99
+ assert !@driver.complete?( "select * from foo" )
100
+ end
101
+
102
+ def test_complete16
103
+ assert @driver.complete?( utf16ify("select * from foo;"), true )
104
+ end
105
+
106
+ def create_foo
107
+ result, @db = @driver.open( @dbname )
108
+ sql = "create table foo ( a, b )"
109
+ result, handle, = @driver.prepare( @db, sql )
110
+ @driver.step( handle )
111
+ @driver.finalize( handle )
112
+ end
113
+
114
+ def populate_foo
115
+ create_foo
116
+ sql = "insert into foo values ( 100, 200 )"
117
+ result, handle, = @driver.prepare( @db, sql )
118
+ @driver.step( handle )
119
+ @driver.finalize( handle )
120
+ end
121
+
122
+ def test_step
123
+ populate_foo
124
+ sql = "select * from foo"
125
+ result, handle, = @driver.prepare( @db, sql )
126
+ result = @driver.step( handle )
127
+ assert_equal SQLite3::Constants::ErrorCode::ROW, result
128
+ result = @driver.step( handle )
129
+ assert_equal SQLite3::Constants::ErrorCode::DONE, result
130
+ @driver.finalize( handle )
131
+ end
132
+
133
+ def test_step_fail
134
+ populate_foo
135
+ sql = "select * from"
136
+ result, handle, = @driver.prepare( @db, sql )
137
+ result = @driver.step( handle )
138
+ assert_equal SQLite3::Constants::ErrorCode::MISUSE, result
139
+ @driver.finalize( handle )
140
+ end
141
+
142
+ def test_bind_blob
143
+ create_foo
144
+ sql = "insert into foo (b) values (?)"
145
+ result, handle, = @driver.prepare( @db, sql )
146
+ assert_equal SQLite3::Constants::ErrorCode::OK, result
147
+ result = @driver.bind_blob( handle, 1, "a\0b\1c\2d\0e" )
148
+ assert_equal SQLite3::Constants::ErrorCode::OK, result
149
+ result = @driver.step( handle )
150
+ assert_equal SQLite3::Constants::ErrorCode::DONE, result
151
+ result = @driver.finalize( handle )
152
+ assert_equal SQLite3::Constants::ErrorCode::OK, result
153
+ sql = "select b from foo"
154
+ result, handle, = @driver.prepare( @db, sql )
155
+ assert_equal SQLite3::Constants::ErrorCode::OK, result
156
+ result = @driver.step( handle )
157
+ assert_equal SQLite3::Constants::ErrorCode::ROW, result
158
+ assert_equal "a\0b\1c\2d\0e", @driver.column_blob( handle, 0 )
159
+ result = @driver.finalize( handle )
160
+ assert_equal SQLite3::Constants::ErrorCode::OK, result
161
+ end
162
+
163
+ def test_bind_double
164
+ create_foo
165
+ sql = "insert into foo (b) values (?)"
166
+ result, handle, = @driver.prepare( @db, sql )
167
+ assert_equal SQLite3::Constants::ErrorCode::OK, result
168
+ result = @driver.bind_double( handle, 1, 3.14 )
169
+ assert_equal SQLite3::Constants::ErrorCode::OK, result
170
+ result = @driver.step( handle )
171
+ assert_equal SQLite3::Constants::ErrorCode::DONE, result
172
+ result = @driver.finalize( handle )
173
+ assert_equal SQLite3::Constants::ErrorCode::OK, result
174
+ sql = "select b from foo"
175
+ result, handle, = @driver.prepare( @db, sql )
176
+ assert_equal SQLite3::Constants::ErrorCode::OK, result
177
+ result = @driver.step( handle )
178
+ assert_equal SQLite3::Constants::ErrorCode::ROW, result
179
+ assert_equal 3.14, @driver.column_double( handle, 0 )
180
+ result = @driver.finalize( handle )
181
+ assert_equal SQLite3::Constants::ErrorCode::OK, result
182
+ end
183
+
184
+ def test_bind_int
185
+ create_foo
186
+ sql = "insert into foo (b) values (?)"
187
+ result, handle, = @driver.prepare( @db, sql )
188
+ assert_equal SQLite3::Constants::ErrorCode::OK, result
189
+ result = @driver.bind_int( handle, 1, 14 )
190
+ assert_equal SQLite3::Constants::ErrorCode::OK, result
191
+ result = @driver.step( handle )
192
+ assert_equal SQLite3::Constants::ErrorCode::DONE, result
193
+ result = @driver.finalize( handle )
194
+ assert_equal SQLite3::Constants::ErrorCode::OK, result
195
+ sql = "select b from foo"
196
+ result, handle, = @driver.prepare( @db, sql )
197
+ assert_equal SQLite3::Constants::ErrorCode::OK, result
198
+ result = @driver.step( handle )
199
+ assert_equal SQLite3::Constants::ErrorCode::ROW, result
200
+ assert_equal 14, @driver.column_int( handle, 0 )
201
+ result = @driver.finalize( handle )
202
+ assert_equal SQLite3::Constants::ErrorCode::OK, result
203
+ end
204
+
205
+ def test_bind_null
206
+ create_foo
207
+ sql = "insert into foo (b) values (?)"
208
+ result, handle, = @driver.prepare( @db, sql )
209
+ assert_equal SQLite3::Constants::ErrorCode::OK, result
210
+ result = @driver.bind_null( handle, 1 )
211
+ assert_equal SQLite3::Constants::ErrorCode::OK, result
212
+ result = @driver.step( handle )
213
+ assert_equal SQLite3::Constants::ErrorCode::DONE, result
214
+ result = @driver.finalize( handle )
215
+ assert_equal SQLite3::Constants::ErrorCode::OK, result
216
+ sql = "select b from foo"
217
+ result, handle, = @driver.prepare( @db, sql )
218
+ assert_equal SQLite3::Constants::ErrorCode::OK, result
219
+ result = @driver.step( handle )
220
+ assert_equal SQLite3::Constants::ErrorCode::ROW, result
221
+ assert_equal SQLite3::Constants::ColumnType::NULL,
222
+ @driver.column_type( handle, 0 )
223
+ result = @driver.finalize( handle )
224
+ assert_equal SQLite3::Constants::ErrorCode::OK, result
225
+ end
226
+
227
+ def test_bind_text
228
+ create_foo
229
+ sql = "insert into foo (b) values (?)"
230
+ result, handle, = @driver.prepare( @db, sql )
231
+ assert_equal SQLite3::Constants::ErrorCode::OK, result
232
+ result = @driver.bind_text( handle, 1, "hello, world" )
233
+ assert_equal SQLite3::Constants::ErrorCode::OK, result
234
+ result = @driver.step( handle )
235
+ assert_equal SQLite3::Constants::ErrorCode::DONE, result
236
+ result = @driver.finalize( handle )
237
+ assert_equal SQLite3::Constants::ErrorCode::OK, result
238
+ sql = "select b from foo"
239
+ result, handle, = @driver.prepare( @db, sql )
240
+ assert_equal SQLite3::Constants::ErrorCode::OK, result
241
+ result = @driver.step( handle )
242
+ assert_equal SQLite3::Constants::ErrorCode::ROW, result
243
+ assert_equal "hello, world", @driver.column_text( handle, 0 )
244
+ result = @driver.finalize( handle )
245
+ assert_equal SQLite3::Constants::ErrorCode::OK, result
246
+ end
247
+
248
+ def test_bind_text16
249
+ create_foo
250
+ sql = "insert into foo (b) values (?)"
251
+ result, handle, = @driver.prepare( @db, sql )
252
+ assert_equal SQLite3::Constants::ErrorCode::OK, result
253
+ result = @driver.bind_text( handle, 1, utf16ify("hello, world"), true )
254
+ assert_equal SQLite3::Constants::ErrorCode::OK, result
255
+ result = @driver.step( handle )
256
+ assert_equal SQLite3::Constants::ErrorCode::DONE, result
257
+ result = @driver.finalize( handle )
258
+ assert_equal SQLite3::Constants::ErrorCode::OK, result
259
+ sql = "select b from foo"
260
+ result, handle, = @driver.prepare( @db, sql )
261
+ assert_equal SQLite3::Constants::ErrorCode::OK, result
262
+ result = @driver.step( handle )
263
+ assert_equal SQLite3::Constants::ErrorCode::ROW, result
264
+ assert_equal "hello, world", @driver.column_text( handle, 0 )
265
+ result = @driver.finalize( handle )
266
+ assert_equal SQLite3::Constants::ErrorCode::OK, result
267
+ end
268
+
269
+ def test_bind_parameter_index
270
+ create_foo
271
+ sql = "insert into foo (b) values (:hello)"
272
+ result, handle, = @driver.prepare( @db, sql )
273
+ assert_equal SQLite3::Constants::ErrorCode::OK, result
274
+ result = @driver.bind_parameter_index( handle, ":hello" )
275
+ assert_equal 1, result
276
+ result = @driver.bind_parameter_index( handle, ":foo" )
277
+ assert_equal 0, result
278
+ @driver.finalize( handle )
279
+ end
280
+
281
+ def test_bind_parameter_name
282
+ create_foo
283
+ sql = "insert into foo (a,b) values (?,:foo)"
284
+ result, handle, = @driver.prepare( @db, sql )
285
+ assert_equal SQLite3::Constants::ErrorCode::OK, result
286
+ assert_nil nil, @driver.bind_parameter_name(handle,1)
287
+ assert_equal ":foo", @driver.bind_parameter_name(handle,2)
288
+ @driver.finalize( handle )
289
+ end
290
+
291
+ end
292
+ end