Class: ActiveRecord::ConnectionAdapters::PostgreSQLViewDefinition

Inherits:
Object
  • Object
show all
Includes:
PostgreSQLExtensions::Utils
Defined in:
lib/active_record/postgresql_extensions/views.rb

Overview

Creates a PostgreSQL view definition. This class isn’t really meant to be used directly. Instead, see PostgreSQLAdapter#create_view for usage.

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from PostgreSQLExtensions::Utils

#hash_or_array_of_hashes, #options_from_hash_or_string, #strip_heredoc

Constructor Details

#initialize(base, name, query, options = {}) ⇒ PostgreSQLViewDefinition

:nodoc:



130
131
132
# File 'lib/active_record/postgresql_extensions/views.rb', line 130

def initialize(base, name, query, options = {}) #:nodoc:
  @base, @name, @query, @options = base, name, query, options
end

Instance Attribute Details

#baseObject

Returns the value of attribute base.



128
129
130
# File 'lib/active_record/postgresql_extensions/views.rb', line 128

def base
  @base
end

#nameObject

Returns the value of attribute name.



128
129
130
# File 'lib/active_record/postgresql_extensions/views.rb', line 128

def name
  @name
end

#optionsObject

Returns the value of attribute options.



128
129
130
# File 'lib/active_record/postgresql_extensions/views.rb', line 128

def options
  @options
end

#queryObject

Returns the value of attribute query.



128
129
130
# File 'lib/active_record/postgresql_extensions/views.rb', line 128

def query
  @query
end

Instance Method Details

#to_sqlObject Also known as: to_s

:nodoc:



134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
# File 'lib/active_record/postgresql_extensions/views.rb', line 134

def to_sql #:nodoc:
  sql = 'CREATE '
  sql << 'OR REPLACE ' if options[:replace]
  sql << 'TEMPORARY ' if options[:temporary]
  sql << 'RECURSIVE ' if options[:recursive]
  sql << "VIEW #{base.quote_view_name(name)} "

  if options[:columns]
    sql << '(' << Array.wrap(options[:columns]).collect do |c|
      base.quote_column_name(c)
    end.join(', ') << ') '
  end

  if options[:with_options]
    ActiveRecord::PostgreSQLExtensions::Features.check_feature(:view_set_options)

    sql << "WITH (#{options_from_hash_or_string(options[:with_options])}) " if options.present?
  end

  sql << "AS #{query}"
  "#{sql};"
end