summaryrefslogtreecommitdiff
path: root/test/sql/test_selectable.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/sql/test_selectable.py')
-rw-r--r--test/sql/test_selectable.py39
1 files changed, 39 insertions, 0 deletions
diff --git a/test/sql/test_selectable.py b/test/sql/test_selectable.py
index ce33ed10e..e15c74075 100644
--- a/test/sql/test_selectable.py
+++ b/test/sql/test_selectable.py
@@ -32,6 +32,7 @@ from sqlalchemy.sql import annotation
from sqlalchemy.sql import base
from sqlalchemy.sql import column
from sqlalchemy.sql import elements
+from sqlalchemy.sql import LABEL_STYLE_DISAMBIGUATE_ONLY
from sqlalchemy.sql import LABEL_STYLE_TABLENAME_PLUS_COL
from sqlalchemy.sql import operators
from sqlalchemy.sql import table
@@ -2916,6 +2917,7 @@ class ReprTest(fixtures.TestBase):
class WithLabelsTest(fixtures.TestBase):
def _assert_result_keys(self, s, keys):
compiled = s.compile()
+
eq_(set(compiled._create_result_map()), set(keys))
def _assert_subq_result_keys(self, s, keys):
@@ -2934,10 +2936,13 @@ class WithLabelsTest(fixtures.TestBase):
self._assert_subq_result_keys(sel, ["x", "x_1"])
+ eq_(sel.selected_columns.keys(), ["x", "x"])
+
def test_names_overlap_label(self):
sel = self._names_overlap().set_label_style(
LABEL_STYLE_TABLENAME_PLUS_COL
)
+ eq_(sel.selected_columns.keys(), ["t1_x", "t2_x"])
eq_(list(sel.selected_columns.keys()), ["t1_x", "t2_x"])
eq_(list(sel.subquery().c.keys()), ["t1_x", "t2_x"])
self._assert_result_keys(sel, ["t1_x", "t2_x"])
@@ -2951,6 +2956,7 @@ class WithLabelsTest(fixtures.TestBase):
def test_names_overlap_keys_dont_nolabel(self):
sel = self._names_overlap_keys_dont()
+ eq_(sel.selected_columns.keys(), ["a", "b"])
eq_(list(sel.selected_columns.keys()), ["a", "b"])
eq_(list(sel.subquery().c.keys()), ["a", "b"])
self._assert_result_keys(sel, ["x"])
@@ -2959,10 +2965,41 @@ class WithLabelsTest(fixtures.TestBase):
sel = self._names_overlap_keys_dont().set_label_style(
LABEL_STYLE_TABLENAME_PLUS_COL
)
+ eq_(sel.selected_columns.keys(), ["t1_a", "t2_b"])
eq_(list(sel.selected_columns.keys()), ["t1_a", "t2_b"])
eq_(list(sel.subquery().c.keys()), ["t1_a", "t2_b"])
self._assert_result_keys(sel, ["t1_x", "t2_x"])
+ def _columns_repeated(self):
+ m = MetaData()
+ t1 = Table("t1", m, Column("x", Integer), Column("y", Integer))
+ return select(t1.c.x, t1.c.y, t1.c.x).set_label_style(LABEL_STYLE_NONE)
+
+ def test_element_repeated_nolabels(self):
+ sel = self._columns_repeated().set_label_style(LABEL_STYLE_NONE)
+ eq_(sel.selected_columns.keys(), ["x", "y", "x"])
+ eq_(list(sel.selected_columns.keys()), ["x", "y", "x"])
+ eq_(list(sel.subquery().c.keys()), ["x", "y", "x_1"])
+ self._assert_result_keys(sel, ["x", "y"])
+
+ def test_element_repeated_disambiguate(self):
+ sel = self._columns_repeated().set_label_style(
+ LABEL_STYLE_DISAMBIGUATE_ONLY
+ )
+ eq_(sel.selected_columns.keys(), ["x", "y", "x_1"])
+ eq_(list(sel.selected_columns.keys()), ["x", "y", "x_1"])
+ eq_(list(sel.subquery().c.keys()), ["x", "y", "x_1"])
+ self._assert_result_keys(sel, ["x", "y", "x__1"])
+
+ def test_element_repeated_labels(self):
+ sel = self._columns_repeated().set_label_style(
+ LABEL_STYLE_TABLENAME_PLUS_COL
+ )
+ eq_(sel.selected_columns.keys(), ["t1_x", "t1_y", "t1_x_1"])
+ eq_(list(sel.selected_columns.keys()), ["t1_x", "t1_y", "t1_x_1"])
+ eq_(list(sel.subquery().c.keys()), ["t1_x", "t1_y", "t1_x_1"])
+ self._assert_result_keys(sel, ["t1_x__1", "t1_x", "t1_y"])
+
def _labels_overlap(self):
m = MetaData()
t1 = Table("t", m, Column("x_id", Integer))
@@ -2971,6 +3008,7 @@ class WithLabelsTest(fixtures.TestBase):
def test_labels_overlap_nolabel(self):
sel = self._labels_overlap()
+ eq_(sel.selected_columns.keys(), ["x_id", "id"])
eq_(list(sel.selected_columns.keys()), ["x_id", "id"])
eq_(list(sel.subquery().c.keys()), ["x_id", "id"])
self._assert_result_keys(sel, ["x_id", "id"])
@@ -3077,6 +3115,7 @@ class WithLabelsTest(fixtures.TestBase):
def test_keys_overlap_names_dont_nolabel(self):
sel = self._keys_overlap_names_dont()
+ eq_(sel.selected_columns.keys(), ["x", "b_1"])
self._assert_result_keys(sel, ["a", "b"])
def test_keys_overlap_names_dont_label(self):