) -> _LabelConventionCallable:
if legacy:
- def name(col, col_name=None):
+ def name(col, col_name=None, cancel_dedupe=False):
if col_name:
return col_name
else:
if is_current_entities:
self._label_name = compile_state._label_convention(
- column, col_name=orm_key
+ column,
+ col_name=orm_key,
+ cancel_dedupe=parent_bundle is not None,
)
else:
self._label_name = None
cls, label_style: SelectLabelStyle
) -> _LabelConventionCallable:
table_qualified = label_style is LABEL_STYLE_TABLENAME_PLUS_COL
+
dedupe = label_style is not LABEL_STYLE_NONE
pa = prefix_anon_map()
def go(
c: Union[ColumnElement[Any], TextClause],
col_name: Optional[str] = None,
+ cancel_dedupe: bool = False,
) -> Optional[str]:
if is_text_clause(c):
return None
elif TYPE_CHECKING:
assert is_column_element(c)
- if not dedupe:
+ if not dedupe or cancel_dedupe:
name = c._proxy_key
if name is None:
name = "_no_label"
select(b1.c.d1, b1.c.d2), "SELECT data.d1, data.d2 FROM data"
)
+ @testing.variation("stmt_type", ["legacy", "newstyle"])
+ def test_dupe_col_name(self, stmt_type):
+ """test #11347"""
+ Data = self.classes.Data
+ sess = fixture_session()
+
+ b1 = Bundle("b1", Data.d1, Data.d3)
+
+ if stmt_type.legacy:
+ row = (
+ sess.query(Data.d1, Data.d2, b1)
+ .filter(Data.d1 == "d0d1")
+ .one()
+ )
+ elif stmt_type.newstyle:
+ row = sess.execute(
+ select(Data.d1, Data.d2, b1).filter(Data.d1 == "d0d1")
+ ).one()
+
+ eq_(row[2]._mapping, {"d1": "d0d1", "d3": "d0d3"})
+
+ @testing.variation("stmt_type", ["legacy", "newstyle"])
+ def test_dupe_col_name_nested(self, stmt_type):
+ """test #11347"""
+ Data = self.classes.Data
+ sess = fixture_session()
+
+ class DictBundle(Bundle):
+ def create_row_processor(self, query, procs, labels):
+ def proc(row):
+ return dict(zip(labels, (proc(row) for proc in procs)))
+
+ return proc
+
+ b1 = DictBundle("b1", Data.d1, Data.d3)
+ b2 = DictBundle("b2", Data.d2, Data.d3)
+ b3 = DictBundle("b3", Data.d2, Data.d3, b1, b2)
+
+ if stmt_type.legacy:
+ row = (
+ sess.query(Data.d1, Data.d2, b3)
+ .filter(Data.d1 == "d0d1")
+ .one()
+ )
+ elif stmt_type.newstyle:
+ row = sess.execute(
+ select(Data.d1, Data.d2, b3).filter(Data.d1 == "d0d1")
+ ).one()
+
+ eq_(
+ row[2],
+ {
+ "d2": "d0d2",
+ "d3": "d0d3",
+ "b1": {"d1": "d0d1", "d3": "d0d3"},
+ "b2": {"d2": "d0d2", "d3": "d0d3"},
+ },
+ )
+
def test_result(self):
Data = self.classes.Data
sess = fixture_session()