module PgPartitions

Constants

VERSION

Public Instance Methods

add_partition(table, name, check:) click to toggle source
# File lib/pg_partitions.rb, line 7
def add_partition(table, name, check:)
  statement = SQL::Partition.new(table, check)
  create_table(name, id: false, options: statement.to_sql)
end
add_partition_trigger(table, name, conditions) click to toggle source
# File lib/pg_partitions.rb, line 12
def add_partition_trigger(table, name, conditions)
  insert_trigger    = SQL::Trigger.new(table, "#{name}_insert", 'BEFORE INSERT')
  delete_function   = SQL::DeleteFunction.new(table, "#{name}_delete")
  delete_trigger    = SQL::Trigger.new(table, "#{name}_delete", 'AFTER INSERT')

  reversible do |dir|
    dir.up do
      update_partition_trigger(table, name, conditions)
      execute insert_trigger.to_sql

      execute delete_function.to_sql
      execute delete_trigger.to_sql
    end

    dir.down do
      drop_partition_trigger(table, name)
    end
  end
end
drop_partition_trigger(table, name) click to toggle source
# File lib/pg_partitions.rb, line 43
def drop_partition_trigger(table, name)
  execute "DROP TRIGGER #{name}_insert ON #{table}"
  execute "DROP FUNCTION #{name}_insert()"
  execute "DROP TRIGGER #{name}_delete ON #{table}"
  execute "DROP FUNCTION #{name}_delete()"
end
update_partition_trigger(table, name, conditions) click to toggle source
# File lib/pg_partitions.rb, line 32
def update_partition_trigger(table, name, conditions)
  insert_conditions = SQL::If.new(conditions)
  insert_function   = SQL::InsertFunction.new(
    table,
    "#{name}_insert",
    insert_conditions.to_sql
  )

  execute insert_function.to_sql
end