activerecord-mysql2rgeo-adapter 5.1.0 → 5.2.2

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
  SHA256:
3
- metadata.gz: 15b85c3b96245dc0cda126756f7cfb2d1d4fc2a93baa86612e283277934d1d73
4
- data.tar.gz: 15eb74772a5f2bea2fec482ef2165c23d7e1c195a8e2acfd7642c3cff4c81448
3
+ metadata.gz: ff6faa5bd2d1fdbd11d39ae470198df22169779733a6a2edfb07bdb316cf8101
4
+ data.tar.gz: 1466bc545f7d632a47934022ec1ee16755b3d32d92d7b9fb5e470abefd4858ef
5
5
  SHA512:
6
- metadata.gz: 3e391e6373d02448e9c4344c21f495fe190d0455fb1e9d5692add77291e03b476bfba666f32ec036284bc771a74cf3bb182c78dbcd40b6af84d0918aa83c3beb
7
- data.tar.gz: 51c01a9e4d540bf2e5b3d58ccf06491fcc91b93df421e353691ff1698f653bbcc975a4f8c5aae587e03ede8457d27b43bb5c9b46720d3c942bc4856a2659f2dd
6
+ metadata.gz: 923e9ea973d64cf7503114ce25a88dca5fb1419d9fddad878579a124270a26a7fca55e02364bae8c5822a8d8160635a581539d2b525c3d90bd6bce417f9e8681
7
+ data.tar.gz: 7fa56cefbadc3afeeb5558f86b6a349adf725eca130bba822a7012e8bd95da0c04ba849501ae950cb34788dab52d9933b096099bc4ba414435b4f0712a0ad176
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Arel # :nodoc:
2
4
  module Visitors # :nodoc:
3
5
  # Different super-class under JRuby JDBC adapter.
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ActiveRecord
2
4
  module ConnectionAdapters
3
5
  module Mysql2Rgeo
@@ -11,38 +13,38 @@ module ActiveRecord
11
13
  column(name, :geometry, options)
12
14
  end
13
15
 
14
- def geometrycollection(name, options = {})
16
+ def geometry_collection(name, options = {})
15
17
  column(name, :geometrycollection, options)
16
18
  end
17
- alias geometry_collection geometrycollection
19
+ alias geometrycollection geometry_collection
18
20
 
19
- def point(name, options = {})
20
- column(name, :point, options)
21
+ def line_string(name, options = {})
22
+ column(name, :linestring, options)
21
23
  end
24
+ alias linestring line_string
22
25
 
23
- def multipoint(name, options = {})
26
+ def multi_line_string(name, options = {})
27
+ column(name, :multilinestring, options)
28
+ end
29
+ alias multilinestring multi_line_string
30
+
31
+ def multi_point(name, options = {})
24
32
  column(name, :multipoint, options)
25
33
  end
26
- alias multi_point multipoint
34
+ alias multipoint multi_point
27
35
 
28
- def linestring(name, options = {})
29
- column(name, :linestring, options)
36
+ def multi_polygon(name, options = {})
37
+ column(name, :multipolygon, options)
30
38
  end
31
- alias line_string linestring
39
+ alias multipolygon multi_polygon
32
40
 
33
- def multilinestring(name, options = {})
34
- column(name, :multilinestring, options)
41
+ def point(name, options = {})
42
+ column(name, :point, options)
35
43
  end
36
- alias multi_line_string multilinestring
37
44
 
38
45
  def polygon(name, options = {})
39
46
  column(name, :polygon, options)
40
47
  end
41
-
42
- def multipolygon(name, options = {})
43
- column(name, :multipolygon, options)
44
- end
45
- alias multi_polygon multipolygon
46
48
  end
47
49
  end
48
50
 
@@ -15,7 +15,7 @@ module ActiveRecord # :nodoc:
15
15
  mysql2_connection(config)
16
16
  end
17
17
 
18
- alias jdbcmysql2rgeo_connection mysql2rgeo_connection
18
+ alias_method :jdbcmysql2rgeo_connection, :mysql2rgeo_connection
19
19
 
20
20
  else
21
21
 
@@ -26,16 +26,15 @@ module ActiveRecord
26
26
  # Add spatial types
27
27
  # Reference: https://dev.mysql.com/doc/refman/5.6/en/spatial-type-overview.html
