Module: SchemaPlus::DefaultExpr::Middleware::Sql::ColumnOptions

Defined in:
lib/schema_plus/default_expr/middleware.rb

Instance Method Summary collapse

Instance Method Details

#before(env) ⇒ Object

Add options for default expressions



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/schema_plus/default_expr/middleware.rb', line 8

def before(env)
  options = env.options

  return unless (default = options[:default])

  if default.is_a? Hash and [[:expr], [:value]].include?(default.keys)
    value = default[:value]
    expr = env.connection.sql_for_function(default[:expr]) || default[:expr] if default[:expr]
  else
    value = default
    expr = env.connection.sql_for_function(default)
  end

  if expr
    raise ArgumentError, "Invalid default expression" unless env.connection.default_expr_valid?(expr)
    env.sql << " DEFAULT #{expr}"
    # must explicitly check for :null to allow change_column to work on migrations
    if options[:null] == false
      env.sql << " NOT NULL"
    end
    options.delete(:default)
    options.delete(:null)
  else
    options[:default] = value
  end
end