summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormike bayer <mike_mp@zzzcomputing.com>2023-01-25 01:46:41 +0000
committerGerrit Code Review <gerrit@ci3.zzzcomputing.com>2023-01-25 01:46:41 +0000
commit73e35b53aaa541fd3e6445fa03a661609592a5b7 (patch)
treedf3fbdcd9c887c1e2400ab928bf323a860cce7a9
parent2c3372f6c03c7d15325cad08c9fd6d08c68fa2fd (diff)
parent5df262b5eeb11a52a5c7367d53655ab4c20d0a57 (diff)
downloadsqlalchemy-73e35b53aaa541fd3e6445fa03a661609592a5b7.tar.gz
Merge "reflect Oracle ROWID" into rel_1_4
-rw-r--r--doc/build/changelog/unreleased_14/5047.rst6
-rw-r--r--lib/sqlalchemy/dialects/oracle/base.py1
-rw-r--r--setup.cfg2
-rw-r--r--test/dialect/oracle/test_reflection.py35
4 files changed, 43 insertions, 1 deletions
diff --git a/doc/build/changelog/unreleased_14/5047.rst b/doc/build/changelog/unreleased_14/5047.rst
new file mode 100644
index 000000000..4d08d771f
--- /dev/null
+++ b/doc/build/changelog/unreleased_14/5047.rst
@@ -0,0 +1,6 @@
+.. change::
+ :tags: bug, oracle
+ :tickets: 5047
+
+ Added :class:`_oracle.ROWID` to reflected types as this type may be used in
+ a "CREATE TABLE" statement.
diff --git a/lib/sqlalchemy/dialects/oracle/base.py b/lib/sqlalchemy/dialects/oracle/base.py
index c1736a1f9..390ea5098 100644
--- a/lib/sqlalchemy/dialects/oracle/base.py
+++ b/lib/sqlalchemy/dialects/oracle/base.py
@@ -759,6 +759,7 @@ ischema_names = {
"LONG": LONG,
"BINARY_DOUBLE": BINARY_DOUBLE,
"BINARY_FLOAT": BINARY_FLOAT,
+ "ROWID": ROWID,
}
diff --git a/setup.cfg b/setup.cfg
index 45859cb6c..b455c8a09 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -177,6 +177,6 @@ mariadb_connector = mariadb+mariadbconnector://scott:tiger@127.0.0.1:3306/test
mssql = mssql+pyodbc://scott:tiger^5HHH@mssql2017:1433/test?driver=ODBC+Driver+13+for+SQL+Server
mssql_pymssql = mssql+pymssql://scott:tiger@ms_2008
docker_mssql = mssql+pymssql://scott:tiger^5HHH@127.0.0.1:1433/test
-oracle = oracle://scott:tiger@127.0.0.1:1521
+oracle = oracle://scott:tiger@oracle18c
oracle8 = oracle://scott:tiger@127.0.0.1:1521/?use_ansi=0
firebird = firebird://sysdba:mainkey@localhost//Users/classic/foo.fdb
diff --git a/test/dialect/oracle/test_reflection.py b/test/dialect/oracle/test_reflection.py
index b287e1024..836edc0e9 100644
--- a/test/dialect/oracle/test_reflection.py
+++ b/test/dialect/oracle/test_reflection.py
@@ -15,14 +15,23 @@ from sqlalchemy import MetaData
from sqlalchemy import Numeric
from sqlalchemy import PrimaryKeyConstraint
from sqlalchemy import select
+from sqlalchemy import String
from sqlalchemy import testing
from sqlalchemy import text
from sqlalchemy import Unicode
from sqlalchemy import UniqueConstraint
+from sqlalchemy.dialects.oracle import NVARCHAR2
+from sqlalchemy.dialects.oracle import VARCHAR2
from sqlalchemy.dialects.oracle.base import BINARY_DOUBLE
from sqlalchemy.dialects.oracle.base import BINARY_FLOAT
from sqlalchemy.dialects.oracle.base import DOUBLE_PRECISION
from sqlalchemy.dialects.oracle.base import NUMBER
+from sqlalchemy.dialects.oracle.base import RAW
+from sqlalchemy.dialects.oracle.base import ROWID
+from sqlalchemy.sql.sqltypes import CHAR
+from sqlalchemy.sql.sqltypes import NCHAR
+from sqlalchemy.sql.sqltypes import NVARCHAR
+from sqlalchemy.sql.sqltypes import VARCHAR
from sqlalchemy.testing import assert_warns
from sqlalchemy.testing import AssertsCompiledSQL
from sqlalchemy.testing import eq_
@@ -817,6 +826,32 @@ class TypeReflectionTest(fixtures.TestBase):
]
self._run_test(metadata, connection, specs, ["precision"])
+ def test_string_types(
+ self,
+ metadata,
+ connection,
+ ):
+ specs = [
+ (String(125), VARCHAR(125)),
+ (String(42).with_variant(VARCHAR2(42), "oracle"), VARCHAR(42)),
+ (Unicode(125), VARCHAR(125)),
+ (Unicode(42).with_variant(NVARCHAR2(42), "oracle"), NVARCHAR(42)),
+ (CHAR(125), CHAR(125)),
+ (NCHAR(42), NCHAR(42)),
+ ]
+ self._run_test(metadata, connection, specs, ["length"])
+
+ @testing.combinations(ROWID(), RAW(1), argnames="type_")
+ def test_misc_types(self, metadata, connection, type_):
+ t = Table("t1", metadata, Column("x", type_))
+
+ t.create(connection)
+
+ eq_(
+ inspect(connection).get_columns("t1")[0]["type"]._type_affinity,
+ type_._type_affinity,
+ )
+
class IdentityReflectionTest(fixtures.TablesTest):
__only_on__ = "oracle"