amalgalite 0.4.2-x86-mswin32-60

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 (83) hide show
  1. data/HISTORY +81 -0
  2. data/LICENSE +29 -0
  3. data/README +40 -0
  4. data/bin/amalgalite-pack-into-db +155 -0
  5. data/examples/a.rb +9 -0
  6. data/examples/blob.rb +105 -0
  7. data/examples/bootstrap.rb +36 -0
  8. data/examples/gem-db.rb +94 -0
  9. data/examples/requires.rb +54 -0
  10. data/examples/schema-info.rb +34 -0
  11. data/ext/amalgalite3.c +201 -0
  12. data/ext/amalgalite3.h +121 -0
  13. data/ext/amalgalite3_blob.c +241 -0
  14. data/ext/amalgalite3_constants.c +221 -0
  15. data/ext/amalgalite3_database.c +550 -0
  16. data/ext/amalgalite3_requires_bootstrap.c +210 -0
  17. data/ext/amalgalite3_statement.c +628 -0
  18. data/ext/extconf.rb +19 -0
  19. data/ext/gen_constants.rb +130 -0
  20. data/ext/rbconfig-mingw.rb +178 -0
  21. data/ext/sqlite3.c +97092 -0
  22. data/ext/sqlite3.h +6364 -0
  23. data/ext/sqlite3_options.h +4 -0
  24. data/ext/sqlite3ext.h +372 -0
  25. data/gemspec.rb +55 -0
  26. data/lib/amalgalite.rb +33 -0
  27. data/lib/amalgalite/blob.rb +186 -0
  28. data/lib/amalgalite/boolean.rb +42 -0
  29. data/lib/amalgalite/column.rb +86 -0
  30. data/lib/amalgalite/core_ext/kernel/require.rb +14 -0
  31. data/lib/amalgalite/database.rb +514 -0
  32. data/lib/amalgalite/index.rb +43 -0
  33. data/lib/amalgalite/paths.rb +70 -0
  34. data/lib/amalgalite/profile_tap.rb +130 -0
  35. data/lib/amalgalite/requires.rb +112 -0
  36. data/lib/amalgalite/schema.rb +115 -0
  37. data/lib/amalgalite/sqlite3.rb +6 -0
  38. data/lib/amalgalite/sqlite3/constants.rb +82 -0
  39. data/lib/amalgalite/sqlite3/database/status.rb +69 -0
  40. data/lib/amalgalite/sqlite3/status.rb +61 -0
  41. data/lib/amalgalite/sqlite3/version.rb +38 -0
  42. data/lib/amalgalite/statement.rb +394 -0
  43. data/lib/amalgalite/table.rb +36 -0
  44. data/lib/amalgalite/taps.rb +2 -0
  45. data/lib/amalgalite/taps/console.rb +27 -0
  46. data/lib/amalgalite/taps/io.rb +71 -0
  47. data/lib/amalgalite/trace_tap.rb +35 -0
  48. data/lib/amalgalite/type_map.rb +63 -0
  49. data/lib/amalgalite/type_maps/default_map.rb +167 -0
  50. data/lib/amalgalite/type_maps/storage_map.rb +41 -0
  51. data/lib/amalgalite/type_maps/text_map.rb +23 -0
  52. data/lib/amalgalite/version.rb +37 -0
  53. data/lib/amalgalite/view.rb +26 -0
  54. data/lib/amalgalite3.so +0 -0
  55. data/spec/amalgalite_spec.rb +4 -0
  56. data/spec/blob_spec.rb +81 -0
  57. data/spec/boolean_spec.rb +23 -0
  58. data/spec/database_spec.rb +238 -0
  59. data/spec/default_map_spec.rb +87 -0
  60. data/spec/integeration_spec.rb +111 -0
  61. data/spec/paths_spec.rb +28 -0
  62. data/spec/schema_spec.rb +60 -0
  63. data/spec/spec_helper.rb +25 -0
  64. data/spec/sqlite3/constants_spec.rb +65 -0
  65. data/spec/sqlite3/database_status_spec.rb +36 -0
  66. data/spec/sqlite3/status_spec.rb +18 -0
  67. data/spec/sqlite3/version_spec.rb +14 -0
  68. data/spec/sqlite3_spec.rb +23 -0
  69. data/spec/statement_spec.rb +134 -0
  70. data/spec/storage_map_spec.rb +41 -0
  71. data/spec/tap_spec.rb +59 -0
  72. data/spec/text_map_spec.rb +23 -0
  73. data/spec/type_map_spec.rb +17 -0
  74. data/spec/version_spec.rb +9 -0
  75. data/tasks/announce.rake +39 -0
  76. data/tasks/config.rb +110 -0
  77. data/tasks/distribution.rake +53 -0
  78. data/tasks/documentation.rake +33 -0
  79. data/tasks/extension.rake +100 -0
  80. data/tasks/rspec.rake +32 -0
  81. data/tasks/rubyforge.rake +59 -0
  82. data/tasks/utils.rb +80 -0
  83. metadata +192 -0
