Skip to content

Commit 075d96d

Browse files
fix: Add column name aliases for all MySQL information_schema queries
Extended the column name alias fix to get_indexes_sql() and updated tests that call declare() directly to pass the adapter parameter. Fixes: - get_indexes_sql() now uses uppercase column names with lowercase aliases - get_foreign_keys_sql() already fixed in previous commit - test_declare.py: Updated 3 tests to pass adapter and compare SQL only - test_json.py: Updated test_describe to pass adapter and compare SQL only Note: test_describe tests now reveal a pre-existing bug where describe() doesn't preserve NOT NULL constraints for foreign key attributes. This is unrelated to the adapter changes. Related: #1338
1 parent 664ff34 commit 075d96d

File tree

3 files changed

+17
-13
lines changed

3 files changed

+17
-13
lines changed

src/datajoint/adapters/mysql.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -637,7 +637,7 @@ def parse_foreign_key_error(self, error_message: str) -> dict[str, str | list[st
637637
def get_indexes_sql(self, schema_name: str, table_name: str) -> str:
638638
"""Query to get index definitions."""
639639
return (
640-
f"SELECT index_name, column_name, non_unique "
640+
f"SELECT INDEX_NAME as index_name, COLUMN_NAME as column_name, NON_UNIQUE as non_unique "
641641
f"FROM information_schema.statistics "
642642
f"WHERE table_schema = {self.quote_string(schema_name)} "
643643
f"AND table_name = {self.quote_string(table_name)} "

tests/integration/test_declare.py

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -44,27 +44,30 @@ def test_describe(schema_any):
4444
"""real_definition should match original definition"""
4545
rel = Experiment()
4646
context = inspect.currentframe().f_globals
47-
s1 = declare(rel.full_table_name, rel.definition, context)
48-
s2 = declare(rel.full_table_name, rel.describe(), context)
49-
assert s1 == s2
47+
adapter = rel.connection.adapter
48+
s1 = declare(rel.full_table_name, rel.definition, context, adapter)
49+
s2 = declare(rel.full_table_name, rel.describe(), context, adapter)
50+
assert s1[0] == s2[0] # Compare SQL only (declare now returns tuple)
5051

5152

5253
def test_describe_indexes(schema_any):
5354
"""real_definition should match original definition"""
5455
rel = IndexRich()
5556
context = inspect.currentframe().f_globals
56-
s1 = declare(rel.full_table_name, rel.definition, context)
57-
s2 = declare(rel.full_table_name, rel.describe(), context)
58-
assert s1 == s2
57+
adapter = rel.connection.adapter
58+
s1 = declare(rel.full_table_name, rel.definition, context, adapter)
59+
s2 = declare(rel.full_table_name, rel.describe(), context, adapter)
60+
assert s1[0] == s2[0] # Compare SQL only (declare now returns tuple)
5961

6062

6163
def test_describe_dependencies(schema_any):
6264
"""real_definition should match original definition"""
6365
rel = ThingC()
6466
context = inspect.currentframe().f_globals
65-
s1 = declare(rel.full_table_name, rel.definition, context)
66-
s2 = declare(rel.full_table_name, rel.describe(), context)
67-
assert s1 == s2
67+
adapter = rel.connection.adapter
68+
s1 = declare(rel.full_table_name, rel.definition, context, adapter)
69+
s2 = declare(rel.full_table_name, rel.describe(), context, adapter)
70+
assert s1[0] == s2[0] # Compare SQL only (declare now returns tuple)
6871

6972

7073
def test_part(schema_any):

tests/integration/test_json.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -122,9 +122,10 @@ def test_insert_update(schema_json):
122122
def test_describe(schema_json):
123123
rel = Team()
124124
context = inspect.currentframe().f_globals
125-
s1 = declare(rel.full_table_name, rel.definition, context)
126-
s2 = declare(rel.full_table_name, rel.describe(), context)
127-
assert s1 == s2
125+
adapter = rel.connection.adapter
126+
s1 = declare(rel.full_table_name, rel.definition, context, adapter)
127+
s2 = declare(rel.full_table_name, rel.describe(), context, adapter)
128+
assert s1[0] == s2[0] # Compare SQL only (declare now returns tuple)
128129

129130

130131
def test_restrict(schema_json):

0 commit comments

Comments
 (0)