class ActiveRecord::ConnectionAdapters::OracleEnhanced::SchemaCreation
Private Instance Methods
action_sql(action, dependency)
click to toggle source
# File lib/active_record/connection_adapters/oracle_enhanced/schema_creation.rb, line 75 def action_sql(action, dependency) if action == "UPDATE" raise ArgumentError, <<~MSG '#{action}' is not supported by Oracle MSG end case dependency when :nullify then "ON #{action} SET NULL" when :cascade then "ON #{action} CASCADE" else raise ArgumentError, <<~MSG '#{dependency}' is not supported for #{action} Supported values are: :nullify, :cascade MSG end end
add_column_options!(sql, options)
click to toggle source
# File lib/active_record/connection_adapters/oracle_enhanced/schema_creation.rb, line 47 def add_column_options!(sql, options) type = options[:type] || ((column = options[:column]) && column.type) type = type && type.to_sym # handle case of defaults for CLOB/NCLOB columns, which would otherwise get "quoted" incorrectly if options_include_default?(options) if type == :text sql << " DEFAULT #{@conn.quote(options[:default])}" elsif type == :ntext sql << " DEFAULT #{@conn.quote(options[:default])}" else sql << " DEFAULT #{quote_default_expression(options[:default], options[:column])}" end end # must explicitly add NULL or NOT NULL to allow change_column to work on migrations if options[:null] == false sql << " NOT NULL" elsif options[:null] == true sql << " NULL" unless type == :primary_key end # add AS expression for virtual columns if options[:as].present? sql << " AS (#{options[:as]})" end if options[:primary_key] == true sql << " PRIMARY KEY" end end
default_tablespace_for(type)
click to toggle source
# File lib/active_record/connection_adapters/oracle_enhanced/schema_creation.rb, line 43 def default_tablespace_for(type) OracleEnhancedAdapter.default_tablespaces[type] end
visit_ColumnDefinition(o)
click to toggle source
Calls superclass method
# File lib/active_record/connection_adapters/oracle_enhanced/schema_creation.rb, line 8 def visit_ColumnDefinition(o) if [:blob, :clob, :nclob].include?(sql_type = type_to_sql(o.type, **o.options).downcase.to_sym) if (tablespace = default_tablespace_for(sql_type)) @lob_tablespaces ||= {} @lob_tablespaces[o.name] = tablespace end end super end
visit_TableDefinition(o)
click to toggle source
# File lib/active_record/connection_adapters/oracle_enhanced/schema_creation.rb, line 18 def visit_TableDefinition(o) create_sql = +"CREATE#{' GLOBAL TEMPORARY' if o.temporary} TABLE #{quote_table_name(o.name)} " statements = o.columns.map { |c| accept c } statements << accept(o.primary_keys) if o.primary_keys if supports_foreign_keys? statements.concat(o.foreign_keys.map { |fk| accept fk }) end create_sql << "(#{statements.join(', ')})" if statements.present? unless o.temporary @lob_tablespaces.each do |lob_column, tablespace| create_sql << " LOB (#{quote_column_name(lob_column)}) STORE AS (TABLESPACE #{tablespace}) \n" end if defined?(@lob_tablespaces) create_sql << " ORGANIZATION #{o.organization}" if o.organization if (tablespace = o.tablespace || default_tablespace_for(:table)) create_sql << " TABLESPACE #{tablespace}" end end add_table_options!(create_sql, o) create_sql << " AS #{to_sql(o.as)}" if o.as create_sql end