sqlite3 0.1.1 → 1.3.3.beta.1

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