From 1d2570f462a565e5034658000c6cbb60f259b2dc Mon Sep 17 00:00:00 2001 From: Amjith Ramanujam Date: Thu, 6 May 2021 21:09:45 -0700 Subject: Include functions from search_path in completion. --- changelog.rst | 1 + pgcli/packages/pgliterals/pgliterals.json | 2 -- pgcli/pgcompleter.py | 19 +++++++++++++------ 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/changelog.rst b/changelog.rst index 4fd6fb28..21941499 100644 --- a/changelog.rst +++ b/changelog.rst @@ -7,6 +7,7 @@ Features: * Consider `update` queries destructive and issue a warning. Change `destructive_warning` setting to `all|moderate|off`, vs `true|false`. (#1239) * Skip initial comment in .pg_session even if it doesn't start with '#' +* Include functions from schemas in search_path. (`Amjith Ramanujam`_) Bug fixes: ---------- diff --git a/pgcli/packages/pgliterals/pgliterals.json b/pgcli/packages/pgliterals/pgliterals.json index 5c292e6d..df00817a 100644 --- a/pgcli/packages/pgliterals/pgliterals.json +++ b/pgcli/packages/pgliterals/pgliterals.json @@ -327,8 +327,6 @@ "FIRST_VALUE", "FLOOR", "FORMAT", - "GENERATE_SERIES", - "GENERATE_SUBSCRIPTS", "GET_BIT", "GET_BYTE", "HEIGHT", diff --git a/pgcli/pgcompleter.py b/pgcli/pgcompleter.py index 79be274e..269b810f 100644 --- a/pgcli/pgcompleter.py +++ b/pgcli/pgcompleter.py @@ -491,11 +491,14 @@ class PGCompleter(Completer): def get_column_matches(self, suggestion, word_before_cursor): tables = suggestion.table_refs - do_qualify = suggestion.qualifiable and { - "always": True, - "never": False, - "if_more_than_one_table": len(tables) > 1, - }[self.qualify_columns] + do_qualify = ( + suggestion.qualifiable + and { + "always": True, + "never": False, + "if_more_than_one_table": len(tables) > 1, + }[self.qualify_columns] + ) qualify = lambda col, tbl: ( (tbl + "." + self.case(col)) if do_qualify else self.case(col) ) @@ -703,7 +706,11 @@ class PGCompleter(Completer): not f.is_aggregate and not f.is_window and not f.is_extension - and (f.is_public or f.schema_name == suggestion.schema) + and ( + f.is_public + or f.schema_name in self.search_path + or f.schema_name == suggestion.schema + ) ) else: -- cgit v1.2.3 From 6309dd4f9326b4ac7b421590899ff02ae42d3634 Mon Sep 17 00:00:00 2001 From: Amjith Ramanujam Date: Thu, 6 May 2021 21:20:12 -0700 Subject: Blacken. --- .pre-commit-config.yaml | 2 +- pgcli/main.py | 3 ++- pgcli/pgcompleter.py | 15 ++++++--------- tests/utils.py | 2 +- 4 files changed, 10 insertions(+), 12 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index b970ac5e..9e27ab8e 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,6 +1,6 @@ repos: - repo: https://github.com/psf/black - rev: stable + rev: 21.5b0 hooks: - id: black language_version: python3.7 diff --git a/pgcli/main.py b/pgcli/main.py index ecf041bb..2202c1a7 100644 --- a/pgcli/main.py +++ b/pgcli/main.py @@ -1248,7 +1248,8 @@ def cli( else: print("Config file is now located at", config_full_path) print( - "Please move the existing config file ~/.pgclirc to", config_full_path, + "Please move the existing config file ~/.pgclirc to", + config_full_path, ) if list_dsn: try: diff --git a/pgcli/pgcompleter.py b/pgcli/pgcompleter.py index 269b810f..227e25c6 100644 --- a/pgcli/pgcompleter.py +++ b/pgcli/pgcompleter.py @@ -140,7 +140,7 @@ class PGCompleter(Completer): return "'{}'".format(self.unescape_name(name)) def unescape_name(self, name): - """ Unquote a string.""" + """Unquote a string.""" if name and name[0] == '"' and name[-1] == '"': name = name[1:-1] @@ -491,14 +491,11 @@ class PGCompleter(Completer): def get_column_matches(self, suggestion, word_before_cursor): tables = suggestion.table_refs - do_qualify = ( - suggestion.qualifiable - and { - "always": True, - "never": False, - "if_more_than_one_table": len(tables) > 1, - }[self.qualify_columns] - ) + do_qualify = suggestion.qualifiable and { + "always": True, + "never": False, + "if_more_than_one_table": len(tables) > 1, + }[self.qualify_columns] qualify = lambda col, tbl: ( (tbl + "." + self.case(col)) if do_qualify else self.case(col) ) diff --git a/tests/utils.py b/tests/utils.py index fcd725e3..460ea469 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -73,7 +73,7 @@ def drop_tables(conn): def run( executor, sql, join=False, expanded=False, pgspecial=None, exception_formatter=None ): - " Return string output for the sql to be run " + "Return string output for the sql to be run" results = executor.run(sql, pgspecial, exception_formatter) formatted = [] -- cgit v1.2.3 From 7304cf37089ba07132b58815444fb4526d20bc26 Mon Sep 17 00:00:00 2001 From: Amjith Ramanujam Date: Thu, 6 May 2021 21:21:38 -0700 Subject: Change precommit hook to use stable black. --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 9e27ab8e..b970ac5e 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,6 +1,6 @@ repos: - repo: https://github.com/psf/black - rev: 21.5b0 + rev: stable hooks: - id: black language_version: python3.7 -- cgit v1.2.3 From c196c28e781b6abd9ff2359109528c883436870d Mon Sep 17 00:00:00 2001 From: Amjith Ramanujam Date: Fri, 7 May 2021 12:36:40 -0700 Subject: Add tests for search_path function completion. --- tests/test_smart_completion_multiple_schemata.py | 26 ++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/tests/test_smart_completion_multiple_schemata.py b/tests/test_smart_completion_multiple_schemata.py index 74768d39..031e0301 100644 --- a/tests/test_smart_completion_multiple_schemata.py +++ b/tests/test_smart_completion_multiple_schemata.py @@ -350,6 +350,32 @@ def test_schema_qualified_function_name(completer): ) +@parametrize("completer", completers(filtr=True, casing=False, aliasing=False)) +def test_schema_qualified_function_name_after_from(completer): + text = "SELECT * FROM custom.set_r" + result = get_result(completer, text) + assert completions_to_set(result) == completions_to_set( + [function("set_returning_func()", -len("func")),] + ) + + +@parametrize("completer", completers(filtr=True, casing=False, aliasing=False)) +def test_unqualified_function_name_not_returned(completer): + text = "SELECT * FROM set_r" + result = get_result(completer, text) + assert completions_to_set(result) == completions_to_set([]) + + +@parametrize("completer", completers(filtr=True, casing=False, aliasing=False)) +def test_unqualified_function_name_in_search_path(completer): + completer.search_path = ["public", "custom"] + text = "SELECT * FROM set_r" + result = get_result(completer, text) + assert completions_to_set(result) == completions_to_set( + [function("set_returning_func()", -len("func")),] + ) + + @parametrize("completer", completers(filtr=True, casing=False)) @parametrize( "text", -- cgit v1.2.3 From 898f8255e051ee6a64099723f21f31980ecdd380 Mon Sep 17 00:00:00 2001 From: Amjith Ramanujam Date: Fri, 7 May 2021 12:43:32 -0700 Subject: Blacken. --- .pre-commit-config.yaml | 2 +- tests/test_smart_completion_multiple_schemata.py | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index b970ac5e..9e27ab8e 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,6 +1,6 @@ repos: - repo: https://github.com/psf/black - rev: stable + rev: 21.5b0 hooks: - id: black language_version: python3.7 diff --git a/tests/test_smart_completion_multiple_schemata.py b/tests/test_smart_completion_multiple_schemata.py index 031e0301..5c9c9af4 100644 --- a/tests/test_smart_completion_multiple_schemata.py +++ b/tests/test_smart_completion_multiple_schemata.py @@ -355,7 +355,9 @@ def test_schema_qualified_function_name_after_from(completer): text = "SELECT * FROM custom.set_r" result = get_result(completer, text) assert completions_to_set(result) == completions_to_set( - [function("set_returning_func()", -len("func")),] + [ + function("set_returning_func()", -len("func")), + ] ) @@ -372,7 +374,9 @@ def test_unqualified_function_name_in_search_path(completer): text = "SELECT * FROM set_r" result = get_result(completer, text) assert completions_to_set(result) == completions_to_set( - [function("set_returning_func()", -len("func")),] + [ + function("set_returning_func()", -len("func")), + ] ) -- cgit v1.2.3