lib/torque/postgresql/adapter/schema_statements.rb in torque-postgresql-2.2.4 vs lib/torque/postgresql/adapter/schema_statements.rb in torque-postgresql-2.3.0
- old
+ new
@@ -5,10 +5,25 @@
module Adapter
module SchemaStatements
TableDefinition = ActiveRecord::ConnectionAdapters::PostgreSQL::TableDefinition
+ # Create a new schema
+ def create_schema(name, options = {})
+ drop_schema(name, options) if options[:force]
+
+ check = 'IF NOT EXISTS' if options.fetch(:check, true)
+ execute("CREATE SCHEMA #{check} #{quote_schema_name(name.to_s)}")
+ end
+
+ # Drop an existing schema
+ def drop_schema(name, options = {})
+ force = options.fetch(:force, '').upcase
+ check = 'IF EXISTS' if options.fetch(:check, true)
+ execute("DROP SCHEMA #{check} #{quote_schema_name(name.to_s)} #{force}")
+ end
+
# Drops a type.
def drop_type(name, options = {})
force = options.fetch(:force, '').upcase
check = 'IF EXISTS' if options.fetch(:check, true)
execute <<-SQL.squish
@@ -77,13 +92,38 @@
SQL
end
# Rewrite the method that creates tables to easily accept extra options
def create_table(table_name, **options, &block)
+ table_name = "#{options[:schema]}.#{table_name}" if options[:schema].present?
+
options[:id] = false if options[:inherits].present? &&
options[:primary_key].blank? && options[:id].blank?
super table_name, **options, &block
+ end
+
+ # Add the schema option when extracting table options
+ def table_options(table_name)
+ parts = table_name.split('.').reverse
+ return super unless parts.size == 2 && parts[1] != 'public'
+
+ (super || {}).merge(schema: parts[1])
+ end
+
+ # When dumping the schema we need to add all schemas, not only those
+ # active for the current +schema_search_path+
+ def quoted_scope(name = nil, type: nil)
+ return super unless name.nil?
+
+ super.merge(schema: "ANY ('{#{user_defined_schemas.join(',')}}')")
+ end
+
+ # Fix the query to include the schema on tables names when dumping
+ def data_source_sql(name = nil, type: nil)
+ return super unless name.nil?
+
+ super.sub('SELECT c.relname FROM', "SELECT n.nspname || '.' || c.relname FROM")
end
private
def quote_enum_values(name, values, options)