activerecord-postgis-adapter 2.0.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2ff4e3a14420f0cb54ab5f2ee745eb9b48a5cfc5
|
4
|
+
data.tar.gz: 51adb18e9a0b6f5678863e8ac480b5910868f82f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 44a9ac94f6ee75aebecd789a1b988d88a137663c039b0a187f8653abc22992e5641c5804c64db414a19fdaacec7322bb2c0900f6b15442194259a33034529d16
|
7
|
+
data.tar.gz: 2bc25c45236615f6a782d22046b15185881f14395a1ab437a0e45b5f1f8672ad871242c211914f455136740feb74422b1d1b25c9aaf4bc1b932b150d6e5a0c23
|
@@ -27,28 +27,27 @@ module ActiveRecord # :nodoc:
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
+
# FULL REPLACEMENT. RE-CHECK ON NEW VERSIONS
|
31
|
+
# https://github.com/rails/rails/blob/master/activerecord/lib/active_record/connection_adapters/postgresql/schema_statements.rb
|
30
32
|
def columns(table_name, name = nil)
|
31
|
-
#
|
32
|
-
# We needed to return a spatial column subclass.
|
33
|
-
table_name = table_name.to_s
|
33
|
+
# Limit, precision, and scale are all handled by the superclass.
|
34
34
|
spatial_info_ = spatial_column_info(table_name)
|
35
|
-
column_definitions(table_name).
|
36
|
-
oid = column_type_map.fetch(oid.to_i, fmod.to_i) {
|
37
|
-
OID::Identity.new
|
38
|
-
}
|
35
|
+
column_definitions(table_name).map do |column_name, type, default, notnull, oid, fmod|
|
36
|
+
oid = column_type_map.fetch(oid.to_i, fmod.to_i) { OID::Identity.new }
|
39
37
|
SpatialColumn.new(@rgeo_factory_settings,
|
40
38
|
table_name,
|
41
|
-
|
39
|
+
column_name,
|
42
40
|
default,
|
43
41
|
oid,
|
44
42
|
type,
|
45
43
|
notnull == 'f',
|
46
|
-
type =~ /geometry/i ? spatial_info_[
|
44
|
+
type =~ /geometry/i ? spatial_info_[column_name] : nil)
|
47
45
|
end
|
48
46
|
end
|
49
47
|
|
48
|
+
# FULL REPLACEMENT. RE-CHECK ON NEW VERSIONS
|
49
|
+
# https://github.com/rails/rails/blob/master/activerecord/lib/active_record/connection_adapters/postgresql/schema_statements.rb
|
50
50
|
def indexes(table_name, name = nil)
|
51
|
-
# FULL REPLACEMENT. RE-CHECK ON NEW VERSIONS.
|
52
51
|
result = query(<<-SQL, 'SCHEMA')
|
53
52
|
SELECT distinct i.relname, d.indisunique, d.indkey, pg_get_indexdef(d.indexrelid), t.oid
|
54
53
|
FROM pg_class t
|
@@ -62,7 +61,7 @@ module ActiveRecord # :nodoc:
|
|
62
61
|
SQL
|
63
62
|
|
64
63
|
result.map do |row|
|
65
|
-
|
64
|
+
index_name = row[0]
|
66
65
|
unique = row[1] == 't'
|
67
66
|
indkey = row[2].split(" ")
|
68
67
|
inddef = row[3]
|
@@ -78,17 +77,19 @@ module ActiveRecord # :nodoc:
|
|
78
77
|
columns = columns.inject({}){ |h, r| h[r[0].to_s] = [r[1], r[2]]; h }
|
79
78
|
column_names = columns.values_at(*indkey).compact.map{ |a| a[0] }
|
80
79
|
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
80
|
+
unless column_names.empty?
|
81
|
+
# add info on sort order for columns (only desc order is explicitly specified, asc is the default)
|
82
|
+
desc_order_columns = inddef.scan(/(\w+) DESC/).flatten
|
83
|
+
orders = desc_order_columns.any? ? Hash[desc_order_columns.map {|order_column| [order_column, :desc]}] : {}
|
84
|
+
where = inddef.scan(/WHERE (.+)$/).flatten[0]
|
85
|
+
# using = inddef.scan(/USING (.+?) /).flatten[0].to_sym
|
87
86
|
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
87
|
+
spatial = inddef =~ /using\s+gist/i &&
|
88
|
+
columns.size == 1 &&
|
89
|
+
%w[geometry geography].include?(columns.values.first[1])
|
90
|
+
|
91
|
+
# IndexDefinition.new(table_name, index_name, unique, column_names, [], orders, where, nil, using)
|
92
|
+
::RGeo::ActiveRecord::SpatialIndexDefinition.new(table_name, index_name, unique, column_names, [], orders, where, !!spatial)
|
92
93
|
end
|
93
94
|
end.compact
|
94
95
|
end
|
@@ -168,13 +169,15 @@ module ActiveRecord # :nodoc:
|
|
168
169
|
end
|
169
170
|
end
|
170
171
|
|
172
|
+
# FULL REPLACEMENT. RE-CHECK ON NEW VERSIONS
|
173
|
+
# https://github.com/rails/rails/blob/master/activerecord/lib/active_record/connection_adapters/postgresql/schema_statements.rb
|
171
174
|
def add_index(table_name, column_name, options = {})
|
172
|
-
# FULL REPLACEMENT. RE-CHECK ON NEW VERSIONS.
|
173
175
|
# We have to fully-replace because of the gist_clause.
|
174
|
-
|
175
|
-
|
176
|
-
index_name, index_type, index_columns, index_options = add_index_options(table_name, column_name, options)
|
177
|
-
|
176
|
+
|
177
|
+
gist = options.delete(:spatial)
|
178
|
+
index_name, index_type, index_columns, index_options, index_algorithm, index_using = add_index_options(table_name, column_name, options)
|
179
|
+
index_using = 'USING GIST' if gist
|
180
|
+
execute "CREATE #{index_type} INDEX #{index_algorithm} #{quote_column_name(index_name)} ON #{quote_table_name(table_name)} #{index_using} (#{index_columns})#{index_options}"
|
178
181
|
end
|
179
182
|
|
180
183
|
def spatial_column_info(table_name)
|
data/test/database.yml
CHANGED
data/test/tasks_test.rb
CHANGED
@@ -28,80 +28,109 @@ module RGeo
|
|
28
28
|
define_test_methods do
|
29
29
|
def test_create_database_from_extension_in_public_schema
|
30
30
|
::ActiveRecord::Tasks::DatabaseTasks.create(TasksTest.new_database_config)
|
31
|
-
|
31
|
+
refute_empty connection.select_values("SELECT * from public.spatial_ref_sys")
|
32
32
|
end
|
33
33
|
|
34
34
|
def test_empty_sql_dump
|
35
|
-
|
36
|
-
::
|
37
|
-
::
|
38
|
-
::ActiveRecord::Tasks::DatabaseTasks.create(TasksTest.new_database_config.merge('schema_search_path' => 'public'))
|
39
|
-
::ActiveRecord::Tasks::DatabaseTasks.structure_dump(TasksTest.new_database_config, filename)
|
40
|
-
sql = ::File.read(filename)
|
35
|
+
setup_database_tasks
|
36
|
+
::ActiveRecord::Tasks::DatabaseTasks.structure_dump(TasksTest.new_database_config, tmp_sql_filename)
|
37
|
+
sql = ::File.read(tmp_sql_filename)
|
41
38
|
assert(sql !~ /CREATE TABLE/)
|
42
39
|
end
|
43
40
|
|
44
41
|
def test_basic_geography_sql_dump
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
::ActiveRecord::Tasks::DatabaseTasks.create(TasksTest.new_database_config.merge('schema_search_path' => 'public'))
|
49
|
-
::ActiveRecord::Base.connection.create_table(:spatial_test) do |t|
|
50
|
-
t.point "latlon", :geographic => true
|
42
|
+
setup_database_tasks
|
43
|
+
connection.create_table(:spatial_test) do |t|
|
44
|
+
t.point "latlon", geographic: true
|
51
45
|
end
|
52
|
-
::ActiveRecord::Tasks::DatabaseTasks.structure_dump(TasksTest.new_database_config,
|
53
|
-
data = ::File.read(
|
46
|
+
::ActiveRecord::Tasks::DatabaseTasks.structure_dump(TasksTest.new_database_config, tmp_sql_filename)
|
47
|
+
data = ::File.read(tmp_sql_filename)
|
54
48
|
assert(data.index('latlon geography(Point,4326)'))
|
55
49
|
end
|
56
50
|
|
51
|
+
def test_index_sql_dump
|
52
|
+
setup_database_tasks
|
53
|
+
connection.create_table(:spatial_test) do |t|
|
54
|
+
t.point "latlon", geographic: true
|
55
|
+
t.string "name"
|
56
|
+
end
|
57
|
+
connection.add_index :spatial_test, :latlon, spatial: true
|
58
|
+
connection.add_index :spatial_test, :name, using: :btree
|
59
|
+
::ActiveRecord::Tasks::DatabaseTasks.structure_dump(TasksTest.new_database_config, tmp_sql_filename)
|
60
|
+
data = ::File.read(tmp_sql_filename)
|
61
|
+
assert(data.index('latlon geography(Point,4326)'))
|
62
|
+
assert data.index('CREATE INDEX index_spatial_test_on_latlon ON spatial_test USING gist (latlon);')
|
63
|
+
assert data.index('CREATE INDEX index_spatial_test_on_name ON spatial_test USING btree (name);')
|
64
|
+
end
|
65
|
+
|
57
66
|
def test_empty_schema_dump
|
58
|
-
|
59
|
-
::
|
60
|
-
::FileUtils.mkdir_p(::File.dirname(filename))
|
61
|
-
::ActiveRecord::Tasks::DatabaseTasks.create(TasksTest.new_database_config.merge('schema_search_path' => 'public'))
|
62
|
-
::File.open(filename, "w:utf-8") do |file|
|
67
|
+
setup_database_tasks
|
68
|
+
::File.open(tmp_sql_filename, "w:utf-8") do |file|
|
63
69
|
::ActiveRecord::SchemaDumper.dump(::ActiveRecord::Base.connection, file)
|
64
70
|
end
|
65
|
-
data = ::File.read(
|
71
|
+
data = ::File.read(tmp_sql_filename)
|
66
72
|
assert(data.index('ActiveRecord::Schema'))
|
67
73
|
end
|
68
74
|
|
69
75
|
def test_basic_geometry_schema_dump
|
70
|
-
|
71
|
-
|
72
|
-
::FileUtils.mkdir_p(::File.dirname(filename))
|
73
|
-
::ActiveRecord::Tasks::DatabaseTasks.create(TasksTest.new_database_config.merge('schema_search_path' => 'public'))
|
74
|
-
conn = ::ActiveRecord::Base.connection
|
75
|
-
conn.create_table(:spatial_test) do |t|
|
76
|
+
setup_database_tasks
|
77
|
+
connection.create_table(:spatial_test) do |t|
|
76
78
|
t.geometry 'object1'
|
77
|
-
t.spatial "object2", :
|
79
|
+
t.spatial "object2", limit: { srid: connection.default_srid, type: "geometry" }
|
78
80
|
end
|
79
|
-
::File.open(
|
80
|
-
::ActiveRecord::SchemaDumper.dump(
|
81
|
+
::File.open(tmp_sql_filename, "w:utf-8") do |file|
|
82
|
+
::ActiveRecord::SchemaDumper.dump(connection, file)
|
81
83
|
end
|
82
|
-
data = ::File.read(
|
83
|
-
assert(data.index("t.spatial \"object1\", limit: {:srid=>#{
|
84
|
-
assert(data.index("t.spatial \"object2\", limit: {:srid=>#{
|
84
|
+
data = ::File.read(tmp_sql_filename)
|
85
|
+
assert(data.index("t.spatial \"object1\", limit: {:srid=>#{connection.default_srid}, :type=>\"geometry\"}"))
|
86
|
+
assert(data.index("t.spatial \"object2\", limit: {:srid=>#{connection.default_srid}, :type=>\"geometry\"}"))
|
85
87
|
end
|
86
88
|
|
87
89
|
def test_basic_geography_schema_dump
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
conn = ::ActiveRecord::Base.connection
|
93
|
-
conn.create_table(:spatial_test) do |t|
|
94
|
-
t.point "latlon1", :geographic => true
|
95
|
-
t.spatial "latlon2", :limit => {:srid=>4326, :type=>"point", :geographic=>true}
|
90
|
+
setup_database_tasks
|
91
|
+
connection.create_table(:spatial_test) do |t|
|
92
|
+
t.point "latlon1", geographic: true
|
93
|
+
t.spatial "latlon2", limit: { srid: 4326, type: "point", geographic: true }
|
96
94
|
end
|
97
|
-
::File.open(
|
98
|
-
::ActiveRecord::SchemaDumper.dump(
|
95
|
+
::File.open(tmp_sql_filename, "w:utf-8") do |file|
|
96
|
+
::ActiveRecord::SchemaDumper.dump(connection, file)
|
99
97
|
end
|
100
|
-
data = ::File.read(
|
98
|
+
data = ::File.read(tmp_sql_filename)
|
101
99
|
assert(data.index('t.spatial "latlon1", limit: {:srid=>4326, :type=>"point", :geographic=>true}'))
|
102
100
|
assert(data.index('t.spatial "latlon2", limit: {:srid=>4326, :type=>"point", :geographic=>true}'))
|
103
101
|
end
|
102
|
+
|
103
|
+
def test_index_schema_dump
|
104
|
+
setup_database_tasks
|
105
|
+
connection.create_table(:spatial_test) do |t|
|
106
|
+
t.point "latlon", geographic: true
|
107
|
+
end
|
108
|
+
connection.add_index :spatial_test, :latlon, spatial: true
|
109
|
+
::File.open(tmp_sql_filename, "w:utf-8") do |file|
|
110
|
+
::ActiveRecord::SchemaDumper.dump(connection, file)
|
111
|
+
end
|
112
|
+
data = ::File.read(tmp_sql_filename)
|
113
|
+
assert data.index('t.spatial "latlon", limit: {:srid=>4326, :type=>"point", :geographic=>true}')
|
114
|
+
assert data.index('add_index "spatial_test", ["latlon"], :name => "index_spatial_test_on_latlon", :spatial => true')
|
115
|
+
end
|
104
116
|
end
|
117
|
+
|
118
|
+
private
|
119
|
+
|
120
|
+
def connection
|
121
|
+
::ActiveRecord::Base.connection
|
122
|
+
end
|
123
|
+
|
124
|
+
def tmp_sql_filename
|
125
|
+
::File.expand_path('../tmp/tmp.sql', ::File.dirname(__FILE__))
|
126
|
+
end
|
127
|
+
|
128
|
+
def setup_database_tasks
|
129
|
+
::FileUtils.rm_f(tmp_sql_filename)
|
130
|
+
::FileUtils.mkdir_p(::File.dirname(tmp_sql_filename))
|
131
|
+
::ActiveRecord::Tasks::DatabaseTasks.create(TasksTest.new_database_config)
|
132
|
+
end
|
133
|
+
|
105
134
|
end
|
106
135
|
end
|
107
136
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord-postgis-adapter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Azuma, Tee Parham
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-05-
|
11
|
+
date: 2014-05-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|