71 lines
2.4 KiB
Python
71 lines
2.4 KiB
Python
from django.db.backends.base.features import BaseDatabaseFeatures
|
|
from django.db.utils import InterfaceError
|
|
from django.utils.functional import cached_property
|
|
|
|
|
|
class DatabaseFeatures(BaseDatabaseFeatures):
|
|
interprets_empty_strings_as_nulls = True
|
|
has_select_for_update = True
|
|
has_select_for_update_nowait = True
|
|
has_select_for_update_skip_locked = True
|
|
has_select_for_update_of = True
|
|
select_for_update_of_column = True
|
|
can_return_columns_from_insert = True
|
|
can_introspect_autofield = True
|
|
supports_subqueries_in_group_by = False
|
|
supports_transactions = True
|
|
supports_timezones = False
|
|
has_native_duration_field = True
|
|
can_defer_constraint_checks = True
|
|
supports_partially_nullable_unique_constraints = False
|
|
truncates_names = True
|
|
supports_tablespaces = True
|
|
supports_sequence_reset = False
|
|
can_introspect_materialized_views = True
|
|
can_introspect_time_field = False
|
|
atomic_transactions = False
|
|
supports_combined_alters = False
|
|
nulls_order_largest = True
|
|
requires_literal_defaults = True
|
|
closed_cursor_error_class = InterfaceError
|
|
bare_select_suffix = " FROM DUAL"
|
|
# select for update with limit can be achieved on Oracle, but not with the current backend.
|
|
supports_select_for_update_with_limit = False
|
|
supports_temporal_subtraction = True
|
|
# Oracle doesn't ignore quoted identifiers case but the current backend
|
|
# does by uppercasing all identifiers.
|
|
ignores_table_name_case = True
|
|
supports_index_on_text_field = False
|
|
has_case_insensitive_like = False
|
|
create_test_procedure_without_params_sql = """
|
|
CREATE PROCEDURE "TEST_PROCEDURE" AS
|
|
V_I INTEGER;
|
|
BEGIN
|
|
V_I := 1;
|
|
END;
|
|
"""
|
|
create_test_procedure_with_int_param_sql = """
|
|
CREATE PROCEDURE "TEST_PROCEDURE" (P_I INTEGER) AS
|
|
V_I INTEGER;
|
|
BEGIN
|
|
V_I := P_I;
|
|
END;
|
|
"""
|
|
supports_callproc_kwargs = True
|
|
supports_over_clause = True
|
|
supports_ignore_conflicts = False
|
|
max_query_params = 2**16 - 1
|
|
supports_partial_indexes = False
|
|
|
|
@cached_property
|
|
def has_fetch_offset_support(self):
|
|
return self.connection.oracle_version >= (12, 2)
|
|
|
|
@cached_property
|
|
def allow_sliced_subqueries_with_in(self):
|
|
return self.has_fetch_offset_support
|
|
|
|
@cached_property
|
|
def supports_slicing_ordering_in_compound(self):
|
|
return self.has_fetch_offset_support
|