mirror of
https://github.com/postgres/postgres.git
synced 2025-07-14 08:21:07 +03:00
Support column-level privileges, as required by SQL standard.
Stephen Frost, with help from KaiGai Kohei and others
This commit is contained in:
@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/nodes/readfuncs.c,v 1.220 2009/01/01 17:23:43 momjian Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/nodes/readfuncs.c,v 1.221 2009/01/22 20:16:04 tgl Exp $
|
||||
*
|
||||
* NOTES
|
||||
* Path and Plan nodes do not have any readfuncs support, because we
|
||||
@ -114,6 +114,11 @@
|
||||
token = pg_strtok(&length); /* skip :fldname */ \
|
||||
local_node->fldname = nodeRead(NULL, 0)
|
||||
|
||||
/* Read a bitmapset field */
|
||||
#define READ_BITMAPSET_FIELD(fldname) \
|
||||
token = pg_strtok(&length); /* skip :fldname */ \
|
||||
local_node->fldname = _readBitmapset()
|
||||
|
||||
/* Routine exit */
|
||||
#define READ_DONE() \
|
||||
return local_node
|
||||
@ -137,6 +142,46 @@
|
||||
|
||||
static Datum readDatum(bool typbyval);
|
||||
|
||||
/*
|
||||
* _readBitmapset
|
||||
*/
|
||||
static Bitmapset *
|
||||
_readBitmapset(void)
|
||||
{
|
||||
Bitmapset *result = NULL;
|
||||
READ_TEMP_LOCALS();
|
||||
|
||||
token = pg_strtok(&length);
|
||||
if (token == NULL)
|
||||
elog(ERROR, "incomplete Bitmapset structure");
|
||||
if (length != 1 || token[0] != '(')
|
||||
elog(ERROR, "unrecognized token: \"%.*s\"", length, token);
|
||||
|
||||
token = pg_strtok(&length);
|
||||
if (token == NULL)
|
||||
elog(ERROR, "incomplete Bitmapset structure");
|
||||
if (length != 1 || token[0] != 'b')
|
||||
elog(ERROR, "unrecognized token: \"%.*s\"", length, token);
|
||||
|
||||
for (;;)
|
||||
{
|
||||
int val;
|
||||
char *endptr;
|
||||
|
||||
token = pg_strtok(&length);
|
||||
if (token == NULL)
|
||||
elog(ERROR, "unterminated Bitmapset structure");
|
||||
if (length == 1 && token[0] == ')')
|
||||
break;
|
||||
val = (int) strtol(token, &endptr, 10);
|
||||
if (endptr != token + length)
|
||||
elog(ERROR, "unrecognized integer: \"%.*s\"", length, token);
|
||||
result = bms_add_member(result, val);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* _readQuery
|
||||
@ -1102,6 +1147,8 @@ _readRangeTblEntry(void)
|
||||
READ_BOOL_FIELD(inFromCl);
|
||||
READ_UINT_FIELD(requiredPerms);
|
||||
READ_OID_FIELD(checkAsUser);
|
||||
READ_BITMAPSET_FIELD(selectedCols);
|
||||
READ_BITMAPSET_FIELD(modifiedCols);
|
||||
|
||||
READ_DONE();
|
||||
}
|
||||
|
Reference in New Issue
Block a user