raise error on unknown column; add complex query test
This commit is contained in:
@@ -17,7 +17,7 @@ class SqlGeneratorTester
|
|||||||
it 'tests simple search term with unknown column name and without quotes' do
|
it 'tests simple search term with unknown column name and without quotes' do
|
||||||
@query = TextToSqlQuery.new('unknown:ab', [:'players.title', :'players.tag', :'players.device_id'], :'players.device_id')
|
@query = TextToSqlQuery.new('unknown:ab', [:'players.title', :'players.tag', :'players.device_id'], :'players.device_id')
|
||||||
|
|
||||||
expect(@query.where_clause).to eq ['players.device_id ILIKE ?', '%ab%']
|
expect { @query.where_clause }.to raise_error(RuntimeError, "Unknown field 'unknown'")
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'tests simple search term without column name and with quotes' do
|
it 'tests simple search term without column name and with quotes' do
|
||||||
@@ -97,5 +97,30 @@ class SqlGeneratorTester
|
|||||||
|
|
||||||
expect(@query.where_clause).to eq ['tags.name ILIKE ?', '%h1-r%']
|
expect(@query.where_clause).to eq ['tags.name ILIKE ?', '%h1-r%']
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'tests complex query' do
|
||||||
|
text = '(device_id:"with space" tags:mta no-quotes-id-123)'\
|
||||||
|
'or "id with quotes-5" and ( ("id with q 10" or "id with q 20")'\
|
||||||
|
'and ("id with Q 30" "id with Q 40") and not id-without-Q-50)'
|
||||||
|
|
||||||
|
fields = [:'players.title', :'players.name', :'players.device_id']
|
||||||
|
default_field = :'players.device_id'
|
||||||
|
fields_mappings = { tags: 'tags.name' }
|
||||||
|
|
||||||
|
@query = TextToSqlQuery.new(text, fields, default_field, fields_mappings)
|
||||||
|
|
||||||
|
result_expression = '((players.device_id ILIKE ? OR (tags.name ILIKE ? OR players.device_id ILIKE ?)) OR (players.device_id ILIKE ? AND (((players.device_id ILIKE ? OR players.device_id ILIKE ?) AND (players.device_id ILIKE ? OR players.device_id ILIKE ?)) AND NOT players.device_id ILIKE ?)))'
|
||||||
|
result_params = ['%with space%',
|
||||||
|
'%mta%',
|
||||||
|
'%no-quotes-id-123%',
|
||||||
|
'%id with quotes-5%',
|
||||||
|
'%id with q 10%',
|
||||||
|
'%id with q 20%',
|
||||||
|
'%id with Q 30%',
|
||||||
|
'%id with Q 40%',
|
||||||
|
'%id-without-Q-50%']
|
||||||
|
|
||||||
|
expect(@query.where_clause).to eq [result_expression, result_params].flatten
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -48,7 +48,9 @@ class TextToSqlQuery
|
|||||||
escaped_node_value = handle_special_chars node_value
|
escaped_node_value = handle_special_chars node_value
|
||||||
mapping = @fields_mappings[first_key.to_sym]
|
mapping = @fields_mappings[first_key.to_sym]
|
||||||
if mapping.nil?
|
if mapping.nil?
|
||||||
["#{@default_field.to_s} ILIKE ?", "%#{escaped_node_value}%"]
|
# ["#{@default_field.to_s} ILIKE ?", "%#{escaped_node_value}%"]
|
||||||
|
#['', '']
|
||||||
|
raise "Unknown field '#{first_key.to_s}'" # "Unknown field '#{first_key.to_s}' in query "
|
||||||
else
|
else
|
||||||
["#{mapping.to_s} ILIKE ?", "%#{escaped_node_value}%"]
|
["#{mapping.to_s} ILIKE ?", "%#{escaped_node_value}%"]
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user