class ActiveRecord::ConnectionAdapters::PostGIS::SpatialColumnInfo

Do spatial sql queries for column info and memoize that info.

Public Class Methods

new(adapter, table_name) click to toggle source
# File lib/active_record/connection_adapters/postgis/spatial_column_info.rb, line 8
def initialize(adapter, table_name)
  @adapter = adapter
  @table_name = table_name
end

Public Instance Methods

all() click to toggle source
# File lib/active_record/connection_adapters/postgis/spatial_column_info.rb, line 13
def all
  info = @adapter.query(
    "SELECT f_geometry_column,coord_dimension,srid,type FROM geometry_columns WHERE f_table_name='#{@table_name}'"
  )
  result = {}
  info.each do |row|
    name = row[0]
    type = row[3]
    dimension = row[1].to_i
    has_m = !!(type =~ /m$/i)
    type.sub!(/m$/, "")
    has_z = dimension > 3 || (dimension == 3 && !has_m)
    result[name] = {
      dimension: dimension,
      has_m:     has_m,
      has_z:     has_z,
      name:      name,
      srid:      row[2].to_i,
      type:      type,
    }
  end
  result
end
get(column_name, type) click to toggle source

do not query the database for non-spatial columns/tables

# File lib/active_record/connection_adapters/postgis/spatial_column_info.rb, line 38
def get(column_name, type)
  return unless PostGISAdapter.spatial_column_options(type.to_sym)
  @spatial_column_info ||= all
  @spatial_column_info[column_name]
end