28
28
  super.merge(
29
- spatial: { name: "geometry" },
30
- geometry: { name: "geometry" },
31
- geometrycollection: { name: "geometrycollection" },
32
- point: { name: "point" },
33
- linestring: { name: "linestring" },
34
- polygon: { name: "polygon" },
35
- multipoint: { name: "multipoint" },
36
- multi_point: { name: "multipoint" },
37
- multi_linestring: { name: "multilinestring" },
38
- multi_polygon: { name: "multipolygon" }
29
+ geometry: { name: "geometry" },
30
+ geometrycollection: { name: "geometrycollection" },
31
+ linestring: { name: "linestring" },
32
+ multi_line_string: { name: "multilinestring" },
33
+ multi_point: { name: "multipoint" },
34
+ multi_polygon: { name: "multipolygon" },
35
+ spatial: { name: "geometry" },
36
+ point: { name: "point" },
37
+ polygon: { name: "polygon" }
39
38
  )
40
39
  end
41
40
 
@@ -72,7 +71,7 @@ module ActiveRecord
72
71
  end
73
72
 
74
73
  SpatialColumn.new(
75
- field[:Field],
74
+ field[:Field],
76
75
  default,
77
76
  type_metadata,
78
77
  field[:Null] == "YES",
@@ -81,16 +80,6 @@ module ActiveRecord
81
80
  field[:Collation],
82
81
  comment: field[:Comment].presence
83
82
  )
84
- # MySQL::Column.new(
85
- # field[:Field],
86
- # default,
87
- # type_metadata,
88
- # field[:Null] == "YES",
89
- # table_name,
90
- # default_function,
91
- # field[:Collation],
92
- # comment: field[:Comment].presence
93
- # )
94
83
  end
95
84
  end
96
85
  end
@@ -34,9 +34,9 @@ module ActiveRecord # :nodoc:
34
34
  false
35
35
  end
36
36
 
37
+ alias :geographic? :geographic
37
38
  alias :has_z? :has_z
38
39
  alias :has_m? :has_m
39
- alias :geographic? :geographic
40
40
 
41
41
  def limit
42
42
  if spatial?
@@ -65,7 +65,7 @@ module ActiveRecord # :nodoc:
65
65
  end
66
66
 
67
67
  def build_from_sql_type(sql_type)
68
- geo_type, @srid, @has_z, @has_m = Type::Spatial.parse_sql_type(sql_type)
68
+ geo_type, @srid = Type::Spatial.parse_sql_type(sql_type)
69
69
  set_geometric_type_from_name(geo_type)
70
70
  end
71
71
  end
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ActiveRecord
2
4
  module ConnectionAdapters
3
5
  module Mysql2Rgeo
4
- VERSION = "5.1.0".freeze
6
+ VERSION = "5.2.2"
5
7
  end
6
8
  end
7
9
  end
@@ -27,7 +27,6 @@ require "active_record/connection_adapters/mysql2rgeo/create_connection"
27
27
 
28
28
  # :startdoc:
29
29
 
30
- # ActiveRecord::ConnectionAdapters::Mysql2RgeoAdapter
31
30
  module ActiveRecord
32
31
  module ConnectionAdapters
33
32
  class Mysql2RgeoAdapter < Mysql2Adapter
@@ -35,16 +34,16 @@ module ActiveRecord
35
34
 
36
35
  SPATIAL_COLUMN_OPTIONS =
37
36
  {
38
- geometry: {},
39
- geometrycollection: {},
40
- linestring: {},
41
- multilinestring: {},
42
- multipoint: {},
43
- multipolygon: {},
44
- spatial: { type: "geometry" },
45
- point: {},
46
- polygon: {}
47
- }.freeze
37
+ geometry: {},
38
+ geometrycollection: {},
39
+ linestring: {},
40
+ multilinestring: {},
41
+ multipoint: {},
42
+ multipolygon: {},
43
+ spatial: { type: "geometry" },
44
+ point: {},
45
+ polygon: {}
46
+ }
48
47
 
49
48
  # http://postgis.17.x6.nabble.com/Default-SRID-td5001115.html
50
49
  DEFAULT_SRID = 0
@@ -53,7 +52,6 @@ module ActiveRecord
53
52
  super
54
53
 
55
54
  @visitor = Arel::Visitors::Mysql2Rgeo.new(self)
56
- # @visitor.extend(DetermineIfPreparableVisitor) if self.class.type_cast_config_to_boolean(config.fetch(:prepared_statements) { true })
57
55
  end
58
56
 
59
57
  def adapter_name
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ActiveRecord
2
4
  module Type
3
5
  class Spatial < Value # :nodoc:
@@ -14,53 +16,49 @@ module ActiveRecord
14
16
 
15
17
  # sql_type: geometry, geometry(Point), geometry(Point,4326), ...
16
18
  #
17
- # returns [geo_type, srid, has_z, has_m]
19
+ # returns [geo_type, srid]
18
20
  # geo_type: geography, geometry, point, line_string, polygon, ...
19
21
  # srid: 1234
20
22
  def self.parse_sql_type(sql_type)
21
23
  geo_type, srid = nil, 0, false, false
22
24
 
