CartoDB/cartodb20

View on GitHub
lib/carto/db/user_schema.rb

Summary

Maintainability
A
0 mins
Test Coverage
module Carto
  module Db
    class UserSchema
      def initialize(user)
        @user = user
      end

      def table_names
        (fetch_physical_table_names | fetch_user_table_names | fetch_foreign_table_names)
      end

      private

      def fetch_user_table_names
        @user.tables.map(&:name)
      end

      def fetch_physical_table_names
        sql = %{
            SELECT tablename AS name
            FROM pg_tables
            WHERE schemaname = '#{@user.database_schema}' AND
                  tableowner = '#{@user.database_username}'
          }

        @user.in_database[sql].all.map { |result| result[:name] }
      end

      def fetch_foreign_table_names
        sql = %{
              SELECT c.relname AS name
              FROM pg_class c JOIN pg_namespace n ON c.relnamespace = n.oid
              WHERE n.nspname = '#{@user.database_schema}' AND
                    relkind = 'f';
          }

        @user.in_database[sql].all.map { |result| result[:name] }
      end
    end
  end
end