activerecord-postgis-adapter 6.0.1 → 7.0.0
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 +4 -4
- data/lib/active_record/connection_adapters/postgis/arel_tosql.rb +18 -16
- data/lib/active_record/connection_adapters/postgis/create_connection.rb +7 -11
- data/lib/active_record/connection_adapters/postgis/oid/spatial.rb +11 -5
- data/lib/active_record/connection_adapters/postgis/postgis_database_tasks.rb +27 -26
- data/lib/active_record/connection_adapters/postgis/version.rb +1 -1
- data/lib/active_record/connection_adapters/postgis_adapter.rb +1 -7
- metadata +14 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bb1e1b34ad600caf80e784c5ed95979d2712fe102d7845814d7258cec6605425
|
4
|
+
data.tar.gz: 6c9dcf403ec396a9482a9d88a02fd4282d6c9c50fbcc84d2581927f2bbf570d0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: be97e239ddd7b98c4b96616e456250c2ef624bf33517e02623d69ac1a4f94f64f46ecc1e0bf16afd5c036e36e6b3cba68f872ad261ebce44ef07a3b1661b21b5
|
7
|
+
data.tar.gz: 48d54259d8027b81ad8419bef0d66b1f73fa5145df8dd001bab340049b28c331bf7474f3614076b9de2f0626fc80a3da19cd1267519e9857b4f19d93008e416d
|
@@ -1,5 +1,23 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
module RGeo
|
4
|
+
module ActiveRecord
|
5
|
+
##
|
6
|
+
# Extend rgeo-activerecord visitors to use PostGIS specific functionality
|
7
|
+
module SpatialToPostGISSql
|
8
|
+
def visit_in_spatial_context(node, collector)
|
9
|
+
# Use ST_GeomFromEWKT for EWKT geometries
|
10
|
+
if node.is_a?(String) && node =~ /SRID=[\d+]{0,};/
|
11
|
+
collector << "#{st_func('ST_GeomFromEWKT')}(#{quote(node)})"
|
12
|
+
else
|
13
|
+
super(node, collector)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
RGeo::ActiveRecord::SpatialToSql.prepend RGeo::ActiveRecord::SpatialToPostGISSql
|
20
|
+
|
3
21
|
module Arel # :nodoc:
|
4
22
|
module Visitors # :nodoc:
|
5
23
|
# Different super-class under JRuby JDBC adapter.
|
@@ -11,22 +29,6 @@ module Arel # :nodoc:
|
|
11
29
|
|
12
30
|
class PostGIS < PostGISSuperclass # :nodoc:
|
13
31
|
include RGeo::ActiveRecord::SpatialToSql
|
14
|
-
|
15
|
-
FUNC_MAP = {
|
16
|
-
"st_wkttosql" => "ST_GeomFromEWKT",
|
17
|
-
}
|
18
|
-
|
19
|
-
def st_func(standard_name)
|
20
|
-
FUNC_MAP[standard_name.downcase] || standard_name
|
21
|
-
end
|
22
|
-
|
23
|
-
def visit_String(node, collector)
|
24
|
-
collector << "#{st_func('ST_WKTToSQL')}(#{quote(node)})"
|
25
|
-
end
|
26
|
-
|
27
|
-
def visit_RGeo_ActiveRecord_SpatialNamedFunction(node, collector)
|
28
|
-
aggregate(st_func(node.name), node, collector)
|
29
|
-
end
|
30
32
|
end
|
31
33
|
end
|
32
34
|
end
|
@@ -23,9 +23,7 @@ module ActiveRecord # :nodoc:
|
|
23
23
|
# https://github.com/rails/rails/blob/master/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
|
24
24
|
# FULL REPLACEMENT because we need to create a different class.
|
25
25
|
def postgis_connection(config)
|
26
|
-
conn_params = config.symbolize_keys
|
27
|
-
|
28
|
-
conn_params.delete_if { |_, v| v.nil? }
|
26
|
+
conn_params = config.symbolize_keys.compact
|
29
27
|
|
30
28
|
# Map ActiveRecords param names to PGs.
|
31
29
|
conn_params[:user] = conn_params.delete(:username) if conn_params[:username]
|
@@ -35,14 +33,12 @@ module ActiveRecord # :nodoc:
|
|
35
33
|
valid_conn_param_keys = PG::Connection.conndefaults_hash.keys + [:requiressl]
|
36
34
|
conn_params.slice!(*valid_conn_param_keys)
|
37
35
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
raise
|
45
|
-
end
|
36
|
+
ConnectionAdapters::PostGISAdapter.new(
|
37
|
+
ConnectionAdapters::PostGISAdapter.new_client(conn_params),
|
38
|
+
logger,
|
39
|
+
conn_params,
|
40
|
+
config
|
41
|
+
)
|
46
42
|
end
|
47
43
|
|
48
44
|
end
|
@@ -49,11 +49,7 @@ module ActiveRecord
|
|
49
49
|
def spatial_factory
|
50
50
|
@spatial_factory ||=
|
51
51
|
RGeo::ActiveRecord::SpatialFactoryStore.instance.factory(
|
52
|
-
|
53
|
-
has_m: @has_m,
|
54
|
-
has_z: @has_z,
|
55
|
-
sql_type: @sql_type,
|
56
|
-
srid: @srid
|
52
|
+
factory_attrs
|
57
53
|
)
|
58
54
|
end
|
59
55
|
|
@@ -107,6 +103,16 @@ module ActiveRecord
|
|
107
103
|
RGeo::WKRep::WKTParser.new(spatial_factory, support_ewkt: true, default_srid: @srid)
|
108
104
|
end
|
109
105
|
end
|
106
|
+
|
107
|
+
def factory_attrs
|
108
|
+
{
|
109
|
+
geo_type: @geo_type.underscore,
|
110
|
+
has_m: @has_m,
|
111
|
+
has_z: @has_z,
|
112
|
+
srid: @srid,
|
113
|
+
sql_type: type.to_s
|
114
|
+
}
|
115
|
+
end
|
110
116
|
end
|
111
117
|
end
|
112
118
|
end
|
@@ -4,7 +4,7 @@ module ActiveRecord # :nodoc:
|
|
4
4
|
module ConnectionAdapters # :nodoc:
|
5
5
|
module PostGIS # :nodoc:
|
6
6
|
class PostGISDatabaseTasks < ::ActiveRecord::Tasks::PostgreSQLDatabaseTasks # :nodoc:
|
7
|
-
def initialize(
|
7
|
+
def initialize(db_config)
|
8
8
|
super
|
9
9
|
ensure_installation_configs
|
10
10
|
end
|
@@ -14,19 +14,19 @@ module ActiveRecord # :nodoc:
|
|
14
14
|
if extension_names
|
15
15
|
setup_gis_from_extension
|
16
16
|
end
|
17
|
-
establish_connection(
|
17
|
+
establish_connection(db_config)
|
18
18
|
end
|
19
19
|
|
20
20
|
# Override to set the database owner and call setup_gis
|
21
21
|
def create(master_established = false)
|
22
22
|
establish_master_connection unless master_established
|
23
|
-
extra_configs = {
|
24
|
-
extra_configs[
|
25
|
-
connection.create_database(
|
23
|
+
extra_configs = { encoding: encoding }
|
24
|
+
extra_configs[:owner] = username if has_su?
|
25
|
+
connection.create_database(db_config.database, configuration_hash.merge(extra_configs))
|
26
26
|
setup_gis
|
27
27
|
rescue ::ActiveRecord::StatementInvalid => error
|
28
28
|
if /database .* already exists/ === error.message
|
29
|
-
raise ::ActiveRecord::
|
29
|
+
raise ::ActiveRecord::DatabaseAlreadyExists
|
30
30
|
else
|
31
31
|
raise
|
32
32
|
end
|
@@ -36,24 +36,24 @@ module ActiveRecord # :nodoc:
|
|
36
36
|
|
37
37
|
# Override to use su_username and su_password
|
38
38
|
def establish_master_connection
|
39
|
-
establish_connection(
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
39
|
+
establish_connection(configuration_hash.merge(
|
40
|
+
database: "postgres",
|
41
|
+
password: su_password,
|
42
|
+
schema_search_path: "public",
|
43
|
+
username: su_username
|
44
44
|
))
|
45
45
|
end
|
46
46
|
|
47
47
|
def establish_su_connection
|
48
|
-
establish_connection(
|
49
|
-
|
50
|
-
|
51
|
-
|
48
|
+
establish_connection(configuration_hash.merge(
|
49
|
+
password: su_password,
|
50
|
+
schema_search_path: "public",
|
51
|
+
username: su_username
|
52
52
|
))
|
53
53
|
end
|
54
54
|
|
55
55
|
def username
|
56
|
-
@username ||=
|
56
|
+
@username ||= configuration_hash[:username]
|
57
57
|
end
|
58
58
|
|
59
59
|
def quoted_username
|
@@ -61,29 +61,30 @@ module ActiveRecord # :nodoc:
|
|
61
61
|
end
|
62
62
|
|
63
63
|
def password
|
64
|
-
@password ||=
|
64
|
+
@password ||= configuration_hash[:password]
|
65
65
|
end
|
66
66
|
|
67
67
|
def su_username
|
68
|
-
@su_username ||=
|
68
|
+
@su_username ||= configuration_hash.fetch(:su_username, username)
|
69
69
|
end
|
70
70
|
|
71
71
|
def su_password
|
72
|
-
@su_password ||=
|
72
|
+
@su_password ||= configuration_hash.fetch(:su_password, password)
|
73
73
|
end
|
74
74
|
|
75
75
|
def has_su?
|
76
|
-
@has_su
|
77
|
-
|
76
|
+
return @has_su if defined?(@has_su)
|
77
|
+
|
78
|
+
@has_su = configuration_hash.include?(:su_username)
|
78
79
|
end
|
79
80
|
|
80
81
|
def search_path
|
81
|
-
@search_path ||=
|
82
|
+
@search_path ||= configuration_hash[:schema_search_path].to_s.strip.split(",").map(&:strip)
|
82
83
|
end
|
83
84
|
|
84
85
|
def extension_names
|
85
86
|
@extension_names ||= begin
|
86
|
-
extensions =
|
87
|
+
extensions = configuration_hash[:postgis_extension]
|
87
88
|
case extensions
|
88
89
|
when ::String
|
89
90
|
extensions.split(",")
|
@@ -96,11 +97,11 @@ module ActiveRecord # :nodoc:
|
|
96
97
|
end
|
97
98
|
|
98
99
|
def ensure_installation_configs
|
99
|
-
if
|
100
|
+
if configuration_hash[:setup] == "default" && !configuration_hash[:postgis_extension]
|
100
101
|
share_dir = `pg_config --sharedir`.strip rescue "/usr/share"
|
101
102
|
control_file = ::File.expand_path("extension/postgis.control", share_dir)
|
102
103
|
if ::File.readable?(control_file)
|
103
|
-
|
104
|
+
@configuration_hash = configuration_hash.merge(postgis_extension: "postgis").freeze
|
104
105
|
end
|
105
106
|
end
|
106
107
|
end
|
@@ -113,7 +114,7 @@ module ActiveRecord # :nodoc:
|
|
113
114
|
end
|
114
115
|
connection.execute("CREATE EXTENSION IF NOT EXISTS #{extname} SCHEMA topology")
|
115
116
|
else
|
116
|
-
if (postgis_schema =
|
117
|
+
if (postgis_schema = configuration_hash[:postgis_schema])
|
117
118
|
schema_clause = "WITH SCHEMA #{postgis_schema}"
|
118
119
|
unless schema_exists?(postgis_schema)
|
119
120
|
connection.execute("CREATE SCHEMA #{postgis_schema}")
|
@@ -7,13 +7,7 @@
|
|
7
7
|
|
8
8
|
require "rgeo/active_record"
|
9
9
|
|
10
|
-
|
11
|
-
module ActiveRecord
|
12
|
-
module ConnectionAdapters
|
13
|
-
AbstractAdapter
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
10
|
+
require "active_record/connection_adapters"
|
17
11
|
require "active_record/connection_adapters/postgresql_adapter"
|
18
12
|
require "active_record/connection_adapters/postgis/version"
|
19
13
|
require "active_record/connection_adapters/postgis/column_methods"
|
metadata
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord-postgis-adapter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 7.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
- Daniel Azuma
|
7
|
+
- Daniel Azuma
|
8
|
+
- Tee Parham
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date:
|
12
|
+
date: 2021-01-05 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: activerecord
|
@@ -16,28 +17,28 @@ dependencies:
|
|
16
17
|
requirements:
|
17
18
|
- - "~>"
|
18
19
|
- !ruby/object:Gem::Version
|
19
|
-
version: '6.
|
20
|
+
version: '6.1'
|
20
21
|
type: :runtime
|
21
22
|
prerelease: false
|
22
23
|
version_requirements: !ruby/object:Gem::Requirement
|
23
24
|
requirements:
|
24
25
|
- - "~>"
|
25
26
|
- !ruby/object:Gem::Version
|
26
|
-
version: '6.
|
27
|
+
version: '6.1'
|
27
28
|
- !ruby/object:Gem::Dependency
|
28
29
|
name: rgeo-activerecord
|
29
30
|
requirement: !ruby/object:Gem::Requirement
|
30
31
|
requirements:
|
31
32
|
- - "~>"
|
32
33
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
34
|
+
version: 7.0.0
|
34
35
|
type: :runtime
|
35
36
|
prerelease: false
|
36
37
|
version_requirements: !ruby/object:Gem::Requirement
|
37
38
|
requirements:
|
38
39
|
- - "~>"
|
39
40
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
41
|
+
version: 7.0.0
|
41
42
|
- !ruby/object:Gem::Dependency
|
42
43
|
name: rake
|
43
44
|
requirement: !ruby/object:Gem::Requirement
|
@@ -97,7 +98,10 @@ dependencies:
|
|
97
98
|
description: ActiveRecord connection adapter for PostGIS. It is based on the stock
|
98
99
|
PostgreSQL adapter, and adds built-in support for the spatial extensions provided
|
99
100
|
by PostGIS. It uses the RGeo library to represent spatial data in Ruby.
|
100
|
-
email:
|
101
|
+
email:
|
102
|
+
- dazuma@gmail.com
|
103
|
+
- parhameter@gmail.com
|
104
|
+
- kfdoggett@gmail.com
|
101
105
|
executables: []
|
102
106
|
extensions: []
|
103
107
|
extra_rdoc_files: []
|
@@ -120,7 +124,7 @@ files:
|
|
120
124
|
- lib/activerecord-postgis-adapter.rb
|
121
125
|
homepage: http://github.com/rgeo/activerecord-postgis-adapter
|
122
126
|
licenses:
|
123
|
-
- BSD
|
127
|
+
- BSD-3-Clause
|
124
128
|
metadata: {}
|
125
129
|
post_install_message:
|
126
130
|
rdoc_options: []
|
@@ -137,7 +141,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
137
141
|
- !ruby/object:Gem::Version
|
138
142
|
version: '0'
|
139
143
|
requirements: []
|
140
|
-
rubygems_version: 3.
|
144
|
+
rubygems_version: 3.0.8
|
141
145
|
signing_key:
|
142
146
|
specification_version: 4
|
143
147
|
summary: ActiveRecord adapter for PostGIS, based on RGeo.
|