Skip to content

dupe col logic when case sensitive is false #3690

@sqlalchemy-bot

Description

@sqlalchemy-bot

Migrated issue, originally created by Michael Bayer (@zzzeek)

is worse on 1.0, but fails on 1.1 thus:

from sqlalchemy import create_engine, select, literal_column

e = create_engine("sqlite://", case_sensitive=False)

row = e.execute(select([
    literal_column('1').label('SOMECOL'),
    literal_column('1').label('SOMECOL'),
])).first()

row['somecol']

the lookup should raise ambiguous column. on 1.1 it doesn't. On 1.0 we get an error when it's trying to set up the dupe lookup.

fix is likely:

1.0:

diff --git a/lib/sqlalchemy/engine/result.py b/lib/sqlalchemy/engine/result.py
index 850bc62..a4bfa02 100644
--- a/lib/sqlalchemy/engine/result.py
+++ b/lib/sqlalchemy/engine/result.py
@@ -304,6 +304,7 @@ class ResultMetaData(object):
                 for rec in raw:
                     key = rec[1]
                     if key in seen:
+                        key = key.lower() if not self.case_sensitive else key
                         by_key[key] = (None, by_key[key][1], None)
                     seen.add(key)
 

1.1:

diff --git a/lib/sqlalchemy/engine/result.py b/lib/sqlalchemy/engine/result.py
index 0333d9e..773022e 100644
--- a/lib/sqlalchemy/engine/result.py
+++ b/lib/sqlalchemy/engine/result.py
@@ -257,6 +257,7 @@ class ResultMetaData(object):
                     if key in seen:
                         # this is an "ambiguous" element, replacing
                         # the full record in the map
+                        key = key.lower() if not self.case_sensitive else key
                         by_key[key] = (None, key, None)
                     seen.add(key)
 

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingengineengines, connections, transactions, isolation levels, execution options

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions