sqlite-ruby 2.1.0-mswin32
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.
- data/README +34 -0
- data/doc/faq/faq.html +390 -0
- data/doc/faq/faq.rb +145 -0
- data/doc/faq/faq.yml +453 -0
- data/ext/extconf.rb +8 -0
- data/ext/sqlite-api.c +1414 -0
- data/lib/sqlite.rb +34 -0
- data/lib/sqlite/database.rb +682 -0
- data/lib/sqlite/parsed_statement.rb +233 -0
- data/lib/sqlite/pragmas.rb +236 -0
- data/lib/sqlite/resultset.rb +168 -0
- data/lib/sqlite/statement.rb +145 -0
- data/lib/sqlite/translator.rb +135 -0
- data/lib/sqlite/version.rb +45 -0
- data/lib/sqlite_api.so +0 -0
- data/test/db/fixtures.sql +25 -0
- data/test/tc_api_core.rb +201 -0
- data/test/tc_arrayfields.rb +74 -0
- data/test/tc_database.rb +335 -0
- data/test/tc_parsed_statement.rb +160 -0
- data/test/tc_pragmas.rb +207 -0
- data/test/tc_translator.rb +115 -0
- data/test/tc_type_translation.rb +55 -0
- data/test/tests.rb +133 -0
- metadata +67 -0
@@ -0,0 +1,160 @@
|
|
1
|
+
#--
|
2
|
+
# =============================================================================
|
3
|
+
# Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu)
|
4
|
+
# All rights reserved.
|
5
|
+
#
|
6
|
+
# Redistribution and use in source and binary forms, with or without
|
7
|
+
# modification, are permitted provided that the following conditions are met:
|
8
|
+
#
|
9
|
+
# * Redistributions of source code must retain the above copyright notice,
|
10
|
+
# this list of conditions and the following disclaimer.
|
11
|
+
#
|
12
|
+
# * Redistributions in binary form must reproduce the above copyright
|
13
|
+
# notice, this list of conditions and the following disclaimer in the
|
14
|
+
# documentation and/or other materials provided with the distribution.
|
15
|
+
#
|
16
|
+
# * The names of its contributors may not be used to endorse or promote
|
17
|
+
# products derived from this software without specific prior written
|
18
|
+
# permission.
|
19
|
+
#
|
20
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
21
|
+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
22
|
+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
23
|
+
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
|
24
|
+
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
25
|
+
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
26
|
+
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
27
|
+
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
28
|
+
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
29
|
+
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
30
|
+
# =============================================================================
|
31
|
+
#++
|
32
|
+
|
33
|
+
$:.unshift "lib"
|
34
|
+
|
35
|
+
require 'sqlite/parsed_statement'
|
36
|
+
require 'test/unit'
|
37
|
+
|
38
|
+
class TC_ParsedStatement < Test::Unit::TestCase
|
39
|
+
|
40
|
+
def test_trailing
|
41
|
+
sql = %q{first; and second}
|
42
|
+
stmt = SQLite::ParsedStatement.new( sql )
|
43
|
+
assert_equal "first", stmt.sql
|
44
|
+
assert_equal " and second", stmt.trailing
|
45
|
+
|
46
|
+
sql = %q{first}
|
47
|
+
stmt = SQLite::ParsedStatement.new( sql )
|
48
|
+
assert_equal "first", stmt.sql
|
49
|
+
assert_equal "", stmt.trailing
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_text_only_statement
|
53
|
+
sql = %q{select * from some.table t where ( t.b = 'a string' )}
|
54
|
+
|
55
|
+
stmt = SQLite::ParsedStatement.new( sql )
|
56
|
+
expected = "select * from some.table t where ( t.b = 'a string' )"
|
57
|
+
|
58
|
+
assert_equal expected, stmt.sql
|
59
|
+
assert_equal expected, stmt.to_s
|
60
|
+
assert_equal expected, stmt.to_str
|
61
|
+
|
62
|
+
stmt.bind_params
|
63
|
+
assert_equal expected, stmt.to_s
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_bind_single_positional_param
|
67
|
+
sql = %q{select * from some.table t where ( t.b = ? )}
|
68
|
+
|
69
|
+
expected = "select * from some.table t where ( t.b = NULL )"
|
70
|
+
stmt = SQLite::ParsedStatement.new( sql )
|
71
|
+
assert_equal expected, stmt.to_s
|
72
|
+
|
73
|
+
expected = "select * from some.table t where ( t.b = 'a string' )"
|
74
|
+
|
75
|
+
stmt = SQLite::ParsedStatement.new( sql )
|
76
|
+
stmt.bind_params( "a string" )
|
77
|
+
assert_equal expected, stmt.to_s
|
78
|
+
|
79
|
+
stmt = SQLite::ParsedStatement.new( sql )
|
80
|
+
stmt.bind_param( 1, "a string" )
|
81
|
+
assert_equal expected, stmt.to_s
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_bind_multiple_positional_params
|
85
|
+
sql = %q{? and ? and ?}
|
86
|
+
expected = "'one' and NULL and 'O''Reilly'"
|
87
|
+
|
88
|
+
stmt = SQLite::ParsedStatement.new( sql )
|
89
|
+
stmt.bind_param( 1, "one" )
|
90
|
+
stmt.bind_param( 3, "O'Reilly" )
|
91
|
+
stmt.bind_param( 4, "ignored" )
|
92
|
+
assert_equal expected, stmt.to_s
|
93
|
+
|
94
|
+
stmt = SQLite::ParsedStatement.new( sql )
|
95
|
+
stmt.bind_params( "one", nil, "O'Reilly", "ignored" )
|
96
|
+
assert_equal expected, stmt.to_s
|
97
|
+
end
|
98
|
+
|
99
|
+
def test_syntax_bind_positional_params
|
100
|
+
sql = %q{? and ? and ?1}
|
101
|
+
expected = "'one' and NULL and 'one'"
|
102
|
+
|
103
|
+
stmt = SQLite::ParsedStatement.new( sql )
|
104
|
+
stmt.bind_param( 1, "one" )
|
105
|
+
stmt.bind_param( 3, "O'Reilly" )
|
106
|
+
stmt.bind_param( 4, "ignored" )
|
107
|
+
assert_equal expected, stmt.to_s
|
108
|
+
|
109
|
+
stmt = SQLite::ParsedStatement.new( sql )
|
110
|
+
stmt.bind_params( "one", nil, "O'Reilly", "ignored" )
|
111
|
+
assert_equal expected, stmt.to_s
|
112
|
+
|
113
|
+
sql = %q{:2 and ? and ?1 and :4:}
|
114
|
+
expected = "NULL and 'O''Reilly' and 'one' and 'ignored'"
|
115
|
+
stmt = SQLite::ParsedStatement.new( sql )
|
116
|
+
stmt.bind_params( "one", nil, "O'Reilly", "ignored" )
|
117
|
+
assert_equal expected, stmt.to_s
|
118
|
+
end
|
119
|
+
|
120
|
+
def test_bind_named_params
|
121
|
+
sql = %q{:name and :spouse:}
|
122
|
+
expected = "'joe' and NULL"
|
123
|
+
|
124
|
+
stmt = SQLite::ParsedStatement.new( sql )
|
125
|
+
stmt.bind_param( "name", "joe" )
|
126
|
+
assert_equal expected, stmt.to_s
|
127
|
+
|
128
|
+
stmt = SQLite::ParsedStatement.new( sql )
|
129
|
+
stmt.bind_params( "name"=>"joe", "spouse"=>nil )
|
130
|
+
assert_equal expected, stmt.to_s
|
131
|
+
|
132
|
+
stmt = SQLite::ParsedStatement.new( sql )
|
133
|
+
stmt.bind_params( "name"=>"joe", "spouse"=>"jane" )
|
134
|
+
assert_equal "'joe' and 'jane'", stmt.to_s
|
135
|
+
end
|
136
|
+
|
137
|
+
def test_mixed_params
|
138
|
+
sql = %q{:name and :spouse: and ?2 and ? and :1 and :2:}
|
139
|
+
stmt = SQLite::ParsedStatement.new( sql )
|
140
|
+
stmt.bind_params( "one", 2, "three",
|
141
|
+
"name"=>"joe", "spouse"=>"jane" )
|
142
|
+
|
143
|
+
assert_equal "'joe' and 'jane' and 2 and 'three' and 'one' and 2", stmt.to_s
|
144
|
+
end
|
145
|
+
|
146
|
+
def test_sql
|
147
|
+
sql = %q{:name and :spouse: and ?2 and ? and :1 and :2:}
|
148
|
+
stmt = SQLite::ParsedStatement.new( sql )
|
149
|
+
assert_equal ":name and :spouse and :2 and :3 and :1 and :2", stmt.sql
|
150
|
+
end
|
151
|
+
|
152
|
+
def test_placeholders
|
153
|
+
sql = %q{:name and :spouse: and ? and ?5 and :12 and :15:}
|
154
|
+
|
155
|
+
stmt = SQLite::ParsedStatement.new( sql )
|
156
|
+
assert_equal 6, stmt.placeholders.length
|
157
|
+
assert( ( [ "name", "spouse", 1, 5, 12, 15 ] - stmt.placeholders ).empty? )
|
158
|
+
end
|
159
|
+
|
160
|
+
end
|
data/test/tc_pragmas.rb
ADDED
@@ -0,0 +1,207 @@
|
|
1
|
+
#--
|
2
|
+
# =============================================================================
|
3
|
+
# Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu)
|
4
|
+
# All rights reserved.
|
5
|
+
#
|
6
|
+
# Redistribution and use in source and binary forms, with or without
|
7
|
+
# modification, are permitted provided that the following conditions are met:
|
8
|
+
#
|
9
|
+
# * Redistributions of source code must retain the above copyright notice,
|
10
|
+
# this list of conditions and the following disclaimer.
|
11
|
+
#
|
12
|
+
# * Redistributions in binary form must reproduce the above copyright
|
13
|
+
# notice, this list of conditions and the following disclaimer in the
|
14
|
+
# documentation and/or other materials provided with the distribution.
|
15
|
+
#
|
16
|
+
# * The names of its contributors may not be used to endorse or promote
|
17
|
+
# products derived from this software without specific prior written
|
18
|
+
# permission.
|
19
|
+
#
|
20
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
21
|
+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
22
|
+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
23
|
+
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
|
24
|
+
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
25
|
+
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
26
|
+
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
27
|
+
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
28
|
+
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
29
|
+
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
30
|
+
# =============================================================================
|
31
|
+
#++
|
32
|
+
|
33
|
+
$:.unshift "lib"
|
34
|
+
|
35
|
+
require 'sqlite'
|
36
|
+
require 'test/unit'
|
37
|
+
|
38
|
+
class TC_Pragmas < Test::Unit::TestCase
|
39
|
+
|
40
|
+
def setup
|
41
|
+
@db = SQLite::Database.open( "db/fixtures.db" )
|
42
|
+
end
|
43
|
+
|
44
|
+
def teardown
|
45
|
+
@db.close
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_integrity_check
|
49
|
+
assert_nothing_raised do
|
50
|
+
@db.integrity_check
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_cache_size
|
55
|
+
size = @db.cache_size
|
56
|
+
assert_instance_of Fixnum, size
|
57
|
+
@db.cache_size = size + 100
|
58
|
+
new_size = @db.cache_size
|
59
|
+
assert_equal size+100, new_size
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_default_cache_size
|
63
|
+
size = @db.default_cache_size
|
64
|
+
assert_instance_of Fixnum, size
|
65
|
+
@db.default_cache_size = size + 100
|
66
|
+
new_size = @db.default_cache_size
|
67
|
+
assert_equal size+100, new_size
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_synchronous
|
71
|
+
assert_raise( SQLite::Exceptions::DatabaseException ) do
|
72
|
+
@db.synchronous = "bogus"
|
73
|
+
end
|
74
|
+
|
75
|
+
assert_nothing_raised do
|
76
|
+
@db.synchronous = "full"
|
77
|
+
@db.synchronous = 2
|
78
|
+
@db.synchronous = "normal"
|
79
|
+
@db.synchronous = 1
|
80
|
+
@db.synchronous = "off"
|
81
|
+
@db.synchronous = 0
|
82
|
+
end
|
83
|
+
|
84
|
+
assert_equal "0", @db.synchronous
|
85
|
+
end
|
86
|
+
|
87
|
+
def test_default_synchronous
|
88
|
+
assert_raise( SQLite::Exceptions::DatabaseException ) do
|
89
|
+
@db.default_synchronous = "bogus"
|
90
|
+
end
|
91
|
+
|
92
|
+
assert_nothing_raised do
|
93
|
+
@db.default_synchronous = "full"
|
94
|
+
@db.default_synchronous = 2
|
95
|
+
@db.default_synchronous = "normal"
|
96
|
+
@db.default_synchronous = 1
|
97
|
+
@db.default_synchronous = "off"
|
98
|
+
@db.default_synchronous = 0
|
99
|
+
end
|
100
|
+
|
101
|
+
assert_equal "0", @db.default_synchronous
|
102
|
+
end
|
103
|
+
|
104
|
+
def test_temp_store
|
105
|
+
assert_raise( SQLite::Exceptions::DatabaseException ) do
|
106
|
+
@db.temp_store = "bogus"
|
107
|
+
end
|
108
|
+
|
109
|
+
assert_nothing_raised do
|
110
|
+
@db.temp_store = "memory"
|
111
|
+
@db.temp_store = 2
|
112
|
+
@db.temp_store = "file"
|
113
|
+
@db.temp_store = 1
|
114
|
+
@db.temp_store = "default"
|
115
|
+
@db.temp_store = 0
|
116
|
+
end
|
117
|
+
|
118
|
+
assert_equal "0", @db.temp_store
|
119
|
+
end
|
120
|
+
|
121
|
+
def test_default_temp_store
|
122
|
+
assert_raise( SQLite::Exceptions::DatabaseException ) do
|
123
|
+
@db.default_temp_store = "bogus"
|
124
|
+
end
|
125
|
+
|
126
|
+
assert_nothing_raised do
|
127
|
+
@db.default_temp_store = "memory"
|
128
|
+
@db.default_temp_store = 2
|
129
|
+
@db.default_temp_store = "file"
|
130
|
+
@db.default_temp_store = 1
|
131
|
+
@db.default_temp_store = "default"
|
132
|
+
@db.default_temp_store = 0
|
133
|
+
end
|
134
|
+
|
135
|
+
assert_equal "0", @db.default_temp_store
|
136
|
+
end
|
137
|
+
|
138
|
+
def test_full_column_names
|
139
|
+
assert_raise( SQLite::Exceptions::DatabaseException ) do
|
140
|
+
@db.full_column_names = "sure"
|
141
|
+
end
|
142
|
+
|
143
|
+
assert_raise( SQLite::Exceptions::DatabaseException ) do
|
144
|
+
@db.full_column_names = :yes
|
145
|
+
end
|
146
|
+
|
147
|
+
assert_nothing_raised do
|
148
|
+
@db.full_column_names = "yes"
|
149
|
+
@db.full_column_names = "no"
|
150
|
+
@db.full_column_names = 1
|
151
|
+
@db.full_column_names = 0
|
152
|
+
@db.full_column_names = true
|
153
|
+
@db.full_column_names = false
|
154
|
+
@db.full_column_names = nil
|
155
|
+
@db.full_column_names = "y"
|
156
|
+
@db.full_column_names = "n"
|
157
|
+
@db.full_column_names = "t"
|
158
|
+
@db.full_column_names = "f"
|
159
|
+
end
|
160
|
+
|
161
|
+
assert !@db.full_column_names
|
162
|
+
end
|
163
|
+
|
164
|
+
def test_parser_trace
|
165
|
+
# apparently, the parser_trace pragma always returns true...?
|
166
|
+
assert @db.parser_trace
|
167
|
+
#@db.parser_trace = false
|
168
|
+
#assert !@db.parser_trace
|
169
|
+
end
|
170
|
+
|
171
|
+
def test_vdbe_trace
|
172
|
+
@db.vdbe_trace = true
|
173
|
+
assert @db.vdbe_trace
|
174
|
+
@db.vdbe_trace = false
|
175
|
+
assert !@db.vdbe_trace
|
176
|
+
end
|
177
|
+
|
178
|
+
def test_database_list
|
179
|
+
assert_equal ["main","temp"], @db.database_list.map { |i| i[1] }
|
180
|
+
end
|
181
|
+
|
182
|
+
def test_foreign_key_list
|
183
|
+
list = @db.foreign_key_list( "D" )
|
184
|
+
assert_equal 1, list.size
|
185
|
+
assert_equal "B", list.first[2]
|
186
|
+
end
|
187
|
+
|
188
|
+
def test_index_info
|
189
|
+
info = @db.index_info( "B_idx" )
|
190
|
+
assert_equal 1, info.size
|
191
|
+
assert_equal "name", info.first[2]
|
192
|
+
end
|
193
|
+
|
194
|
+
def test_index_list
|
195
|
+
list = @db.index_list( "B" )
|
196
|
+
assert_equal 1, list.size
|
197
|
+
assert_equal "B_idx", list.first[1]
|
198
|
+
end
|
199
|
+
|
200
|
+
def test_table_info
|
201
|
+
info = @db.table_info( "A" )
|
202
|
+
assert_equal 2, info.size
|
203
|
+
assert_equal "name", info[0][1]
|
204
|
+
assert_equal "age", info[1][1]
|
205
|
+
end
|
206
|
+
|
207
|
+
end
|
@@ -0,0 +1,115 @@
|
|
1
|
+
#--
|
2
|
+
# =============================================================================
|
3
|
+
# Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu)
|
4
|
+
# All rights reserved.
|
5
|
+
#
|
6
|
+
# Redistribution and use in source and binary forms, with or without
|
7
|
+
# modification, are permitted provided that the following conditions are met:
|
8
|
+
#
|
9
|
+
# * Redistributions of source code must retain the above copyright notice,
|
10
|
+
# this list of conditions and the following disclaimer.
|
11
|
+
#
|
12
|
+
# * Redistributions in binary form must reproduce the above copyright
|
13
|
+
# notice, this list of conditions and the following disclaimer in the
|
14
|
+
# documentation and/or other materials provided with the distribution.
|
15
|
+
#
|
16
|
+
# * The names of its contributors may not be used to endorse or promote
|
17
|
+
# products derived from this software without specific prior written
|
18
|
+
# permission.
|
19
|
+
#
|
20
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
21
|
+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
22
|
+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
23
|
+
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
|
24
|
+
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
25
|
+
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
26
|
+
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
27
|
+
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
28
|
+
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
29
|
+
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
30
|
+
# =============================================================================
|
31
|
+
#++
|
32
|
+
|
33
|
+
$:.unshift "lib"
|
34
|
+
|
35
|
+
require 'base64'
|
36
|
+
require 'sqlite/translator'
|
37
|
+
require 'test/unit'
|
38
|
+
|
39
|
+
class TC_Translator < Test::Unit::TestCase
|
40
|
+
|
41
|
+
def setup
|
42
|
+
@translator = SQLite::Translator.new
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_date_time
|
46
|
+
value = "2004-09-08 14:09:39"
|
47
|
+
expect = Time.mktime( 2004, 9, 8, 14, 9, 39 )
|
48
|
+
|
49
|
+
assert_equal expect, @translator.translate( "date", value )
|
50
|
+
assert_equal expect, @translator.translate( "datetime", value )
|
51
|
+
assert_equal expect, @translator.translate( "time", value )
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_real
|
55
|
+
value = "3.1415"
|
56
|
+
expect = 3.1415
|
57
|
+
|
58
|
+
assert_equal expect, @translator.translate( "decimal", value )
|
59
|
+
assert_equal expect, @translator.translate( "float", value )
|
60
|
+
assert_equal expect, @translator.translate( "numeric", value )
|
61
|
+
assert_equal expect, @translator.translate( "double", value )
|
62
|
+
assert_equal expect, @translator.translate( "real", value )
|
63
|
+
assert_equal expect, @translator.translate( "dec", value )
|
64
|
+
assert_equal expect, @translator.translate( "fixed", value )
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_integer
|
68
|
+
value = "128"
|
69
|
+
expect = 128
|
70
|
+
|
71
|
+
assert_equal expect, @translator.translate( "integer", value )
|
72
|
+
assert_equal expect, @translator.translate( "smallint", value )
|
73
|
+
assert_equal expect, @translator.translate( "mediumint", value )
|
74
|
+
assert_equal expect, @translator.translate( "int", value )
|
75
|
+
assert_equal expect, @translator.translate( "bigint", value )
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_boolean
|
79
|
+
assert_equal true, @translator.translate( "bit", "1" )
|
80
|
+
assert_equal false, @translator.translate( "bit", "0" )
|
81
|
+
assert_equal false, @translator.translate( "bool", "0" )
|
82
|
+
assert_equal false, @translator.translate( "bool", "false" )
|
83
|
+
assert_equal false, @translator.translate( "bool", "f" )
|
84
|
+
assert_equal false, @translator.translate( "bool", "no" )
|
85
|
+
assert_equal false, @translator.translate( "bool", "n" )
|
86
|
+
assert_equal false, @translator.translate( "boolean", "0" )
|
87
|
+
assert_equal false, @translator.translate( "boolean", "false" )
|
88
|
+
assert_equal false, @translator.translate( "boolean", "f" )
|
89
|
+
assert_equal false, @translator.translate( "boolean", "no" )
|
90
|
+
assert_equal false, @translator.translate( "boolean", "n" )
|
91
|
+
assert_equal true, @translator.translate( "bool", "heck ya!" )
|
92
|
+
assert_equal true, @translator.translate( "boolean", "heck ya!" )
|
93
|
+
end
|
94
|
+
|
95
|
+
def test_timestamp
|
96
|
+
time = Time.mktime( 2004, 9, 8, 14, 9, 39 )
|
97
|
+
assert_equal time, @translator.translate( "timestamp", time.to_i.to_s )
|
98
|
+
end
|
99
|
+
|
100
|
+
def test_tinyint
|
101
|
+
assert_equal true, @translator.translate( "tinyint(1)", "1" )
|
102
|
+
assert_equal false, @translator.translate( "tinyint(1)", "0" )
|
103
|
+
assert_equal 16, @translator.translate( "tinyint", "16" )
|
104
|
+
end
|
105
|
+
|
106
|
+
def test_custom
|
107
|
+
@translator.add_translator( "object" ) { |t,v| Marshal.load( Base64.decode64( v ) ) }
|
108
|
+
|
109
|
+
value = { :one => "hello", :four => "blah" }
|
110
|
+
dump = Base64.encode64( Marshal.dump( value ) ).strip
|
111
|
+
|
112
|
+
assert_equal value, @translator.translate( "object", dump )
|
113
|
+
end
|
114
|
+
|
115
|
+
end
|