Skip to content

Commit

Permalink
Merge pull request #3349 from CartoDB/3024-fix-namedplaces-guessing-e…
Browse files Browse the repository at this point in the history
…rrors

Escape quotes in namedplaces queries #3024
  • Loading branch information
Rafa de la Torre committed Apr 24, 2015
2 parents 5d39a2b + bd836e5 commit 4cc1ef7
Showing 1 changed file with 7 additions and 3 deletions.
10 changes: 7 additions & 3 deletions services/importer/lib/importer/namedplaces_guesser.rb
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ def guess_with_country_column
def namedplaces_guess_country
text_columns.each do |candidate|
column_name_sym = candidate[:column_name].to_sym
places = @guesser.sample.map{|row| "'" + row[column_name_sym] + "'"}.join(',')
places = @guesser.sample.map{|row| sql_sanitize(row[column_name_sym])}.join(',')
query = "SELECT namedplace_guess_country(Array[#{places}]) as country"
country = @guesser.geocoder_sql_api.fetch(query).first['country']
if country
Expand All @@ -90,9 +90,9 @@ def proportion(column)
end

def count_namedplaces_with_country_column(column_name_sym)
places = @guesser.sample.map{|row| "'" + row[column_name_sym] + "'"}.join(',')
places = @guesser.sample.map{|row| sql_sanitize(row[column_name_sym])}.join(',')
country_column_sym = country_column[:column_name].to_sym
countries = @guesser.sample.map{|row| "'" + row[country_column_sym] + "'"}.join(',')
countries = @guesser.sample.map{|row| sql_sanitize(row[country_column_sym])}.join(',')
query = "WITH geo_function as (SELECT (geocode_namedplace(Array[#{places}], Array[#{countries}])).*) select count(success) FROM geo_function where success = TRUE"
ret = @guesser.geocoder_sql_api.fetch(query)
ret.first['count']
Expand All @@ -102,6 +102,10 @@ def text_columns
@text_columns ||= @guesser.columns.all.select{|c| @guesser.is_text_type?(c)}
end

def sql_sanitize(str)
ActiveRecord::Base::sanitize(str)
end

end
end
end

0 comments on commit 4cc1ef7

Please sign in to comment.