sqlite3 0.1.1 → 1.3.3.beta.1
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/API_CHANGES.rdoc +50 -0
- data/CHANGELOG.rdoc +177 -0
- data/ChangeLog.cvs +88 -0
- data/LICENSE +24 -17
- data/Manifest.txt +50 -0
- data/README.rdoc +100 -4
- data/Rakefile +10 -0
- data/ext/sqlite3/backup.c +164 -0
- data/ext/sqlite3/backup.h +15 -0
- data/ext/sqlite3/database.c +762 -0
- data/ext/sqlite3/database.h +15 -0
- data/ext/sqlite3/exception.c +94 -0
- data/ext/sqlite3/exception.h +8 -0
- data/ext/sqlite3/extconf.rb +47 -0
- data/ext/sqlite3/sqlite3.c +36 -0
- data/ext/sqlite3/sqlite3_ruby.h +44 -0
- data/ext/sqlite3/statement.c +419 -0
- data/ext/sqlite3/statement.h +16 -0
- data/faq/faq.rb +145 -0
- data/faq/faq.yml +426 -0
- data/lib/sqlite3.rb +9 -12
- data/lib/sqlite3/constants.rb +46 -72
- data/lib/sqlite3/database.rb +415 -140
- data/lib/sqlite3/errors.rb +1 -56
- data/lib/sqlite3/pragmas.rb +246 -63
- data/lib/sqlite3/resultset.rb +30 -112
- data/lib/sqlite3/statement.rb +42 -108
- data/lib/sqlite3/translator.rb +118 -0
- data/lib/sqlite3/value.rb +57 -0
- data/lib/sqlite3/version.rb +23 -1
- data/setup.rb +1333 -0
- data/tasks/faq.rake +9 -0
- data/tasks/gem.rake +31 -0
- data/tasks/native.rake +61 -0
- data/tasks/vendor_sqlite3.rake +104 -0
- data/test/helper.rb +3 -0
- data/test/test_backup.rb +33 -0
- data/test/test_collation.rb +82 -0
- data/test/test_database.rb +312 -0
- data/test/test_database_readonly.rb +29 -0
- data/test/test_deprecated.rb +37 -0
- data/test/test_encoding.rb +119 -0
- data/test/test_integration.rb +544 -0
- data/test/test_integration_open_close.rb +30 -0
- data/test/test_integration_pending.rb +115 -0
- data/test/test_integration_resultset.rb +156 -0
- data/test/test_integration_statement.rb +194 -0
- data/test/test_sqlite3.rb +9 -0
- data/test/test_statement.rb +207 -0
- data/test/test_statement_execute.rb +35 -0
- metadata +124 -67
- data/lib/sqlite3/api.rb +0 -52
- data/lib/sqlite3/driver.rb +0 -138
- data/lib/sqlite3/encoding.rb +0 -43
- data/lib/sqlite3/extensions.rb +0 -27
@@ -0,0 +1,207 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
module SQLite3
|
4
|
+
class TestStatement < Test::Unit::TestCase
|
5
|
+
def setup
|
6
|
+
@db = SQLite3::Database.new(':memory:')
|
7
|
+
@stmt = SQLite3::Statement.new(@db, "select 'foo'")
|
8
|
+
end
|
9
|
+
|
10
|
+
###
|
11
|
+
# This method may not exist depending on how sqlite3 was compiled
|
12
|
+
def test_database_name
|
13
|
+
@db.execute('create table foo(text BLOB)')
|
14
|
+
@db.execute('insert into foo(text) values (?)',SQLite3::Blob.new('hello'))
|
15
|
+
stmt = @db.prepare('select text from foo')
|
16
|
+
if stmt.respond_to?(:database_name)
|
17
|
+
assert_equal 'main', stmt.database_name(0)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_prepare_blob
|
22
|
+
@db.execute('create table foo(text BLOB)')
|
23
|
+
stmt = @db.prepare('insert into foo(text) values (?)')
|
24
|
+
stmt.bind_param(1, SQLite3::Blob.new('hello'))
|
25
|
+
stmt.step
|
26
|
+
stmt.close
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_select_blob
|
30
|
+
@db.execute('create table foo(text BLOB)')
|
31
|
+
@db.execute('insert into foo(text) values (?)',SQLite3::Blob.new('hello'))
|
32
|
+
assert_equal 'hello', @db.execute('select * from foo').first.first
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_new
|
36
|
+
assert @stmt
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_new_closed_handle
|
40
|
+
@db = SQLite3::Database.new(':memory:')
|
41
|
+
@db.close
|
42
|
+
assert_raises(ArgumentError) do
|
43
|
+
SQLite3::Statement.new(@db, 'select "foo"')
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_new_with_remainder
|
48
|
+
stmt = SQLite3::Statement.new(@db, "select 'foo';bar")
|
49
|
+
assert_equal 'bar', stmt.remainder
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_empty_remainder
|
53
|
+
assert_equal '', @stmt.remainder
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_close
|
57
|
+
@stmt.close
|
58
|
+
assert @stmt.closed?
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_double_close
|
62
|
+
@stmt.close
|
63
|
+
assert_raises(SQLite3::Exception) do
|
64
|
+
@stmt.close
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_bind_param_string
|
69
|
+
stmt = SQLite3::Statement.new(@db, "select ?")
|
70
|
+
stmt.bind_param(1, "hello")
|
71
|
+
result = nil
|
72
|
+
stmt.each { |x| result = x }
|
73
|
+
assert_equal ['hello'], result
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_bind_param_int
|
77
|
+
stmt = SQLite3::Statement.new(@db, "select ?")
|
78
|
+
stmt.bind_param(1, 10)
|
79
|
+
result = nil
|
80
|
+
stmt.each { |x| result = x }
|
81
|
+
assert_equal [10], result
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_bind_nil
|
85
|
+
stmt = SQLite3::Statement.new(@db, "select ?")
|
86
|
+
stmt.bind_param(1, nil)
|
87
|
+
result = nil
|
88
|
+
stmt.each { |x| result = x }
|
89
|
+
assert_equal [nil], result
|
90
|
+
end
|
91
|
+
|
92
|
+
def test_bind_blobs
|
93
|
+
end
|
94
|
+
|
95
|
+
def test_bind_64
|
96
|
+
stmt = SQLite3::Statement.new(@db, "select ?")
|
97
|
+
stmt.bind_param(1, 2 ** 31)
|
98
|
+
result = nil
|
99
|
+
stmt.each { |x| result = x }
|
100
|
+
assert_equal [2 ** 31], result
|
101
|
+
end
|
102
|
+
|
103
|
+
def test_bind_double
|
104
|
+
stmt = SQLite3::Statement.new(@db, "select ?")
|
105
|
+
stmt.bind_param(1, 2.2)
|
106
|
+
result = nil
|
107
|
+
stmt.each { |x| result = x }
|
108
|
+
assert_equal [2.2], result
|
109
|
+
end
|
110
|
+
|
111
|
+
def test_named_bind
|
112
|
+
stmt = SQLite3::Statement.new(@db, "select :foo")
|
113
|
+
stmt.bind_param(':foo', 'hello')
|
114
|
+
result = nil
|
115
|
+
stmt.each { |x| result = x }
|
116
|
+
assert_equal ['hello'], result
|
117
|
+
end
|
118
|
+
|
119
|
+
def test_named_bind_no_colon
|
120
|
+
stmt = SQLite3::Statement.new(@db, "select :foo")
|
121
|
+
stmt.bind_param('foo', 'hello')
|
122
|
+
result = nil
|
123
|
+
stmt.each { |x| result = x }
|
124
|
+
assert_equal ['hello'], result
|
125
|
+
end
|
126
|
+
|
127
|
+
def test_named_bind_symbol
|
128
|
+
stmt = SQLite3::Statement.new(@db, "select :foo")
|
129
|
+
stmt.bind_param(:foo, 'hello')
|
130
|
+
result = nil
|
131
|
+
stmt.each { |x| result = x }
|
132
|
+
assert_equal ['hello'], result
|
133
|
+
end
|
134
|
+
|
135
|
+
def test_named_bind_not_found
|
136
|
+
stmt = SQLite3::Statement.new(@db, "select :foo")
|
137
|
+
assert_raises(SQLite3::Exception) do
|
138
|
+
stmt.bind_param('bar', 'hello')
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
def test_each
|
143
|
+
r = nil
|
144
|
+
@stmt.each do |row|
|
145
|
+
r = row
|
146
|
+
end
|
147
|
+
assert_equal(['foo'], r)
|
148
|
+
end
|
149
|
+
|
150
|
+
def test_reset!
|
151
|
+
r = []
|
152
|
+
@stmt.each { |row| r << row }
|
153
|
+
@stmt.reset!
|
154
|
+
@stmt.each { |row| r << row }
|
155
|
+
assert_equal [['foo'], ['foo']], r
|
156
|
+
end
|
157
|
+
|
158
|
+
def test_step
|
159
|
+
r = @stmt.step
|
160
|
+
assert_equal ['foo'], r
|
161
|
+
end
|
162
|
+
|
163
|
+
def test_tainted
|
164
|
+
r = @stmt.step
|
165
|
+
assert r.first.tainted?
|
166
|
+
end
|
167
|
+
|
168
|
+
def test_step_twice
|
169
|
+
assert_not_nil @stmt.step
|
170
|
+
assert !@stmt.done?
|
171
|
+
assert_nil @stmt.step
|
172
|
+
assert @stmt.done?
|
173
|
+
|
174
|
+
@stmt.reset!
|
175
|
+
assert !@stmt.done?
|
176
|
+
end
|
177
|
+
|
178
|
+
def test_step_never_moves_past_done
|
179
|
+
10.times { @stmt.step }
|
180
|
+
@stmt.done?
|
181
|
+
end
|
182
|
+
|
183
|
+
def test_column_count
|
184
|
+
assert_equal 1, @stmt.column_count
|
185
|
+
end
|
186
|
+
|
187
|
+
def test_column_name
|
188
|
+
assert_equal "'foo'", @stmt.column_name(0)
|
189
|
+
assert_equal nil, @stmt.column_name(10)
|
190
|
+
end
|
191
|
+
|
192
|
+
def test_bind_parameter_count
|
193
|
+
stmt = SQLite3::Statement.new(@db, "select ?, ?, ?")
|
194
|
+
assert_equal 3, stmt.bind_parameter_count
|
195
|
+
end
|
196
|
+
|
197
|
+
def test_execute_with_varargs
|
198
|
+
stmt = @db.prepare('select ?, ?')
|
199
|
+
assert_equal [[nil, nil]], stmt.execute(nil, nil).to_a
|
200
|
+
end
|
201
|
+
|
202
|
+
def test_execute_with_hash
|
203
|
+
stmt = @db.prepare('select :n, :h')
|
204
|
+
assert_equal [[10, nil]], stmt.execute('n' => 10, 'h' => nil).to_a
|
205
|
+
end
|
206
|
+
end
|
207
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
module SQLite3
|
4
|
+
class TestStatementExecute < Test::Unit::TestCase
|
5
|
+
def setup
|
6
|
+
@db = SQLite3::Database.new(':memory:')
|
7
|
+
@db.execute_batch(
|
8
|
+
"CREATE TABLE items (id integer PRIMARY KEY, number integer)")
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_execute_insert
|
12
|
+
ps = @db.prepare("INSERT INTO items (number) VALUES (:n)")
|
13
|
+
ps.execute('n'=>10)
|
14
|
+
assert_equal 1, @db.get_first_value("SELECT count(*) FROM items")
|
15
|
+
ps.close
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_execute_update
|
19
|
+
@db.execute("INSERT INTO items (number) VALUES (?)", [10])
|
20
|
+
|
21
|
+
ps = @db.prepare("UPDATE items SET number = :new WHERE number = :old")
|
22
|
+
ps.execute('old'=>10, 'new'=>20)
|
23
|
+
assert_equal 20, @db.get_first_value("SELECT number FROM items")
|
24
|
+
ps.close
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_execute_delete
|
28
|
+
@db.execute("INSERT INTO items (number) VALUES (?)", [20])
|
29
|
+
ps = @db.prepare("DELETE FROM items WHERE number = :n")
|
30
|
+
ps.execute('n' => 20)
|
31
|
+
assert_equal 0, @db.get_first_value("SELECT count(*) FROM items")
|
32
|
+
ps.close
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
metadata
CHANGED
@@ -1,128 +1,185 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sqlite3
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 62196393
|
5
|
+
prerelease: true
|
5
6
|
segments:
|
6
|
-
- 0
|
7
7
|
- 1
|
8
|
+
- 3
|
9
|
+
- 3
|
10
|
+
- beta
|
8
11
|
- 1
|
9
|
-
version:
|
12
|
+
version: 1.3.3.beta.1
|
10
13
|
platform: ruby
|
11
14
|
authors:
|
12
|
-
-
|
15
|
+
- Jamis Buck
|
16
|
+
- Luis Lavena
|
17
|
+
- Aaron Patterson
|
13
18
|
autorequire:
|
14
19
|
bindir: bin
|
15
20
|
cert_chain: []
|
16
21
|
|
17
|
-
date:
|
22
|
+
date: 2011-01-14 00:00:00 -08:00
|
18
23
|
default_executable:
|
19
24
|
dependencies:
|
20
25
|
- !ruby/object:Gem::Dependency
|
21
|
-
name:
|
26
|
+
name: rake-compiler
|
22
27
|
prerelease: false
|
23
28
|
requirement: &id001 !ruby/object:Gem::Requirement
|
29
|
+
none: false
|
24
30
|
requirements:
|
25
|
-
- -
|
31
|
+
- - ~>
|
26
32
|
- !ruby/object:Gem::Version
|
33
|
+
hash: 3
|
27
34
|
segments:
|
28
35
|
- 0
|
29
|
-
-
|
30
|
-
-
|
31
|
-
version: 0.
|
32
|
-
type: :
|
36
|
+
- 7
|
37
|
+
- 0
|
38
|
+
version: 0.7.0
|
39
|
+
type: :development
|
33
40
|
version_requirements: *id001
|
34
41
|
- !ruby/object:Gem::Dependency
|
35
|
-
name:
|
42
|
+
name: hoe
|
36
43
|
prerelease: false
|
37
44
|
requirement: &id002 !ruby/object:Gem::Requirement
|
45
|
+
none: false
|
38
46
|
requirements:
|
39
47
|
- - ">="
|
40
48
|
- !ruby/object:Gem::Version
|
49
|
+
hash: 47
|
41
50
|
segments:
|
42
51
|
- 2
|
52
|
+
- 8
|
43
53
|
- 0
|
44
|
-
version:
|
54
|
+
version: 2.8.0
|
45
55
|
type: :development
|
46
56
|
version_requirements: *id002
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
- 5
|
58
|
-
version: 2.3.5
|
59
|
-
type: :development
|
60
|
-
version_requirements: *id003
|
61
|
-
description: Experimental SQLite3 FFI bindings for Ruby 1.9 with encoding support
|
62
|
-
email: qoobaa@gmail.com
|
57
|
+
description: |-
|
58
|
+
This module allows Ruby programs to interface with the SQLite3
|
59
|
+
database engine (http://www.sqlite.org). You must have the
|
60
|
+
SQLite engine installed in order to build this module.
|
61
|
+
|
62
|
+
Note that this module is NOT compatible with SQLite 2.x.
|
63
|
+
email:
|
64
|
+
- jamis@37signals.com
|
65
|
+
- luislavena@gmail.com
|
66
|
+
- aaron@tenderlovemaking.com
|
63
67
|
executables: []
|
64
68
|
|
65
|
-
extensions:
|
66
|
-
|
67
|
-
extra_rdoc_files:
|
68
|
-
|
69
|
+
extensions:
|
70
|
+
- ext/sqlite3/extconf.rb
|
71
|
+
extra_rdoc_files:
|
72
|
+
- Manifest.txt
|
73
|
+
- API_CHANGES.rdoc
|
74
|
+
- CHANGELOG.rdoc
|
75
|
+
- README.rdoc
|
76
|
+
- ext/sqlite3/backup.c
|
77
|
+
- ext/sqlite3/database.c
|
78
|
+
- ext/sqlite3/exception.c
|
79
|
+
- ext/sqlite3/sqlite3.c
|
80
|
+
- ext/sqlite3/statement.c
|
69
81
|
files:
|
70
|
-
-
|
71
|
-
-
|
72
|
-
-
|
82
|
+
- API_CHANGES.rdoc
|
83
|
+
- CHANGELOG.rdoc
|
84
|
+
- ChangeLog.cvs
|
85
|
+
- LICENSE
|
86
|
+
- Manifest.txt
|
87
|
+
- README.rdoc
|
88
|
+
- Rakefile
|
89
|
+
- ext/sqlite3/backup.c
|
90
|
+
- ext/sqlite3/backup.h
|
91
|
+
- ext/sqlite3/database.c
|
92
|
+
- ext/sqlite3/database.h
|
93
|
+
- ext/sqlite3/exception.c
|
94
|
+
- ext/sqlite3/exception.h
|
95
|
+
- ext/sqlite3/extconf.rb
|
96
|
+
- ext/sqlite3/sqlite3.c
|
97
|
+
- ext/sqlite3/sqlite3_ruby.h
|
98
|
+
- ext/sqlite3/statement.c
|
99
|
+
- ext/sqlite3/statement.h
|
100
|
+
- faq/faq.rb
|
101
|
+
- faq/faq.yml
|
102
|
+
- lib/sqlite3.rb
|
103
|
+
- lib/sqlite3/constants.rb
|
73
104
|
- lib/sqlite3/database.rb
|
105
|
+
- lib/sqlite3/errors.rb
|
106
|
+
- lib/sqlite3/pragmas.rb
|
74
107
|
- lib/sqlite3/resultset.rb
|
75
|
-
- lib/sqlite3/
|
76
|
-
- lib/sqlite3/
|
77
|
-
- lib/sqlite3/
|
108
|
+
- lib/sqlite3/statement.rb
|
109
|
+
- lib/sqlite3/translator.rb
|
110
|
+
- lib/sqlite3/value.rb
|
78
111
|
- lib/sqlite3/version.rb
|
79
|
-
-
|
80
|
-
-
|
81
|
-
-
|
82
|
-
-
|
83
|
-
-
|
112
|
+
- setup.rb
|
113
|
+
- tasks/faq.rake
|
114
|
+
- tasks/gem.rake
|
115
|
+
- tasks/native.rake
|
116
|
+
- tasks/vendor_sqlite3.rake
|
117
|
+
- test/helper.rb
|
118
|
+
- test/test_backup.rb
|
119
|
+
- test/test_collation.rb
|
120
|
+
- test/test_database.rb
|
121
|
+
- test/test_database_readonly.rb
|
122
|
+
- test/test_deprecated.rb
|
123
|
+
- test/test_encoding.rb
|
124
|
+
- test/test_integration.rb
|
125
|
+
- test/test_integration_open_close.rb
|
126
|
+
- test/test_integration_pending.rb
|
127
|
+
- test/test_integration_resultset.rb
|
128
|
+
- test/test_integration_statement.rb
|
129
|
+
- test/test_sqlite3.rb
|
130
|
+
- test/test_statement.rb
|
131
|
+
- test/test_statement_execute.rb
|
84
132
|
has_rdoc: true
|
85
|
-
homepage: http://github.com/
|
133
|
+
homepage: http://github.com/luislavena/sqlite3-ruby
|
86
134
|
licenses: []
|
87
135
|
|
88
|
-
post_install_message:
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
If you need native bindings for Ruby 1.8/1.9 - install sqlite3-ruby
|
93
|
-
instead. You may need to uninstall this sqlite3 gem as well.
|
94
|
-
|
95
|
-
Thank you for installing sqlite3 gem! Suggestions: qoobaa@gmail.com
|
96
|
-
================================================================================
|
97
|
-
|
98
|
-
rdoc_options: []
|
99
|
-
|
136
|
+
post_install_message:
|
137
|
+
rdoc_options:
|
138
|
+
- --main
|
139
|
+
- README.rdoc
|
100
140
|
require_paths:
|
101
141
|
- lib
|
102
142
|
required_ruby_version: !ruby/object:Gem::Requirement
|
143
|
+
none: false
|
103
144
|
requirements:
|
104
145
|
- - ">="
|
105
146
|
- !ruby/object:Gem::Version
|
147
|
+
hash: 57
|
106
148
|
segments:
|
107
149
|
- 1
|
108
|
-
-
|
109
|
-
-
|
110
|
-
version: 1.
|
150
|
+
- 8
|
151
|
+
- 7
|
152
|
+
version: 1.8.7
|
111
153
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
154
|
+
none: false
|
112
155
|
requirements:
|
113
156
|
- - ">="
|
114
157
|
- !ruby/object:Gem::Version
|
158
|
+
hash: 17
|
115
159
|
segments:
|
116
160
|
- 1
|
117
161
|
- 3
|
118
|
-
-
|
119
|
-
version: 1.3.
|
162
|
+
- 5
|
163
|
+
version: 1.3.5
|
120
164
|
requirements: []
|
121
165
|
|
122
|
-
rubyforge_project:
|
123
|
-
rubygems_version: 1.3.
|
166
|
+
rubyforge_project: sqlite3
|
167
|
+
rubygems_version: 1.3.7
|
124
168
|
signing_key:
|
125
169
|
specification_version: 3
|
126
|
-
summary:
|
127
|
-
test_files:
|
128
|
-
|
170
|
+
summary: This module allows Ruby programs to interface with the SQLite3 database engine (http://www.sqlite.org)
|
171
|
+
test_files:
|
172
|
+
- test/test_backup.rb
|
173
|
+
- test/test_collation.rb
|
174
|
+
- test/test_database.rb
|
175
|
+
- test/test_database_readonly.rb
|
176
|
+
- test/test_deprecated.rb
|
177
|
+
- test/test_encoding.rb
|
178
|
+
- test/test_integration.rb
|
179
|
+
- test/test_integration_open_close.rb
|
180
|
+
- test/test_integration_pending.rb
|
181
|
+
- test/test_integration_resultset.rb
|
182
|
+
- test/test_integration_statement.rb
|
183
|
+
- test/test_sqlite3.rb
|
184
|
+
- test/test_statement.rb
|
185
|
+
- test/test_statement_execute.rb
|