Class: Arel::Visitors::PostGIS

Inherits:
PostgreSQL
  • Object
show all
Includes:
RGeo::ActiveRecord::SpatialToSql
Defined in:
lib/arel/visitors/postgis.rb

Instance Method Summary collapse

Instance Method Details

#visit_Arel_Nodes_SpatialArea(node, collector) ⇒ Object



248
249
250
251
252
# File 'lib/arel/visitors/postgis.rb', line 248

def visit_Arel_Nodes_SpatialArea(node, collector)
  collector << "ST_Area("
  visit(node.expr, collector)
  collector << ")"
end

#visit_Arel_Nodes_SpatialBuffer(node, collector) ⇒ Object



232
233
234
235
236
237
238
# File 'lib/arel/visitors/postgis.rb', line 232

def visit_Arel_Nodes_SpatialBuffer(node, collector)
  collector << "ST_Buffer("
  visit(node.left, collector)
  collector << ", "
  collector << node.right.to_s
  collector << ")"
end

#visit_Arel_Nodes_SpatialContains(node, collector) ⇒ Object



194
195
196
197
198
199
200
# File 'lib/arel/visitors/postgis.rb', line 194

def visit_Arel_Nodes_SpatialContains(node, collector)
  collector << "ST_Contains("
  visit(node.left, collector)
  collector << ", "
  visit_spatial_operand(node.right, collector)
  collector << ")"
end

#visit_Arel_Nodes_SpatialDistance(node, collector) ⇒ Object

Visitor methods for spatial nodes



180
181
182
183
184
185
186
# File 'lib/arel/visitors/postgis.rb', line 180

def visit_Arel_Nodes_SpatialDistance(node, collector)
  collector << "ST_Distance("
  visit(node.left, collector)
  collector << ", "
  visit_spatial_operand(node.right, collector)
  collector << ")"
end

#visit_Arel_Nodes_SpatialDistanceOperator(node, collector) ⇒ Object



254
255
256
257
258
# File 'lib/arel/visitors/postgis.rb', line 254

def visit_Arel_Nodes_SpatialDistanceOperator(node, collector)
  visit(node.left, collector)
  collector << " <-> "
  visit_spatial_operand(node.right, collector)
end

#visit_Arel_Nodes_SpatialDWithin(node, collector) ⇒ Object



222
223
224
225
226
227
228
229
230
# File 'lib/arel/visitors/postgis.rb', line 222

def visit_Arel_Nodes_SpatialDWithin(node, collector)
  collector << "ST_DWithin("
  visit(node.left, collector)
  collector << ", "
  visit_spatial_operand(node.right, collector)
  collector << ", "
  collector << node.distance.to_s
  collector << ")"
end

#visit_Arel_Nodes_SpatialIntersects(node, collector) ⇒ Object



214
215
216
217
218
219
220
# File 'lib/arel/visitors/postgis.rb', line 214

def visit_Arel_Nodes_SpatialIntersects(node, collector)
  collector << "ST_Intersects("
  visit(node.left, collector)
  collector << ", "
  visit_spatial_operand(node.right, collector)
  collector << ")"
end

#visit_Arel_Nodes_SpatialLength(node, collector) ⇒ Object



188
189
190
191
192
# File 'lib/arel/visitors/postgis.rb', line 188

def visit_Arel_Nodes_SpatialLength(node, collector)
  collector << "ST_Length("
  visit(node.expr, collector)
  collector << ")"
end

#visit_Arel_Nodes_SpatialTransform(node, collector) ⇒ Object



240
241
242
243
244
245
246
# File 'lib/arel/visitors/postgis.rb', line 240

def visit_Arel_Nodes_SpatialTransform(node, collector)
  collector << "ST_Transform("
  visit(node.left, collector)
  collector << ", "
  collector << node.right.to_s
  collector << ")"
end

#visit_Arel_Nodes_SpatialValue(node, collector) ⇒ Object



210
211
212
# File 'lib/arel/visitors/postgis.rb', line 210

def visit_Arel_Nodes_SpatialValue(node, collector)
  visit_spatial_operand(node.value, collector)
end

#visit_Arel_Nodes_SpatialWithin(node, collector) ⇒ Object



202
203
204
205
206
207
208
# File 'lib/arel/visitors/postgis.rb', line 202

def visit_Arel_Nodes_SpatialWithin(node, collector)
  collector << "ST_Within("
  visit(node.left, collector)
  collector << ", "
  visit_spatial_operand(node.right, collector)
  collector << ")"
end

#visit_in_spatial_context(node, collector) ⇒ Object



170
171
172
173
174
175
176
177
# File 'lib/arel/visitors/postgis.rb', line 170

def visit_in_spatial_context(node, collector)
  # Use ST_GeomFromEWKT for EWKT geometries
  if node.is_a?(String) && node =~ /SRID=\d*;/
    collector << "ST_GeomFromEWKT(#{quote(node)})"
  else
    super(node, collector) if defined?(super)
  end
end