module DbObfuscation::QueryBuilder
Public Class Methods
case_sql(columns, date_columns)
click to toggle source
# File lib/db_obfuscation/query_builder.rb, line 18 def case_sql(columns, date_columns) column_names = columns.first.keys constraint_name = column_names.last column_names -= [constraint_name] column_names.each_with_object('SET ') do |name, sql_query| sql_query << %Q("#{name}" = CASE) columns.each_with_object(sql_query) do |column, query| type = (date_columns.include?(name) ? :date : :string) query << when_sql(name, column, constraint_name, type) end sql_query << %Q( ELSE "#{name}" END, ) end.chomp(", ") end
column_sql(columns, date_columns)
click to toggle source
# File lib/db_obfuscation/query_builder.rb, line 36 def column_sql(columns, date_columns) columns.each_with_object("SET ") do |column, query| column_name, column_value = column.first, column.last if date_columns.include?(column.first) query << "#{column_name}=#{column_name} + INTERVAL '#{column_value} DAYS', " else query << "#{column_name}=#{column_value}, " end end.chomp(", ") end
multi_update_sql(table, columns, date_columns=[])
click to toggle source
# File lib/db_obfuscation/query_builder.rb, line 4 def multi_update_sql(table, columns, date_columns=[]) <<-SQL.gsub(/\s{2,}/,' ').strip UPDATE "#{table}" #{case_sql(columns, date_columns)} #{where_sql(columns)} SQL end
update_sql(table, id, columns, date_columns=[])
click to toggle source
# File lib/db_obfuscation/query_builder.rb, line 32 def update_sql(table, id, columns, date_columns=[]) "UPDATE #{table} #{column_sql(columns, date_columns)} WHERE id=#{id};" end
where_sql(columns)
click to toggle source
# File lib/db_obfuscation/query_builder.rb, line 12 def where_sql(columns) column_name = columns.first.keys.last values = columns.map { |column| "'#{column.values.last}'" }.join(',') %Q{WHERE "#{column_name}" IN (#{values})} end
Private Class Methods
when_sql(column, table_row, constraint, type)
click to toggle source
# File lib/db_obfuscation/query_builder.rb, line 48 def when_sql(column, table_row, constraint, type) when_clause = <<-SQL.gsub(/\s{2,}/,' ').chomp WHEN "#{constraint}" = '#{table_row[constraint]}' AND "#{column}" IS NOT NULL SQL if type == :date when_clause << %Q( THEN "#{column}" + INTERVAL '#{table_row[column]} DAYS') else when_clause << %Q( AND "#{column}" != '' THEN #{table_row[column]}) end when_clause end