Module: PgPartitioner::SeparationType::Base

Defined in:
lib/pg_partitioner/separation_type/base.rb

Instance Method Summary collapse

Instance Method Details

#create_partition_indexes(partition_table_name) ⇒ Object



18
19
20
21
22
23
# File 'lib/pg_partitioner/separation_type/base.rb', line 18

def create_partition_indexes(partition_table_name)
  custom_indexes = partition_table_indexes.presence
  return unless custom_indexes

  custom_indexes.each { |custom_index| create_custom_index(partition_table_name, custom_index) }
end

#create_partition_named_indexes(partition_table_name) ⇒ Object



25
26
27
28
29
30
31
32
33
# File 'lib/pg_partitioner/separation_type/base.rb', line 25

def create_partition_named_indexes(partition_table_name)
  custom_indexes = partition_table_named_indexes.presence
  return unless custom_indexes

  custom_indexes.map do |name, custom_index|
    index_name = "index_#{partition_table_name}_#{name}"
    create_custom_named_index(partition_table_name, custom_index, index_name)
  end
end

#create_partition_named_unique_indexes(partition_table_name) ⇒ Object



42
43
44
45
46
47
48
49
50
# File 'lib/pg_partitioner/separation_type/base.rb', line 42

def create_partition_named_unique_indexes(partition_table_name)
  custom_indexes = partition_table_named_unique_indexes.presence
  return unless custom_indexes

  custom_indexes.map do |name, custom_index|
    index_name = "index_#{partition_table_name}_#{name}"
    create_custom_named_index(partition_table_name, custom_index, index_name, true)
  end
end

#create_partition_unique_indexes(partition_table_name) ⇒ Object



35
36
37
38
39
40
# File 'lib/pg_partitioner/separation_type/base.rb', line 35

def create_partition_unique_indexes(partition_table_name)
  custom_unique_indexes = partition_table_unique_indexes.presence
  return unless custom_unique_indexes

  custom_unique_indexes.each { |custom_index| create_custom_index(partition_table_name, custom_index, true) }
end

#drop_partitioning_trigger_sqlObject



9
10
11
12
13
14
15
16
# File 'lib/pg_partitioner/separation_type/base.rb', line 9

def drop_partitioning_trigger_sql
  sql = "DROP TRIGGER #{table_name}_insert ON #{table_name};
   DROP FUNCTION #{table_name}_insert_trigger();
   DROP TRIGGER #{table_name}_after_insert ON #{table_name};
   DROP FUNCTION #{table_name}_delete_trigger();"

  execute_sql(sql)
end

#drop_table(table_name) ⇒ Object



4
5
6
7
# File 'lib/pg_partitioner/separation_type/base.rb', line 4

def drop_table(table_name)
  sql = "DROP TABLE IF EXISTS #{table_name};"
  execute_sql(sql)
end

#name_of_partition_table(date = Date.today, type:) ⇒ Object



52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/pg_partitioner/separation_type/base.rb', line 52

def name_of_partition_table(date = Date.today, type:)
  case type
  when :month
    date.strftime("#{table_name}_y%Ym%m")
  when :quater
    "#{table_name}_y#{date.year}q#{(((date.month - 1) / 3) + 1).to_i}"
  when :week
    if date.cweek < 10
      "#{table_name}_y#{date.year}w0#{date.cweek}"
    else
      "#{table_name}_y#{date.year}w#{date.cweek}"
    end
  end
end