diff options
author | Robert Haas <rhaas@postgresql.org> | 2014-02-19 09:34:15 -0500 |
---|---|---|
committer | Robert Haas <rhaas@postgresql.org> | 2014-02-19 09:34:15 -0500 |
commit | 844a28a9dd1a48045ad1db9246da5e2783c9bd40 (patch) | |
tree | 1c392fd2b6891b62355f2a1e0d99a257547c24e9 /src/backend/utils/adt/pg_lsn.c | |
parent | 7d03a83f4d0736ba869fa6f93973f7623a27038a (diff) | |
download | postgresql-844a28a9dd1a48045ad1db9246da5e2783c9bd40.tar.gz postgresql-844a28a9dd1a48045ad1db9246da5e2783c9bd40.zip |
pg_lsn macro naming and type behavior revisions.
Change pg_lsn_mi so that it can return negative values when subtracting
LSNs, and clean up some perhaps ill-considered macro names.
Diffstat (limited to 'src/backend/utils/adt/pg_lsn.c')
-rw-r--r-- | src/backend/utils/adt/pg_lsn.c | 45 |
1 files changed, 22 insertions, 23 deletions
diff --git a/src/backend/utils/adt/pg_lsn.c b/src/backend/utils/adt/pg_lsn.c index 39e22931362..45f5131091c 100644 --- a/src/backend/utils/adt/pg_lsn.c +++ b/src/backend/utils/adt/pg_lsn.c @@ -50,13 +50,13 @@ pg_lsn_in(PG_FUNCTION_ARGS) off = (uint32) strtoul(str + len1 + 1, NULL, 16); result = (XLogRecPtr) ((uint64) id << 32) | off; - PG_RETURN_PG_LSN(result); + PG_RETURN_LSN(result); } Datum pg_lsn_out(PG_FUNCTION_ARGS) { - XLogRecPtr lsn = (XLogRecPtr) PG_GETARG_PG_LSN(0); + XLogRecPtr lsn = (XLogRecPtr) PG_GETARG_LSN(0); char buf[MAXPG_LSNLEN + 1]; char *result; uint32 id, off; @@ -77,13 +77,13 @@ pg_lsn_recv(PG_FUNCTION_ARGS) XLogRecPtr result; result = pq_getmsgint64(buf); - PG_RETURN_PG_LSN(result); + PG_RETURN_LSN(result); } Datum pg_lsn_send(PG_FUNCTION_ARGS) { - XLogRecPtr lsn = (XLogRecPtr) PG_GETARG_PG_LSN(0); + XLogRecPtr lsn = (XLogRecPtr) PG_GETARG_LSN(0); StringInfoData buf; pq_begintypsend(&buf); @@ -99,8 +99,8 @@ pg_lsn_send(PG_FUNCTION_ARGS) Datum pg_lsn_eq(PG_FUNCTION_ARGS) { - XLogRecPtr lsn1 = (XLogRecPtr) PG_GETARG_PG_LSN(0); - XLogRecPtr lsn2 = (XLogRecPtr) PG_GETARG_PG_LSN(1); + XLogRecPtr lsn1 = (XLogRecPtr) PG_GETARG_LSN(0); + XLogRecPtr lsn2 = (XLogRecPtr) PG_GETARG_LSN(1); PG_RETURN_BOOL(lsn1 == lsn2); } @@ -108,8 +108,8 @@ pg_lsn_eq(PG_FUNCTION_ARGS) Datum pg_lsn_ne(PG_FUNCTION_ARGS) { - XLogRecPtr lsn1 = (XLogRecPtr) PG_GETARG_PG_LSN(0); - XLogRecPtr lsn2 = (XLogRecPtr) PG_GETARG_PG_LSN(1); + XLogRecPtr lsn1 = (XLogRecPtr) PG_GETARG_LSN(0); + XLogRecPtr lsn2 = (XLogRecPtr) PG_GETARG_LSN(1); PG_RETURN_BOOL(lsn1 != lsn2); } @@ -117,8 +117,8 @@ pg_lsn_ne(PG_FUNCTION_ARGS) Datum pg_lsn_lt(PG_FUNCTION_ARGS) { - XLogRecPtr lsn1 = (XLogRecPtr) PG_GETARG_PG_LSN(0); - XLogRecPtr lsn2 = (XLogRecPtr) PG_GETARG_PG_LSN(1); + XLogRecPtr lsn1 = (XLogRecPtr) PG_GETARG_LSN(0); + XLogRecPtr lsn2 = (XLogRecPtr) PG_GETARG_LSN(1); PG_RETURN_BOOL(lsn1 < lsn2); } @@ -126,8 +126,8 @@ pg_lsn_lt(PG_FUNCTION_ARGS) Datum pg_lsn_gt(PG_FUNCTION_ARGS) { - XLogRecPtr lsn1 = (XLogRecPtr) PG_GETARG_PG_LSN(0); - XLogRecPtr lsn2 = (XLogRecPtr) PG_GETARG_PG_LSN(1); + XLogRecPtr lsn1 = (XLogRecPtr) PG_GETARG_LSN(0); + XLogRecPtr lsn2 = (XLogRecPtr) PG_GETARG_LSN(1); PG_RETURN_BOOL(lsn1 > lsn2); } @@ -135,8 +135,8 @@ pg_lsn_gt(PG_FUNCTION_ARGS) Datum pg_lsn_le(PG_FUNCTION_ARGS) { - XLogRecPtr lsn1 = (XLogRecPtr) PG_GETARG_PG_LSN(0); - XLogRecPtr lsn2 = (XLogRecPtr) PG_GETARG_PG_LSN(1); + XLogRecPtr lsn1 = (XLogRecPtr) PG_GETARG_LSN(0); + XLogRecPtr lsn2 = (XLogRecPtr) PG_GETARG_LSN(1); PG_RETURN_BOOL(lsn1 <= lsn2); } @@ -144,8 +144,8 @@ pg_lsn_le(PG_FUNCTION_ARGS) Datum pg_lsn_ge(PG_FUNCTION_ARGS) { - XLogRecPtr lsn1 = (XLogRecPtr) PG_GETARG_PG_LSN(0); - XLogRecPtr lsn2 = (XLogRecPtr) PG_GETARG_PG_LSN(1); + XLogRecPtr lsn1 = (XLogRecPtr) PG_GETARG_LSN(0); + XLogRecPtr lsn2 = (XLogRecPtr) PG_GETARG_LSN(1); PG_RETURN_BOOL(lsn1 >= lsn2); } @@ -158,19 +158,18 @@ pg_lsn_ge(PG_FUNCTION_ARGS) Datum pg_lsn_mi(PG_FUNCTION_ARGS) { - XLogRecPtr lsn1 = (XLogRecPtr) PG_GETARG_PG_LSN(0); - XLogRecPtr lsn2 = (XLogRecPtr) PG_GETARG_PG_LSN(1); + XLogRecPtr lsn1 = (XLogRecPtr) PG_GETARG_LSN(0); + XLogRecPtr lsn2 = (XLogRecPtr) PG_GETARG_LSN(1); char buf[256]; Datum result; - /* Negative results are not allowed. */ + /* Output could be as large as plus or minus 2^63 - 1. */ if (lsn1 < lsn2) - ereport(ERROR, - (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), - errmsg("transaction log location out of range"))); + snprintf(buf, sizeof buf, "-" UINT64_FORMAT, lsn2 - lsn1); + else + snprintf(buf, sizeof buf, UINT64_FORMAT, lsn1 - lsn2); /* Convert to numeric. */ - snprintf(buf, sizeof buf, UINT64_FORMAT, lsn1 - lsn2); result = DirectFunctionCall3(numeric_in, CStringGetDatum(buf), ObjectIdGetDatum(0), |