53 lines
1.7 KiB
Python
53 lines
1.7 KiB
Python
|
from types import UnicodeType
|
||
|
|
||
|
def gqn(val):
|
||
|
"""
|
||
|
The geographic quote name function; used for quoting tables and
|
||
|
geometries (they use single rather than the double quotes of the
|
||
|
backend quotename function).
|
||
|
"""
|
||
|
if isinstance(val, basestring):
|
||
|
if isinstance(val, UnicodeType): val = val.encode('ascii')
|
||
|
return "'%s'" % val
|
||
|
else:
|
||
|
return str(val)
|
||
|
|
||
|
class SpatialOperation(object):
|
||
|
"""
|
||
|
Base class for generating spatial SQL.
|
||
|
"""
|
||
|
def __init__(self, function='', operator='', result='', beg_subst='', end_subst=''):
|
||
|
self.function = function
|
||
|
self.operator = operator
|
||
|
self.result = result
|
||
|
self.beg_subst = beg_subst
|
||
|
try:
|
||
|
# Try and put the operator and result into to the
|
||
|
# end substitution.
|
||
|
self.end_subst = end_subst % (operator, result)
|
||
|
except TypeError:
|
||
|
self.end_subst = end_subst
|
||
|
|
||
|
@property
|
||
|
def sql_subst(self):
|
||
|
return ''.join([self.beg_subst, self.end_subst])
|
||
|
|
||
|
def as_sql(self, geo_col):
|
||
|
return self.sql_subst % self.params(geo_col)
|
||
|
|
||
|
def params(self, geo_col):
|
||
|
return (geo_col, self.operator)
|
||
|
|
||
|
class SpatialFunction(SpatialOperation):
|
||
|
"""
|
||
|
Base class for generating spatial SQL related to a function.
|
||
|
"""
|
||
|
def __init__(self, func, beg_subst='%s(%s, %%s', end_subst=')', result='', operator=''):
|
||
|
# Getting the function prefix.
|
||
|
kwargs = {'function' : func, 'operator' : operator, 'result' : result,
|
||
|
'beg_subst' : beg_subst, 'end_subst' : end_subst,}
|
||
|
super(SpatialFunction, self).__init__(**kwargs)
|
||
|
|
||
|
def params(self, geo_col):
|
||
|
return (self.function, geo_col)
|