From 26b7abfa32b657e21911e82b38eeb8fc81c9dc77 Mon Sep 17 00:00:00 2001 From: Robert Haas Date: Sun, 13 Jun 2010 17:43:13 +0000 Subject: Fix ALTER LARGE OBJECT and GRANT ... ON LARGE OBJECT for large OIDs. The previous coding failed for OIDs too large to be represented by a signed integer. --- src/backend/utils/adt/oid.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'src/backend/utils/adt/oid.c') diff --git a/src/backend/utils/adt/oid.c b/src/backend/utils/adt/oid.c index 6f59fc5be1f..ba86625e271 100644 --- a/src/backend/utils/adt/oid.c +++ b/src/backend/utils/adt/oid.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/adt/oid.c,v 1.76 2010/01/02 16:57:54 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/utils/adt/oid.c,v 1.77 2010/06/13 17:43:13 rhaas Exp $ * *------------------------------------------------------------------------- */ @@ -303,6 +303,28 @@ oidvectorsend(PG_FUNCTION_ARGS) return array_send(fcinfo); } +/* + * oidparse - get OID from IConst/FConst node + */ +Oid +oidparse(Node *node) +{ + switch (nodeTag(node)) + { + case T_Integer: + return intVal(node); + case T_Float: + /* + * Values too large for int4 will be represented as Float constants + * by the lexer. Accept these if they are valid OID strings. + */ + return oidin_subr(strVal(node), NULL); + default: + elog(ERROR, "unrecognized node type: %d", (int) nodeTag(node)); + } + return InvalidOid; /* keep compiler quiet */ +} + /***************************************************************************** * PUBLIC ROUTINES * -- cgit v1.2.3