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.
Files changed (55) hide show
  1. data/API_CHANGES.rdoc +50 -0
  2. data/CHANGELOG.rdoc +177 -0
  3. data/ChangeLog.cvs +88 -0
  4. data/LICENSE +24 -17
  5. data/Manifest.txt +50 -0
  6. data/README.rdoc +100 -4
  7. data/Rakefile +10 -0
  8. data/ext/sqlite3/backup.c +164 -0
  9. data/ext/sqlite3/backup.h +15 -0
  10. data/ext/sqlite3/database.c +762 -0
  11. data/ext/sqlite3/database.h +15 -0
  12. data/ext/sqlite3/exception.c +94 -0
  13. data/ext/sqlite3/exception.h +8 -0
  14. data/ext/sqlite3/extconf.rb +47 -0
  15. data/ext/sqlite3/sqlite3.c +36 -0
  16. data/ext/sqlite3/sqlite3_ruby.h +44 -0
  17. data/ext/sqlite3/statement.c +419 -0
  18. data/ext/sqlite3/statement.h +16 -0
  19. data/faq/faq.rb +145 -0
  20. data/faq/faq.yml +426 -0
  21. data/lib/sqlite3.rb +9 -12
  22. data/lib/sqlite3/constants.rb +46 -72
  23. data/lib/sqlite3/database.rb +415 -140
  24. data/lib/sqlite3/errors.rb +1 -56
  25. data/lib/sqlite3/pragmas.rb +246 -63
  26. data/lib/sqlite3/resultset.rb +30 -112
  27. data/lib/sqlite3/statement.rb +42 -108
  28. data/lib/sqlite3/translator.rb +118 -0
  29. data/lib/sqlite3/value.rb +57 -0
  30. data/lib/sqlite3/version.rb +23 -1
  31. data/setup.rb +1333 -0
  32. data/tasks/faq.rake +9 -0
  33. data/tasks/gem.rake +31 -0
  34. data/tasks/native.rake +61 -0
  35. data/tasks/vendor_sqlite3.rake +104 -0
  36. data/test/helper.rb +3 -0
  37. data/test/test_backup.rb +33 -0
  38. data/test/test_collation.rb +82 -0
  39. data/test/test_database.rb +312 -0
  40. data/test/test_database_readonly.rb +29 -0
  41. data/test/test_deprecated.rb +37 -0
  42. data/test/test_encoding.rb +119 -0
  43. data/test/test_integration.rb +544 -0
  44. data/test/test_integration_open_close.rb +30 -0
  45. data/test/test_integration_pending.rb +115 -0
  46. data/test/test_integration_resultset.rb +156 -0
  47. data/test/test_integration_statement.rb +194 -0
  48. data/test/test_sqlite3.rb +9 -0
  49. data/test/test_statement.rb +207 -0
  50. data/test/test_statement_execute.rb +35 -0
  51. metadata +124 -67
  52. data/lib/sqlite3/api.rb +0 -52
  53. data/lib/sqlite3/driver.rb +0 -138
  54. data/lib/sqlite3/encoding.rb +0 -43
  55. data/lib/sqlite3/extensions.rb +0 -27
@@ -0,0 +1,9 @@
1
+ require 'helper'
2
+
3
+ module SQLite3
4
+ class TestSQLite3 < Test::Unit::TestCase
5
+ def test_libversion
6
+ assert_not_nil SQLite3.libversion
7
+ end
8
+ end
9
+ end
@@ -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
- prerelease: false
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: 0.1.1
12
+ version: 1.3.3.beta.1
10
13
  platform: ruby
11
14
  authors:
12
- - "Jakub Ku\xC5\xBAma"
15
+ - Jamis Buck
16
+ - Luis Lavena
17
+ - Aaron Patterson
13
18
  autorequire:
14
19
  bindir: bin
15
20
  cert_chain: []
16
21
 
17
- date: 2010-05-08 00:00:00 +02:00
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: ffi
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
- - 6
30
- - 3
31
- version: 0.6.3
32
- type: :runtime
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: test-unit
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: "2.0"
54
+ version: 2.8.0
45
55
  type: :development
46
56
  version_requirements: *id002
47
- - !ruby/object:Gem::Dependency
48
- name: activerecord
49
- prerelease: false
50
- requirement: &id003 !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- segments:
55
- - 2
56
- - 3
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
- - lib/sqlite3/statement.rb
71
- - lib/sqlite3/pragmas.rb
72
- - lib/sqlite3/api.rb
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/extensions.rb
76
- - lib/sqlite3/driver.rb
77
- - lib/sqlite3/constants.rb
108
+ - lib/sqlite3/statement.rb
109
+ - lib/sqlite3/translator.rb
110
+ - lib/sqlite3/value.rb
78
111
  - lib/sqlite3/version.rb
79
- - lib/sqlite3/encoding.rb
80
- - lib/sqlite3/errors.rb
81
- - lib/sqlite3.rb
82
- - LICENSE
83
- - README.rdoc
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/qoobaa/sqlite3
133
+ homepage: http://github.com/luislavena/sqlite3-ruby
86
134
  licenses: []
87
135
 
88
- post_install_message: |
89
- ==== WARNING ===================================================================
90
- This is an early alpha version of SQLite3/Ruby FFI bindings!
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
- - 9
109
- - 1
110
- version: 1.9.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
- - 6
119
- version: 1.3.6
162
+ - 5
163
+ version: 1.3.5
120
164
  requirements: []
121
165
 
122
- rubyforge_project:
123
- rubygems_version: 1.3.6
166
+ rubyforge_project: sqlite3
167
+ rubygems_version: 1.3.7
124
168
  signing_key:
125
169
  specification_version: 3
126
- summary: SQLite3 FFI bindings for Ruby 1.9
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