ar-postgis 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (26) hide show
  1. checksums.yaml +7 -0
  2. data/Documentation.rdoc +292 -0
  3. data/History.rdoc +147 -0
  4. data/LICENSE.txt +29 -0
  5. data/README.rdoc +78 -0
  6. data/lib/active_record/connection_adapters/postgis_adapter.rb +38 -0
  7. data/lib/active_record/connection_adapters/postgis_adapter/rails4/create_connection.rb +29 -0
  8. data/lib/active_record/connection_adapters/postgis_adapter/rails4/databases.rake +17 -0
  9. data/lib/active_record/connection_adapters/postgis_adapter/rails4/main_adapter.rb +202 -0
  10. data/lib/active_record/connection_adapters/postgis_adapter/rails4/postgis_database_tasks.rb +204 -0
  11. data/lib/active_record/connection_adapters/postgis_adapter/rails4/spatial_column.rb +184 -0
  12. data/lib/active_record/connection_adapters/postgis_adapter/rails4/spatial_table_definition.rb +121 -0
  13. data/lib/active_record/connection_adapters/postgis_adapter/railtie.rb +3 -0
  14. data/lib/active_record/connection_adapters/postgis_adapter/shared/arel_tosql.rb +23 -0
  15. data/lib/active_record/connection_adapters/postgis_adapter/shared/common_adapter_methods.rb +46 -0
  16. data/lib/active_record/connection_adapters/postgis_adapter/shared/railtie.rb +13 -0
  17. data/lib/active_record/connection_adapters/postgis_adapter/shared/setup.rb +21 -0
  18. data/lib/active_record/connection_adapters/postgis_adapter/version.rb +7 -0
  19. data/lib/activerecord-postgis-adapter.rb +1 -0
  20. data/test/database.yml +5 -0
  21. data/test/tc_basic.rb +212 -0
  22. data/test/tc_ddl.rb +303 -0
  23. data/test/tc_nested_class.rb +48 -0
  24. data/test/tc_spatial_queries.rb +126 -0
  25. data/test/tc_tasks.rb +112 -0
  26. metadata +149 -0
