Module: DbObfuscation::QueryBuilder
- Defined in:
- lib/db_obfuscation/query_builder.rb
Class Method Summary collapse
- .case_sql(columns, date_columns) ⇒ Object
- .column_sql(columns, date_columns) ⇒ Object
- .multi_update_sql(table, columns, date_columns = []) ⇒ Object
- .update_sql(table, id, columns, date_columns = []) ⇒ Object
- .where_sql(columns) ⇒ Object
Class Method Details
.case_sql(columns, date_columns) ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 29 30 |
# 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) ⇒ Object
36 37 38 39 40 41 42 43 44 45 |
# 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 = []) ⇒ Object
4 5 6 7 8 9 10 |
# 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 = []) ⇒ Object
32 33 34 |
# 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) ⇒ Object
12 13 14 15 16 |
# 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 |