web/lib/django/contrib/gis/db/backends/oracle/compiler.py
changeset 29 cc9b7e14412b
equal deleted inserted replaced
28:b758351d191f 29:cc9b7e14412b
       
     1 from django.contrib.gis.db.models.sql.compiler import GeoSQLCompiler as BaseGeoSQLCompiler
       
     2 from django.db.backends.oracle import compiler
       
     3 
       
     4 SQLCompiler = compiler.SQLCompiler
       
     5 
       
     6 class GeoSQLCompiler(BaseGeoSQLCompiler, SQLCompiler):
       
     7     pass
       
     8 
       
     9 class SQLInsertCompiler(compiler.SQLInsertCompiler, GeoSQLCompiler):
       
    10     def placeholder(self, field, val):
       
    11         if field is None:
       
    12             # A field value of None means the value is raw.
       
    13             return val
       
    14         elif hasattr(field, 'get_placeholder'):
       
    15             # Some fields (e.g. geo fields) need special munging before
       
    16             # they can be inserted.
       
    17             ph = field.get_placeholder(val, self.connection)
       
    18             if ph == 'NULL':
       
    19                 # If the placeholder returned is 'NULL', then we need to
       
    20                 # to remove None from the Query parameters. Specifically,
       
    21                 # cx_Oracle will assume a CHAR type when a placeholder ('%s')
       
    22                 # is used for columns of MDSYS.SDO_GEOMETRY.  Thus, we use
       
    23                 # 'NULL' for the value, and remove None from the query params.
       
    24                 # See also #10888.
       
    25                 param_idx = self.query.columns.index(field.column)
       
    26                 params = list(self.query.params)
       
    27                 params.pop(param_idx)
       
    28                 self.query.params = tuple(params)
       
    29             return ph
       
    30         else:
       
    31             # Return the common case for the placeholder
       
    32             return '%s'
       
    33 
       
    34 class SQLDeleteCompiler(compiler.SQLDeleteCompiler, GeoSQLCompiler):
       
    35     pass
       
    36 
       
    37 class SQLUpdateCompiler(compiler.SQLUpdateCompiler, GeoSQLCompiler):
       
    38     pass
       
    39 
       
    40 class SQLAggregateCompiler(compiler.SQLAggregateCompiler, GeoSQLCompiler):
       
    41     pass
       
    42 
       
    43 class SQLDateCompiler(compiler.SQLDateCompiler, GeoSQLCompiler):
       
    44     pass