femto-sqlite3 1.3.7

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 (53) hide show
  1. data/.gemtest +0 -0
  2. data/API_CHANGES.rdoc +50 -0
  3. data/CHANGELOG.rdoc +245 -0
  4. data/ChangeLog.cvs +88 -0
  5. data/LICENSE +27 -0
  6. data/Manifest.txt +50 -0
  7. data/README.rdoc +99 -0
  8. data/Rakefile +10 -0
  9. data/ext/sqlite3/backup.c +168 -0
  10. data/ext/sqlite3/backup.h +15 -0
  11. data/ext/sqlite3/database.c +822 -0
  12. data/ext/sqlite3/database.h +15 -0
  13. data/ext/sqlite3/exception.c +94 -0
  14. data/ext/sqlite3/exception.h +8 -0
  15. data/ext/sqlite3/extconf.rb +51 -0
  16. data/ext/sqlite3/sqlite3.c +40 -0
  17. data/ext/sqlite3/sqlite3_ruby.h +53 -0
  18. data/ext/sqlite3/statement.c +438 -0
  19. data/ext/sqlite3/statement.h +16 -0
  20. data/faq/faq.rb +145 -0
  21. data/faq/faq.yml +426 -0
  22. data/lib/sqlite3.rb +10 -0
  23. data/lib/sqlite3/constants.rb +49 -0
  24. data/lib/sqlite3/database.rb +579 -0
  25. data/lib/sqlite3/errors.rb +44 -0
  26. data/lib/sqlite3/pragmas.rb +280 -0
  27. data/lib/sqlite3/resultset.rb +195 -0
  28. data/lib/sqlite3/statement.rb +144 -0
  29. data/lib/sqlite3/translator.rb +118 -0
  30. data/lib/sqlite3/value.rb +57 -0
  31. data/lib/sqlite3/version.rb +25 -0
  32. data/setup.rb +1333 -0
  33. data/tasks/faq.rake +9 -0
  34. data/tasks/gem.rake +32 -0
  35. data/tasks/native.rake +37 -0
  36. data/tasks/vendor_sqlite3.rake +48 -0
  37. data/test/helper.rb +14 -0
  38. data/test/test_backup.rb +33 -0
  39. data/test/test_collation.rb +82 -0
  40. data/test/test_database.rb +350 -0
  41. data/test/test_database_readonly.rb +29 -0
  42. data/test/test_deprecated.rb +44 -0
  43. data/test/test_encoding.rb +121 -0
  44. data/test/test_integration.rb +555 -0
  45. data/test/test_integration_open_close.rb +30 -0
  46. data/test/test_integration_pending.rb +115 -0
  47. data/test/test_integration_resultset.rb +159 -0
  48. data/test/test_integration_statement.rb +194 -0
  49. data/test/test_result_set.rb +37 -0
  50. data/test/test_sqlite3.rb +9 -0
  51. data/test/test_statement.rb +249 -0
  52. data/test/test_statement_execute.rb +35 -0
  53. metadata +200 -0
