femto-sqlite3 1.3.7

Sign up to get free protection for your applications and to get access to all the features.
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