module Activerecord::Oracle::Queue::Schema::Statements

Public Instance Methods

add_queue(queue_name, payload_name: "message_t", payload_object: "json VARCHAR2(4000)") click to toggle source
# File lib/activerecord/oracle/queue/schema.rb, line 21
          def add_queue(queue_name, payload_name: "message_t", payload_object: "json VARCHAR2(4000)")
            schema, queue_name = remove_schema_from_queue_name(queue_name)

            raise ArgumentError, "The queue name can not be longer than 20 chars." if queue_name.length > 20

            add_queue_message_type(payload_name, payload_object)
            execute(<<-SQL)
              BEGIN
                DBMS_AQADM.CREATE_QUEUE_TABLE(
                  queue_table        => '#{queue_name}_tab',
                  queue_payload_type => '#{payload_name}'
                );

                DBMS_AQADM.CREATE_QUEUE(
                  queue_name  => '#{queue_name}',
                  queue_table => '#{queue_name}_tab'
                );

                DBMS_AQADM.START_QUEUE(
                  queue_name => '#{queue_name}'
                );
              END;
            SQL
            add_queue_package(binding)
          end
remove_queue(queue_name, payload_name: "message_t") click to toggle source
# File lib/activerecord/oracle/queue/schema.rb, line 47
          def remove_queue(queue_name, payload_name: "message_t")
            schema, queue_name = remove_schema_from_queue_name(queue_name)

            execute(<<-SQL)
              BEGIN
                DBMS_AQADM.STOP_QUEUE(
                  queue_name => '#{queue_name}'
                );

                DBMS_AQADM.DROP_QUEUE(
                  queue_name => '#{queue_name}'
                );

                DBMS_AQADM.DROP_QUEUE_TABLE(
                  queue_table => '#{queue_name}_tab'
                );
              END;
            SQL
            remove_queue_message_type(payload_name)
            execute("DROP PACKAGE #{queue_name}_queue")
          end

Private Instance Methods

add_queue_message_type(payload_name, payload_object) click to toggle source
# File lib/activerecord/oracle/queue/schema.rb, line 102
def add_queue_message_type(payload_name, payload_object)
  execute("CREATE OR REPLACE TYPE #{payload_name} AS OBJECT (#{payload_object})")
end
add_queue_package(args) click to toggle source
# File lib/activerecord/oracle/queue/schema.rb, line 79
def add_queue_package(args)
  execute(
    render_package(args, :definition)
  )
  execute(
    render_package(args, :body)
  )
end
package_template(file) click to toggle source
# File lib/activerecord/oracle/queue/schema.rb, line 96
def package_template(file)
  IO.read(
    Pathname.new(__FILE__).join("../package/#{file}.sql")
  )
end
remove_queue_message_type(payload_name) click to toggle source
# File lib/activerecord/oracle/queue/schema.rb, line 106
def remove_queue_message_type(payload_name)
  execute("DROP TYPE #{payload_name}")
end
remove_schema_from_queue_name(queue_name) click to toggle source
# File lib/activerecord/oracle/queue/schema.rb, line 71
def remove_schema_from_queue_name(queue_name)
  if queue_name.include?(".")
    queue_name.split(".")[0,2]
  else
    [nil, queue_name]
  end
end
render_package(args, file) click to toggle source
# File lib/activerecord/oracle/queue/schema.rb, line 88
def render_package(args, file)
  ERB.new(
    package_template(file)
  ).result(
    args
  )
end