Skip to content

Commit bfe67ae

Browse files
authored
Fix unique_constraints (#152)
Signed-off-by: Pablo Takara <pjt1991@gmail.com>
1 parent fdb3618 commit bfe67ae

File tree

1 file changed

+59
-25
lines changed

1 file changed

+59
-25
lines changed

ibm_db_sa/reflection.py

Lines changed: 59 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -462,24 +462,41 @@ def get_unique_constraints(self, connection, table_name, schema=None, **kw):
462462
table_name = self.denormalize_name(table_name)
463463
syskeycol = self.sys_keycoluse
464464
sysconst = self.sys_tabconst
465-
query = sql.select(syskeycol.c.constname, syskeycol.c.colname).\
466-
where(and_(
467-
syskeycol.c.constname == sysconst.c.constname,
468-
sysconst.c.tabname == table_name,
469-
sysconst.c.tabschema == current_schema,
470-
sysconst.c.type == 'U')).\
471-
order_by(syskeycol.c.constname)
465+
query = (
466+
sql.select(syskeycol.c.constname, syskeycol.c.colname)
467+
.select_from(
468+
join(
469+
syskeycol,
470+
sysconst,
471+
and_(
472+
syskeycol.c.constname == sysconst.c.constname,
473+
syskeycol.c.tabschema == sysconst.c.tabschema,
474+
syskeycol.c.tabname == sysconst.c.tabname,
475+
),
476+
)
477+
)
478+
.where(
479+
and_(
480+
sysconst.c.tabname == table_name,
481+
sysconst.c.tabschema == current_schema,
482+
sysconst.c.type == "U",
483+
)
484+
)
485+
.order_by(syskeycol.c.constname)
486+
)
472487
uniqueConsts = []
473488
currConst = None
474489
for r in connection.execute(query):
475490
if currConst == r[0]:
476-
uniqueConsts[-1]['column_names'].append(self.normalize_name(r[1]))
491+
uniqueConsts[-1]["column_names"].append(self.normalize_name(r[1]))
477492
else:
478493
currConst = r[0]
479-
uniqueConsts.append({
480-
'name': self.normalize_name(currConst),
481-
'column_names': [self.normalize_name(r[1])],
482-
})
494+
uniqueConsts.append(
495+
{
496+
"name": self.normalize_name(currConst),
497+
"column_names": [self.normalize_name(r[1])],
498+
}
499+
)
483500
return uniqueConsts
484501

485502

@@ -779,7 +796,7 @@ def get_indexes(self, connection, table_name, schema=None, **kw):
779796
current_schema = self.denormalize_name(
780797
schema or self.default_schema_name)
781798
table_name = self.denormalize_name(table_name)
782-
799+
783800
sysidx = self.sys_indexes
784801
syskey = self.sys_keys
785802

@@ -1170,22 +1187,39 @@ def get_unique_constraints(self, connection, table_name, schema=None, **kw):
11701187
table_name = self.denormalize_name(table_name)
11711188
syskeycol = self.sys_keycoluse
11721189
sysconst = self.sys_tabconst
1173-
query = sql.select(syskeycol.c.constname, syskeycol.c.colname).\
1174-
where(and_(
1175-
syskeycol.c.constname == sysconst.c.constname,
1176-
sysconst.c.tabname == table_name,
1177-
sysconst.c.tabschema == current_schema,
1178-
sysconst.c.type == 'U')).\
1179-
order_by(syskeycol.c.constname)
1190+
query = (
1191+
sql.select(syskeycol.c.constname, syskeycol.c.colname)
1192+
.select_from(
1193+
join(
1194+
syskeycol,
1195+
sysconst,
1196+
and_(
1197+
syskeycol.c.constname == sysconst.c.constname,
1198+
syskeycol.c.tabschema == sysconst.c.tabschema,
1199+
syskeycol.c.tabname == sysconst.c.tabname,
1200+
),
1201+
)
1202+
)
1203+
.where(
1204+
and_(
1205+
sysconst.c.tabname == table_name,
1206+
sysconst.c.tabschema == current_schema,
1207+
sysconst.c.type == "U",
1208+
)
1209+
)
1210+
.order_by(syskeycol.c.constname)
1211+
)
11801212
uniqueConsts = []
11811213
currConst = None
11821214
for r in connection.execute(query):
11831215
if currConst == r[0]:
1184-
uniqueConsts[-1]['column_names'].append(self.normalize_name(r[1]))
1216+
uniqueConsts[-1]["column_names"].append(self.normalize_name(r[1]))
11851217
else:
11861218
currConst = r[0]
1187-
uniqueConsts.append({
1188-
'name': self.normalize_name(currConst),
1189-
'column_names': [self.normalize_name(r[1])],
1190-
})
1219+
uniqueConsts.append(
1220+
{
1221+
"name": self.normalize_name(currConst),
1222+
"column_names": [self.normalize_name(r[1])],
1223+
}
1224+
)
11911225
return uniqueConsts

0 commit comments

Comments
 (0)