statement be a list of bare C strings, rather than String nodes, which is
what they need to be for copyfuncs/equalfuncs to work. Fortunately these
node types never go out to disk (if they did, we'd likely have noticed the
problem sooner), so we can just fix it without creating a need for initdb.
This bug has been there since 8.0, but 8.3 exposes it in a more common
code path (Parse messages) than prior releases did. Per bug #3940 from
Vladimir Kokovic.
break;
case OBJECT_DATABASE:
- AlterDatabaseOwner((char *) linitial(stmt->object), newowner);
+ AlterDatabaseOwner(strVal(linitial(stmt->object)), newowner);
break;
case OBJECT_FUNCTION:
break;
case OBJECT_SCHEMA:
- AlterSchemaOwner((char *) linitial(stmt->object), newowner);
+ AlterSchemaOwner(strVal(linitial(stmt->object)), newowner);
break;
case OBJECT_TABLESPACE:
- AlterTableSpaceOwner((char *) linitial(stmt->object), newowner);
+ AlterTableSpaceOwner(strVal(linitial(stmt->object)), newowner);
break;
case OBJECT_TYPE:
{
AlterOwnerStmt *n = makeNode(AlterOwnerStmt);
n->objectType = OBJECT_DATABASE;
- n->object = list_make1($3);
+ n->object = list_make1(makeString($3));
n->newowner = $6;
$$ = (Node *)n;
}
{
AlterOwnerStmt *n = makeNode(AlterOwnerStmt);
n->objectType = OBJECT_SCHEMA;
- n->object = list_make1($3);
+ n->object = list_make1(makeString($3));
n->newowner = $6;
$$ = (Node *)n;
}
{
AlterOwnerStmt *n = makeNode(AlterOwnerStmt);
n->objectType = OBJECT_TABLESPACE;
- n->object = list_make1($3);
+ n->object = list_make1(makeString($3));
n->newowner = $6;
$$ = (Node *)n;
}