# frozen_string_literal: true # A tiny class for reading column database comments class DatabaseComment DATABASE_NAME = Rails.configuration.database_configuration[Rails.env]['database'].freeze # Reads back a postgres comment based on table_name and column_name # Sanitizes inputs but it would be better not to allow user input strings here regardless def self.read(table_name, column_name) unless table_name.is_a?(Symbol) && column_name.is_a?(Symbol) raise TypeError, <<~STERN_WARNING Table and column names must be symbols. If you are trying to pass strings input by a user, well, please don't do that." STERN_WARNING end quoted_table_name = ActiveRecord::Base.connection.quote_table_name(table_name) table_name = ActiveRecord::Base.connection.quote(table_name) column_name = ActiveRecord::Base.connection.quote(column_name) select_comment = <<~SQL SELECT col_description( (select distinct tableoid from #{quoted_table_name}), (SELECT ordinal_position FROM information_schema.columns WHERE table_catalog = 'progolfme_development' AND column_name = #{column_name} AND table_name = #{table_name}) ) SQL ActiveRecord::Base.connection.execute(select_comment).to_a.dig(0, 'col_description') end end