diff --git a/changelog.md b/changelog.md index 30ac12cb..1f0bf567 100644 --- a/changelog.md +++ b/changelog.md @@ -7,6 +7,11 @@ Features * Improve value-position keywords. +Bug Fixes +--------- +* Fix crash for completion edge case (#1668) + + 1.59.0 (2026/03/03) ============== diff --git a/mycli/packages/parseutils.py b/mycli/packages/parseutils.py index 96c498a1..7a2b341f 100644 --- a/mycli/packages/parseutils.py +++ b/mycli/packages/parseutils.py @@ -259,7 +259,12 @@ def extract_columns_from_select(sql: str) -> list[str]: if isinstance(token, IdentifierList): # multiple columns for identifier in token.get_identifiers(): - column = identifier.get_real_name() + if isinstance(identifier, Identifier): + column = identifier.get_real_name() + elif isinstance(identifier, Token): + column = identifier.value + else: + continue columns.append(column) elif isinstance(token, Identifier): # single column diff --git a/test/test_parseutils.py b/test/test_parseutils.py index cbdb790a..13d79b0b 100644 --- a/test/test_parseutils.py +++ b/test/test_parseutils.py @@ -3,6 +3,7 @@ import pytest from mycli.packages.parseutils import ( + extract_columns_from_select, extract_tables, extract_tables_from_complete_statements, is_destructive, @@ -13,6 +14,14 @@ ) +def test_extract_columns_from_select(): + try: + columns = extract_columns_from_select("SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT FROM INFORMATION_SCHEMA.COLUMNS") + except Exception: + columns = [] + assert columns == ["COLUMN_NAME", "DATA_TYPE", "IS_NULLABLE", "COLUMN_DEFAULT"] + + def test_empty_string(): tables = extract_tables("") assert tables == []