summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/dialects/oracle
diff options
context:
space:
mode:
authormike bayer <mike_mp@zzzcomputing.com>2022-06-01 16:13:36 +0000
committerGerrit Code Review <gerrit@ci3.zzzcomputing.com>2022-06-01 16:13:36 +0000
commit7b6fb299bb6b47dfeb22a5650b95af7fa0b35ec2 (patch)
tree84d683a496c9951838adb4efc09687f7c55b05af /lib/sqlalchemy/dialects/oracle
parent79dbe94bb4ccd75888d57f388195a3ba4fa6117e (diff)
parent349a7c5e0e2aeeac98fad789b0043a4bdfeed837 (diff)
downloadsqlalchemy-7b6fb299bb6b47dfeb22a5650b95af7fa0b35ec2.tar.gz
Merge "add backend agnostic UUID datatype" into main
Diffstat (limited to 'lib/sqlalchemy/dialects/oracle')
-rw-r--r--lib/sqlalchemy/dialects/oracle/base.py27
-rw-r--r--lib/sqlalchemy/dialects/oracle/cx_oracle.py3
2 files changed, 27 insertions, 3 deletions
diff --git a/lib/sqlalchemy/dialects/oracle/base.py b/lib/sqlalchemy/dialects/oracle/base.py
index 55d5a4fb5..37b81e1dd 100644
--- a/lib/sqlalchemy/dialects/oracle/base.py
+++ b/lib/sqlalchemy/dialects/oracle/base.py
@@ -690,7 +690,7 @@ class LONG(sqltypes.Text):
class _OracleDateLiteralRender:
- def literal_processor(self, dialect):
+ def _literal_processor_datetime(self, dialect):
def process(value):
if value is not None:
if getattr(value, "microsecond", None):
@@ -709,6 +709,25 @@ class _OracleDateLiteralRender:
return process
+ def _literal_processor_date(self, dialect):
+ def process(value):
+ if value is not None:
+ if getattr(value, "microsecond", None):
+ value = (
+ f"""TO_TIMESTAMP"""
+ f"""('{value.isoformat().split("T")[0]}', """
+ """'YYYY-MM-DD')"""
+ )
+ else:
+ value = (
+ f"""TO_DATE"""
+ f"""('{value.isoformat().split("T")[0]}', """
+ """'YYYY-MM-DD')"""
+ )
+ return value
+
+ return process
+
class DATE(_OracleDateLiteralRender, sqltypes.DateTime):
"""Provide the oracle DATE type.
@@ -723,12 +742,16 @@ class DATE(_OracleDateLiteralRender, sqltypes.DateTime):
__visit_name__ = "DATE"
+ def literal_processor(self, dialect):
+ return self._literal_processor_datetime(dialect)
+
def _compare_type_affinity(self, other):
return other._type_affinity in (sqltypes.DateTime, sqltypes.Date)
class _OracleDate(_OracleDateLiteralRender, sqltypes.Date):
- pass
+ def literal_processor(self, dialect):
+ return self._literal_processor_date(dialect)
class INTERVAL(sqltypes.NativeForEmulated, sqltypes._AbstractInterval):
diff --git a/lib/sqlalchemy/dialects/oracle/cx_oracle.py b/lib/sqlalchemy/dialects/oracle/cx_oracle.py
index 290789f32..fbac8b93e 100644
--- a/lib/sqlalchemy/dialects/oracle/cx_oracle.py
+++ b/lib/sqlalchemy/dialects/oracle/cx_oracle.py
@@ -580,7 +580,8 @@ class _CXOracleDate(oracle._OracleDate):
class _CXOracleTIMESTAMP(oracle._OracleDateLiteralRender, sqltypes.TIMESTAMP):
- pass
+ def literal_processor(self, dialect):
+ return self._literal_processor_datetime(dialect)
# TODO: the names used across CHAR / VARCHAR / NCHAR / NVARCHAR