| from django.contrib.gis.db.models.sql.compiler import GeoSQLCompiler as BaseGeoSQLCompiler |
| from django.db.backends.oracle import compiler |
| |
| SQLCompiler = compiler.SQLCompiler |
| |
| class GeoSQLCompiler(BaseGeoSQLCompiler, SQLCompiler): |
| pass |
| |
| class SQLInsertCompiler(compiler.SQLInsertCompiler, GeoSQLCompiler): |
| def placeholder(self, field, val): |
| if field is None: |
| # A field value of None means the value is raw. |
| return val |
| elif hasattr(field, 'get_placeholder'): |
| # Some fields (e.g. geo fields) need special munging before |
| # they can be inserted. |
| ph = field.get_placeholder(val, self.connection) |
| if ph == 'NULL': |
| # If the placeholder returned is 'NULL', then we need to |
| # to remove None from the Query parameters. Specifically, |
| # cx_Oracle will assume a CHAR type when a placeholder ('%s') |
| # is used for columns of MDSYS.SDO_GEOMETRY. Thus, we use |
| # 'NULL' for the value, and remove None from the query params. |
| # See also #10888. |
| param_idx = self.query.columns.index(field.column) |
| params = list(self.query.params) |
| params.pop(param_idx) |
| self.query.params = tuple(params) |
| return ph |
| else: |
| # Return the common case for the placeholder |
| return '%s' |
| |
| class SQLDeleteCompiler(compiler.SQLDeleteCompiler, GeoSQLCompiler): |
| pass |
| |
| class SQLUpdateCompiler(compiler.SQLUpdateCompiler, GeoSQLCompiler): |
| pass |
| |
| class SQLAggregateCompiler(compiler.SQLAggregateCompiler, GeoSQLCompiler): |
| pass |
| |
| class SQLDateCompiler(compiler.SQLDateCompiler, GeoSQLCompiler): |
| pass |