Fixed issue in :class:`.Interval` datatype where the Oracle implementation
was not being used for DDL generation, leading to the ``day_precision`` and
``second_precision`` parameters to be ignored, despite being supported by
this dialect. Pull request courtesy Indivar.
Fixes: #10509
Closes: #10513
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/10513
Pull-request-sha:
a3b901978504b1bc726f722fc27ca4827de05274
Change-Id: I074afeeac182567f9104c5175b81c735d87e1352
--- /dev/null
+.. change::
+ :tags: bug, oracle
+ :tickets: 10509
+
+ Fixed issue in :class:`.Interval` datatype where the Oracle implementation
+ was not being used for DDL generation, leading to the ``day_precision`` and
+ ``second_precision`` parameters to be ignored, despite being supported by
+ this dialect. Pull request courtesy Indivar.
second_precision=interval.second_precision,
)
+ @classmethod
+ def adapt_emulated_to_native(
+ cls, interval: sqltypes.Interval, **kw # type: ignore[override]
+ ):
+ return INTERVAL(
+ day_precision=interval.day_precision,
+ second_precision=interval.second_precision,
+ )
+
@property
def _type_affinity(self):
return sqltypes.Interval
"""A type for ``datetime.timedelta()`` objects.
The Interval type deals with ``datetime.timedelta`` objects. In
- PostgreSQL, the native ``INTERVAL`` type is used; for others, the
- value is stored as a date which is relative to the "epoch"
+ PostgreSQL and Oracle, the native ``INTERVAL`` type is used; for others,
+ the value is stored as a date which is relative to the "epoch"
(Jan. 1, 1970).
Note that the ``Interval`` type does not currently provide date arithmetic
oracle.INTERVAL(day_precision=2, second_precision=5),
"INTERVAL DAY(2) TO SECOND(5)",
),
+ (
+ sqltypes.Interval(day_precision=9, second_precision=3),
+ "INTERVAL DAY(9) TO SECOND(3)",
+ ),
)
def test_interval(self, type_, expected):
self.assert_compile(type_, expected)