1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-05 07:21:24 +03:00

Turn transaction_isolation into GUC enum

It was previously a string setting that was converted into an enum by
custom code, but using the GUC enum facility seems much simpler and
doesn't change any functionality, except that

    set transaction_isolation='default';

no longer works, but that was never documented and doesn't work with
any other transaction characteristics.  (Note that this is not the
same as RESET or SET TO DEFAULT, which still work.)

Reviewed-by: Heikki Linnakangas <hlinnaka@iki.fi>
Discussion: https://www.postgresql.org/message-id/457db615-e84c-4838-310e-43841eb806e5@iki.fi
This commit is contained in:
Peter Eisentraut
2018-10-09 21:21:57 +02:00
parent b6b297d20d
commit f8c10f616f
3 changed files with 15 additions and 71 deletions

View File

@ -522,32 +522,9 @@ check_transaction_read_only(bool *newval, void **extra, GucSource source)
* As in check_transaction_read_only, allow it if not inside a transaction.
*/
bool
check_XactIsoLevel(char **newval, void **extra, GucSource source)
check_XactIsoLevel(int *newval, void **extra, GucSource source)
{
int newXactIsoLevel;
if (strcmp(*newval, "serializable") == 0)
{
newXactIsoLevel = XACT_SERIALIZABLE;
}
else if (strcmp(*newval, "repeatable read") == 0)
{
newXactIsoLevel = XACT_REPEATABLE_READ;
}
else if (strcmp(*newval, "read committed") == 0)
{
newXactIsoLevel = XACT_READ_COMMITTED;
}
else if (strcmp(*newval, "read uncommitted") == 0)
{
newXactIsoLevel = XACT_READ_UNCOMMITTED;
}
else if (strcmp(*newval, "default") == 0)
{
newXactIsoLevel = DefaultXactIsoLevel;
}
else
return false;
int newXactIsoLevel = *newval;
if (newXactIsoLevel != XactIsoLevel && IsTransactionState())
{
@ -574,39 +551,9 @@ check_XactIsoLevel(char **newval, void **extra, GucSource source)
}
}
*extra = malloc(sizeof(int));
if (!*extra)
return false;
*((int *) *extra) = newXactIsoLevel;
return true;
}
void
assign_XactIsoLevel(const char *newval, void *extra)
{
XactIsoLevel = *((int *) extra);
}
const char *
show_XactIsoLevel(void)
{
/* We need this because we don't want to show "default". */
switch (XactIsoLevel)
{
case XACT_READ_UNCOMMITTED:
return "read uncommitted";
case XACT_READ_COMMITTED:
return "read committed";
case XACT_REPEATABLE_READ:
return "repeatable read";
case XACT_SERIALIZABLE:
return "serializable";
default:
return "bogus";
}
}
/*
* SET TRANSACTION [NOT] DEFERRABLE
*/