class PGTrunk::Operations::Statistics::CreateStatistics
@private
Public Instance Methods
invert()
click to toggle source
# File lib/pg_trunk/operations/statistics/create_statistics.rb, line 146 def invert irreversible!("if_not_exists: true") if if_not_exists DropStatistics.new(**to_h) end
to_sql(version)
click to toggle source
# File lib/pg_trunk/operations/statistics/create_statistics.rb, line 140 def to_sql(version) check_version!(version) [create_statistics, *create_comment, register_object].join(" ") end
Private Instance Methods
check_version!(version)
click to toggle source
# File lib/pg_trunk/operations/statistics/create_statistics.rb, line 153 def check_version!(version) raise <<~ERROR.squish if version < "14" && expressions.present? Statistics for expressions are supported in PostgreSQL v14+" ERROR raise <<~ERROR.squish if version < "12" && kinds.include?(:mcv) The `mcv` kind is supported in PostgreSQL v12+ ERROR end
create_comment()
click to toggle source
# File lib/pg_trunk/operations/statistics/create_statistics.rb, line 172 def create_comment return if comment.blank? "COMMENT ON STATISTICS #{name.to_sql} IS $comment$#{comment}$comment$;" end
create_statistics()
click to toggle source
# File lib/pg_trunk/operations/statistics/create_statistics.rb, line 163 def create_statistics sql = "CREATE STATISTICS" sql << " IF NOT EXISTS" if if_not_exists sql << " #{name.to_sql}" sql << " (#{kinds.join(',')})" if kinds.present? sql << " ON #{parts.join(', ')}" sql << "FROM #{table.to_sql};" end
register_object()
click to toggle source
# File lib/pg_trunk/operations/statistics/create_statistics.rb, line 178 def register_object <<~SQL INSERT INTO pg_trunk(oid, classid) SELECT s.oid, 'pg_statistic_ext'::regclass FROM pg_statistic_ext s JOIN pg_class t ON t.oid = s.stxrelid WHERE s.stxname = #{name.quoted} AND s.stxnamespace = #{name.namespace} AND t.relname = #{table.quoted} AND t.relnamespace = #{table.namespace} ON CONFLICT DO NOTHING; SQL end