diff --git a/mycli/sqlcompleter.py b/mycli/sqlcompleter.py index 6996949c..fe578889 100644 --- a/mycli/sqlcompleter.py +++ b/mycli/sqlcompleter.py @@ -1259,7 +1259,7 @@ def populate_scoped_cols(self, scoped_tbls: list[tuple[str | None, str, str | No if len(scoped_tbls) == 0 and self.dbname: for table in meta["tables"][self.dbname]: columns.extend(meta["tables"][self.dbname][table]) - return columns + return columns or ['*'] # query includes tables, so use those to populate columns for tbl in scoped_tbls: diff --git a/test/test_smart_completion_public_schema_only.py b/test/test_smart_completion_public_schema_only.py index 2afa8eab..13da35f6 100644 --- a/test/test_smart_completion_public_schema_only.py +++ b/test/test_smart_completion_public_schema_only.py @@ -48,6 +48,28 @@ def completer(): return comp +@pytest.fixture +def empty_completer(): + import mycli.sqlcompleter as sqlcompleter + + comp = sqlcompleter.SQLCompleter(smart_completion=True) + + tables, columns = [], [] + + for table, cols in metadata.items(): + tables.append((table,)) + columns.extend([(table, col) for col in cols]) + + db = 'empty' + + comp.extend_schemata(db) + comp.extend_database_names([db]) + comp.set_dbname(db) + comp.extend_special_commands(special.COMMANDS) + + return comp + + @pytest.fixture def complete_event(): from unittest.mock import Mock @@ -236,6 +258,26 @@ def test_suggested_column_names(completer, complete_event): ) +def test_suggested_column_names_empty_db(empty_completer, complete_event): + """Suggest * and function/keywords when selecting from no-table db. + + :param empty_completer: + :param complete_event: + :return: + + """ + text = "SELECT " + position = len("SELECT ") + result = list(empty_completer.get_completions(Document(text=text, cursor_position=position), complete_event)) + assert result == list( + [ + Completion(text="*", start_position=0), + ] + + list(map(Completion, empty_completer.functions)) + + [x for x in map(Completion, empty_completer.keywords) if x.text not in empty_completer.functions] + ) + + def test_suggested_column_names_in_function(completer, complete_event): """Suggest column and function names when selecting multiple columns from table.