Skip to content

Commit 79f2153

Browse files
committed
Edits how the proper typecast is retrieved from
AjaxDatatablesRails::Configuration settings.
1 parent f3b02f3 commit 79f2153

File tree

2 files changed

+52
-12
lines changed

2 files changed

+52
-12
lines changed

lib/ajax-datatables-rails/base.rb

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -106,17 +106,6 @@ def search_condition(column, value)
106106
model, column = column.split('.')
107107
model = model.singularize.titleize.gsub( / /, '' ).constantize
108108

109-
# because postgresql is preferred, so that's why use VARCHAR
110-
# but we we need to use CHAR typecast on mysql db adapter
111-
# or maybe it should
112-
# if :pg
113-
# elsif :mysql
114-
# else
115-
if config.db_adapter == :pg
116-
typecast = 'VARCHAR'
117-
else
118-
typecast = 'CHAR'
119-
end
120109
casted_column = ::Arel::Nodes::NamedFunction.new('CAST', [model.arel_table[column.to_sym].as(typecast)])
121110
casted_column.matches("%#{value}%")
122111
end
@@ -129,6 +118,14 @@ def aggregate_query
129118
conditions.compact.reduce(:and)
130119
end
131120

121+
def typecast
122+
case config.db_adapter
123+
when :pg then 'VARCHAR'
124+
when :mysql2 then 'CHAR'
125+
when :sqlite3 then 'TEXT'
126+
end
127+
end
128+
132129
def offset
133130
(page - 1) * per_page
134131
end

spec/ajax-datatables-rails/ajax_datatables_rails_spec.rb

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,49 @@ def self.arel_table
238238
expect(config.db_adapter).to eq(:mysql2)
239239
end
240240
end
241+
242+
describe '#typecast' do
243+
params = {
244+
:draw => '5',
245+
:columns => {
246+
"0" => {
247+
:data => '0',
248+
:name => '',
249+
:searchable => true,
250+
:orderable => true,
251+
:search => { :value => '', :regex => false }
252+
},
253+
"1" => {
254+
:data => '1',
255+
:name => '',
256+
:searchable => true,
257+
:orderable => true,
258+
:search => { :value => '', :regex => false }
259+
}
260+
},
261+
:order => { "0" => { :column => '1', :dir => 'desc' } },
262+
:start => '0',
263+
:length => '10',
264+
:search => { :value => '', :regex => false },
265+
'_' => '1403141483098'
266+
}
267+
let(:view) { double('view', :params => params) }
268+
let(:datatable) { AjaxDatatablesRails::Base.new(view) }
269+
270+
it 'returns VARCHAR if :db_adapter is :pg' do
271+
expect(datatable.send(:typecast)).to eq('VARCHAR')
272+
end
273+
274+
it 'returns CHAR if :db_adapter is :mysql2' do
275+
allow_any_instance_of(AjaxDatatablesRails::Configuration).to receive(:db_adapter) { :mysql2 }
276+
expect(datatable.send(:typecast)).to eq('CHAR')
277+
end
278+
279+
it 'returns TEXT if :db_adapter is :sqlite3' do
280+
allow_any_instance_of(AjaxDatatablesRails::Configuration).to receive(:db_adapter) { :sqlite3 }
281+
expect(datatable.send(:typecast)).to eq('TEXT')
282+
end
283+
end
241284
end
242285

243286
describe AjaxDatatablesRails do
@@ -255,4 +298,4 @@ def self.arel_table
255298
end
256299

257300
end
258-
end
301+
end

0 commit comments

Comments
 (0)