ruport 0.6.0 → 0.6.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.
- data/AUTHORS +4 -0
- data/CHANGELOG +10 -1
- data/Rakefile +1 -1
- data/examples/simple_table_interface.rb +20 -0
- data/lib/ruport.rb +87 -69
- data/lib/ruport/attempt.rb +1 -1
- data/lib/ruport/config.rb +198 -166
- data/lib/ruport/data.rb +6 -1
- data/lib/ruport/data/collection.rb +15 -8
- data/lib/ruport/data/groupable.rb +68 -6
- data/lib/ruport/data/record.rb +73 -34
- data/lib/ruport/data/record.rb~ +236 -0
- data/lib/ruport/data/set.rb +48 -13
- data/lib/ruport/data/table.rb +164 -74
- data/lib/ruport/data/table.rb.rej +67 -0
- data/lib/ruport/data/table.rb~ +153 -68
- data/lib/ruport/data/taggable.rb +37 -9
- data/lib/ruport/format.rb +1 -1
- data/lib/ruport/mailer.rb +41 -27
- data/lib/ruport/meta_tools.rb +26 -11
- data/lib/ruport/query.rb +102 -68
- data/lib/ruport/query/sql_split.rb +1 -1
- data/lib/ruport/report.rb +84 -58
- data/lib/ruport/report/graph.rb +1 -1
- data/lib/ruport/report/invoice.rb +1 -1
- data/test/test_query.rb +305 -48
- data/test/test_query.rb.rej +161 -0
- data/test/test_query.rb~ +337 -0
- data/test/test_record.rb +6 -0
- data/test/test_table.rb +18 -0
- data/test/test_table.rb~ +336 -0
- data/test/unit.log +180 -6
- metadata +8 -2
@@ -0,0 +1,161 @@
|
|
1
|
+
***************
|
2
|
+
*** 1,20 ****
|
3
|
+
require "test/unit"
|
4
|
+
require "ruport"
|
5
|
+
class TestQuery < Test::Unit::TestCase
|
6
|
+
|
7
|
+
|
8
|
+
def setup
|
9
|
+
Ruport::Config.source :default,
|
10
|
+
:dsn => "ruport:test", :user => "greg", :password => "apple"
|
11
|
+
-
|
12
|
+
Ruport::Config.source :alternate,
|
13
|
+
:dsn => "ruport:test2", :user => "sandal", :password => "harmonix"
|
14
|
+
|
15
|
+
@query1 = Ruport::Query.new "select * from foo", :cache_enabled => true
|
16
|
+
- @query1.cached_data = [[1,2,3],[4,5,6],[7,8,9]]
|
17
|
+
end
|
18
|
+
-
|
19
|
+
-
|
20
|
+
def test_result
|
21
|
+
assert_nothing_raised { @query1.result }
|
22
|
+
assert_equal([[1,2,3],[4,5,6],[7,8,9]],@query1.result)
|
23
|
+
--- 1,37 ----
|
24
|
+
require "test/unit"
|
25
|
+
require "ruport"
|
26
|
+
+
|
27
|
+
+ begin
|
28
|
+
+ require 'mocha'
|
29
|
+
+ require 'stubba'
|
30
|
+
+ require 'dbi'
|
31
|
+
+ rescue LoadError
|
32
|
+
+ end
|
33
|
+
+
|
34
|
+
class TestQuery < Test::Unit::TestCase
|
35
|
+
|
36
|
+
|
37
|
+
def setup
|
38
|
+
Ruport::Config.source :default,
|
39
|
+
:dsn => "ruport:test", :user => "greg", :password => "apple"
|
40
|
+
Ruport::Config.source :alternate,
|
41
|
+
:dsn => "ruport:test2", :user => "sandal", :password => "harmonix"
|
42
|
+
|
43
|
+
@query1 = Ruport::Query.new "select * from foo", :cache_enabled => true
|
44
|
+
+ @query1.cached_data = [[1,2,3],[4,5,6],[7,8,9]]
|
45
|
+
+
|
46
|
+
+ @query2 = Ruport::Query.new "select * from foo", :cache_enabled => false
|
47
|
+
+ @query3 = Ruport::Query.new "select * from foo", :cache_enabled => true
|
48
|
+
+
|
49
|
+
+ if Object.const_defined? :Mocha
|
50
|
+
+ @dbh = mock()
|
51
|
+
+ @sth = [[1,2,3],[4,5,6],[7,8,9]]
|
52
|
+
+ def @sth.fetchable?; true; end
|
53
|
+
+ def @sth.rows; self.length; end
|
54
|
+
+ def @sth.column_names; %w(a b c); end
|
55
|
+
+ end
|
56
|
+
end
|
57
|
+
+
|
58
|
+
def test_result
|
59
|
+
assert_nothing_raised { @query1.result }
|
60
|
+
assert_equal([[1,2,3],[4,5,6],[7,8,9]],@query1.result)
|
61
|
+
***************
|
62
|
+
*** 30,48 ****
|
63
|
+
q = Ruport::Query.new "test/samples/erb_test.sql", :binding => binding
|
64
|
+
assert_equal "select * from bar", q.sql
|
65
|
+
end
|
66
|
+
-
|
67
|
+
- def test_each
|
68
|
+
data = [[1,2,3],[4,5,6],[7,8,9]]
|
69
|
+
@query1.each do |r|
|
70
|
+
- assert_equal(data.shift,r)
|
71
|
+
end
|
72
|
+
data = [1,4,7]
|
73
|
+
@query1.each do |r|
|
74
|
+
- assert_equal(data.shift,r.first)
|
75
|
+
end
|
76
|
+
assert_raise (LocalJumpError) { @query1.each }
|
77
|
+
end
|
78
|
+
-
|
79
|
+
def test_select_source
|
80
|
+
|
81
|
+
assert_equal( "ruport:test", @query1.instance_eval("@dsn") )
|
82
|
+
--- 47,125 ----
|
83
|
+
q = Ruport::Query.new "test/samples/erb_test.sql", :binding => binding
|
84
|
+
assert_equal "select * from bar", q.sql
|
85
|
+
end
|
86
|
+
+
|
87
|
+
+ def test_each_with_cache_precached
|
88
|
+
+ if Object.const_defined? :Mocha
|
89
|
+
+ DBI.expects(:connect).never
|
90
|
+
+ end
|
91
|
+
+
|
92
|
+
data = [[1,2,3],[4,5,6],[7,8,9]]
|
93
|
+
+ result = []
|
94
|
+
@query1.each do |r|
|
95
|
+
+ result << r.to_a
|
96
|
+
end
|
97
|
+
+ assert_equal data, result
|
98
|
+
+
|
99
|
+
data = [1,4,7]
|
100
|
+
+ result = []
|
101
|
+
@query1.each do |r|
|
102
|
+
+ result << r.first
|
103
|
+
end
|
104
|
+
+ assert_equal data, result
|
105
|
+
+ end
|
106
|
+
+
|
107
|
+
+ def test_each_with_cache
|
108
|
+
+ unless Object.const_defined? :Mocha
|
109
|
+
+ $stderr.puts "Skipping test_each_with_cache (requires Mocha)"
|
110
|
+
+ return
|
111
|
+
+ end
|
112
|
+
+
|
113
|
+
+ DBI.expects(:connect).yields(@dbh)
|
114
|
+
+ @dbh.expects(:execute).yields(@sth)
|
115
|
+
+
|
116
|
+
+ data = [[1,2,3],[4,5,6],[7,8,9]]
|
117
|
+
+ result = []
|
118
|
+
+ @query3.each do |r|
|
119
|
+
+ result << r.to_a
|
120
|
+
+ end
|
121
|
+
+ assert_equal data, result
|
122
|
+
+
|
123
|
+
+ data = [1,4,7]
|
124
|
+
+ result = []
|
125
|
+
+ @query3.each do |r|
|
126
|
+
+ result << r.to_a.first
|
127
|
+
+ end
|
128
|
+
+ assert_equal data, result
|
129
|
+
+ end
|
130
|
+
+
|
131
|
+
+ def test_each_without_cache
|
132
|
+
+ unless Object.const_defined? :Mocha
|
133
|
+
+ $stderr.puts "Skipping test_each_without_cache (requires Mocha)"
|
134
|
+
+ return
|
135
|
+
+ end
|
136
|
+
+
|
137
|
+
+ DBI.expects(:connect).times(2).yields(@dbh)
|
138
|
+
+ @dbh.expects(:execute).times(2).yields(@sth)
|
139
|
+
+
|
140
|
+
+ data = [[1,2,3],[4,5,6],[7,8,9]]
|
141
|
+
+ result = []
|
142
|
+
+ @query2.each do |r|
|
143
|
+
+ result << r.to_a
|
144
|
+
+ end
|
145
|
+
+ assert_equal data, result
|
146
|
+
+
|
147
|
+
+ data = [1,4,7]
|
148
|
+
+ result = []
|
149
|
+
+ @query2.each do |r|
|
150
|
+
+ result << r.to_a.first
|
151
|
+
+ end
|
152
|
+
+ assert_equal data, result
|
153
|
+
+ end
|
154
|
+
+
|
155
|
+
+ def test_each_without_block
|
156
|
+
assert_raise (LocalJumpError) { @query1.each }
|
157
|
+
end
|
158
|
+
+
|
159
|
+
def test_select_source
|
160
|
+
|
161
|
+
assert_equal( "ruport:test", @query1.instance_eval("@dsn") )
|
data/test/test_query.rb~
ADDED
@@ -0,0 +1,337 @@
|
|
1
|
+
require "test/unit"
|
2
|
+
require "ruport"
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'mocha'
|
6
|
+
require 'stubba'
|
7
|
+
require 'dbi'
|
8
|
+
rescue LoadError
|
9
|
+
$stderr.puts "Warning: Mocha not found -- skipping some Query tests"
|
10
|
+
end
|
11
|
+
|
12
|
+
class TestQuery < Test::Unit::TestCase
|
13
|
+
def setup
|
14
|
+
@sources = {
|
15
|
+
:default => {
|
16
|
+
:dsn => 'ruport:test', :user => 'greg', :password => 'apple' },
|
17
|
+
:alternative => {
|
18
|
+
:dsn => "ruport:test2", :user => "sandal", :password => "harmonix" },
|
19
|
+
}
|
20
|
+
Ruport::Config.source :default, @sources[:default]
|
21
|
+
Ruport::Config.source :alternative, @sources[:alternative]
|
22
|
+
|
23
|
+
@columns = %w(a b c)
|
24
|
+
@data = [ [[1,2,3],[4,5,6],[7,8,9]],
|
25
|
+
[[9,8,7],[6,5,4],[3,2,1]],
|
26
|
+
[[7,8,9],[4,5,6],[1,2,3]], ]
|
27
|
+
@datasets = @data.dup
|
28
|
+
|
29
|
+
@sql = [ "select * from foo", "create table foo ..." ]
|
30
|
+
@sql << @sql.values_at(0, 0).join(";\n")
|
31
|
+
@sql << @sql.values_at(1, 0).join(";\n")
|
32
|
+
@query = {
|
33
|
+
:plain => Ruport::Query.new(@sql[0]),
|
34
|
+
:sourced => Ruport::Query.new(@sql[0], :source => :alternative),
|
35
|
+
:paramed => Ruport::Query.new(@sql[0], :params => [ 42 ]),
|
36
|
+
:cached => Ruport::Query.new(@sql[0], :cache_enabled => true),
|
37
|
+
:uncached => Ruport::Query.new(@sql[0], :cache_enabled => false),
|
38
|
+
:precached => Ruport::Query.new(@sql[0], :cache_enabled => true),
|
39
|
+
:raw => Ruport::Query.new(@sql[0], :raw_data => true),
|
40
|
+
:unraw => Ruport::Query.new(@sql[0], :raw_data => false),
|
41
|
+
:resultless => Ruport::Query.new(@sql[1]),
|
42
|
+
:multi => Ruport::Query.new(@sql[2]),
|
43
|
+
:mixed => Ruport::Query.new(@sql[3]),
|
44
|
+
}
|
45
|
+
@query[:precached].cached_data = @data[0]
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_execute
|
49
|
+
return unless Object.const_defined? :Mocha
|
50
|
+
query = @query[:uncached]
|
51
|
+
setup_mock_dbi(1)
|
52
|
+
|
53
|
+
assert_equal nil, query.execute
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_execute_sourced
|
57
|
+
return unless Object.const_defined? :Mocha
|
58
|
+
query = @query[:sourced]
|
59
|
+
setup_mock_dbi(1, :source => :alternative)
|
60
|
+
|
61
|
+
assert_equal nil, query.execute
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_execute_paramed
|
65
|
+
return unless Object.const_defined? :Mocha
|
66
|
+
query = @query[:paramed]
|
67
|
+
setup_mock_dbi(1, :params => [ 42 ])
|
68
|
+
|
69
|
+
assert_equal nil, query.execute
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_result_cache_disabled
|
73
|
+
return unless Object.const_defined? :Mocha
|
74
|
+
query = @query[:uncached]
|
75
|
+
setup_mock_dbi(3)
|
76
|
+
|
77
|
+
assert_nothing_raised { query.result }
|
78
|
+
assert_equal @data[1], get_raw(query.result)
|
79
|
+
assert_equal @data[2], get_raw(query.result)
|
80
|
+
end
|
81
|
+
|
82
|
+
def test_result_cache_enabled
|
83
|
+
return unless Object.const_defined? :Mocha
|
84
|
+
query = @query[:cached]
|
85
|
+
setup_mock_dbi(1)
|
86
|
+
|
87
|
+
assert_nothing_raised { query.result }
|
88
|
+
assert_equal @data[0], get_raw(query.result)
|
89
|
+
assert_equal @data[0], get_raw(query.result)
|
90
|
+
end
|
91
|
+
|
92
|
+
def test_result_resultless
|
93
|
+
return unless Object.const_defined? :Mocha
|
94
|
+
query = @query[:resultless]
|
95
|
+
setup_mock_dbi(1, :resultless => true, :sql => @sql[1])
|
96
|
+
|
97
|
+
assert_equal nil, query.result
|
98
|
+
end
|
99
|
+
|
100
|
+
def test_result_multi
|
101
|
+
return unless Object.const_defined? :Mocha
|
102
|
+
query = @query[:multi]
|
103
|
+
setup_mock_dbi(2)
|
104
|
+
|
105
|
+
assert_equal @data[1], get_raw(query.result)
|
106
|
+
end
|
107
|
+
|
108
|
+
def test_result_raw_disabled
|
109
|
+
return unless Object.const_defined? :Mocha
|
110
|
+
query = @query[:unraw]
|
111
|
+
setup_mock_dbi(1)
|
112
|
+
|
113
|
+
assert_equal @data[0].to_table(@columns), query.result
|
114
|
+
end
|
115
|
+
|
116
|
+
def test_result_raw_enabled
|
117
|
+
return unless Object.const_defined? :Mocha
|
118
|
+
query = @query[:raw]
|
119
|
+
setup_mock_dbi(1)
|
120
|
+
|
121
|
+
assert_equal @data[0], query.result
|
122
|
+
end
|
123
|
+
|
124
|
+
def test_update_cache
|
125
|
+
return unless Object.const_defined? :Mocha
|
126
|
+
query = @query[:cached]
|
127
|
+
setup_mock_dbi(2)
|
128
|
+
|
129
|
+
assert_equal @data[0], get_raw(query.result)
|
130
|
+
query.update_cache
|
131
|
+
assert_equal @data[1], get_raw(query.cached_data)
|
132
|
+
assert_equal @data[1], get_raw(query.result)
|
133
|
+
end
|
134
|
+
|
135
|
+
def test_clear_cache
|
136
|
+
return unless Object.const_defined? :Mocha
|
137
|
+
query = @query[:cached]
|
138
|
+
setup_mock_dbi(2)
|
139
|
+
|
140
|
+
assert_equal @data[0], get_raw(query.result)
|
141
|
+
query.clear_cache
|
142
|
+
assert_equal nil, query.cached_data
|
143
|
+
assert_equal @data[1], get_raw(query.result)
|
144
|
+
end
|
145
|
+
|
146
|
+
def test_disable_caching
|
147
|
+
return unless Object.const_defined? :Mocha
|
148
|
+
query = @query[:cached]
|
149
|
+
setup_mock_dbi(3)
|
150
|
+
|
151
|
+
assert_equal @data[0], get_raw(query.result)
|
152
|
+
assert_equal @data[0], get_raw(query.result)
|
153
|
+
query.disable_caching
|
154
|
+
assert_equal @data[1], get_raw(query.result)
|
155
|
+
assert_equal @data[2], get_raw(query.result)
|
156
|
+
end
|
157
|
+
|
158
|
+
def test_enable_caching
|
159
|
+
return unless Object.const_defined? :Mocha
|
160
|
+
query = @query[:uncached]
|
161
|
+
setup_mock_dbi(3)
|
162
|
+
|
163
|
+
assert_equal @data[0], get_raw(query.result)
|
164
|
+
assert_equal @data[1], get_raw(query.result)
|
165
|
+
query.enable_caching
|
166
|
+
assert_equal @data[2], get_raw(query.result)
|
167
|
+
assert_equal @data[2], get_raw(query.result)
|
168
|
+
end
|
169
|
+
|
170
|
+
def test_load_file
|
171
|
+
return unless Object.const_defined? :Mocha
|
172
|
+
File.expects(:read).
|
173
|
+
with("query_test.sql").
|
174
|
+
returns("select * from foo\n")
|
175
|
+
|
176
|
+
query = Ruport::Query.new "query_test.sql"
|
177
|
+
assert_equal "select * from foo", query.sql
|
178
|
+
end
|
179
|
+
|
180
|
+
def test_load_file_erb
|
181
|
+
return unless Object.const_defined? :Mocha
|
182
|
+
@table = 'bar'
|
183
|
+
File.expects(:read).
|
184
|
+
with("query_test.sql").
|
185
|
+
returns("select * from <%= @table %>\n")
|
186
|
+
|
187
|
+
query = Ruport::Query.new "query_test.sql", :binding => binding
|
188
|
+
assert_equal "select * from bar", query.sql
|
189
|
+
end
|
190
|
+
|
191
|
+
def test_load_file_not_found
|
192
|
+
return unless Object.const_defined? :Mocha
|
193
|
+
File.expects(:read).
|
194
|
+
with("query_test.sql").
|
195
|
+
raises(Errno::ENOENT)
|
196
|
+
Ruport.expects(:log).
|
197
|
+
with("Could not open query_test.sql",
|
198
|
+
:status => :fatal, :exception => LoadError).
|
199
|
+
raises(LoadError)
|
200
|
+
|
201
|
+
assert_raises LoadError do
|
202
|
+
query = Ruport::Query.new "query_test.sql"
|
203
|
+
end
|
204
|
+
end
|
205
|
+
|
206
|
+
def test_each_cache_disabled
|
207
|
+
return unless Object.const_defined? :Mocha
|
208
|
+
query = @query[:uncached]
|
209
|
+
setup_mock_dbi(2)
|
210
|
+
|
211
|
+
result = []; query.each { |r| result << r.to_a }
|
212
|
+
assert_equal @data[0], result
|
213
|
+
|
214
|
+
result = []; query.each { |r| result << r.to_a }
|
215
|
+
assert_equal @data[1], result
|
216
|
+
end
|
217
|
+
|
218
|
+
def test_each_cache_enabled
|
219
|
+
return unless Object.const_defined? :Mocha
|
220
|
+
query = @query[:cached]
|
221
|
+
setup_mock_dbi(1)
|
222
|
+
|
223
|
+
result = []; query.each { |r| result << r.to_a }
|
224
|
+
assert_equal @data[0], result
|
225
|
+
|
226
|
+
result = []; query.each { |r| result << r.to_a }
|
227
|
+
assert_equal @data[0], result
|
228
|
+
end
|
229
|
+
|
230
|
+
def test_each_multi
|
231
|
+
return unless Object.const_defined? :Mocha
|
232
|
+
query = @query[:multi]
|
233
|
+
setup_mock_dbi(2)
|
234
|
+
|
235
|
+
result = []; query.each { |r| result << r.to_a }
|
236
|
+
assert_equal @data[1], result
|
237
|
+
end
|
238
|
+
|
239
|
+
def test_each_without_block
|
240
|
+
assert_raise (LocalJumpError) { @query[:precached].each }
|
241
|
+
end
|
242
|
+
|
243
|
+
def test_select_source
|
244
|
+
query = @query[:precached]
|
245
|
+
assert_equal @sources[:default], get_query_source(query)
|
246
|
+
|
247
|
+
query.select_source :alternative
|
248
|
+
assert_equal @sources[:alternative], get_query_source(query)
|
249
|
+
|
250
|
+
query.select_source :default
|
251
|
+
assert_equal @sources[:default], get_query_source(query)
|
252
|
+
end
|
253
|
+
|
254
|
+
def test_initialize_source_temporary
|
255
|
+
query = Ruport::Query.new "<unused>", @sources[:alternative]
|
256
|
+
assert_equal @sources[:alternative], get_query_source(query)
|
257
|
+
end
|
258
|
+
|
259
|
+
def test_initialize_source_temporary_multiple
|
260
|
+
query1 = Ruport::Query.new "<unused>", @sources[:default]
|
261
|
+
query2 = Ruport::Query.new "<unused>", @sources[:alternative]
|
262
|
+
|
263
|
+
assert_equal @sources[:default], get_query_source(query1)
|
264
|
+
assert_equal @sources[:alternative], get_query_source(query2)
|
265
|
+
end
|
266
|
+
|
267
|
+
def test_generator
|
268
|
+
query = @query[:precached]
|
269
|
+
gen = query.generator
|
270
|
+
assert_equal @data[0][0], gen.next
|
271
|
+
assert_equal @data[0][1], gen.next
|
272
|
+
assert_equal @data[0][2], gen.next
|
273
|
+
assert_raise(EOFError) { gen.next }
|
274
|
+
end
|
275
|
+
|
276
|
+
def test_to_table
|
277
|
+
return unless Object.const_defined? :Mocha
|
278
|
+
query = @query[:raw]
|
279
|
+
setup_mock_dbi(3, :returns => @data[0])
|
280
|
+
|
281
|
+
assert_equal @data[0], query.result
|
282
|
+
assert_equal @data[0].to_table(@columns), query.to_table
|
283
|
+
assert_equal @data[0], query.result
|
284
|
+
end
|
285
|
+
|
286
|
+
def test_to_csv
|
287
|
+
return unless Object.const_defined? :Mocha
|
288
|
+
query = @query[:plain]
|
289
|
+
setup_mock_dbi(1)
|
290
|
+
|
291
|
+
csv = @data[0].to_table(@columns).as(:csv)
|
292
|
+
assert_equal csv, query.to_csv
|
293
|
+
end
|
294
|
+
|
295
|
+
private
|
296
|
+
def setup_mock_dbi(count, options={})
|
297
|
+
sql = options[:sql] || @sql[0]
|
298
|
+
source = options[:source] || :default
|
299
|
+
returns = options[:returns] || Proc.new { @datasets.shift }
|
300
|
+
resultless = options[:resultless]
|
301
|
+
params = options[:params] || []
|
302
|
+
|
303
|
+
@dbh = mock("database_handle")
|
304
|
+
@sth = mock("statement_handle")
|
305
|
+
def @dbh.execute(*a, &b); execute__(*a, &b); ensure; sth__.finish if b; end
|
306
|
+
def @sth.each; data__.each { |x| yield(x) }; end
|
307
|
+
def @sth.fetch_all; data__; end
|
308
|
+
|
309
|
+
DBI.expects(:connect).
|
310
|
+
with(*@sources[source].values_at(:dsn, :user, :password)).
|
311
|
+
yields(@dbh).times(count)
|
312
|
+
@dbh.expects(:execute__).with(sql, *params).
|
313
|
+
yields(@sth).returns(@sth).times(count)
|
314
|
+
@dbh.stubs(:sth__).returns(@sth)
|
315
|
+
@sth.expects(:finish).with().times(count)
|
316
|
+
unless resultless
|
317
|
+
@sth.stubs(:fetchable?).returns(true)
|
318
|
+
@sth.stubs(:column_names).returns(@columns)
|
319
|
+
@sth.expects(:data__).returns(returns).times(count)
|
320
|
+
else
|
321
|
+
@sth.stubs(:fetchable?).returns(false)
|
322
|
+
@sth.stubs(:column_names).returns([])
|
323
|
+
@sth.stubs(:cancel)
|
324
|
+
@sth.expects(:data__).times(0)
|
325
|
+
end
|
326
|
+
end
|
327
|
+
|
328
|
+
def get_query_source(query)
|
329
|
+
[ :dsn, :user, :password ].inject({}) do |memo, var|
|
330
|
+
memo.update var => query.instance_variable_get("@#{var}")
|
331
|
+
end
|
332
|
+
end
|
333
|
+
|
334
|
+
def get_raw(table)
|
335
|
+
table.collect { |row| row.to_a }
|
336
|
+
end
|
337
|
+
end
|