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



228
229
230
231
232
# File 'lib/arel/visitors/postgis.rb', line 228

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

#visit_Arel_Nodes_SpatialBuffer(node, collector) ⇒ Object



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

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



174
175
176
177
178
179
180
# File 'lib/arel/visitors/postgis.rb', line 174

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



160
161
162
163
164
165
166
# File 'lib/arel/visitors/postgis.rb', line 160

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



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

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



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

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



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

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



168
169
170
171
172
# File 'lib/arel/visitors/postgis.rb', line 168

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

#visit_Arel_Nodes_SpatialTransform(node, collector) ⇒ Object



220
221
222
223
224
225
226
# File 'lib/arel/visitors/postgis.rb', line 220

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



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

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

#visit_Arel_Nodes_SpatialWithin(node, collector) ⇒ Object



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

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



150
151
152
153
154
155
156
157
# File 'lib/arel/visitors/postgis.rb', line 150

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