From 61101888e43d1526b63a23aeb216a9bc2ea2e197 Mon Sep 17 00:00:00 2001 From: Daniele Varrazzo Date: Thu, 16 Feb 2017 13:15:14 +0000 Subject: [PATCH] Revert default_transaction_* to default only if set When moving from autocommit True -> False reset only the server parameters that were actually specified by psycopg to honour the serssion characteristics. --- psycopg/connection_int.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/psycopg/connection_int.c b/psycopg/connection_int.c index e0a369e7..e8081b9e 100644 --- a/psycopg/connection_int.c +++ b/psycopg/connection_int.c @@ -1237,17 +1237,21 @@ conn_set_session(connectionObject *self, int autocommit, else if (self->autocommit) { /* we are moving from autocommit to not autocommit, so revert the * characteristics to defaults to let BEGIN do its work */ - if (0 > pq_set_guc_locked(self, - "default_transaction_isolation", "default", - &pgres, &error, &_save)) { - goto endlock; + if (self->isolevel != ISOLATION_LEVEL_DEFAULT) { + if (0 > pq_set_guc_locked(self, + "default_transaction_isolation", "default", + &pgres, &error, &_save)) { + goto endlock; + } } - if (0 > pq_set_guc_locked(self, - "default_transaction_read_only", "default", - &pgres, &error, &_save)) { - goto endlock; + if (self->readonly != STATE_DEFAULT) { + if (0 > pq_set_guc_locked(self, + "default_transaction_read_only", "default", + &pgres, &error, &_save)) { + goto endlock; + } } - if (self->server_version >= 90100) { + if (self->deferrable != STATE_DEFAULT) { if (0 > pq_set_guc_locked(self, "default_transaction_deferrable", "default", &pgres, &error, &_save)) {