* by PostgreSQL
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.322 2003/03/20 07:05:21 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.323 2003/03/27 16:39:17 momjian Exp $
*
*-------------------------------------------------------------------------
*/
/* Now sort the output nicely */
SortTocByOID(g_fout);
+
+ /*
+ * Procedural languages have to be declared just after
+ * database and schema creation, before they are used.
+ */
+ MoveToStart(g_fout, "ACL LANGUAGE");
+ MoveToStart(g_fout, "PROCEDURAL LANGUAGE");
+ MoveToStart(g_fout, "FUNC PROCEDURAL LANGUAGE");
MoveToStart(g_fout, "SCHEMA");
MoveToStart(g_fout, "DATABASE");
MoveToEnd(g_fout, "TABLE DATA");
{
char *tmp = strdup(fmtId(lanname));
- dumpACL(fout, "LANGUAGE", tmp, lanname,
+ dumpACL(fout, "ACL LANGUAGE", tmp, lanname,
finfo[fidx].pronamespace->nspname,
NULL, lanacl, lanoid);
free(tmp);
char *prosecdef;
char *lanname;
char *rettypename;
+ char *funcproclang; /* Boolean : is this function a PLang handler ? */
if (finfo->dumped)
goto done;
appendPQExpBuffer(query,
"SELECT proretset, prosrc, probin, "
"provolatile, proisstrict, prosecdef, "
- "(SELECT lanname FROM pg_catalog.pg_language WHERE oid = prolang) as lanname "
+ "(SELECT lanname FROM pg_catalog.pg_language WHERE oid = prolang) as lanname, "
+ "exists (SELECT 'x' FROM pg_catalog.pg_language WHERE lanplcallfoid = pg_catalog.pg_proc.oid) as funcproclang "
"FROM pg_catalog.pg_proc "
"WHERE oid = '%s'::pg_catalog.oid",
finfo->oid);
"case when proiscachable then 'i' else 'v' end as provolatile, "
"proisstrict, "
"'f'::boolean as prosecdef, "
- "(SELECT lanname FROM pg_language WHERE oid = prolang) as lanname "
+ "(SELECT lanname FROM pg_language WHERE oid = prolang) as lanname, "
+ "exists (SELECT 'x' FROM pg_language WHERE lanplcallfoid = pg_proc.oid) as funcproclang "
"FROM pg_proc "
"WHERE oid = '%s'::oid",
finfo->oid);
"case when proiscachable then 'i' else 'v' end as provolatile, "
"'f'::boolean as proisstrict, "
"'f'::boolean as prosecdef, "
- "(SELECT lanname FROM pg_language WHERE oid = prolang) as lanname "
+ "(SELECT lanname FROM pg_language WHERE oid = prolang) as lanname, "
+ "exists (SELECT 'x' FROM pg_language WHERE lanplcallfoid = pg_proc.oid) as funcproclang "
"FROM pg_proc "
"WHERE oid = '%s'::oid",
finfo->oid);
proisstrict = PQgetvalue(res, 0, PQfnumber(res, "proisstrict"));
prosecdef = PQgetvalue(res, 0, PQfnumber(res, "prosecdef"));
lanname = PQgetvalue(res, 0, PQfnumber(res, "lanname"));
+ funcproclang = PQgetvalue(res, 0, PQfnumber(res, "funcproclang"));
/*
* See backend/commands/define.c for details of how the 'AS' clause is
ArchiveEntry(fout, finfo->oid, funcsig_tag,
finfo->pronamespace->nspname,
- finfo->usename, "FUNCTION", NULL,
+ finfo->usename, strcmp(funcproclang,"t")?"FUNCTION":"FUNC PROCEDURAL LANGUAGE", NULL,
q->data, delqry->data,
NULL, NULL, NULL);
PQExpBuffer sql, grantee, grantor, privs, privswgo;
bool found_owner_privs = false;
+ /* acl_lang is a flag only true if we are dumping language's ACL,
+ * so we can set 'type' to a value that is suitable to build
+ * SQL requests as for other types.
+ */
+ bool acl_lang = false;
+ if(!strcmp(type,"ACL LANGUAGE")){
+ type = "LANGUAGE";
+ acl_lang = true;
+ }
+
if (strlen(acls) == 0)
return; /* object has default permissions */
#define MKENTRY(grantor, command) \
- ArchiveEntry(fout, objoid, tag, nspname, grantor ? grantor : "", "ACL", NULL, command, "", NULL, NULL, NULL)
+ ArchiveEntry(fout, objoid, tag, nspname, grantor ? grantor : "", acl_lang ? "ACL LANGUAGE" : "ACL" , NULL, command, "", NULL, NULL, NULL)
sql = createPQExpBuffer();
grantee = createPQExpBuffer();