@@ -0,0 +1,23 @@
1
+ #--
2
+ # Copyright (c) 2008 Jeremy Hinegardner
3
+ # All rights reserved. See LICENSE and/or COPYING for details.
4
+ #++
5
+ #
6
+ require 'amalgalite/type_map'
7
+ require 'amalgalite3'
8
+
9
+ module Amalgalite::TypeMaps
10
+ ##
11
+ # An Amalagliate TypeMap that converts both bind parameters and result
12
+ # parameters to a String, no matter what.
13
+ #
14
+ class TextMap < ::Amalgalite::TypeMap
15
+ def bind_type_of( obj )
16
+ return ::Amalgalite::SQLite3::Constants::DataType::TEXT
17
+ end
18
+
19
+ def result_value_of( delcared_type, value )
20
+ return value.to_s
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,37 @@
1
+ #--
2
+ # Copyright (c) 2008 Jeremy Hinegardner
3
+ # All rights reserved. See LICENSE and/or COPYING for licensingn details
4
+ #++
5
+
6
+ module Amalgalite
7
+ # Version information for Amagalite
8
+ module Version
9
+
10
+ MAJOR = 0
11
+ MINOR = 4
12
+ BUILD = 2
13
+
14
+ #
15
+ # return the Version as an array of MAJOR, MINOR, BUILD
16
+ #
17
+ def self.to_a
18
+ [MAJOR, MINOR, BUILD]
19
+ end
20
+
21
+ # return the Version as a dotted String MAJOR.MINOR.BUILD
22
+ def self.to_s
23
+ to_a.join(".")
24
+ end
25
+
26
+ # return the Vesion as a hash
27
+ def self.to_hash
28
+ { :major => MAJOR, :minor => MINOR, :build => BUILD }
29
+ end
30
+
31
+ # Version string constant
32
+ STRING = Version.to_s.freeze
33
+ end
34
+
35
+ # Version string constant
36
+ VERSION = Version.to_s.freeze
37
+ end
@@ -0,0 +1,26 @@
1
+ #--
2
+ # Copyright (c) 2008 Jeremy Hinegardner
3
+ # All rights reserved. See LICENSE and/or COPYING for details.
4
+ #++
5
+
6
+ module Amalgalite
7
+ #
8
+ # a class representing the meta information about an SQLite view
9
+ #
10
+ class View
11
+ # the schame this view is assciated with
12
+ attr_accessor :schema
13
+
14
+ # the table name
15
+ attr_reader :name
16
+
17
+ # the original sql that was used to create this table
18
+ attr_reader :sql
19
+
20
+ def initialize( name, sql )
21
+ @name = name
22
+ @sql = sql
23
+ end
24
+ end
25
+ end
26
+
Binary file
@@ -0,0 +1,4 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__),"spec_helper.rb"))
2
+
3
+ describe Amalgalite do
4
+ end
data/spec/blob_spec.rb ADDED
@@ -0,0 +1,81 @@
1
+ require 'rubygems'
2
+ require 'spec'
3
+
4
+ $: << File.expand_path(File.join(File.dirname(__FILE__),"..","lib"))
5
+ require 'amalgalite'
6
+
7
+ describe Amalgalite::Blob do
8
+ DATA_FILE = File.expand_path( File.join( File.dirname(__FILE__), "iso-3166-country.txt" ) )
9
+ before(:each) do
10
+ @blob_db_name = File.join(File.dirname( __FILE__ ), "blob.db")
11
+ File.unlink @blob_db_name if File.exist?( @blob_db_name )
12
+ @db = Amalgalite::Database.new( @blob_db_name )
13
+ @schema_sql = <<-SQL
14
+ CREATE TABLE blobs(
15
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
16
+ name VARCHAR(128) NOT NULL UNIQUE,
17
+ data TEXT );
18
+ SQL
19
+ @db.execute( @schema_sql )
20
+ @junk_file = File.join( File.dirname(__FILE__), "test_output")
21
+ end
22
+
23
+ after(:each) do
24
+ @db.close
25
+ File.unlink @blob_db_name if File.exist?( @blob_db_name )
26
+ File.unlink @junk_file if File.exist?( @junk_file )
27
+ end
28
+
29
+ { :file => DATA_FILE,
30
+ :string => IO.read( DATA_FILE ),
31
+ :io => StringIO.new( IO.read( DATA_FILE ) ) }.each_pair do |style, data |
32
+ describe "inserts a blob from a #{style}" do
33
+ before(:each) do
34
+ column = @db.schema.tables['blobs'].columns['data']
35
+ @db.execute("INSERT INTO blobs(name, data) VALUES ($name, $data)",
36
+ { "$name" => DATA_FILE,
37
+ "$data" => Amalgalite::Blob.new( style => data,
38
+ :column => column ) } )
39
+ @db.execute("VACUUM")
40
+ end
41
+
42
+ after(:each) do
43
+ @db.execute("DELETE FROM blobs")
44
+ data.rewind if data.respond_to?( :rewind )
45
+ end
46
+
47
+ it "and retrieves the data as a single value" do
48
+ all_rows = @db.execute("SELECT name,data FROM blobs")
49
+ all_rows.size.should == 1;
50
+ all_rows.first['name'].should == DATA_FILE
51
+ all_rows.first['data'].should_not be_incremental
52
+ all_rows.first['data'].to_string_io.string.should == IO.read( DATA_FILE )
53
+ end
54
+
55
+ it "and retrieves the data using incremental IO" do
56
+ all_rows = @db.execute("SELECT * FROM blobs")
57
+ all_rows.size.should == 1;
58
+ all_rows.first['name'].should == DATA_FILE
59
+ all_rows.first['data'].should be_incremental
60
+ all_rows.first['data'].to_string_io.string.should == IO.read( DATA_FILE )
61
+ end
62
+
63
+ it "writes the data to a file " do
64
+ all_rows = @db.execute("SELECT * FROM blobs")
65
+ all_rows.size.should == 1;
66
+ all_rows.first['name'].should == DATA_FILE
67
+ all_rows.first['data'].should be_incremental
68
+ all_rows.first['data'].write_to_file( @junk_file )
69
+ IO.read( @junk_file).should == IO.read( DATA_FILE )
70
+ end
71
+ end
72
+ end
73
+
74
+
75
+
76
+ it "raises an error if initialized incorrectly" do
77
+ lambda{ Amalgalite::Blob.new( :file => "/dev/null", :string => "foo" ) }.should raise_error( Amalgalite::Blob::Error )
78
+ end
79
+ end
80
+
81
+
@@ -0,0 +1,23 @@
1
+ $: << File.expand_path(File.join(File.dirname(__FILE__),"..","lib"))
2
+ require 'amalgalite'
3
+ require 'amalgalite/boolean'
4
+
5
+ describe Amalgalite::Boolean do
6
+ %w[ True Y Yes T 1 ].each do |v|
7
+ it "converts #{v} to true" do
8
+ Amalgalite::Boolean.to_bool(v).should == true
9
+ end
10
+ end
11
+
12
+ %w[ False F f No n 0 ].each do |v|
13
+ it "converts #{v} to false " do
14
+ Amalgalite::Boolean.to_bool(v).should == false
15
+ end
16
+ end
17
+
18
+ %w[ other things nil ].each do |v|
19
+ it "converts #{v} to nil" do
20
+ Amalgalite::Boolean.to_bool(v).should == nil
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,238 @@
1
+ require 'rubygems'
2
+ require 'spec'
3
+
4
+ $: << File.expand_path(File.join(File.dirname(__FILE__),"..","lib"))
5
+ require 'amalgalite'
6
+ require 'amalgalite/taps/io'
7
+ require 'amalgalite/taps/console'
8
+
9
+ describe Amalgalite::Database do
10
+ before(:each) do
11
+ @schema = IO.read( SpecInfo.test_schema_file )
12
+ @iso_db_file = SpecInfo.make_iso_db
13
+ @iso_db = Amalgalite::Database.new( SpecInfo.make_iso_db )
14
+ end
15
+
16
+ after(:each) do
17
+ File.unlink SpecInfo.test_db if File.exist?( SpecInfo.test_db )
18
+ @iso_db.close
19
+ File.unlink @iso_db_file if File.exist?( @iso_db_file )
20
+ end
21
+
22
+ it "can create a new database" do
23
+ db = Amalgalite::Database.new( SpecInfo.test_db )
24
+ db.instance_of?(Amalgalite::Database)
25
+ db.api.instance_of?(Amalgalite::SQLite3::Database)
26
+ File.exist?( SpecInfo.test_db ).should == true
27
+ end
28
+
29
+ it "creates a new UTF-8 database (need exec to check pragma encoding)" do
30
+ db = Amalgalite::Database.new( SpecInfo.test_db )
31
+ db.execute_batch( @schema );
32
+ db.should_not be_utf16
33
+ db.encoding.should == "UTF-8"
34
+ end
35
+
36
+ it "creates a new UTF-16 database (need exec to check pragma encoding)"
37
+
38
+ it "raises an error if the file does not exist and the database is opened with a non-create mode" do
39
+ lambda { Amalgalite::Database.new( SpecInfo.test_db, "r") }.should raise_error(Amalgalite::SQLite3::Error)
40
+ lambda { Amalgalite::Database.new( SpecInfo.test_db, "r+") }.should raise_error(Amalgalite::SQLite3::Error)
41
+ end
42
+
43
+ it "raises an error if an invalid mode is used" do
44
+ lambda { Amalgalite::Database.new( SpecInfo.test_db, "b+" ) }.should raise_error(Amalgalite::Database::InvalidModeError)
45
+ end
46
+
47
+ it "can be in autocommit mode, and is by default" do
48
+ @iso_db.autocommit?.should == true
49
+ end
50
+
51
+ it "reports false for autocommit? when inside a transaction" do
52
+ @iso_db.execute(" BEGIN ")
53
+ @iso_db.autocommit?.should == false
54
+ @iso_db.in_transaction?.should == true
55
+ @iso_db.execute(" COMMIT")
56
+ @iso_db.in_transaction?.should == false
57
+ end
58
+
59
+ it "prepares a statment" do
60
+ db = Amalgalite::Database.new( SpecInfo.test_db )
61
+ stmt = db.prepare("SELECT datetime()")
62
+ stmt.instance_of?(Amalgalite::Statement)
63
+ stmt.api.instance_of?(Amalgalite::SQLite3::Statement)
64
+ end
65
+
66
+ it "raises an error on invalid syntax when preparing a bad sql statement" do
67
+ db = Amalgalite::Database.new( SpecInfo.test_db )
68
+ lambda { db.prepare("SELECT nothing FROM stuf") }.should raise_error(Amalgalite::SQLite3::Error)
69
+ end
70
+
71
+ it "closes normally" do
72
+ db = Amalgalite::Database.new( SpecInfo.test_db )
73
+ lambda { db.close }.should_not raise_error( Amalgalite::SQLite3::Error )
74
+ end
75
+
76
+ it "returns the id of the last inserted row" do
77
+ db = Amalgalite::Database.new( SpecInfo.test_db )
78
+ db.last_insert_rowid.should == 0
79
+ end
80
+
81
+ it "is in autocommit mode by default" do
82
+ db = Amalgalite::Database.new( SpecInfo.test_db )
83
+ db.should be_autocommit
84
+ end
85
+
86
+ it "report the number of rows changed with an insert" do
87
+ db = Amalgalite::Database.new( SpecInfo.test_db )
88
+ db.execute_batch <<-sql
89
+ CREATE TABLE t1( x );
90
+ INSERT INTO t1( x ) values ( 1 );
91
+ INSERT INTO t1( x ) values ( 2 );
92
+ INSERT INTO t1( x ) values ( 3 );
93
+ sql
94
+
95
+ db.row_changes.should == 1
96
+ db.total_changes.should == 3
97
+ db.close
98
+ end
99
+
100
+ it "reports the number of rows deleted" do
101
+ db = Amalgalite::Database.new( SpecInfo.test_db )
102
+ db.execute_batch <<-sql
103
+ CREATE TABLE t1( x );
104
+ INSERT INTO t1( x ) values ( 1 );
105
+ INSERT INTO t1( x ) values ( 2 );
106
+ INSERT INTO t1( x ) values ( 3 );
107
+ DELETE FROM t1 where x < 3;
108
+ sql
109
+ db.row_changes.should == 2
110
+ db.close
111
+ end
112
+
113
+
114
+
115
+ it "can immediately execute an sql statement " do
116
+ db = Amalgalite::Database.new( SpecInfo.test_db )
117
+ db.execute( "CREATE TABLE t1( x, y, z )" ).should be_empty
118
+ end
119
+
120
+ it "can execute a batch of commands" do
121
+ db = Amalgalite::Database.new( SpecInfo.test_db )
122
+ db.execute_batch( @schema ).should == 5
123
+ end
124
+
125
+ it "traces the execution of code" do
126
+ db = Amalgalite::Database.new( SpecInfo.test_db )
127
+ sql = "CREATE TABLE trace_test( x, y, z)"
128
+ s = db.trace_tap = ::Amalgalite::Taps::StringIO.new
129
+ db.execute( sql )
130
+ db.trace_tap.string.should== "registered as trace tap\n#{sql}\n"
131
+ db.trace_tap = nil
132
+ s.string.should== "registered as trace tap\n#{sql}\nunregistered as trace tap\n"
133
+ end
134
+
135
+ it "raises an exception if the wrong type of object is used for tracing" do
136
+ db = Amalgalite::Database.new( SpecInfo.test_db )
137
+ lambda { db.trace_tap = Object.new }.should raise_error(Amalgalite::Error)
138
+ end
139
+
140
+ it "raises an exception if the wrong type of object is used for profile" do
141
+ db = Amalgalite::Database.new( SpecInfo.test_db )
142
+ lambda { db.profile_tap = Object.new }.should raise_error(Amalgalite::Error)
143
+ end
144
+
145
+ it "profiles the execution of code" do
146
+ db = Amalgalite::Database.new( SpecInfo.test_db )
147
+ s = db.profile_tap = ::Amalgalite::Taps::StringIO.new
148
+ db.execute_batch( @schema )
149
+ db.profile_tap.samplers.size.should == 6
150
+ db.profile_tap = nil
151
+ s.string.should =~ /unregistered as profile tap/m
152
+ end
153
+
154
+ it "#execute yields each row when called with a block" do
155
+ count = 0
156
+ @iso_db.execute( "SELECT * FROM country LIMIT 10") do |row|
157
+ count += 1
158
+ end
159
+ count.should == 10
160
+ end
161
+
162
+ it "#pragma yields each row when called with a block" do
163
+ count = 0
164
+ @iso_db.pragma( "index_info( subcountry_country )" ) do |row|
165
+ count += 1
166
+ end
167
+ count.should == 1
168
+ end
169
+
170
+ it "can use something that responds to 'write' as a tap" do
171
+ db = Amalgalite::Database.new( SpecInfo.test_db )
172
+ s2 = db.trace_tap = StringIO.new
173
+ s2.string.should == "registered as trace tap"
174
+ end
175
+
176
+ it "can clear all registered taps" do
177
+ db = Amalgalite::Database.new( SpecInfo.test_db )
178
+ s = db.profile_tap = ::Amalgalite::Taps::StringIO.new
179
+ db.trace_tap = s
180
+ db.execute_batch( @schema )
181
+ db.profile_tap.samplers.size.should == 6
182
+ db.clear_taps!
183
+ s.string.should =~ /unregistered as trace tap/m
184
+ s.string.should =~ /unregistered as profile tap/m
185
+ end
186
+
187
+ it "allows nested transactions even if SQLite under the covers does not" do
188
+ db = Amalgalite::Database.new( SpecInfo.test_db )
189
+ r = db.transaction do |db2|
190
+ r2 = db.transaction { 42 }
191
+ r2.should == 42
192
+ r2
193
+ end
194
+ r.should == 42
195
+ end
196
+
197
+ it "returns the result of the transaction when a block is yielded" do
198
+ db = Amalgalite::Database.new( SpecInfo.test_db )
199
+ (db.transaction { 42 }).should == 42
200
+ end
201
+
202
+ it "#reload_schema!" do
203
+ @iso_db = Amalgalite::Database.new( SpecInfo.make_iso_db )
204
+ schema = @iso_db.schema
205
+ schema.instance_of?( Amalgalite::Schema ).should == true
206
+ s2 = @iso_db.reload_schema!
207
+ s2.object_id.should_not == schema.object_id
208
+ end
209
+
210
+ it "can rollback a transaction" do
211
+ @iso_db.transaction
212
+ r = @iso_db.execute("SELECT count(1) as cnt FROM country");
213
+ r.first['cnt'].should == 242
214
+ @iso_db.execute("DELETE FROM country")
215
+ r = @iso_db.execute("SELECT count(1) as cnt FROM country");
216
+ r.first['cnt'].should == 0
217
+ @iso_db.rollback
218
+
219
+ r = @iso_db.execute("SELECT count(1) as cnt FROM country");
220
+ r.first['cnt'].should == 242
221
+ end
222
+
223
+ it "rolls back if an exception happens during a transaction block" do
224
+ begin
225
+ @iso_db.transaction do |db|
226
+ r = db.execute("SELECT count(1) as cnt FROM country");
227
+ r.first['cnt'].should == 242
228
+ db.execute("DELETE FROM country")
229
+ db.in_transaction?.should == true
230
+ raise "testing rollback"
231
+ end
232
+ rescue => e
233
+ @iso_db.in_transaction?.should == false
234
+ @iso_db.execute("SELECT count(1) as cnt FROM country").first['cnt'].should == 242
235
+ end
236
+ end
237
+ end
238
+
@@ -0,0 +1,87 @@
1
+ require 'rubygems'
2
+ require 'spec'
3
+
4
+ $: << File.expand_path(File.join(File.dirname(__FILE__),"..","lib"))
5
+ require 'amalgalite/type_maps/default_map'
6
+
7
+ describe Amalgalite::TypeMaps::DefaultMap do
8
+ before(:each) do
9
+ @map = Amalgalite::TypeMaps::DefaultMap.new
10
+ end
11
+
12
+ describe "#bind_type_of" do
13
+
14
+ it "Float is bound to DataType::FLOAT" do
15
+ @map.bind_type_of( 3.14 ).should == ::Amalgalite::SQLite3::Constants::DataType::FLOAT
16
+ end
17
+
18
+ it "Fixnum is bound to DataType::INTGER" do
19
+ @map.bind_type_of( 42 ).should == ::Amalgalite::SQLite3::Constants::DataType::INTEGER
20
+ end
21
+
22
+ it "nil is bound to DataType::NULL" do
23
+ @map.bind_type_of( nil ).should == ::Amalgalite::SQLite3::Constants::DataType::NULL
24
+ end
25
+
26
+ it "::Amalgalite::Blob is bound to DataType::BLOB" do
27
+ @map.bind_type_of( ::Amalgalite::Blob.new( :column => true, :string => "just a test" ) ).should == ::Amalgalite::SQLite3::Constants::DataType::BLOB
28
+ end
29
+
30
+ it "everything else is bound to DataType::TEXT" do
31
+ @map.bind_type_of( "everything else" ).should == ::Amalgalite::SQLite3::Constants::DataType::TEXT
32
+ end
33
+
34
+ end
35
+
36
+
37
+ describe "#result_value_of" do
38
+
39
+ it "Numeric's are returned" do
40
+ y = 42
41
+ x = @map.result_value_of( "INT", 42 )
42
+ x.object_id.should == y.object_id
43
+ end
44
+
45
+ it "Nil is returned" do
46
+ @map.result_value_of( "NULL", nil ).should == nil
47
+ end
48
+
49
+ it "DateTime is returned for delcared types of 'datetime'" do
50
+ @map.result_value_of( "DaTeTiME", "2008-04-01 23:23:23" ).should be_kind_of(DateTime)
51
+ end
52
+
53
+ it "Date is returned for declared types of 'date'" do
54
+ @map.result_value_of( "date", "2008-04-01 23:42:42" ).should be_kind_of(Date)
55
+ end
56
+
57
+ it "Time is returned for declared types of 'time'" do
58
+ @map.result_value_of( "timestamp", "2008-04-01T23:42:42" ).should be_kind_of(Time)
59
+ end
60
+
61
+ it "Float is returned for declared types of 'double'" do
62
+ @map.result_value_of( "double", "3.14" ).should be_kind_of(Float)
63
+ end
64
+
65
+ it "Integer is returned for declared types of 'int'" do
66
+ @map.result_value_of( "int", "42" ).should be_kind_of(Integer)
67
+ end
68
+
69
+ it "boolean is returned for declared types of 'bool'" do
70
+ @map.result_value_of( "bool", "True" ).should == true
71
+ end
72
+
73
+ it "Blob is returned for declated types of 'blob'" do
74
+ blob = @map.result_value_of( "blob", "stuff")
75
+ blob.to_s.should == "stuff"
76
+ end
77
+
78
+ it "raises and error if an unknown sql type is returned" do
79
+ x = nil
80
+ lambda{ x = @map.result_value_of( "footype", "foo" ) }.should raise_error( ::Amalgalite::Error )
81
+ end
82
+
83
+ it "raises and error if an ruby class is attempted to be mapped" do
84
+ lambda{ @map.result_value_of( "footype", 1..3 ) }.should raise_error( ::Amalgalite::Error )
85
+ end
86
+ end
87
+ end