class ActionCost::SqlParser
Constants
- VALID_OPERATIONS
Attributes
invalid[R]
join_tables[R]
operation[R]
table_name[R]
Public Class Methods
new(sql)
click to toggle source
# File lib/action_cost/sql_parser.rb, line 7 def initialize(sql) @invalid = false @sql = sql @join_tables = [] end
Public Instance Methods
log()
click to toggle source
# File lib/action_cost/sql_parser.rb, line 38 def log if @invalid Rails.logger.debug "action_cost: non parsable query" else Rails.logger.debug "action_cost: operation=#{@operation} table_name=#{@table_name} " + "join_tables=#{@join_tables.inspect}" end end
parse()
click to toggle source
# File lib/action_cost/sql_parser.rb, line 13 def parse if @sql =~ /^\s*(\w+)/ op = $1.downcase unless VALID_OPERATIONS.include?(op) Rails.logger.error "action_cost: unknown operation [#{op}]" @invalid = true return false end @operation = op else Rails.logger.error "action_cost: could not parse [#{@sql}]" @invalid = true return false end case @operation when 'select' then parse_select when 'insert' then parse_insert when 'update' then parse_update when 'delete' then parse_delete end return !@invalid end
Private Instance Methods
parse_delete()
click to toggle source
# File lib/action_cost/sql_parser.rb, line 80 def parse_delete if @sql =~ /^delete from ["`']?(\w+)["`']?\b/ @table_name = $1.downcase else @invalid = true end end
parse_insert()
click to toggle source
# File lib/action_cost/sql_parser.rb, line 64 def parse_insert if @sql =~ /insert into ["`']?(\w+)["`']?\b/i @table_name = $1.downcase else @invalid = true end end
parse_select()
click to toggle source
# File lib/action_cost/sql_parser.rb, line 49 def parse_select if @sql =~ /from ["`']?(\w+)["`']?\b/i @table_name = $1.downcase else @invalid = true return end @sql.scan(/join ["`']?(\w+)["`']?\b/i) do |arr| arr.each do |t| @join_tables << t.downcase end end end
parse_update()
click to toggle source
# File lib/action_cost/sql_parser.rb, line 72 def parse_update if @sql =~ /^update ["`']?(\w+)["`']?\b/i @table_name = $1.downcase else @invalid = true end end