diff options
| author | Hisham Mahmood <45965466+Hisham-Pak@users.noreply.github.com> | 2024-01-23 13:09:24 +0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-01-23 09:09:24 +0100 |
| commit | bbfbf0ab686030f8da5ea22a65c41b9574681262 (patch) | |
| tree | cc055212940a5fcd3c72fc572dfb2893a4965686 | |
| parent | f4c597346453c44769726d2ac061fbc028b2fd5b (diff) | |
Refs #33517 -- Prevented __second lookup from returning fractional seconds on Oracle.
| -rw-r--r-- | django/db/backends/oracle/features.py | 6 | ||||
| -rw-r--r-- | django/db/backends/oracle/operations.py | 9 |
2 files changed, 9 insertions, 6 deletions
diff --git a/django/db/backends/oracle/features.py b/django/db/backends/oracle/features.py index 002e03e2b5..47bdf37efa 100644 --- a/django/db/backends/oracle/features.py +++ b/django/db/backends/oracle/features.py @@ -95,12 +95,6 @@ class DatabaseFeatures(BaseDatabaseFeatures): "db_functions.datetime.test_extract_trunc.DateFunctionWithTimeZoneTests." "test_trunc_week_before_1000", }, - "Oracle extracts seconds including fractional seconds (#33517).": { - "db_functions.datetime.test_extract_trunc.DateFunctionTests." - "test_extract_second_func_no_fractional", - "db_functions.datetime.test_extract_trunc.DateFunctionWithTimeZoneTests." - "test_extract_second_func_no_fractional", - }, "Oracle doesn't support bitwise XOR.": { "expressions.tests.ExpressionOperatorTests.test_lefthand_bitwise_xor", "expressions.tests.ExpressionOperatorTests.test_lefthand_bitwise_xor_null", diff --git a/django/db/backends/oracle/operations.py b/django/db/backends/oracle/operations.py index aedfeea236..541128ec50 100644 --- a/django/db/backends/oracle/operations.py +++ b/django/db/backends/oracle/operations.py @@ -165,6 +165,9 @@ END; def datetime_extract_sql(self, lookup_type, sql, params, tzname): sql, params = self._convert_sql_to_tz(sql, params, tzname) + if lookup_type == "second": + # Truncate fractional seconds. + return f"FLOOR(EXTRACT(SECOND FROM {sql}))", params return self.date_extract_sql(lookup_type, sql, params) def datetime_trunc_sql(self, lookup_type, sql, params, tzname): @@ -188,6 +191,12 @@ END; return f"CAST({sql} AS DATE)", params return f"TRUNC({sql}, %s)", (*params, trunc_param) + def time_extract_sql(self, lookup_type, sql, params): + if lookup_type == "second": + # Truncate fractional seconds. + return f"FLOOR(EXTRACT(SECOND FROM {sql}))", params + return self.date_extract_sql(lookup_type, sql, params) + def time_trunc_sql(self, lookup_type, sql, params, tzname=None): # The implementation is similar to `datetime_trunc_sql` as both # `DateTimeField` and `TimeField` are stored as TIMESTAMP where |
