class DbMeta::Oracle::Trigger

Attributes

description[RW]
for_each[RW]
referencing_names[RW]
table_name[RW]
tigger_body[RW]
trigger_event[RW]
trigger_type[RW]

Public Class Methods

new(args = {}) click to toggle source
Calls superclass method DbMeta::Oracle::Base::new
# File lib/db_meta/oracle/types/trigger.rb, line 8
def initialize(args = {})
  super(args)

  @extract_type = :embedded
end

Public Instance Methods

extract(args = {}) click to toggle source
# File lib/db_meta/oracle/types/trigger.rb, line 33
def extract(args = {})
  buffer = []
  buffer << "CREATE OR REPLACE TRIGGER #{@name}"
  buffer << "#{@trigger_type} #{@triggering_event}"
  buffer << "ON #{@table_name}"
  buffer << @referencing_names.to_s
  buffer << @for_each.to_s if @for_each
  buffer << @trigger_body.strip.to_s if @trigger_body
  buffer << "/"
  buffer << nil
  buffer.join("\n")
end
fetch() click to toggle source
# File lib/db_meta/oracle/types/trigger.rb, line 14
def fetch
  connection = Connection.instance.get
  cursor = connection.exec("select trigger_type, triggering_event, table_name, referencing_names, description, trigger_body from user_triggers where trigger_name = '#{@name}'")
  while (row = cursor.fetch)
    @trigger_type = row[0].to_s
    @triggering_event = row[1].to_s
    @table_name = row[2].to_s
    @referencing_names = row[3].to_s
    @description = row[4].to_s
    @trigger_body = row[5].to_s
  end

  parse_trigger_type

  cursor.close
ensure
  connection.logoff
end

Private Instance Methods

parse_trigger_type() click to toggle source
# File lib/db_meta/oracle/types/trigger.rb, line 48
def parse_trigger_type
  @for_each = "FOR EACH ROW" if /each row/i.match?(@trigger_type)

  case @trigger_type
    when /before/i
      @trigger_type = "BEFORE"
    when /after/i
      @trigger_type = "AFTER"
    when /instead of/i
      @for_each = "FOR EACH ROW"
  end
end