app/django/contrib/gis/db/backend/util.py
changeset 323 ff1a9aa48cfd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/django/contrib/gis/db/backend/util.py	Tue Oct 14 16:00:59 2008 +0000
@@ -0,0 +1,52 @@
+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)