23
25
  if sql_type =~ /(geography|geometry)\((.*)\)$/i
26
+ # geometry(Point)
24
27
  # geometry(Point,4326)
25
28
  params = Regexp.last_match(2).split(",")
26
- if params.size > 1
27
- if params.first =~ /([a-z]+[^zm])(z?)(m?)/i
28
- geo_type = Regexp.last_match(1)
29
- end
30
- if params.last =~ /(\d+)/
31
- srid = Regexp.last_match(1).to_i
32
- end
33
- else
34
- # geometry(Point)
35
- geo_type = params[0]
29
+ if params.first =~ /([a-z]+[^zm])(z?)(m?)/i
30
+ geo_type = Regexp.last_match(1)
31
+ end
32
+ if params.last =~ /(\d+)/
33
+ srid = Regexp.last_match(1).to_i
36
34
  end
37
35
  else
38
36
  # geometry
37
+ # otherType(a,b)
39
38
  geo_type = sql_type
40
39
  end
41
40
  [geo_type, srid]
42
41
  end
43
42
 
44
- def klass
45
- puts type
46
- type == :geometry ? RGeo::Feature::Geometry : super
43
+ def spatial_factory
44
+ @spatial_factory ||=
45
+ RGeo::ActiveRecord::SpatialFactoryStore.instance.factory(
46
+ geo_type: @geo_type,
47
+ sql_type: @sql_type,
48
+ srid: @srid
49
+ )
47
50
  end
48
51
 
49
- def type
50
- :geometry
52
+ def klass
53
+ type == :geometry ? RGeo::Feature::Geometry : super
51
54
  end
52
55
 
53
56
  def spatial?
54
57
  true
55
58
  end
56
59
 
57
- def spatial_factory
58
- @spatial_factory ||=
59
- RGeo::ActiveRecord::SpatialFactoryStore.instance.factory(
60
- geo_type: @geo_type,
61
- sql_type: @sql_type,
62
- srid: @srid
63
- )
60
+ def type
61
+ :geometry
64
62
  end
65
63
 
66
64
  # support setting an RGeo object or a WKT string
@@ -78,35 +76,23 @@ module ActiveRecord
78
76
 
79
77
  def cast_value(value)
80
78
  return if value.nil?
81
- case value
82
- when ::RGeo::Feature::Geometry
83
- value
84
- # RGeo::Feature.cast(value, spatial_factory) rescue nil
85
- when ::String
86
- marker = value[4, 1]
87
- if marker == "\x00" || marker == "\x01"
88
- srid = value[0, 4].unpack(marker == "\x01" ? "V" : "N").first
89
- begin
90
- RGeo::WKRep::WKBParser.new(spatial_factory, support_ewkb: true, default_srid: srid).parse(value[4..-1])
91
- rescue
92
- nil
93
- end
94
- elsif value[0, 10] =~ /[0-9a-fA-F]{8}0[01]/
95
- srid = value[0, 8].to_i(16)
96
- srid = [srid].pack("V").unpack("N").first if value[9, 1] == "1"
97
- begin
98
- RGeo::WKRep::WKBParser.new(spatial_factory, support_ewkb: true, default_srid: srid).parse(value[8..-1])
99
- rescue
100
- nil
101
- end
102
- else
103
- begin
104
- RGeo::WKRep::WKTParser.new(spatial_factory, support_ewkt: true, default_srid: @srid).parse(value)
105
- rescue
106
- nil
107
- end
108
- end
79
+ ::String === value ? parse_wkt(value) : value
80
+ end
81
+
82
+ def parse_wkt(string)
83
+ marker = string[4, 1]
84
+ if marker == "\x00" || marker == "\x01"
85
+ srid = string[0, 4].unpack(marker == "\x01" ? "V" : "N").first
86
+ RGeo::WKRep::WKBParser.new(spatial_factory, support_ewkb: true, default_srid: srid).parse(string[4..-1])
87
+ elsif string[0, 10] =~ /[0-9a-fA-F]{8}0[01]/
88
+ srid = string[0, 8].to_i(16)
89
+ srid = [srid].pack("V").unpack("N").first if string[9, 1] == "1"
90
+ RGeo::WKRep::WKBParser.new(spatial_factory, support_ewkb: true, default_srid: srid).parse(string[8..-1])
91
+ else
92
+ RGeo::WKRep::WKTParser.new(spatial_factory, support_ewkt: true, default_srid: @srid).parse(string)
109
93
  end
94
+ rescue RGeo::Error::ParseError
95
+ nil
110
96
  end
111
97
  end
112
98
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-mysql2rgeo-adapter
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.1.0
4
+ version: 5.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yongdae Hwang
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-02-21 00:00:00.000000000 Z
11
+ date: 2019-02-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord