diff options
author | Amjith Ramanujam <amjith.r@gmail.com> | 2019-03-16 13:44:40 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-03-16 13:44:40 -0700 |
commit | 7d6523e18b2c752e0a404746018df77cbad5bcdb (patch) | |
tree | ea4c88cc513ce77ffe40cbee62e02267423a45d4 | |
parent | 1c66dece59d4595eee3fb33d2609e2e288a28ff4 (diff) | |
parent | c447ffc8877476d449820a2b9b708fc076967fd3 (diff) |
Merge pull request #1016 from dbcli/j-bennet/bugfix-server-version-single-connection
Fix crash in get_server_version when using --single-connection.
-rw-r--r-- | AUTHORS | 2 | ||||
-rw-r--r-- | changelog.rst | 7 | ||||
-rw-r--r-- | pgcli/completion_refresher.py | 2 | ||||
-rw-r--r-- | pgcli/main.py | 4 | ||||
-rw-r--r-- | pgcli/pgexecute.py | 30 |
5 files changed, 23 insertions, 22 deletions
@@ -89,7 +89,7 @@ Contributors: * Ignacio Campabadal * Mikhail Elovskikh (wronglink) * Marcin Cieślak (saper) - * easteregg + * easteregg (verfriemelt-dot-org) * Scott Brenstuhl (808sAndBR) Creator: diff --git a/changelog.rst b/changelog.rst index e5f50985..7af82674 100644 --- a/changelog.rst +++ b/changelog.rst @@ -4,13 +4,14 @@ Upcoming: Features: --------- -* keybindings for closing the autocomplete list -* reconnect automatically when server closes connection +* Keybindings for closing the autocomplete list. (Thanks: `easteregg`_) +* Reconnect automatically when server closes connection. (Thanks: `Scott Brenstuhl`_) Bug fixes: ---------- * Avoid error message on the server side if hstore extension is not installed in the current database (#991). (Thanks: `Marcin Cieślak`_) * All pexpect submodules have been moved into the pexpect package as of version 3.0. Use pexpect.TIMEOUT (Thanks: `Marcin Cieślak`_) +* Fix crash retrieving server version with ``--single-connection``. (Thanks: `Irina Truong`_) Internal: --------- @@ -942,3 +943,5 @@ Improvements: .. _`Ignacio Campabadal`: https://github.com/igncampa .. _`Mikhail Elovskikh`: https://github.com/wronglink .. _`Marcin Cieślak`: https://github.com/saper +.. _`Scott Brenstuhl`: https://github.com/808sAndBR +.. _`easteregg`: https://github.com/verfriemelt-dot-org diff --git a/pgcli/completion_refresher.py b/pgcli/completion_refresher.py index 0f33357f..388bb295 100644 --- a/pgcli/completion_refresher.py +++ b/pgcli/completion_refresher.py @@ -53,7 +53,7 @@ class CompletionRefresher(object): if settings.get('single_connection'): executor = pgexecute else: - # Create a new pgexecute method to popoulate the completions. + # Create a new pgexecute method to populate the completions. executor = pgexecute.copy() # If callbacks is a single function then push it into a list. if callable(callbacks): diff --git a/pgcli/main.py b/pgcli/main.py index 856f28e3..8078c5ce 100644 --- a/pgcli/main.py +++ b/pgcli/main.py @@ -556,7 +556,7 @@ class PGCli(object): logger.error("sql: %r, error: %r", text, e) logger.error("traceback: %r", traceback.format_exc()) self._handle_server_closed_connection(text) - except PgCliQuitError as e: + except (PgCliQuitError, EOFError) as e: raise except Exception as e: logger.error("sql: %r, error: %r", text, e) @@ -618,7 +618,7 @@ class PGCli(object): self.prompt_app = self._build_cli(history) if not self.less_chatty: - print('Server: PostgreSQL', self.pgexecute.get_server_version()) + print('Server: PostgreSQL', self.pgexecute.server_version) print('Version:', __version__) print('Chat: https://gitter.im/dbcli/pgcli') print('Mail: https://groups.google.com/forum/#!forum/pgcli') diff --git a/pgcli/pgexecute.py b/pgcli/pgexecute.py index 57dbc06f..c7d204f0 100644 --- a/pgcli/pgexecute.py +++ b/pgcli/pgexecute.py @@ -202,22 +202,18 @@ class PGExecute(object): """Returns a clone of the current executor.""" return self.__class__(**self._conn_params) - def get_server_version(self): - if self.server_version: - return self.server_version - with self.conn.cursor() as cur: - _logger.debug('Version Query. sql: %r', self.version_query) - cur.execute(self.version_query) - result = cur.fetchone() - if result: - # full version string looks like this: - # PostgreSQL 10.3 on x86_64-apple-darwin17.3.0, compiled by Apple LLVM version 9.0.0 (clang-900.0.39.2), 64-bit # noqa - # let's only retrieve version number - version_parts = result[0].split() - self.server_version = version_parts[1] - else: - self.server_version = '' - return self.server_version + def get_server_version(self, cursor): + _logger.debug('Version Query. sql: %r', self.version_query) + cursor.execute(self.version_query) + result = cursor.fetchone() + server_version = '' + if result: + # full version string looks like this: + # PostgreSQL 10.3 on x86_64-apple-darwin17.3.0, compiled by Apple LLVM version 9.0.0 (clang-900.0.39.2), 64-bit # noqa + # let's only retrieve version number + version_parts = result[0].split() + server_version = version_parts[1] + return server_version def connect(self, database=None, user=None, password=None, host=None, port=None, dsn=None, **kwargs): @@ -275,6 +271,8 @@ class PGExecute(object): self.pid = pid self.superuser = db_parameters.get('is_superuser') == '1' + self.server_version = self.get_server_version(cursor) + register_date_typecasters(conn) register_json_typecasters(self.conn, self._json_typecaster) register_hstore_typecaster(self.conn) |