ar-postgis 0.7.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.
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