diff --git a/docs/en_US/release_notes_3_4.rst b/docs/en_US/release_notes_3_4.rst index 9f7ae68b0..546912bb8 100644 --- a/docs/en_US/release_notes_3_4.rst +++ b/docs/en_US/release_notes_3_4.rst @@ -18,4 +18,5 @@ Bug fixes ********* | `Bug #3576 `_ - Ensure queries are no longer executed when dashboards are closed. +| `Bug #3630 `_ - Ensure auto-complete works for objects in schemas other than public and pg_catalog. diff --git a/web/pgadmin/feature_tests/query_tool_auto_complete_tests.py b/web/pgadmin/feature_tests/query_tool_auto_complete_tests.py index 563ac0b71..c0554c353 100644 --- a/web/pgadmin/feature_tests/query_tool_auto_complete_tests.py +++ b/web/pgadmin/feature_tests/query_tool_auto_complete_tests.py @@ -22,6 +22,8 @@ class QueryToolAutoCompleteFeatureTest(BaseFeatureTest): This feature test will test the query tool auto complete feature. """ + first_schema_name = "" + second_schema_name = "" first_table_name = "" second_table_name = "" @@ -33,6 +35,17 @@ class QueryToolAutoCompleteFeatureTest(BaseFeatureTest): self.page.wait_for_spinner_to_disappear() self.page.add_server(self.server) + + self.first_schema_name = "test_schema" + \ + str(random.randint(1000, 3000)) + test_utils.create_schema(self.server, self.test_db, + self.first_schema_name) + + self.second_schema_name = "comp_schema" + \ + str(random.randint(1000, 3000)) + test_utils.create_schema(self.server, self.test_db, + self.second_schema_name) + self.first_table_name = "auto_comp_" + \ str(random.randint(1000, 3000)) test_utils.create_table(self.server, self.test_db, @@ -87,6 +100,18 @@ class QueryToolAutoCompleteFeatureTest(BaseFeatureTest): print("OK.", file=sys.stderr) self._clear_query_tool() + print("Auto complete schema other than default start with test_ ... ", + file=sys.stderr, end="") + self._auto_complete("SELECT * FROM te", self.first_schema_name) + print("OK.", file=sys.stderr) + self._clear_query_tool() + + print("Auto complete schema other than default starts with comp_ ... ", + file=sys.stderr, end="") + self._auto_complete("SELECT * FROM co", self.second_schema_name) + print("OK.", file=sys.stderr) + self._clear_query_tool() + print("Auto complete first table in public schema ... ", file=sys.stderr, end="") self._auto_complete("SELECT * FROM public.", self.first_table_name) diff --git a/web/pgadmin/utils/sqlautocomplete/autocomplete.py b/web/pgadmin/utils/sqlautocomplete/autocomplete.py index 84a0bd989..7b5b1bfee 100644 --- a/web/pgadmin/utils/sqlautocomplete/autocomplete.py +++ b/web/pgadmin/utils/sqlautocomplete/autocomplete.py @@ -116,16 +116,22 @@ class SQLAutoComplete(object): self.search_path = [] schema_names = [] - # Fetch the search path if self.conn.connected(): + # Fetch the search path query = render_template( "/".join([self.sql_path, 'schema.sql']), search_path=True) status, res = self.conn.execute_dict(query) if status: for record in res['rows']: - schema_names.append(record['schema']) self.search_path.append(record['schema']) + # Fetch the schema names + query = render_template("/".join([self.sql_path, 'schema.sql'])) + status, res = self.conn.execute_dict(query) + if status: + for record in res['rows']: + schema_names.append(record['schema']) + pref = Preferences.module('sqleditor') keywords_in_uppercase = \ pref.preference('keywords_in_uppercase').get() diff --git a/web/regression/python_test_utils/test_utils.py b/web/regression/python_test_utils/test_utils.py index 28fc7ac9c..91f3b956c 100644 --- a/web/regression/python_test_utils/test_utils.py +++ b/web/regression/python_test_utils/test_utils.py @@ -851,3 +851,35 @@ def get_timezone_without_dst(connection): pg_cursor.execute(timezone_no_dst_sql) return pg_cursor.fetchone()[0] + + +def create_schema(server, db_name, schema_name): + """ + This function create the schema in given database name + :param server: server details + :type server: dict + :param db_name: database name + :type db_name: str + :param schema_name: schema name + :type schema_name: str + :return: None + """ + try: + connection = get_db_connection( + db_name, + server['username'], + server['db_password'], + server['host'], + server['port'], + server['sslmode'] + ) + old_isolation_level = connection.isolation_level + connection.set_isolation_level(0) + pg_cursor = connection.cursor() + pg_cursor.execute( + '''CREATE SCHEMA "%s"''' % schema_name) + connection.set_isolation_level(old_isolation_level) + connection.commit() + + except Exception: + traceback.print_exc(file=sys.stderr)