activerecord-postgis-adapter 3.1.5 → 4.0.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/active_record/connection_adapters/postgis/create_connection.rb +3 -2
- data/lib/active_record/connection_adapters/postgis/oid/spatial.rb +5 -12
- data/lib/active_record/connection_adapters/postgis/postgis_database_tasks.rb +2 -2
- data/lib/active_record/connection_adapters/postgis/schema_statements.rb +28 -25
- data/lib/active_record/connection_adapters/postgis/spatial_column.rb +10 -19
- data/lib/active_record/connection_adapters/postgis/version.rb +1 -1
- data/lib/active_record/connection_adapters/postgis_adapter.rb +10 -1
- metadata +13 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 380360884a0395acaf0c5aef06a7629723fb626c
|
4
|
+
data.tar.gz: 946d727f1d802b68fdaa9cc699ddab13cca21366
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1b6e68a52ef70938e8b8299938049262c6acd45d1fe3df802f38f69d225034ee24a3ef66a19d8d4b2082dbea77fe0f804d8ac2b2d4b021b088b7ec2832b2e55e
|
7
|
+
data.tar.gz: 1fe70438744374e09787d1c9409976b85887eae506381384e3cc72b6b34de01314194106ead29b942f163c0a61b74e479011803ac4d138566f419812e4d24018
|
@@ -19,8 +19,8 @@ module ActiveRecord # :nodoc:
|
|
19
19
|
|
20
20
|
# Based on the default <tt>postgresql_connection</tt> definition from ActiveRecord.
|
21
21
|
# https://github.com/rails/rails/blob/master/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
|
22
|
+
# FULL REPLACEMENT because we need to create a different class.
|
22
23
|
def postgis_connection(config)
|
23
|
-
# FULL REPLACEMENT because we need to create a different class.
|
24
24
|
conn_params = config.symbolize_keys
|
25
25
|
|
26
26
|
conn_params.delete_if { |_, v| v.nil? }
|
@@ -30,7 +30,8 @@ module ActiveRecord # :nodoc:
|
|
30
30
|
conn_params[:dbname] = conn_params.delete(:database) if conn_params[:database]
|
31
31
|
|
32
32
|
# Forward only valid config params to PGconn.connect.
|
33
|
-
|
33
|
+
valid_conn_param_keys = PGconn.conndefaults_hash.keys + [:requiressl]
|
34
|
+
conn_params.slice!(*valid_conn_param_keys)
|
34
35
|
|
35
36
|
# The postgres drivers don't allow the creation of an unconnected PGconn object,
|
36
37
|
# so just pass a nil connection object for the time being.
|
@@ -54,7 +54,7 @@ module ActiveRecord
|
|
54
54
|
has_m: @has_m,
|
55
55
|
has_z: @has_z,
|
56
56
|
sql_type: @sql_type,
|
57
|
-
srid: @srid
|
57
|
+
srid: @srid
|
58
58
|
)
|
59
59
|
end
|
60
60
|
|
@@ -71,30 +71,23 @@ module ActiveRecord
|
|
71
71
|
end
|
72
72
|
|
73
73
|
# support setting an RGeo object or a WKT string
|
74
|
-
def
|
74
|
+
def serialize(value)
|
75
75
|
return if value.nil?
|
76
|
-
geo_value =
|
76
|
+
geo_value = cast_value(value)
|
77
77
|
|
78
78
|
# TODO - only valid types should be allowed
|
79
79
|
# e.g. linestring is not valid for point column
|
80
80
|
# raise "maybe should raise" unless RGeo::Feature::Geometry.check_type(geo_value)
|
81
81
|
|
82
82
|
RGeo::WKRep::WKBGenerator.new(hex_format: true, type_format: :ewkb, emit_ewkb_srid: true)
|
83
|
-
|
83
|
+
.generate(geo_value)
|
84
84
|
end
|
85
85
|
|
86
86
|
private
|
87
87
|
|
88
|
-
def type_cast(value)
|
89
|
-
return if value.nil?
|
90
|
-
String === value ? parse_wkt(value) : value
|
91
|
-
end
|
92
|
-
|
93
88
|
def cast_value(value)
|
94
89
|
return if value.nil?
|
95
|
-
|
96
|
-
rescue RGeo::Error::ParseError
|
97
|
-
nil
|
90
|
+
String === value ? parse_wkt(value) : value
|
98
91
|
end
|
99
92
|
|
100
93
|
# convert WKT string into RGeo object
|
@@ -38,7 +38,7 @@ module ActiveRecord # :nodoc:
|
|
38
38
|
"database" => "postgres",
|
39
39
|
"password" => su_password,
|
40
40
|
"schema_search_path" => "public",
|
41
|
-
"username" => su_username
|
41
|
+
"username" => su_username
|
42
42
|
))
|
43
43
|
end
|
44
44
|
|
@@ -46,7 +46,7 @@ module ActiveRecord # :nodoc:
|
|
46
46
|
establish_connection(configuration.merge(
|
47
47
|
"password" => su_password,
|
48
48
|
"schema_search_path" => "public",
|
49
|
-
"username" => su_username
|
49
|
+
"username" => su_username
|
50
50
|
))
|
51
51
|
end
|
52
52
|
|
@@ -6,36 +6,39 @@ module ActiveRecord
|
|
6
6
|
# pass table_name to #new_column
|
7
7
|
def columns(table_name)
|
8
8
|
# Limit, precision, and scale are all handled by the superclass.
|
9
|
-
column_definitions(table_name).map do |column_name, type, default, notnull, oid, fmod|
|
10
|
-
oid =
|
11
|
-
|
9
|
+
column_definitions(table_name).map do |column_name, type, default, notnull, oid, fmod, collation|
|
10
|
+
oid = oid.to_i
|
11
|
+
fmod = fmod.to_i
|
12
|
+
type_metadata = fetch_type_metadata(column_name, type, oid, fmod)
|
13
|
+
cast_type = get_oid_type(oid.to_i, fmod.to_i, column_name, type)
|
14
|
+
default_value = extract_value_from_default(default)
|
15
|
+
|
12
16
|
default_function = extract_default_function(default_value, default)
|
13
|
-
|
14
|
-
new_column(table_name, column_name, default_value, oid, type, !notnull, default_function)
|
17
|
+
new_column(table_name, column_name, default_value, cast_type, type_metadata, !notnull, default_function, collation)
|
15
18
|
end
|
16
19
|
end
|
17
20
|
|
18
21
|
# override
|
19
|
-
def new_column(table_name, column_name, default, cast_type,
|
22
|
+
def new_column(table_name, column_name, default, cast_type, sql_type_metadata = nil, null = true, default_function = nil, collation = nil)
|
20
23
|
# JDBC gets true/false in Rails 4, where other platforms get 't'/'f' strings.
|
21
24
|
if null.is_a?(String)
|
22
25
|
null = (null == "t")
|
23
26
|
end
|
24
27
|
|
25
|
-
column_info = spatial_column_info(table_name).get(column_name, sql_type)
|
28
|
+
column_info = spatial_column_info(table_name).get(column_name, sql_type_metadata.sql_type)
|
26
29
|
|
27
|
-
SpatialColumn.new(
|
28
|
-
column_name,
|
30
|
+
SpatialColumn.new(column_name,
|
29
31
|
default,
|
30
|
-
|
31
|
-
sql_type,
|
32
|
+
sql_type_metadata,
|
32
33
|
null,
|
33
34
|
default_function,
|
35
|
+
collation,
|
36
|
+
cast_type,
|
34
37
|
column_info)
|
35
38
|
end
|
36
39
|
|
37
40
|
# override
|
38
|
-
# https://github.com/rails/rails/blob/master/activerecord/lib/active_record/connection_adapters/postgresql/schema_statements.rb#
|
41
|
+
# https://github.com/rails/rails/blob/master/activerecord/lib/active_record/connection_adapters/postgresql/schema_statements.rb#L583
|
39
42
|
#
|
40
43
|
# returns Postgresql sql type string
|
41
44
|
# examples:
|
@@ -47,7 +50,7 @@ module ActiveRecord
|
|
47
50
|
#
|
48
51
|
# type_to_sql(:geography, "Point,4326")
|
49
52
|
# => "geography(Point,4326)"
|
50
|
-
def type_to_sql(type, limit = nil, precision = nil, scale = nil)
|
53
|
+
def type_to_sql(type, limit = nil, precision = nil, scale = nil, array = nil)
|
51
54
|
case type
|
52
55
|
when :geometry, :geography
|
53
56
|
"#{type}(#{limit})"
|
@@ -60,22 +63,22 @@ module ActiveRecord
|
|
60
63
|
def native_database_types
|
61
64
|
# Add spatial types
|
62
65
|
super.merge(
|
63
|
-
geography: "geography",
|
64
|
-
geometry: "geometry",
|
65
|
-
geometry_collection: "geometry_collection",
|
66
|
-
line_string: "line_string",
|
67
|
-
multi_line_string: "multi_line_string",
|
68
|
-
multi_point: "multi_point",
|
69
|
-
multi_polygon: "multi_polygon",
|
70
|
-
spatial: "geometry",
|
71
|
-
st_point: "st_point",
|
72
|
-
st_polygon: "st_polygon"
|
66
|
+
geography: { name: "geography" },
|
67
|
+
geometry: { name: "geometry" },
|
68
|
+
geometry_collection: { name: "geometry_collection" },
|
69
|
+
line_string: { name: "line_string" },
|
70
|
+
multi_line_string: { name: "multi_line_string" },
|
71
|
+
multi_point: { name: "multi_point" },
|
72
|
+
multi_polygon: { name: "multi_polygon" },
|
73
|
+
spatial: { name: "geometry" },
|
74
|
+
st_point: { name: "st_point" },
|
75
|
+
st_polygon: { name: "st_polygon" }
|
73
76
|
)
|
74
77
|
end
|
75
78
|
|
76
79
|
# override
|
77
|
-
def create_table_definition(name, temporary, options, as = nil)
|
78
|
-
PostGIS::TableDefinition.new(
|
80
|
+
def create_table_definition(name, temporary = false, options = nil, as = nil)
|
81
|
+
PostGIS::TableDefinition.new(name, temporary, options, as)
|
79
82
|
end
|
80
83
|
|
81
84
|
# memoize hash of column infos for tables
|
@@ -8,9 +8,9 @@ module ActiveRecord # :nodoc:
|
|
8
8
|
# cast_type example classes:
|
9
9
|
# OID::Spatial
|
10
10
|
# OID::Integer
|
11
|
-
def initialize(
|
12
|
-
@
|
13
|
-
@geographic = !!(sql_type =~ /geography\(/i)
|
11
|
+
def initialize(name, default, sql_type_metadata = nil, null = true, default_function = nil, collation = nil, cast_type = nil, opts = nil)
|
12
|
+
@cast_type = cast_type
|
13
|
+
@geographic = !!(sql_type_metadata.sql_type =~ /geography\(/i)
|
14
14
|
if opts
|
15
15
|
# This case comes from an entry in the geometry_columns table
|
16
16
|
set_geometric_type_from_name(opts[:type])
|
@@ -21,16 +21,18 @@ module ActiveRecord # :nodoc:
|
|
21
21
|
# Geographic type information is embedded in the SQL type
|
22
22
|
@srid = 4326
|
23
23
|
@has_z = @has_m = false
|
24
|
-
build_from_sql_type(sql_type)
|
24
|
+
build_from_sql_type(sql_type_metadata.sql_type)
|
25
25
|
elsif sql_type =~ /geography|geometry|point|linestring|polygon/i
|
26
|
+
build_from_sql_type(sql_type_metadata.sql_type)
|
27
|
+
elsif sql_type_metadata.sql_type =~ /geography|geometry|point|linestring|polygon/i
|
26
28
|
# A geometry column with no geometry_columns entry.
|
27
29
|
# @geometric_type = geo_type_from_sql_type(sql_type)
|
28
|
-
build_from_sql_type(sql_type)
|
30
|
+
build_from_sql_type(sql_type_metadata.sql_type)
|
29
31
|
end
|
30
|
-
super(name, default,
|
32
|
+
super(name, default, sql_type_metadata, null, default_function, collation)
|
31
33
|
if spatial?
|
32
34
|
if @srid
|
33
|
-
@limit = { srid: @srid, type:
|
35
|
+
@limit = { srid: @srid, type: geometric_type.type_name.underscore }
|
34
36
|
@limit[:has_z] = true if @has_z
|
35
37
|
@limit[:has_m] = true if @has_m
|
36
38
|
@limit[:geographic] = true if @geographic
|
@@ -57,7 +59,7 @@ module ActiveRecord # :nodoc:
|
|
57
59
|
end
|
58
60
|
|
59
61
|
def spatial?
|
60
|
-
cast_type.respond_to?(:spatial?) && cast_type.spatial?
|
62
|
+
@cast_type.respond_to?(:spatial?) && @cast_type.spatial?
|
61
63
|
end
|
62
64
|
|
63
65
|
private
|
@@ -70,17 +72,6 @@ module ActiveRecord # :nodoc:
|
|
70
72
|
geo_type, @srid, @has_z, @has_m = OID::Spatial.parse_sql_type(sql_type)
|
71
73
|
set_geometric_type_from_name(geo_type)
|
72
74
|
end
|
73
|
-
|
74
|
-
def to_type_name(geometric_type)
|
75
|
-
name = geometric_type.type_name.underscore
|
76
|
-
if name == "point"
|
77
|
-
"st_point"
|
78
|
-
elsif name == "polygon"
|
79
|
-
"st_polygon"
|
80
|
-
else
|
81
|
-
name
|
82
|
-
end
|
83
|
-
end
|
84
75
|
end
|
85
76
|
end
|
86
77
|
end
|
@@ -47,9 +47,18 @@ module ActiveRecord
|
|
47
47
|
# http://postgis.17.x6.nabble.com/Default-SRID-td5001115.html
|
48
48
|
DEFAULT_SRID = 0
|
49
49
|
|
50
|
-
def initialize(*args)
|
50
|
+
# def initialize(*args)
|
51
|
+
def initialize(connection, logger, connection_parameters, config)
|
51
52
|
super
|
53
|
+
|
52
54
|
@visitor = Arel::Visitors::PostGIS.new(self)
|
55
|
+
# copy from https://github.com/rails/rails/blob/6ece7df8d80c6d93db43878fa4c0278a0204072c/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb#L199
|
56
|
+
if self.class.type_cast_config_to_boolean(config.fetch(:prepared_statements) { true })
|
57
|
+
@prepared_statements = true
|
58
|
+
@visitor.extend(DetermineIfPreparableVisitor)
|
59
|
+
else
|
60
|
+
@prepared_statements = false
|
61
|
+
end
|
53
62
|
end
|
54
63
|
|
55
64
|
def adapter_name
|
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:
|
4
|
+
version: 4.0.0.beta1
|
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:
|
11
|
+
date: 2016-02-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -16,28 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 5.0.0.beta
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 5.0.0.beta
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rgeo-activerecord
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 5.0.0.beta
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 5.0.0.beta
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -130,16 +130,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
130
130
|
requirements:
|
131
131
|
- - ">="
|
132
132
|
- !ruby/object:Gem::Version
|
133
|
-
version:
|
133
|
+
version: 2.2.2
|
134
134
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
|
-
- - "
|
136
|
+
- - ">"
|
137
137
|
- !ruby/object:Gem::Version
|
138
|
-
version:
|
138
|
+
version: 1.3.1
|
139
139
|
requirements: []
|
140
140
|
rubyforge_project:
|
141
|
-
rubygems_version: 2.
|
141
|
+
rubygems_version: 2.5.2
|
142
142
|
signing_key:
|
143
143
|
specification_version: 4
|
144
144
|
summary: ActiveRecord adapter for PostGIS, based on RGeo.
|
145
145
|
test_files: []
|
146
|
+
has_rdoc:
|