class Egis::PartitionsGenerator
@!visibility private
Attributes
cartesian_product_generator[R]
Public Class Methods
new(cartesian_product_generator: Egis::CartesianProductGenerator.new)
click to toggle source
# File lib/egis/partitions_generator.rb, line 6 def initialize(cartesian_product_generator: Egis::CartesianProductGenerator.new) @cartesian_product_generator = cartesian_product_generator end
Public Instance Methods
to_sql(table_name, values_by_partition, permissive: false)
click to toggle source
# File lib/egis/partitions_generator.rb, line 10 def to_sql(table_name, values_by_partition, permissive: false) validate_partition_values(values_by_partition) <<~SQL ALTER TABLE #{table_name} ADD #{permissive_statement(permissive)} #{partitions_definition(values_by_partition)}; SQL end
Private Instance Methods
partition_values(partition_values_combination)
click to toggle source
# File lib/egis/partitions_generator.rb, line 45 def partition_values(partition_values_combination) partition_values_combination.map do |partition_name, value| if value.is_a?(String) "#{partition_name} = '#{value}'" else "#{partition_name} = #{value}" end end end
partition_values_clause(partition_values_combination)
click to toggle source
# File lib/egis/partitions_generator.rb, line 41 def partition_values_clause(partition_values_combination) "PARTITION (#{partition_values(partition_values_combination).join(', ')})" end
partition_values_missing?(values_by_partition)
click to toggle source
# File lib/egis/partitions_generator.rb, line 27 def partition_values_missing?(values_by_partition) values_by_partition.nil? || values_by_partition.empty? || values_by_partition.values.any?(&:empty?) end
partitions_definition(values_by_partition)
click to toggle source
# File lib/egis/partitions_generator.rb, line 35 def partitions_definition(values_by_partition) cartesian_product_generator.cartesian_product(values_by_partition). map { |partition_values_combination| partition_values_clause(partition_values_combination) }. join("\n") end
permissive_statement(permissive)
click to toggle source
# File lib/egis/partitions_generator.rb, line 31 def permissive_statement(permissive) 'IF NOT EXISTS' if permissive end
validate_partition_values(values_by_partition)
click to toggle source
# File lib/egis/partitions_generator.rb, line 23 def validate_partition_values(values_by_partition) raise Errors::PartitionError, 'Partition value(s) missing' if partition_values_missing?(values_by_partition) end