Skip to content

Commit f4e91bf

Browse files
authored
Fix get_table_oid in HANAInspector to also work with inspectors created from Engine instances (#242)
Similar to the issue for the built-in PostgreSQL dialect resp. the corresponding PGInspector class (sqlalchemy/sqlalchemy#6170) the get_table_oid method of the HANAInspector cannot be used when the inspector was created using the Engine instance and not a Connection instance. This PR fixes this using the same solution from the PGInspector class (see also here for details: https://gerrit.sqlalchemy.org/c/sqlalchemy/sqlalchemy/+/2697).
1 parent 15798be commit f4e91bf

File tree

3 files changed

+55
-6
lines changed

3 files changed

+55
-6
lines changed

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ disable = [
126126
"too-many-lines",
127127
"too-many-branches",
128128
"too-many-return-statements",
129+
"duplicate-code",
129130
]
130131

131132
[tool.pylint.basic]

sqlalchemy_hana/dialect.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -462,12 +462,13 @@ class HANAInspector(reflection.Inspector):
462462
dialect: HANAHDBCLIDialect
463463

464464
def get_table_oid(self, table_name: str, schema: str | None = None) -> int:
465-
return self.dialect.get_table_oid(
466-
self.bind, # type:ignore[arg-type]
467-
table_name,
468-
schema,
469-
info_cache=self.info_cache,
470-
)
465+
with self._operation_context() as conn:
466+
return self.dialect.get_table_oid(
467+
conn,
468+
table_name,
469+
schema,
470+
info_cache=self.info_cache,
471+
)
471472

472473

473474
class HANAHDBCLIDialect(default.DefaultDialect):

test/test_inspector.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
"""SAP HANA Inspector tests."""
2+
3+
from __future__ import annotations
4+
5+
from sqlalchemy import Integer, String, create_engine, inspect
6+
from sqlalchemy.engine import Connection, Engine
7+
from sqlalchemy.testing import config, eq_, is_true
8+
from sqlalchemy.testing.fixtures import TablesTest
9+
from sqlalchemy.testing.schema import Column, Table
10+
11+
from sqlalchemy_hana.dialect import HANAInspector
12+
13+
14+
class InspectorTest(TablesTest):
15+
16+
@classmethod
17+
def define_tables(cls, metadata):
18+
Table(
19+
"tbl",
20+
metadata,
21+
Column("id", Integer, primary_key=True, autoincrement=True),
22+
Column("desc", String(100)),
23+
)
24+
25+
def test_get_table_oid(self, connection):
26+
connection_inspector = inspect(connection)
27+
28+
is_true(isinstance(connection_inspector, HANAInspector))
29+
is_true(isinstance(connection_inspector.bind, Connection))
30+
31+
table_oid1 = connection_inspector.get_table_oid(
32+
self.tables.tbl.name, self.tables.tbl.schema
33+
)
34+
is_true(isinstance(table_oid1, int))
35+
36+
eng = create_engine(config.db.url)
37+
eng_inspector = inspect(eng)
38+
39+
is_true(isinstance(eng_inspector, HANAInspector))
40+
is_true(isinstance(eng_inspector.bind, Engine))
41+
42+
table_oid2 = eng_inspector.get_table_oid(
43+
self.tables.tbl.name, self.tables.tbl.schema
44+
)
45+
is_true(isinstance(table_oid2, int))
46+
47+
eq_(table_oid1, table_oid2)

0 commit comments

Comments
 (0)