summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAmjith Ramanujam <amjith.r@gmail.com>2019-03-16 13:44:40 -0700
committerGitHub <noreply@github.com>2019-03-16 13:44:40 -0700
commit7d6523e18b2c752e0a404746018df77cbad5bcdb (patch)
treeea4c88cc513ce77ffe40cbee62e02267423a45d4
parent1c66dece59d4595eee3fb33d2609e2e288a28ff4 (diff)
parentc447ffc8877476d449820a2b9b708fc076967fd3 (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--AUTHORS2
-rw-r--r--changelog.rst7
-rw-r--r--pgcli/completion_refresher.py2
-rw-r--r--pgcli/main.py4
-rw-r--r--pgcli/pgexecute.py30
5 files changed, 23 insertions, 22 deletions
diff --git a/AUTHORS b/AUTHORS
index fc750d9e..28430c4b 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -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)