mirror of
https://github.com/psycopg/psycopg2.git
synced 2025-02-07 21:00:33 +03:00
Make asynchronous connections always use autocommit
Clients using async connections are expected to do their own transaction management by sending (asynchronously) BEGIN and COMMIT statements. As a bonus, it allows to drop one step from the async connection building, namely getting the default isolation level from the server.
This commit is contained in:
parent
062a9602ae
commit
d8ab5ac8a1
|
@ -48,9 +48,6 @@ extern "C" {
|
||||||
#define CONN_STATUS_SEND_CLIENT_ENCODING 8
|
#define CONN_STATUS_SEND_CLIENT_ENCODING 8
|
||||||
#define CONN_STATUS_SENT_CLIENT_ENCODING 9
|
#define CONN_STATUS_SENT_CLIENT_ENCODING 9
|
||||||
#define CONN_STATUS_GET_CLIENT_ENCODING 10
|
#define CONN_STATUS_GET_CLIENT_ENCODING 10
|
||||||
#define CONN_STATUS_SEND_TRANSACTION_ISOLATION 11
|
|
||||||
#define CONN_STATUS_SENT_TRANSACTION_ISOLATION 12
|
|
||||||
#define CONN_STATUS_GET_TRANSACTION_ISOLATION 13
|
|
||||||
|
|
||||||
/* async query execution status */
|
/* async query execution status */
|
||||||
#define ASYNC_READ 1
|
#define ASYNC_READ 1
|
||||||
|
|
|
@ -404,11 +404,6 @@ conn_poll_send(connectionObject *self)
|
||||||
query = psyco_client_encoding;
|
query = psyco_client_encoding;
|
||||||
next_status = CONN_STATUS_SENT_CLIENT_ENCODING;
|
next_status = CONN_STATUS_SENT_CLIENT_ENCODING;
|
||||||
break;
|
break;
|
||||||
case CONN_STATUS_SEND_TRANSACTION_ISOLATION:
|
|
||||||
/* get the default isolevel */
|
|
||||||
query = psyco_transaction_isolation;
|
|
||||||
next_status = CONN_STATUS_SENT_TRANSACTION_ISOLATION;
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
/* unexpected state, error out */
|
/* unexpected state, error out */
|
||||||
PyErr_Format(OperationalError,
|
PyErr_Format(OperationalError,
|
||||||
|
@ -444,9 +439,6 @@ conn_poll_send(connectionObject *self)
|
||||||
case CONN_STATUS_SENT_CLIENT_ENCODING:
|
case CONN_STATUS_SENT_CLIENT_ENCODING:
|
||||||
next_status = CONN_STATUS_GET_CLIENT_ENCODING;
|
next_status = CONN_STATUS_GET_CLIENT_ENCODING;
|
||||||
break;
|
break;
|
||||||
case CONN_STATUS_SENT_TRANSACTION_ISOLATION:
|
|
||||||
next_status = CONN_STATUS_GET_TRANSACTION_ISOLATION;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -526,17 +518,17 @@ conn_poll_fetch(connectionObject *self)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
Dprintf("conn_poll_fetch: got client_encoding %s", self->encoding);
|
Dprintf("conn_poll_fetch: got client_encoding %s", self->encoding);
|
||||||
next_status = CONN_STATUS_SEND_TRANSACTION_ISOLATION;
|
|
||||||
}
|
|
||||||
else if (self->status == CONN_STATUS_GET_TRANSACTION_ISOLATION) {
|
|
||||||
/* got the default isolevel */
|
|
||||||
self->isolation_level = conn_get_isolation_level(pgres);
|
|
||||||
Dprintf("conn_poll_fetch: got isolevel %ld", self->isolation_level);
|
|
||||||
|
|
||||||
/* since this is the last step, set the other instance variables now */
|
/* since this is the last step, set the other instance variables now */
|
||||||
self->equote = conn_get_standard_conforming_strings(self->pgconn);
|
self->equote = conn_get_standard_conforming_strings(self->pgconn);
|
||||||
self->protocol = conn_get_protocol_version(self->pgconn);
|
self->protocol = conn_get_protocol_version(self->pgconn);
|
||||||
self->server_version = (int) PQserverVersion(self->pgconn);
|
self->server_version = (int) PQserverVersion(self->pgconn);
|
||||||
|
/*
|
||||||
|
* asynchronous connections always use isolation level 0, the user is
|
||||||
|
* expected to manage the transactions himself, by sending
|
||||||
|
* (asynchronously) BEGIN and COMMIT statements.
|
||||||
|
*/
|
||||||
|
self->isolation_level = 0;
|
||||||
|
|
||||||
Py_BEGIN_ALLOW_THREADS;
|
Py_BEGIN_ALLOW_THREADS;
|
||||||
pthread_mutex_lock(&(self->lock));
|
pthread_mutex_lock(&(self->lock));
|
||||||
|
|
|
@ -421,14 +421,12 @@ psyco_conn_poll(connectionObject *self)
|
||||||
|
|
||||||
case CONN_STATUS_SEND_DATESTYLE:
|
case CONN_STATUS_SEND_DATESTYLE:
|
||||||
case CONN_STATUS_SEND_CLIENT_ENCODING:
|
case CONN_STATUS_SEND_CLIENT_ENCODING:
|
||||||
case CONN_STATUS_SEND_TRANSACTION_ISOLATION:
|
|
||||||
/* these mean that we need to wait for the socket to become writable
|
/* these mean that we need to wait for the socket to become writable
|
||||||
to send the rest of our query */
|
to send the rest of our query */
|
||||||
return conn_poll_send(self);
|
return conn_poll_send(self);
|
||||||
|
|
||||||
case CONN_STATUS_GET_DATESTYLE:
|
case CONN_STATUS_GET_DATESTYLE:
|
||||||
case CONN_STATUS_GET_CLIENT_ENCODING:
|
case CONN_STATUS_GET_CLIENT_ENCODING:
|
||||||
case CONN_STATUS_GET_TRANSACTION_ISOLATION:
|
|
||||||
/* these mean that we are waiting for the results of the queries */
|
/* these mean that we are waiting for the results of the queries */
|
||||||
return conn_poll_fetch(self);
|
return conn_poll_fetch(self);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user