data/test/tc_ddl.rb ADDED
@@ -0,0 +1,303 @@
1
+ require 'minitest/autorun'
2
+ require 'rgeo/active_record/adapter_test_helper'
3
+
4
+
5
+ module RGeo
6
+ module ActiveRecord # :nodoc:
7
+ module PostGISAdapter # :nodoc:
8
+ module Tests # :nodoc:
9
+
10
+ class TestDDL < ::MiniTest::Test # :nodoc:
11
+
12
+ DATABASE_CONFIG_PATH = ::File.dirname(__FILE__)+'/database.yml'
13
+ OVERRIDE_DATABASE_CONFIG_PATH = ::File.dirname(__FILE__)+'/database_local.yml'
14
+ include AdapterTestHelper
15
+
16
+ define_test_methods do
17
+
18
+
19
+ def test_create_simple_geometry
20
+ klass_ = create_ar_class
21
+ klass_.connection.create_table(:spatial_test) do |t_|
22
+ t_.column 'latlon', :geometry
23
+ end
24
+ assert_equal(1, klass_.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
25
+ col_ = klass_.columns.last
26
+ assert_equal(::RGeo::Feature::Geometry, col_.geometric_type)
27
+ assert_equal(true, col_.has_spatial_constraints?)
28
+ assert_equal(false, col_.geographic?)
29
+ assert_equal(if(klass_.connection.postgis_lib_version >= "2") then 0 else -1 end, col_.srid)
30
+ assert(klass_.cached_attributes.include?('latlon'))
31
+ klass_.connection.drop_table(:spatial_test)
32
+ assert_equal(0, klass_.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
33
+ end
34
+
35
+
36
+ # no_constraints no longer supported in PostGIS 2.0
37
+ def _test_create_no_constraints_geometry
38
+ klass_ = create_ar_class
39
+ klass_.connection.create_table(:spatial_test) do |t_|
40
+ t_.column 'geom', :geometry, :limit => {:no_constraints => true}
41
+ end
42
+ assert_equal(0, klass_.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
43
+ col_ = klass_.columns.last
44
+ assert_equal(::RGeo::Feature::Geometry, col_.geometric_type)
45
+ assert_equal(false, col_.geographic?)
46
+ assert_equal(false, col_.has_spatial_constraints?)
47
+ assert_nil(col_.srid)
48
+ assert(klass_.cached_attributes.include?('geom'))
49
+ klass_.connection.drop_table(:spatial_test)
50
+ assert_equal(0, klass_.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
51
+ end
52
+
53
+
54
+ def test_create_simple_geography
55
+ klass_ = create_ar_class
56
+ klass_.connection.create_table(:spatial_test) do |t_|
57
+ t_.column 'latlon', :geometry, :geographic => true
58
+ end
59
+ col_ = klass_.columns.last
60
+ assert_equal(::RGeo::Feature::Geometry, col_.geometric_type)
61
+ assert_equal(true, col_.has_spatial_constraints?)
62
+ assert_equal(true, col_.geographic?)
63
+ assert_equal(4326, col_.srid)
64
+ assert(klass_.cached_attributes.include?('latlon'))
65
+ assert_equal(0, klass_.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
66
+ end
67
+
68
+
69
+ def test_create_point_geometry
70
+ klass_ = create_ar_class
71
+ klass_.connection.create_table(:spatial_test) do |t_|
72
+ t_.column 'latlon', :point
73
+ end
74
+ assert_equal(::RGeo::Feature::Point, klass_.columns.last.geometric_type)
75
+ assert(klass_.cached_attributes.include?('latlon'))
76
+ end
77
+
78
+
79
+ def test_create_geometry_with_index
80
+ klass_ = create_ar_class
81
+ klass_.connection.create_table(:spatial_test) do |t_|
82
+ t_.column 'latlon', :geometry
83
+ end
84
+ klass_.connection.change_table(:spatial_test) do |t_|
85
+ t_.index([:latlon], :spatial => true)
86
+ end
87
+ assert(klass_.connection.indexes(:spatial_test).last.spatial)
88
+ end
89
+
90
+
91
+ def test_add_geometry_column
92
+ klass_ = create_ar_class
93
+ klass_.connection.create_table(:spatial_test) do |t_|
94
+ t_.column('latlon', :geometry)
95
+ end
96
+ klass_.connection.change_table(:spatial_test) do |t_|
97
+ t_.column('geom2', :point, :srid => 4326)
98
+ t_.column('name', :string)
99
+ end
100
+ assert_equal(2, klass_.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
101
+ cols_ = klass_.columns
102
+ assert_equal(::RGeo::Feature::Geometry, cols_[-3].geometric_type)
103
+ assert_equal(if(klass_.connection.postgis_lib_version >= "2") then 0 else -1 end, cols_[-3].srid)
104
+ assert_equal(true, cols_[-3].has_spatial_constraints?)
105
+ assert_equal(::RGeo::Feature::Point, cols_[-2].geometric_type)
106
+ assert_equal(4326, cols_[-2].srid)
107
+ assert_equal(false, cols_[-2].geographic?)
108
+ assert_equal(true, cols_[-2].has_spatial_constraints?)
109
+ assert_nil(cols_[-1].geometric_type)
110
+ assert_equal(false, cols_[-1].has_spatial_constraints?)
111
+ end
112
+
113
+
114
+ # no_constraints no longer supported in PostGIS 2.0
115
+ def _test_add_no_constraints_geometry_column
116
+ klass_ = create_ar_class
117
+ klass_.connection.create_table(:spatial_test) do |t_|
118
+ t_.column('latlon', :geometry)
119
+ end
120
+ klass_.connection.change_table(:spatial_test) do |t_|
121
+ t_.column('geom2', :geometry, :no_constraints => true)
122
+ t_.column('name', :string)
123
+ end
124
+ assert_equal(1, klass_.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
125
+ cols_ = klass_.columns
126
+ assert_equal(::RGeo::Feature::Geometry, cols_[-3].geometric_type)
127
+ assert_equal(if(klass_.connection.postgis_lib_version >= "2") then 0 else -1 end, cols_[-3].srid)
128
+ assert_equal(true, cols_[-3].has_spatial_constraints?)
129
+ assert_equal(::RGeo::Feature::Geometry, cols_[-2].geometric_type)
130
+ assert_nil(cols_[-2].srid)
131
+ assert_equal(false, cols_[-2].geographic?)
132
+ assert_equal(false, cols_[-2].has_spatial_constraints?)
133
+ assert_nil(cols_[-1].geometric_type)
134
+ assert_equal(false, cols_[-1].has_spatial_constraints?)
135
+ end
136
+
137
+
138
+ def test_add_geography_column
139
+ klass_ = create_ar_class
140
+ klass_.connection.create_table(:spatial_test) do |t_|
141
+ t_.column('latlon', :geometry)
142
+ end
143
+ klass_.connection.change_table(:spatial_test) do |t_|
144
+ t_.column('geom2', :point, :srid => 4326, :geographic => true)
145
+ t_.column('name', :string)
146
+ end
147
+ assert_equal(1, klass_.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
148
+ cols_ = klass_.columns
149
+ assert_equal(::RGeo::Feature::Geometry, cols_[-3].geometric_type)
150
+ assert_equal(if(klass_.connection.postgis_lib_version >= "2") then 0 else -1 end, cols_[-3].srid)
151
+ assert_equal(true, cols_[-3].has_spatial_constraints?)
152
+ assert_equal(::RGeo::Feature::Point, cols_[-2].geometric_type)
153
+ assert_equal(4326, cols_[-2].srid)
154
+ assert_equal(true, cols_[-2].geographic?)
155
+ assert_equal(true, cols_[-2].has_spatial_constraints?)
156
+ assert_nil(cols_[-1].geometric_type)
157
+ assert_equal(false, cols_[-1].has_spatial_constraints?)
158
+ end
159
+
160
+
161
+ def test_drop_geometry_column
162
+ klass_ = create_ar_class
163
+ klass_.connection.create_table(:spatial_test) do |t_|
164
+ t_.column('latlon', :geometry)
165
+ t_.column('geom2', :point, :srid => 4326)
166
+ end
167
+ klass_.connection.change_table(:spatial_test) do |t_|
168
+ t_.remove('geom2')
169
+ end
170
+ assert_equal(1, klass_.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
171
+ cols_ = klass_.columns
172
+ assert_equal(::RGeo::Feature::Geometry, cols_[-1].geometric_type)
173
+ assert_equal('latlon', cols_[-1].name)
174
+ assert_equal(if(klass_.connection.postgis_lib_version >= "2") then 0 else -1 end, cols_[-1].srid)
175
+ assert_equal(false, cols_[-1].geographic?)
176
+ end
177
+
178
+
179
+ def test_drop_geography_column
180
+ klass_ = create_ar_class
181
+ klass_.connection.create_table(:spatial_test) do |t_|
182
+ t_.column('latlon', :geometry)
183
+ t_.column('geom2', :point, :srid => 4326, :geographic => true)
184
+ t_.column('geom3', :point, :srid => 4326)
185
+ end
186
+ klass_.connection.change_table(:spatial_test) do |t_|
187
+ t_.remove('geom2')
188
+ end
189
+ assert_equal(2, klass_.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
190
+ cols_ = klass_.columns
191
+ assert_equal(::RGeo::Feature::Point, cols_[-1].geometric_type)
192
+ assert_equal('geom3', cols_[-1].name)
193
+ assert_equal(false, cols_[-1].geographic?)
194
+ assert_equal(::RGeo::Feature::Geometry, cols_[-2].geometric_type)
195
+ assert_equal('latlon', cols_[-2].name)
196
+ assert_equal(false, cols_[-2].geographic?)
197
+ end
198
+
199
+
200
+ def test_create_simple_geometry_using_shortcut
201
+ klass_ = create_ar_class
202
+ klass_.connection.create_table(:spatial_test) do |t_|
203
+ t_.geometry 'latlon'
204
+ end
205
+ assert_equal(1, klass_.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
206
+ col_ = klass_.columns.last
207
+ assert_equal(::RGeo::Feature::Geometry, col_.geometric_type)
208
+ assert_equal(false, col_.geographic?)
209
+ assert_equal(if(klass_.connection.postgis_lib_version >= "2") then 0 else -1 end, col_.srid)
210
+ assert(klass_.cached_attributes.include?('latlon'))
211
+ klass_.connection.drop_table(:spatial_test)
212
+ assert_equal(0, klass_.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
213
+ end
214
+
215
+
216
+ # no_constraints no longer supported in PostGIS 2.0
217
+ def _test_create_no_constraints_geometry_using_shortcut
218
+ klass_ = create_ar_class
219
+ klass_.connection.create_table(:spatial_test) do |t_|
220
+ t_.spatial 'geom', :no_constraints => true
221
+ end
222
+ assert_equal(0, klass_.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
223
+ col_ = klass_.columns.last
224
+ assert_equal(::RGeo::Feature::Geometry, col_.geometric_type)
225
+ assert_equal(false, col_.geographic?)
226
+ assert_nil(col_.srid)
227
+ assert(klass_.cached_attributes.include?('geom'))
228
+ klass_.connection.drop_table(:spatial_test)
229
+ assert_equal(0, klass_.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
230
+ end
231
+
232
+
233
+ def test_create_simple_geography_using_shortcut
234
+ klass_ = create_ar_class
235
+ klass_.connection.create_table(:spatial_test) do |t_|
236
+ # t_.method_missing(:geometry, 'latlon', :geographic => true)
237
+ t_.geometry 'latlon', :geographic => true
238
+ end
239
+ col_ = klass_.columns.last
240
+ assert_equal(::RGeo::Feature::Geometry, col_.geometric_type)
241
+ assert_equal(true, col_.geographic?)
242
+ assert_equal(4326, col_.srid)
243
+ assert(klass_.cached_attributes.include?('latlon'))
244
+ assert_equal(0, klass_.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
245
+ end
246
+
247
+
248
+ def test_create_point_geometry_using_shortcut
249
+ klass_ = create_ar_class
250
+ klass_.connection.create_table(:spatial_test) do |t_|
251
+ t_.point 'latlon'
252
+ end
253
+ assert_equal(::RGeo::Feature::Point, klass_.columns.last.geometric_type)
254
+ assert(klass_.cached_attributes.include?('latlon'))
255
+ end
256
+
257
+
258
+ def test_create_geometry_with_options
259
+ klass_ = create_ar_class
260
+ klass_.connection.create_table(:spatial_test) do |t_|
261
+ t_.column 'region', :polygon, :has_m => true, :srid => 3785
262
+ end
263
+ assert_equal(1, klass_.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
264
+ col_ = klass_.columns.last
265
+ assert_equal(::RGeo::Feature::Polygon, col_.geometric_type)
266
+ assert_equal(false, col_.geographic?)
267
+ assert_equal(false, col_.has_z?)
268
+ assert_equal(true, col_.has_m?)
269
+ assert_equal(3785, col_.srid)
270
+ assert_equal({:has_m => true, :type => 'polygon', :srid => 3785}, col_.limit)
271
+ assert(klass_.cached_attributes.include?('region'))
272
+ klass_.connection.drop_table(:spatial_test)
273
+ assert_equal(0, klass_.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
274
+ end
275
+
276
+
277
+ def test_create_geometry_using_limit
278
+ klass_ = create_ar_class
279
+ klass_.connection.create_table(:spatial_test) do |t_|
280
+ t_.spatial 'region', :limit => {:has_m => true, :srid => 3785, :type => :polygon}
281
+ end
282
+ assert_equal(1, klass_.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
283
+ col_ = klass_.columns.last
284
+ assert_equal(::RGeo::Feature::Polygon, col_.geometric_type)
285
+ assert_equal(false, col_.geographic?)
286
+ assert_equal(false, col_.has_z)
287
+ assert_equal(true, col_.has_m)
288
+ assert_equal(3785, col_.srid)
289
+ assert_equal({:has_m => true, :type => 'polygon', :srid => 3785}, col_.limit)
290
+ assert(klass_.cached_attributes.include?('region'))
291
+ klass_.connection.drop_table(:spatial_test)
292
+ assert_equal(0, klass_.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
293
+ end
294
+
295
+
296
+ end
297
+
298
+ end
299
+
300
+ end
301
+ end
302
+ end
303
+ end
@@ -0,0 +1,48 @@
1
+ require 'minitest/autorun'
2
+ require 'rgeo/active_record/adapter_test_helper'
3
+
4
+
5
+ module RGeo
6
+ module ActiveRecord # :nodoc:
7
+ module PostGISAdapter # :nodoc:
8
+ module Tests # :nodoc:
9
+
10
+ class TestNestedClass < ::MiniTest::Test # :nodoc:
11
+
12
+ DATABASE_CONFIG_PATH = ::File.dirname(__FILE__)+'/database.yml'
13
+ OVERRIDE_DATABASE_CONFIG_PATH = ::File.dirname(__FILE__)+'/database_local.yml'
14
+ include AdapterTestHelper
15
+
16
+
17
+ module Foo
18
+ def self.table_name_prefix
19
+ 'foo_'
20
+ end
21
+ class Bar < ::ActiveRecord::Base
22
+ end
23
+ end
24
+
25
+
26
+ define_test_methods do
27
+
28
+
29
+ def test_nested_model
30
+ Foo::Bar.class_eval do
31
+ establish_connection(TestNestedClass::DATABASE_CONFIG)
32
+ end
33
+ Foo::Bar.connection.create_table(:foo_bars) do |t_|
34
+ t_.column 'latlon', :point, :srid => 3785
35
+ end
36
+ Foo::Bar.all
37
+ Foo::Bar.connection.drop_table(:foo_bars)
38
+ end
39
+
40
+
41
+ end
42
+
43
+ end
44
+
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,126 @@
1
+ require 'minitest/autorun'
2
+ require 'rgeo/active_record/adapter_test_helper'
3
+
4
+
5
+ module RGeo
6
+ module ActiveRecord # :nodoc:
7
+ module PostGISAdapter # :nodoc:
8
+ module Tests # :nodoc:
9
+
10
+ class TestSpatialQueries < ::MiniTest::Test # :nodoc:
11
+
12
+ DATABASE_CONFIG_PATH = ::File.dirname(__FILE__)+'/database.yml'
13
+ OVERRIDE_DATABASE_CONFIG_PATH = ::File.dirname(__FILE__)+'/database_local.yml'
14
+ include AdapterTestHelper
15
+
16
+ define_test_methods do
17
+
18
+
19
+ def populate_ar_class(content_)
20
+ klass_ = create_ar_class
21
+ case content_
22
+ when :mercator_point
23
+ klass_.connection.create_table(:spatial_test) do |t_|
24
+ t_.column 'latlon', :point, :srid => 3785
25
+ end
26
+ when :latlon_point_geographic
27
+ klass_.connection.create_table(:spatial_test) do |t_|
28
+ t_.column 'latlon', :point, :srid => 4326, :geographic => true
29
+ end
30
+ when :path_linestring
31
+ klass_.connection.create_table(:spatial_test) do |t_|
32
+ t_.column 'path', :line_string, :srid => 3785
33
+ end
34
+ end
35
+ klass_
36
+ end
37
+
38
+
39
+ def test_query_point
40
+ klass_ = populate_ar_class(:mercator_point)
41
+ obj_ = klass_.new
42
+ obj_.latlon = @factory.point(1.0, 2.0)
43
+ obj_.save!
44
+ id_ = obj_.id
45
+ obj2_ = klass_.where(:latlon => @factory.multi_point([@factory.point(1.0, 2.0)])).first
46
+ refute_nil(obj2_)
47
+ assert_equal(id_, obj2_.id)
48
+ obj3_ = klass_.where(:latlon => @factory.point(2.0, 2.0)).first
49
+ assert_nil(obj3_)
50
+ end
51
+
52
+
53
+ def test_query_point_wkt
54
+ klass_ = populate_ar_class(:mercator_point)
55
+ obj_ = klass_.new
56
+ obj_.latlon = @factory.point(1.0, 2.0)
57
+ obj_.save!
58
+ id_ = obj_.id
59
+ obj2_ = klass_.where(:latlon => 'SRID=3785;POINT(1 2)').first
60
+ refute_nil(obj2_)
61
+ assert_equal(id_, obj2_.id)
62
+ obj3_ = klass_.where(:latlon => 'SRID=3785;POINT(2 2)').first
63
+ assert_nil(obj3_)
64
+ end
65
+
66
+
67
+ if ::RGeo::ActiveRecord.spatial_expressions_supported?
68
+
69
+
70
+ def test_query_st_distance
71
+ klass_ = populate_ar_class(:mercator_point)
72
+ obj_ = klass_.new
73
+ obj_.latlon = @factory.point(1.0, 2.0)
74
+ obj_.save!
75
+ id_ = obj_.id
76
+ obj2_ = klass_.where(klass_.arel_table[:latlon].st_distance('SRID=3785;POINT(2 3)').lt(2)).first
77
+ refute_nil(obj2_)
78
+ assert_equal(id_, obj2_.id)
79
+ obj3_ = klass_.where(klass_.arel_table[:latlon].st_distance('SRID=3785;POINT(2 3)').gt(2)).first
80
+ assert_nil(obj3_)
81
+ end
82
+
83
+
84
+ def test_query_st_distance_from_constant
85
+ klass_ = populate_ar_class(:mercator_point)
86
+ obj_ = klass_.new
87
+ obj_.latlon = @factory.point(1.0, 2.0)
88
+ obj_.save!
89
+ id_ = obj_.id
90
+ obj2_ = klass_.where(::Arel.spatial('SRID=3785;POINT(2 3)').st_distance(klass_.arel_table[:latlon]).lt(2)).first
91
+ refute_nil(obj2_)
92
+ assert_equal(id_, obj2_.id)
93
+ obj3_ = klass_.where(::Arel.spatial('SRID=3785;POINT(2 3)').st_distance(klass_.arel_table[:latlon]).gt(2)).first
94
+ assert_nil(obj3_)
95
+ end
96
+
97
+
98
+ def test_query_st_length
99
+ klass_ = populate_ar_class(:path_linestring)
100
+ obj_ = klass_.new
101
+ obj_.path = @factory.line(@factory.point(1.0, 2.0), @factory.point(3.0, 2.0))
102
+ obj_.save!
103
+ id_ = obj_.id
104
+ obj2_ = klass_.where(klass_.arel_table[:path].st_length.eq(2)).first
105
+ refute_nil(obj2_)
106
+ assert_equal(id_, obj2_.id)
107
+ obj3_ = klass_.where(klass_.arel_table[:path].st_length.gt(3)).first
108
+ assert_nil(obj3_)
109
+ end
110
+
111
+
112
+ else
113
+
114
+ puts "WARNING: The current Arel does not support named functions. Spatial expression tests skipped."
115
+
116
+ end
117
+
118
+
119
+ end
120
+
121
+ end
122
+
123
+ end
124
+ end
125
+ end
126
+ end