Module: ActiveRecord::ConnectionAdapters::PostGIS::SchemaStatements

Included in:
ActiveRecord::ConnectionAdapters::PostGISAdapter
Defined in:
lib/active_record/connection_adapters/postgis/schema_statements.rb

Instance Method Summary collapse

Instance Method Details

#create_table_definition(*args, **kwargs) ⇒ Object

override


38
39
40
# File 'lib/active_record/connection_adapters/postgis/schema_statements.rb', line 38

def create_table_definition(*args, **kwargs)
  PostGIS::TableDefinition.new(self, *args, **kwargs)
end

#new_column_from_field(table_name, field) ⇒ Object


10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/active_record/connection_adapters/postgis/schema_statements.rb', line 10

def new_column_from_field(table_name, field)
  column_name, type, default, notnull, oid, fmod, collation, comment, attgenerated = field
   = (column_name, type, oid.to_i, fmod.to_i)
  default_value = extract_value_from_default(default)
  default_function = extract_default_function(default_value, default)

  if match = default_function&.match(/\Anextval\('"?(?<sequence_name>.+_(?<suffix>seq\d*))"?'::regclass\)\z/)
    serial = sequence_name_from_parts(table_name, column_name, match[:suffix]) == match[:sequence_name]
  end

  # {:dimension=>2, :has_m=>false, :has_z=>false, :name=>"latlon", :srid=>0, :type=>"GEOMETRY"}
  spatial = spatial_column_info(table_name).get(column_name, .sql_type)

  SpatialColumn.new(
    column_name,
    default_value,
    ,
    !notnull,
    default_function,
    collation: collation,
    comment: comment.presence,
    serial: serial,
    generated: attgenerated,
    spatial: spatial
  )
end

#spatial_column_info(table_name) ⇒ Object

memoize hash of column infos for tables


43
44
45
46
# File 'lib/active_record/connection_adapters/postgis/schema_statements.rb', line 43

def spatial_column_info(table_name)
  @spatial_column_info ||= {}
  @spatial_column_info[table_name.to_sym] ||= SpatialColumnInfo.new(self, table_name.to_s)
end