class Scenic::Adapters::Postgres::Views
Fetches defined views from the postgres connection. @api private
Attributes
connection[R]
Public Class Methods
new(connection)
click to toggle source
# File lib/scenic/adapters/postgres/views.rb, line 7 def initialize(connection) @connection = connection end
Public Instance Methods
all()
click to toggle source
All of the views that this connection has defined.
This will include materialized views if those are supported by the connection.
@return [Array<Scenic::View>]
# File lib/scenic/adapters/postgres/views.rb, line 17 def all views_from_postgres.map(&method(:to_scenic_view)) end
Private Instance Methods
pg_identifier(name)
click to toggle source
# File lib/scenic/adapters/postgres/views.rb, line 59 def pg_identifier(name) return name if /^[a-zA-Z_][a-zA-Z0-9_]*$/.match?(name) pgconn.quote_ident(name) end
pgconn()
click to toggle source
# File lib/scenic/adapters/postgres/views.rb, line 65 def pgconn if defined?(PG::Connection) PG::Connection else PGconn end end
to_scenic_view(result)
click to toggle source
# File lib/scenic/adapters/postgres/views.rb, line 43 def to_scenic_view(result) namespace, viewname = result.values_at "namespace", "viewname" namespaced_viewname = if namespace != "public" "#{pg_identifier(namespace)}.#{pg_identifier(viewname)}" else pg_identifier(viewname) end Scenic::View.new( name: namespaced_viewname, definition: result["definition"].strip, materialized: result["kind"] == "m" ) end
views_from_postgres()
click to toggle source
# File lib/scenic/adapters/postgres/views.rb, line 25 def views_from_postgres connection.execute(<<-SQL) SELECT c.relname as viewname, pg_get_viewdef(c.oid) AS definition, c.relkind AS kind, n.nspname AS namespace FROM pg_class c LEFT JOIN pg_namespace n ON n.oid = c.relnamespace WHERE c.relkind IN ('m', 'v') AND c.relname NOT IN (SELECT extname FROM pg_extension) AND c.relname != 'pg_stat_statements_info' AND n.nspname = ANY (current_schemas(false)) ORDER BY c.oid SQL end