@@ -0,0 +1,37 @@
1
+ require 'helper'
2
+
3
+ module SQLite3
4
+ class TestResultSet < SQLite3::TestCase
5
+ def test_each_hash
6
+ db = SQLite3::Database.new ':memory:'
7
+ db.execute "create table foo ( a integer primary key, b text )"
8
+ list = ('a'..'z').to_a
9
+ list.each do |t|
10
+ db.execute "insert into foo (b) values (\"#{t}\")"
11
+ end
12
+
13
+ rs = db.prepare('select * from foo').execute
14
+ rs.each_hash do |hash|
15
+ assert_equal list[hash['a'] - 1], hash['b']
16
+ end
17
+ end
18
+
19
+ def test_next_hash
20
+ db = SQLite3::Database.new ':memory:'
21
+ db.execute "create table foo ( a integer primary key, b text )"
22
+ list = ('a'..'z').to_a
23
+ list.each do |t|
24
+ db.execute "insert into foo (b) values (\"#{t}\")"
25
+ end
26
+
27
+ rs = db.prepare('select * from foo').execute
28
+ rows = []
29
+ while row = rs.next_hash
30
+ rows << row
31
+ end
32
+ rows.each do |hash|
33
+ assert_equal list[hash['a'] - 1], hash['b']
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,9 @@
1
+ require 'helper'
2
+
3
+ module SQLite3
4
+ class TestSQLite3 < SQLite3::TestCase
5
+ def test_libversion
6
+ assert_not_nil SQLite3.libversion
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,249 @@
1
+ require 'helper'
2
+
3
+ module SQLite3
4
+ class TestStatement < SQLite3::TestCase
5
+ def setup
6
+ @db = SQLite3::Database.new(':memory:')
7
+ @stmt = SQLite3::Statement.new(@db, "select 'foo'")
8
+ end
9
+
10
+ def test_double_close_does_not_segv
11
+ @db.execute 'CREATE TABLE "things" ("number" float NOT NULL)'
12
+
13
+ stmt = @db.prepare 'INSERT INTO things (number) VALUES (?)'
14
+ assert_raises(SQLite3::ConstraintException) { stmt.execute(nil) }
15
+
16
+ stmt.close
17
+
18
+ assert_raises(SQLite3::Exception) { stmt.close }
19
+ end
20
+
21
+ def test_raises_type_error
22
+ assert_raises(TypeError) do
23
+ SQLite3::Statement.new( @db, nil )
24
+ end
25
+ end
26
+
27
+ ###
28
+ # This method may not exist depending on how sqlite3 was compiled
29
+ def test_database_name
30
+ @db.execute('create table foo(text BLOB)')
31
+ @db.execute('insert into foo(text) values (?)',SQLite3::Blob.new('hello'))
32
+ stmt = @db.prepare('select text from foo')
33
+ if stmt.respond_to?(:database_name)
34
+ assert_equal 'main', stmt.database_name(0)
35
+ end
36
+ end
37
+
38
+ def test_prepare_blob
39
+ @db.execute('create table foo(text BLOB)')
40
+ stmt = @db.prepare('insert into foo(text) values (?)')
41
+ stmt.bind_param(1, SQLite3::Blob.new('hello'))
42
+ stmt.step
43
+ stmt.close
44
+ end
45
+
46
+ def test_select_blob
47
+ @db.execute('create table foo(text BLOB)')
48
+ @db.execute('insert into foo(text) values (?)',SQLite3::Blob.new('hello'))
49
+ assert_equal 'hello', @db.execute('select * from foo').first.first
50
+ end
51
+
52
+ def test_new
53
+ assert @stmt
54
+ end
55
+
56
+ def test_new_closed_handle
57
+ @db = SQLite3::Database.new(':memory:')
58
+ @db.close
59
+ assert_raises(ArgumentError) do
60
+ SQLite3::Statement.new(@db, 'select "foo"')
61
+ end
62
+ end
63
+
64
+ def test_new_with_remainder
65
+ stmt = SQLite3::Statement.new(@db, "select 'foo';bar")
66
+ assert_equal 'bar', stmt.remainder
67
+ end
68
+
69
+ def test_empty_remainder
70
+ assert_equal '', @stmt.remainder
71
+ end
72
+
73
+ def test_close
74
+ @stmt.close
75
+ assert @stmt.closed?
76
+ end
77
+
78
+ def test_double_close
79
+ @stmt.close
80
+ assert_raises(SQLite3::Exception) do
81
+ @stmt.close
82
+ end
83
+ end
84
+
85
+ def test_bind_param_string
86
+ stmt = SQLite3::Statement.new(@db, "select ?")
87
+ stmt.bind_param(1, "hello")
88
+ result = nil
89
+ stmt.each { |x| result = x }
90
+ assert_equal ['hello'], result
91
+ end
92
+
93
+ def test_bind_param_int
94
+ stmt = SQLite3::Statement.new(@db, "select ?")
95
+ stmt.bind_param(1, 10)
96
+ result = nil
97
+ stmt.each { |x| result = x }
98
+ assert_equal [10], result
99
+ end
100
+
101
+ def test_bind_nil
102
+ stmt = SQLite3::Statement.new(@db, "select ?")
103
+ stmt.bind_param(1, nil)
104
+ result = nil
105
+ stmt.each { |x| result = x }
106
+ assert_equal [nil], result
107
+ end
108
+
109
+ def test_bind_blobs
110
+ end
111
+
112
+ def test_bind_64
113
+ stmt = SQLite3::Statement.new(@db, "select ?")
114
+ stmt.bind_param(1, 2 ** 31)
115
+ result = nil
116
+ stmt.each { |x| result = x }
117
+ assert_equal [2 ** 31], result
118
+ end
119
+
120
+ def test_bind_double
121
+ stmt = SQLite3::Statement.new(@db, "select ?")
122
+ stmt.bind_param(1, 2.2)
123
+ result = nil
124
+ stmt.each { |x| result = x }
125
+ assert_equal [2.2], result
126
+ end
127
+
128
+ def test_named_bind
129
+ stmt = SQLite3::Statement.new(@db, "select :foo")
130
+ stmt.bind_param(':foo', 'hello')
131
+ result = nil
132
+ stmt.each { |x| result = x }
133
+ assert_equal ['hello'], result
134
+ end
135
+
136
+ def test_named_bind_no_colon
137
+ stmt = SQLite3::Statement.new(@db, "select :foo")
138
+ stmt.bind_param('foo', 'hello')
139
+ result = nil
140
+ stmt.each { |x| result = x }
141
+ assert_equal ['hello'], result
142
+ end
143
+
144
+ def test_named_bind_symbol
145
+ stmt = SQLite3::Statement.new(@db, "select :foo")
146
+ stmt.bind_param(:foo, 'hello')
147
+ result = nil
148
+ stmt.each { |x| result = x }
149
+ assert_equal ['hello'], result
150
+ end
151
+
152
+ def test_named_bind_not_found
153
+ stmt = SQLite3::Statement.new(@db, "select :foo")
154
+ assert_raises(SQLite3::Exception) do
155
+ stmt.bind_param('bar', 'hello')
156
+ end
157
+ end
158
+
159
+ def test_each
160
+ r = nil
161
+ @stmt.each do |row|
162
+ r = row
163
+ end
164
+ assert_equal(['foo'], r)
165
+ end
166
+
167
+ def test_reset!
168
+ r = []
169
+ @stmt.each { |row| r << row }
170
+ @stmt.reset!
171
+ @stmt.each { |row| r << row }
172
+ assert_equal [['foo'], ['foo']], r
173
+ end
174
+
175
+ def test_step
176
+ r = @stmt.step
177
+ assert_equal ['foo'], r
178
+ end
179
+
180
+ def test_tainted
181
+ r = @stmt.step
182
+ assert r.first.tainted?
183
+ end
184
+
185
+ def test_step_twice
186
+ assert_not_nil @stmt.step
187
+ assert !@stmt.done?
188
+ assert_nil @stmt.step
189
+ assert @stmt.done?
190
+
191
+ @stmt.reset!
192
+ assert !@stmt.done?
193
+ end
194
+
195
+ def test_step_never_moves_past_done
196
+ 10.times { @stmt.step }
197
+ @stmt.done?
198
+ end
199
+
200
+ def test_column_count
201
+ assert_equal 1, @stmt.column_count
202
+ end
203
+
204
+ def test_column_name
205
+ assert_equal "'foo'", @stmt.column_name(0)
206
+ assert_equal nil, @stmt.column_name(10)
207
+ end
208
+
209
+ def test_bind_parameter_count
210
+ stmt = SQLite3::Statement.new(@db, "select ?, ?, ?")
211
+ assert_equal 3, stmt.bind_parameter_count
212
+ end
213
+
214
+ def test_execute_with_varargs
215
+ stmt = @db.prepare('select ?, ?')
216
+ assert_equal [[nil, nil]], stmt.execute(nil, nil).to_a
217
+ end
218
+
219
+ def test_execute_with_hash
220
+ stmt = @db.prepare('select :n, :h')
221
+ assert_equal [[10, nil]], stmt.execute('n' => 10, 'h' => nil).to_a
222
+ end
223
+
224
+ def test_with_error
225
+ @db.execute('CREATE TABLE "employees" ("name" varchar(20) NOT NULL CONSTRAINT "index_employees_on_name" UNIQUE)')
226
+ stmt = @db.prepare("INSERT INTO Employees(name) VALUES(?)")
227
+ stmt.execute('employee-1')
228
+ stmt.execute('employee-1') rescue SQLite3::ConstraintException
229
+ stmt.reset!
230
+ assert_nothing_raised(SQLite3::ConstraintException) {
231
+ stmt.execute('employee-2')
232
+ }
233
+ end
234
+
235
+ def test_clear_bindings
236
+ stmt = @db.prepare('select ?, ?')
237
+ stmt.bind_param 1, "foo"
238
+ stmt.bind_param 2, "bar"
239
+
240
+ # We can't fetch bound parameters back out of sqlite3, so just call
241
+ # the clear_bindings! method and assert that nil is returned
242
+ stmt.clear_bindings!
243
+
244
+ while x = stmt.step
245
+ assert_equal [nil, nil], x
246
+ end
247
+ end
248
+ end
249
+ end
@@ -0,0 +1,35 @@
1
+ require 'helper'
2
+
3
+ module SQLite3
4
+ class TestStatementExecute < SQLite3::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 ADDED
@@ -0,0 +1,200 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: femto-sqlite3
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.3.7
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Jamis Buck
9
+ - Luis Lavena
10
+ - Aaron Patterson
11
+ autorequire:
12
+ bindir: bin
13
+ cert_chain: []
14
+ date: 2012-10-19 00:00:00.000000000 Z
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: rdoc
18
+ requirement: !ruby/object:Gem::Requirement
19
+ none: false
20
+ requirements:
21
+ - - ~>
22
+ - !ruby/object:Gem::Version
23
+ version: '3.10'
24
+ type: :development
25
+ prerelease: false
26
+ version_requirements: !ruby/object:Gem::Requirement
27
+ none: false
28
+ requirements:
29
+ - - ~>
30
+ - !ruby/object:Gem::Version
31
+ version: '3.10'
32
+ - !ruby/object:Gem::Dependency
33
+ name: rake-compiler
34
+ requirement: !ruby/object:Gem::Requirement
35
+ none: false
36
+ requirements:
37
+ - - ~>
38
+ - !ruby/object:Gem::Version
39
+ version: 0.7.0
40
+ type: :development
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ none: false
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: 0.7.0
48
+ - !ruby/object:Gem::Dependency
49
+ name: mini_portile
50
+ requirement: !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ~>
54
+ - !ruby/object:Gem::Version
55
+ version: 0.2.2
56
+ type: :development
57
+ prerelease: false
58
+ version_requirements: !ruby/object:Gem::Requirement
59
+ none: false
60
+ requirements:
61
+ - - ~>
62
+ - !ruby/object:Gem::Version
63
+ version: 0.2.2
64
+ - !ruby/object:Gem::Dependency
65
+ name: hoe
66
+ requirement: !ruby/object:Gem::Requirement
67
+ none: false
68
+ requirements:
69
+ - - ~>
70
+ - !ruby/object:Gem::Version
71
+ version: '3.1'
72
+ type: :development
73
+ prerelease: false
74
+ version_requirements: !ruby/object:Gem::Requirement
75
+ none: false
76
+ requirements:
77
+ - - ~>
78
+ - !ruby/object:Gem::Version
79
+ version: '3.1'
80
+ description: ! 'This module allows Ruby programs to interface with the SQLite3
81
+
82
+ database engine (http://www.sqlite.org). You must have the
83
+
84
+ SQLite engine installed in order to build this module.
85
+
86
+
87
+ Note that this module is only compatible with SQLite 3.6.16 or newer.'
88
+ email:
89
+ - jamis@37signals.com
90
+ - luislavena@gmail.com
91
+ - aaron@tenderlovemaking.com
92
+ executables: []
93
+ extensions:
94
+ - ext/sqlite3/extconf.rb
95
+ extra_rdoc_files:
96
+ - API_CHANGES.rdoc
97
+ - CHANGELOG.rdoc
98
+ - Manifest.txt
99
+ - README.rdoc
100
+ - ext/sqlite3/sqlite3.c
101
+ - ext/sqlite3/backup.c
102
+ - ext/sqlite3/exception.c
103
+ - ext/sqlite3/statement.c
104
+ - ext/sqlite3/database.c
105
+ files:
106
+ - API_CHANGES.rdoc
107
+ - CHANGELOG.rdoc
108
+ - ChangeLog.cvs
109
+ - LICENSE
110
+ - Manifest.txt
111
+ - README.rdoc
112
+ - Rakefile
113
+ - ext/sqlite3/backup.c
114
+ - ext/sqlite3/backup.h
115
+ - ext/sqlite3/database.c
116
+ - ext/sqlite3/database.h
117
+ - ext/sqlite3/exception.c
118
+ - ext/sqlite3/exception.h
119
+ - ext/sqlite3/extconf.rb
120
+ - ext/sqlite3/sqlite3.c
121
+ - ext/sqlite3/sqlite3_ruby.h
122
+ - ext/sqlite3/statement.c
123
+ - ext/sqlite3/statement.h
124
+ - faq/faq.rb
125
+ - faq/faq.yml
126
+ - lib/sqlite3.rb
127
+ - lib/sqlite3/constants.rb
128
+ - lib/sqlite3/database.rb
129
+ - lib/sqlite3/errors.rb
130
+ - lib/sqlite3/pragmas.rb
131
+ - lib/sqlite3/resultset.rb
132
+ - lib/sqlite3/statement.rb
133
+ - lib/sqlite3/translator.rb
134
+ - lib/sqlite3/value.rb
135
+ - lib/sqlite3/version.rb
136
+ - setup.rb
137
+ - tasks/faq.rake
138
+ - tasks/gem.rake
139
+ - tasks/native.rake
140
+ - tasks/vendor_sqlite3.rake
141
+ - test/helper.rb
142
+ - test/test_backup.rb
143
+ - test/test_collation.rb
144
+ - test/test_database.rb
145
+ - test/test_database_readonly.rb
146
+ - test/test_deprecated.rb
147
+ - test/test_encoding.rb
148
+ - test/test_integration.rb
149
+ - test/test_integration_open_close.rb
150
+ - test/test_integration_pending.rb
151
+ - test/test_integration_resultset.rb
152
+ - test/test_integration_statement.rb
153
+ - test/test_sqlite3.rb
154
+ - test/test_statement.rb
155
+ - test/test_statement_execute.rb
156
+ - test/test_result_set.rb
157
+ - .gemtest
158
+ homepage: http://github.com/luislavena/sqlite3-ruby
159
+ licenses: []
160
+ post_install_message:
161
+ rdoc_options:
162
+ - --main
163
+ - README.rdoc
164
+ require_paths:
165
+ - lib
166
+ required_ruby_version: !ruby/object:Gem::Requirement
167
+ none: false
168
+ requirements:
169
+ - - ! '>='
170
+ - !ruby/object:Gem::Version
171
+ version: 1.8.7
172
+ required_rubygems_version: !ruby/object:Gem::Requirement
173
+ none: false
174
+ requirements:
175
+ - - ! '>='
176
+ - !ruby/object:Gem::Version
177
+ version: 1.3.5
178
+ requirements: []
179
+ rubyforge_project: femto-sqlite3
180
+ rubygems_version: 1.8.23
181
+ signing_key:
182
+ specification_version: 3
183
+ summary: This module allows Ruby programs to interface with the SQLite3 database engine
184
+ (http://www.sqlite.org)
185
+ test_files:
186
+ - test/test_deprecated.rb
187
+ - test/test_integration.rb
188
+ - test/test_integration_statement.rb
189
+ - test/test_collation.rb
190
+ - test/test_database.rb
191
+ - test/test_statement.rb
192
+ - test/test_integration_open_close.rb
193
+ - test/test_result_set.rb
194
+ - test/test_statement_execute.rb
195
+ - test/test_database_readonly.rb
196
+ - test/test_sqlite3.rb
197
+ - test/test_integration_resultset.rb
198
+ - test/test_encoding.rb
199
+ - test/test_backup.rb
200
+ - test/test_integration_pending.rb