activerecord-mysql2spatial-adapter 0.5.1 → 0.5.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/History.rdoc +5 -0
- data/README.rdoc +5 -5
- data/Version +1 -1
- data/lib/active_record/connection_adapters/mysql2spatial_adapter.rb +0 -13
- data/lib/active_record/connection_adapters/mysql2spatial_adapter/arel_tosql.rb +0 -5
- data/lib/active_record/connection_adapters/mysql2spatial_adapter/main_adapter.rb +4 -28
- data/lib/active_record/connection_adapters/mysql2spatial_adapter/spatial_column.rb +4 -19
- data/lib/active_record/connection_adapters/mysql2spatial_adapter/version.rb +0 -11
- data/test/tc_basic.rb +7 -29
- data/test/tc_spatial_queries.rb +4 -20
- metadata +3 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: eddaee56fc0e1979c0d6d85a67a5650768a2a806
|
4
|
+
data.tar.gz: 4f3f4565621224e3cbcaa5b83ddb69b1e1c3c861
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e1240dff2216ddcd86e136f67e2971279862a5e809b2a7001f9cf9e8c3b2a600b52669085c619e6d6af6bf681e6048744d818cc554e4dbafc695b0f221b75f6d
|
7
|
+
data.tar.gz: 485b23c5e95811ba7632d046f265df5ed5c485d0a93e1b9240a8a22e44f3fa081a8e30113cf28bc4e8b30984a28bc8dccafb1d552b739d1c15bc8e48cc84ace7
|
data/History.rdoc
CHANGED
data/README.rdoc
CHANGED
@@ -21,13 +21,13 @@ column may need to be NOT NULL.
|
|
21
21
|
|
22
22
|
Examples (require update):
|
23
23
|
|
24
|
-
create_table :my_spatial_table, :
|
25
|
-
t.column :latlon, :point, :
|
24
|
+
create_table :my_spatial_table, options: 'ENGINE=MyISAM' do |t|
|
25
|
+
t.column :latlon, :point, null: false
|
26
26
|
t.line_string :path
|
27
27
|
t.geometry :shape
|
28
28
|
end
|
29
29
|
change_table :my_spatial_table do |t|
|
30
|
-
t.index :latlon, :
|
30
|
+
t.index :latlon, spatial: true
|
31
31
|
end
|
32
32
|
|
33
33
|
=== Spatial Attributes
|
@@ -80,11 +80,11 @@ Now you can interact with the data using the RGeo types:
|
|
80
80
|
You can create simple queries based on objective equality in the same way
|
81
81
|
you would on a scalar column:
|
82
82
|
|
83
|
-
rec = MySpatialTable.where(:
|
83
|
+
rec = MySpatialTable.where(latlon: RGeo::Geos.factory.point(-122, 47)).first
|
84
84
|
|
85
85
|
You can also use WKT:
|
86
86
|
|
87
|
-
rec = MySpatialTable.where(:
|
87
|
+
rec = MySpatialTable.where(latlon: 'POINT(-122 47)').first
|
88
88
|
|
89
89
|
The adapter also provides experimental support for more complex queries
|
90
90
|
such as radius searches. However, these extensions require Arel 2.1
|
data/Version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.5.
|
1
|
+
0.5.2
|
@@ -1,8 +1,6 @@
|
|
1
|
-
# -----------------------------------------------------------------------------
|
2
1
|
#
|
3
2
|
# Mysql2Spatial adapter for ActiveRecord
|
4
3
|
#
|
5
|
-
# -----------------------------------------------------------------------------
|
6
4
|
# Copyright 2010 Daniel Azuma
|
7
5
|
#
|
8
6
|
# All rights reserved.
|
@@ -30,26 +28,21 @@
|
|
30
28
|
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
31
29
|
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
32
30
|
# POSSIBILITY OF SUCH DAMAGE.
|
33
|
-
# -----------------------------------------------------------------------------
|
34
|
-
;
|
35
31
|
|
36
32
|
|
37
33
|
require 'rgeo/active_record'
|
38
34
|
require 'active_record/connection_adapters/mysql2_adapter'
|
39
35
|
|
40
|
-
|
41
36
|
# The activerecord-mysql2spatial-adapter gem installs the *mysql2spatial*
|
42
37
|
# connection adapter into ActiveRecord.
|
43
38
|
|
44
39
|
module ActiveRecord
|
45
40
|
|
46
|
-
|
47
41
|
# ActiveRecord looks for the mysql2spatial_connection factory method in
|
48
42
|
# this class.
|
49
43
|
|
50
44
|
class Base
|
51
45
|
|
52
|
-
|
53
46
|
# Create a mysql2spatial connection adapter.
|
54
47
|
|
55
48
|
def self.mysql2spatial_connection(config_)
|
@@ -62,10 +55,8 @@ module ActiveRecord
|
|
62
55
|
::ActiveRecord::ConnectionAdapters::Mysql2SpatialAdapter::MainAdapter.new(client_, logger, options_, config_)
|
63
56
|
end
|
64
57
|
|
65
|
-
|
66
58
|
end
|
67
59
|
|
68
|
-
|
69
60
|
# All ActiveRecord adapters go in this namespace.
|
70
61
|
module ConnectionAdapters
|
71
62
|
|
@@ -76,13 +67,9 @@ module ActiveRecord
|
|
76
67
|
ADAPTER_NAME = 'Mysql2Spatial'.freeze
|
77
68
|
|
78
69
|
end
|
79
|
-
|
80
70
|
end
|
81
|
-
|
82
|
-
|
83
71
|
end
|
84
72
|
|
85
|
-
|
86
73
|
require 'active_record/connection_adapters/mysql2spatial_adapter/version.rb'
|
87
74
|
require 'active_record/connection_adapters/mysql2spatial_adapter/column_methods.rb' # check if this works with Rails < 4.x
|
88
75
|
require 'active_record/connection_adapters/mysql2spatial_adapter/main_adapter.rb'
|
@@ -1,8 +1,6 @@
|
|
1
|
-
# -----------------------------------------------------------------------------
|
2
1
|
#
|
3
2
|
# Mysql2Spatial adapter for ActiveRecord
|
4
3
|
#
|
5
|
-
# -----------------------------------------------------------------------------
|
6
4
|
# Copyright 2010 Daniel Azuma
|
7
5
|
#
|
8
6
|
# All rights reserved.
|
@@ -30,15 +28,12 @@
|
|
30
28
|
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
31
29
|
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
32
30
|
# POSSIBILITY OF SUCH DAMAGE.
|
33
|
-
# -----------------------------------------------------------------------------
|
34
|
-
;
|
35
31
|
|
36
32
|
|
37
33
|
# :stopdoc:
|
38
34
|
|
39
35
|
module Arel
|
40
36
|
module Visitors
|
41
|
-
|
42
37
|
class MySQL2Spatial < MySQL
|
43
38
|
|
44
39
|
if ::Arel::Visitors.const_defined?(:BindVisitor)
|
@@ -1,8 +1,6 @@
|
|
1
|
-
# -----------------------------------------------------------------------------
|
2
1
|
#
|
3
2
|
# Mysql2Spatial adapter for ActiveRecord
|
4
3
|
#
|
5
|
-
# -----------------------------------------------------------------------------
|
6
4
|
# Copyright 2010 Daniel Azuma
|
7
5
|
#
|
8
6
|
# All rights reserved.
|
@@ -30,25 +28,17 @@
|
|
30
28
|
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
31
29
|
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
32
30
|
# POSSIBILITY OF SUCH DAMAGE.
|
33
|
-
# -----------------------------------------------------------------------------
|
34
|
-
;
|
35
31
|
|
36
32
|
|
37
33
|
# :stopdoc:
|
38
34
|
|
39
35
|
module ActiveRecord
|
40
|
-
|
41
36
|
module ConnectionAdapters
|
42
|
-
|
43
37
|
module Mysql2SpatialAdapter
|
44
|
-
|
45
|
-
|
46
38
|
class MainAdapter < ConnectionAdapters::Mysql2Adapter
|
47
39
|
|
48
|
-
|
49
40
|
NATIVE_DATABASE_TYPES = Mysql2Adapter::NATIVE_DATABASE_TYPES.merge(spatial: { name: 'geometry' })
|
50
41
|
|
51
|
-
|
52
42
|
def initialize(*args_)
|
53
43
|
super
|
54
44
|
# Rails 3.2 way of defining the visitor: do so in the constructor
|
@@ -57,36 +47,30 @@ module ActiveRecord
|
|
57
47
|
end
|
58
48
|
end
|
59
49
|
|
60
|
-
|
61
50
|
def set_rgeo_factory_settings(factory_settings_)
|
62
51
|
@rgeo_factory_settings = factory_settings_
|
63
52
|
end
|
64
53
|
|
65
|
-
|
66
54
|
def adapter_name
|
67
55
|
Mysql2SpatialAdapter::ADAPTER_NAME
|
68
56
|
end
|
69
57
|
|
70
|
-
|
71
58
|
def spatial_column_constructor(name_)
|
72
59
|
::RGeo::ActiveRecord::DEFAULT_SPATIAL_COLUMN_CONSTRUCTORS[name_]
|
73
60
|
end
|
74
61
|
|
75
|
-
|
76
62
|
def native_database_types
|
77
63
|
NATIVE_DATABASE_TYPES
|
78
64
|
end
|
79
65
|
|
80
|
-
|
81
66
|
def quote(value_, column_=nil)
|
82
67
|
if ::RGeo::Feature::Geometry.check_type(value_)
|
83
|
-
"GeomFromWKB(0x#{::RGeo::WKRep::WKBGenerator.new(:
|
68
|
+
"GeomFromWKB(0x#{::RGeo::WKRep::WKBGenerator.new(hex_format: true).generate(value_)},#{value_.srid})"
|
84
69
|
else
|
85
70
|
super
|
86
71
|
end
|
87
72
|
end
|
88
73
|
|
89
|
-
|
90
74
|
def type_to_sql(type_, limit_=nil, precision_=nil, scale_=nil)
|
91
75
|
if (info_ = spatial_column_constructor(type_.to_sym))
|
92
76
|
type_ = limit_[:type] || type_ if limit_.is_a?(::Hash)
|
@@ -96,10 +80,9 @@ module ActiveRecord
|
|
96
80
|
super(type_, limit_, precision_, scale_)
|
97
81
|
end
|
98
82
|
|
99
|
-
|
100
83
|
def add_index(table_name_, column_name_, options_={})
|
101
84
|
if options_[:spatial]
|
102
|
-
index_name_ = index_name(table_name_, :
|
85
|
+
index_name_ = index_name(table_name_, column: Array(column_name_))
|
103
86
|
if ::Hash === options_
|
104
87
|
index_name_ = options_[:name] || index_name_
|
105
88
|
end
|
@@ -109,11 +92,10 @@ module ActiveRecord
|
|
109
92
|
end
|
110
93
|
end
|
111
94
|
|
112
|
-
|
113
95
|
def columns(table_name_, name_=nil)
|
114
96
|
result_ = execute("SHOW FIELDS FROM #{quote_table_name(table_name_)}", :skip_logging)
|
115
97
|
columns_ = []
|
116
|
-
result_.each(:
|
98
|
+
result_.each(symbolize_keys: true, as: :hash) do |field_|
|
117
99
|
columns_ << SpatialColumn.new(@rgeo_factory_settings, table_name_.to_s,
|
118
100
|
field_[:Field], field_[:Default], field_[:Type], field_[:Null] == "YES")
|
119
101
|
end
|
@@ -125,7 +107,7 @@ module ActiveRecord
|
|
125
107
|
indexes_ = []
|
126
108
|
current_index_ = nil
|
127
109
|
result_ = execute("SHOW KEYS FROM #{quote_table_name(table_name_)}", name_)
|
128
|
-
result_.each(:
|
110
|
+
result_.each(symbolize_keys: true, as: :hash) do |row_|
|
129
111
|
if current_index_ != row_[:Key_name]
|
130
112
|
next if row_[:Key_name] == 'PRIMARY' # skip the primary key
|
131
113
|
current_index_ = row_[:Key_name]
|
@@ -146,15 +128,9 @@ module ActiveRecord
|
|
146
128
|
end
|
147
129
|
indexes_
|
148
130
|
end
|
149
|
-
|
150
|
-
|
151
131
|
end
|
152
|
-
|
153
|
-
|
154
132
|
end
|
155
|
-
|
156
133
|
end
|
157
|
-
|
158
134
|
end
|
159
135
|
|
160
136
|
# :startdoc:
|
@@ -1,8 +1,6 @@
|
|
1
|
-
# -----------------------------------------------------------------------------
|
2
1
|
#
|
3
2
|
# Mysql2Spatial adapter for ActiveRecord
|
4
3
|
#
|
5
|
-
# -----------------------------------------------------------------------------
|
6
4
|
# Copyright 2010 Daniel Azuma
|
7
5
|
#
|
8
6
|
# All rights reserved.
|
@@ -30,19 +28,14 @@
|
|
30
28
|
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
31
29
|
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
32
30
|
# POSSIBILITY OF SUCH DAMAGE.
|
33
|
-
# -----------------------------------------------------------------------------
|
34
|
-
;
|
35
31
|
|
36
32
|
|
37
33
|
# :stopdoc:
|
38
34
|
|
39
35
|
module ActiveRecord
|
40
|
-
|
41
36
|
module ConnectionAdapters
|
42
|
-
|
43
37
|
module Mysql2SpatialAdapter
|
44
38
|
|
45
|
-
|
46
39
|
# ActiveRecord 3.2 uses ConnectionAdapters::Mysql2Adapter::Column
|
47
40
|
# whereas 3.0 and 3.1 use ConnectionAdapters::Mysql2Column
|
48
41
|
column_base_class_ = defined?(ConnectionAdapters::Mysql2Adapter::Column) ?
|
@@ -50,10 +43,8 @@ module ActiveRecord
|
|
50
43
|
|
51
44
|
class SpatialColumn < column_base_class_
|
52
45
|
|
53
|
-
|
54
46
|
FACTORY_SETTINGS_CACHE = {}
|
55
47
|
|
56
|
-
|
57
48
|
def initialize(factory_settings_, table_name_, name_, default_, sql_type_=nil, null_=true)
|
58
49
|
@factory_settings = factory_settings_
|
59
50
|
@table_name = table_name_
|
@@ -65,20 +56,16 @@ module ActiveRecord
|
|
65
56
|
FACTORY_SETTINGS_CACHE[factory_settings_.object_id] = factory_settings_
|
66
57
|
end
|
67
58
|
|
68
|
-
|
69
59
|
attr_reader :geometric_type
|
70
60
|
|
71
|
-
|
72
61
|
def spatial?
|
73
62
|
type == :spatial
|
74
63
|
end
|
75
64
|
|
76
|
-
|
77
65
|
def klass
|
78
66
|
type == :spatial ? ::RGeo::Feature::Geometry : super
|
79
67
|
end
|
80
68
|
|
81
|
-
|
82
69
|
def type_cast(value_)
|
83
70
|
if type == :spatial
|
84
71
|
SpatialColumn.convert_to_geometry(value_, @factory_settings, @table_name, name)
|
@@ -87,7 +74,6 @@ module ActiveRecord
|
|
87
74
|
end
|
88
75
|
end
|
89
76
|
|
90
|
-
|
91
77
|
def type_cast_code(var_name_)
|
92
78
|
if type == :spatial
|
93
79
|
"::ActiveRecord::ConnectionAdapters::Mysql2SpatialAdapter::SpatialColumn.convert_to_geometry("+
|
@@ -98,7 +84,6 @@ module ActiveRecord
|
|
98
84
|
end
|
99
85
|
end
|
100
86
|
|
101
|
-
|
102
87
|
private
|
103
88
|
|
104
89
|
def simplified_type(sql_type_)
|
@@ -109,24 +94,24 @@ module ActiveRecord
|
|
109
94
|
def self.convert_to_geometry(input_, factory_settings_, table_name_, column_)
|
110
95
|
case input_
|
111
96
|
when ::RGeo::Feature::Geometry
|
112
|
-
factory_ = factory_settings_.get_column_factory(table_name_, column_, :
|
97
|
+
factory_ = factory_settings_.get_column_factory(table_name_, column_, srid: input_.srid)
|
113
98
|
::RGeo::Feature.cast(input_, factory_) rescue nil
|
114
99
|
when ::String
|
115
100
|
marker_ = input_[4,1]
|
116
101
|
if marker_ == "\x00" || marker_ == "\x01"
|
117
102
|
factory_ = factory_settings_.get_column_factory(table_name_, column_,
|
118
|
-
:
|
103
|
+
srid: input_[0, 4].unpack(marker_ == "\x01" ? 'V' : 'N').first)
|
119
104
|
::RGeo::WKRep::WKBParser.new(factory_).parse(input_[4..-1]) rescue nil
|
120
105
|
elsif input_[0,10] =~ /[0-9a-fA-F]{8}0[01]/
|
121
106
|
srid_ = input_[0,8].to_i(16)
|
122
107
|
if input[9,1] == '1'
|
123
108
|
srid_ = [srid_].pack('V').unpack('N').first
|
124
109
|
end
|
125
|
-
factory_ = factory_settings_.get_column_factory(table_name_, column_, :
|
110
|
+
factory_ = factory_settings_.get_column_factory(table_name_, column_, srid: srid_)
|
126
111
|
::RGeo::WKRep::WKBParser.new(factory_).parse(input_[8..-1]) rescue nil
|
127
112
|
else
|
128
113
|
factory_ = factory_settings_.get_column_factory(table_name_, column_)
|
129
|
-
::RGeo::WKRep::WKTParser.new(factory_, :
|
114
|
+
::RGeo::WKRep::WKTParser.new(factory_, support_ewkt: true).parse(input_) rescue nil
|
130
115
|
end
|
131
116
|
else
|
132
117
|
nil
|
@@ -1,8 +1,6 @@
|
|
1
|
-
# -----------------------------------------------------------------------------
|
2
1
|
#
|
3
2
|
# Mysql2Spatial adapter for ActiveRecord
|
4
3
|
#
|
5
|
-
# -----------------------------------------------------------------------------
|
6
4
|
# Copyright 2010 Daniel Azuma
|
7
5
|
#
|
8
6
|
# All rights reserved.
|
@@ -30,8 +28,6 @@
|
|
30
28
|
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
31
29
|
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
32
30
|
# POSSIBILITY OF SUCH DAMAGE.
|
33
|
-
# -----------------------------------------------------------------------------
|
34
|
-
;
|
35
31
|
|
36
32
|
|
37
33
|
begin
|
@@ -39,14 +35,10 @@ begin
|
|
39
35
|
rescue ::LoadError
|
40
36
|
end
|
41
37
|
|
42
|
-
|
43
38
|
module ActiveRecord
|
44
|
-
|
45
39
|
module ConnectionAdapters
|
46
|
-
|
47
40
|
module Mysql2SpatialAdapter
|
48
41
|
|
49
|
-
|
50
42
|
# Current version of Mysql2SpatialAdapter as a frozen string
|
51
43
|
VERSION_STRING = ::File.read(::File.dirname(__FILE__)+'/../../../../Version').strip.freeze
|
52
44
|
|
@@ -54,9 +46,6 @@ module ActiveRecord
|
|
54
46
|
# Versionomy gem is available; otherwise equal to VERSION_STRING.
|
55
47
|
VERSION = defined?(::Versionomy) ? ::Versionomy.parse(VERSION_STRING) : VERSION_STRING
|
56
48
|
|
57
|
-
|
58
49
|
end
|
59
|
-
|
60
50
|
end
|
61
|
-
|
62
51
|
end
|
data/test/tc_basic.rb
CHANGED
@@ -1,8 +1,6 @@
|
|
1
|
-
# -----------------------------------------------------------------------------
|
2
1
|
#
|
3
2
|
# Tests for the Mysql2Spatial ActiveRecord adapter
|
4
3
|
#
|
5
|
-
# -----------------------------------------------------------------------------
|
6
4
|
# Copyright 2010 Daniel Azuma
|
7
5
|
#
|
8
6
|
# All rights reserved.
|
@@ -30,26 +28,20 @@
|
|
30
28
|
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
31
29
|
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
32
30
|
# POSSIBILITY OF SUCH DAMAGE.
|
33
|
-
# -----------------------------------------------------------------------------
|
34
|
-
;
|
35
31
|
|
36
32
|
require 'minitest/autorun'
|
37
33
|
require 'rgeo/active_record/adapter_test_helper'
|
38
34
|
|
39
|
-
|
40
35
|
module RGeo
|
41
36
|
module ActiveRecord # :nodoc:
|
42
37
|
module Mysql2SpatialAdapter # :nodoc:
|
43
38
|
module Tests # :nodoc:
|
44
|
-
|
45
39
|
class TestBasic < ::Minitest::Test # :nodoc:
|
46
40
|
|
47
41
|
DATABASE_CONFIG_PATH = ::File.dirname(__FILE__)+'/database.yml'
|
48
42
|
include RGeo::ActiveRecord::AdapterTestHelper
|
49
43
|
|
50
44
|
define_test_methods do
|
51
|
-
|
52
|
-
|
53
45
|
def populate_ar_class(content_)
|
54
46
|
klass_ = create_ar_class
|
55
47
|
case content_
|
@@ -61,12 +53,10 @@ module RGeo
|
|
61
53
|
klass_
|
62
54
|
end
|
63
55
|
|
64
|
-
|
65
56
|
def test_version
|
66
57
|
refute_nil(::ActiveRecord::ConnectionAdapters::Mysql2SpatialAdapter::VERSION)
|
67
58
|
end
|
68
59
|
|
69
|
-
|
70
60
|
def test_create_simple_geometry
|
71
61
|
klass_ = create_ar_class
|
72
62
|
klass_.connection.create_table(:spatial_test) do |t_|
|
@@ -76,7 +66,6 @@ module RGeo
|
|
76
66
|
assert(klass_.cached_attributes.include?('latlon'))
|
77
67
|
end
|
78
68
|
|
79
|
-
|
80
69
|
def test_create_point_geometry
|
81
70
|
klass_ = create_ar_class
|
82
71
|
klass_.connection.create_table(:spatial_test) do |t_|
|
@@ -86,19 +75,17 @@ module RGeo
|
|
86
75
|
assert(klass_.cached_attributes.include?('latlon'))
|
87
76
|
end
|
88
77
|
|
89
|
-
|
90
78
|
def test_create_geometry_with_index
|
91
79
|
klass_ = create_ar_class
|
92
|
-
klass_.connection.create_table(:spatial_test, :
|
93
|
-
t_.column 'latlon', :geometry, :
|
80
|
+
klass_.connection.create_table(:spatial_test, options: 'ENGINE=MyISAM') do |t_|
|
81
|
+
t_.column 'latlon', :geometry, null: false
|
94
82
|
end
|
95
83
|
klass_.connection.change_table(:spatial_test) do |t_|
|
96
|
-
t_.index([:latlon], :
|
84
|
+
t_.index([:latlon], spatial: true)
|
97
85
|
end
|
98
86
|
assert(klass_.connection.indexes(:spatial_test).last.spatial)
|
99
87
|
end
|
100
88
|
|
101
|
-
|
102
89
|
def test_set_and_get_point
|
103
90
|
klass_ = populate_ar_class(:latlon_point)
|
104
91
|
obj_ = klass_.new
|
@@ -108,7 +95,6 @@ module RGeo
|
|
108
95
|
assert_equal(3785, obj_.latlon.srid)
|
109
96
|
end
|
110
97
|
|
111
|
-
|
112
98
|
def test_set_and_get_point_from_wkt
|
113
99
|
klass_ = populate_ar_class(:latlon_point)
|
114
100
|
obj_ = klass_.new
|
@@ -118,7 +104,6 @@ module RGeo
|
|
118
104
|
assert_equal(1000, obj_.latlon.srid)
|
119
105
|
end
|
120
106
|
|
121
|
-
|
122
107
|
def test_save_and_load_point
|
123
108
|
klass_ = populate_ar_class(:latlon_point)
|
124
109
|
obj_ = klass_.new
|
@@ -130,7 +115,6 @@ module RGeo
|
|
130
115
|
assert_equal(3785, obj2_.latlon.srid)
|
131
116
|
end
|
132
117
|
|
133
|
-
|
134
118
|
def test_save_and_load_point_from_wkt
|
135
119
|
klass_ = populate_ar_class(:latlon_point)
|
136
120
|
obj_ = klass_.new
|
@@ -142,16 +126,15 @@ module RGeo
|
|
142
126
|
assert_equal(1000, obj2_.latlon.srid)
|
143
127
|
end
|
144
128
|
|
145
|
-
|
146
129
|
def test_readme_example
|
147
130
|
klass_ = create_ar_class
|
148
|
-
klass_.connection.create_table(:spatial_test, :
|
149
|
-
t_.column(:latlon, :point, :
|
131
|
+
klass_.connection.create_table(:spatial_test, options: 'ENGINE=MyISAM') do |t_|
|
132
|
+
t_.column(:latlon, :point, null: false)
|
150
133
|
t_.line_string(:path)
|
151
134
|
t_.geometry(:shape)
|
152
135
|
end
|
153
136
|
klass_.connection.change_table(:spatial_test) do |t_|
|
154
|
-
t_.index(:latlon, :
|
137
|
+
t_.index(:latlon, spatial: true)
|
155
138
|
end
|
156
139
|
klass_.class_eval do
|
157
140
|
self.rgeo_factory_generator = ::RGeo::Geos.method(:factory)
|
@@ -165,7 +148,6 @@ module RGeo
|
|
165
148
|
assert_equal(true, ::RGeo::Geos.is_geos?(rec_.shape))
|
166
149
|
end
|
167
150
|
|
168
|
-
|
169
151
|
def test_create_simple_geometry_using_shortcut
|
170
152
|
klass_ = create_ar_class
|
171
153
|
klass_.connection.create_table(:spatial_test) do |t_|
|
@@ -175,7 +157,6 @@ module RGeo
|
|
175
157
|
assert(klass_.cached_attributes.include?('latlon'))
|
176
158
|
end
|
177
159
|
|
178
|
-
|
179
160
|
def test_create_point_geometry_using_shortcut
|
180
161
|
klass_ = create_ar_class
|
181
162
|
klass_.connection.create_table(:spatial_test) do |t_|
|
@@ -185,21 +166,18 @@ module RGeo
|
|
185
166
|
assert(klass_.cached_attributes.include?('latlon'))
|
186
167
|
end
|
187
168
|
|
188
|
-
|
189
169
|
def test_create_geometry_using_limit
|
190
170
|
klass_ = create_ar_class
|
191
171
|
klass_.connection.create_table(:spatial_test) do |t_|
|
192
|
-
t_.spatial 'geom', :
|
172
|
+
t_.spatial 'geom', limit: { type: :line_string }
|
193
173
|
end
|
194
174
|
assert_equal(::RGeo::Feature::LineString, klass_.columns.last.geometric_type)
|
195
175
|
assert(klass_.cached_attributes.include?('geom'))
|
196
176
|
end
|
197
177
|
|
198
|
-
|
199
178
|
end
|
200
179
|
|
201
180
|
end
|
202
|
-
|
203
181
|
end
|
204
182
|
end
|
205
183
|
end
|
data/test/tc_spatial_queries.rb
CHANGED
@@ -1,8 +1,6 @@
|
|
1
|
-
# -----------------------------------------------------------------------------
|
2
1
|
#
|
3
2
|
# Tests for the Mysql2Spatial ActiveRecord adapter
|
4
3
|
#
|
5
|
-
# -----------------------------------------------------------------------------
|
6
4
|
# Copyright 2010 Daniel Azuma
|
7
5
|
#
|
8
6
|
# All rights reserved.
|
@@ -30,18 +28,14 @@
|
|
30
28
|
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
31
29
|
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
32
30
|
# POSSIBILITY OF SUCH DAMAGE.
|
33
|
-
# -----------------------------------------------------------------------------
|
34
|
-
;
|
35
31
|
|
36
32
|
require 'minitest/autorun'
|
37
33
|
require 'rgeo/active_record/adapter_test_helper'
|
38
34
|
|
39
|
-
|
40
35
|
module RGeo
|
41
36
|
module ActiveRecord # :nodoc:
|
42
37
|
module Mysql2SpatialAdapter # :nodoc:
|
43
38
|
module Tests # :nodoc:
|
44
|
-
|
45
39
|
class TestSpatialQueries < ::Minitest::Test # :nodoc:
|
46
40
|
|
47
41
|
DATABASE_CONFIG_PATH = ::File.dirname(__FILE__)+'/database.yml'
|
@@ -49,7 +43,6 @@ module RGeo
|
|
49
43
|
|
50
44
|
define_test_methods do
|
51
45
|
|
52
|
-
|
53
46
|
def populate_ar_class(content_)
|
54
47
|
klass_ = create_ar_class
|
55
48
|
case content_
|
@@ -65,36 +58,32 @@ module RGeo
|
|
65
58
|
klass_
|
66
59
|
end
|
67
60
|
|
68
|
-
|
69
61
|
def test_query_point
|
70
62
|
klass_ = populate_ar_class(:latlon_point)
|
71
63
|
obj_ = klass_.new
|
72
64
|
obj_.latlon = @factory.point(1, 2)
|
73
65
|
obj_.save!
|
74
66
|
id_ = obj_.id
|
75
|
-
obj2_ = klass_.where(:
|
67
|
+
obj2_ = klass_.where(latlon: @factory.point(1, 2)).first
|
76
68
|
assert_equal(id_, obj2_.id)
|
77
|
-
obj3_ = klass_.where(:
|
69
|
+
obj3_ = klass_.where(latlon: @factory.point(2, 2)).first
|
78
70
|
assert_nil(obj3_)
|
79
71
|
end
|
80
72
|
|
81
|
-
|
82
73
|
def _test_query_point_wkt
|
83
74
|
klass_ = populate_ar_class(:latlon_point)
|
84
75
|
obj_ = klass_.new
|
85
76
|
obj_.latlon = @factory.point(1, 2)
|
86
77
|
obj_.save!
|
87
78
|
id_ = obj_.id
|
88
|
-
obj2_ = klass_.where(:
|
79
|
+
obj2_ = klass_.where(latlon: 'POINT(1 2)').first
|
89
80
|
assert_equal(id_, obj2_.id)
|
90
|
-
obj3_ = klass_.where(:
|
81
|
+
obj3_ = klass_.where(latlon: 'POINT(2 2)').first
|
91
82
|
assert_nil(obj3_)
|
92
83
|
end
|
93
84
|
|
94
|
-
|
95
85
|
if ::RGeo::ActiveRecord.spatial_expressions_supported?
|
96
86
|
|
97
|
-
|
98
87
|
def test_query_st_length
|
99
88
|
klass_ = populate_ar_class(:path_linestring)
|
100
89
|
obj_ = klass_.new
|
@@ -107,18 +96,13 @@ module RGeo
|
|
107
96
|
assert_nil(obj3_)
|
108
97
|
end
|
109
98
|
|
110
|
-
|
111
99
|
else
|
112
|
-
|
113
100
|
puts "WARNING: The current Arel does not support named functions. Spatial expression tests skipped."
|
114
|
-
|
115
101
|
end
|
116
102
|
|
117
|
-
|
118
103
|
end
|
119
104
|
|
120
105
|
end
|
121
|
-
|
122
106
|
end
|
123
107
|
end
|
124
108
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord-mysql2spatial-adapter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Azuma
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-07-
|
11
|
+
date: 2017-07-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -64,20 +64,6 @@ dependencies:
|
|
64
64
|
- - "<"
|
65
65
|
- !ruby/object:Gem::Version
|
66
66
|
version: 0.4.0
|
67
|
-
- !ruby/object:Gem::Dependency
|
68
|
-
name: pry
|
69
|
-
requirement: !ruby/object:Gem::Requirement
|
70
|
-
requirements:
|
71
|
-
- - ">="
|
72
|
-
- !ruby/object:Gem::Version
|
73
|
-
version: '0'
|
74
|
-
type: :development
|
75
|
-
prerelease: false
|
76
|
-
version_requirements: !ruby/object:Gem::Requirement
|
77
|
-
requirements:
|
78
|
-
- - ">="
|
79
|
-
- !ruby/object:Gem::Version
|
80
|
-
version: '0'
|
81
67
|
- !ruby/object:Gem::Dependency
|
82
68
|
name: rake
|
83
69
|
requirement: !ruby/object:Gem::Requirement
|
@@ -146,7 +132,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
146
132
|
version: '0'
|
147
133
|
requirements: []
|
148
134
|
rubyforge_project:
|
149
|
-
rubygems_version: 2.
|
135
|
+
rubygems_version: 2.4.3
|
150
136
|
signing_key:
|
151
137
|
specification_version: 4
|
152
138
|
summary: An ActiveRecord adapter for MySQL Spatial Extensions, based on RGeo and the
|