Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitb099d9e

Browse files
committed
Reorder language creation to restore constistently.
Laurent FAILLIE
1 parent7a3e7b6 commitb099d9e

File tree

1 file changed

+30
-7
lines changed

1 file changed

+30
-7
lines changed

‎src/bin/pg_dump/pg_dump.c

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
*by PostgreSQL
1313
*
1414
* IDENTIFICATION
15-
* $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.322 2003/03/20 07:05:21 momjian Exp $
15+
* $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.323 2003/03/27 16:39:17 momjian Exp $
1616
*
1717
*-------------------------------------------------------------------------
1818
*/
@@ -605,6 +605,14 @@ main(int argc, char **argv)
605605

606606
/* Now sort the output nicely */
607607
SortTocByOID(g_fout);
608+
609+
/*
610+
* Procedural languages have to be declared just after
611+
* database and schema creation, before they are used.
612+
*/
613+
MoveToStart(g_fout,"ACL LANGUAGE");
614+
MoveToStart(g_fout,"PROCEDURAL LANGUAGE");
615+
MoveToStart(g_fout,"FUNC PROCEDURAL LANGUAGE");
608616
MoveToStart(g_fout,"SCHEMA");
609617
MoveToStart(g_fout,"DATABASE");
610618
MoveToEnd(g_fout,"TABLE DATA");
@@ -3626,7 +3634,7 @@ dumpProcLangs(Archive *fout, FuncInfo finfo[], int numFuncs)
36263634
{
36273635
char*tmp=strdup(fmtId(lanname));
36283636

3629-
dumpACL(fout,"LANGUAGE",tmp,lanname,
3637+
dumpACL(fout,"ACLLANGUAGE",tmp,lanname,
36303638
finfo[fidx].pronamespace->nspname,
36313639
NULL,lanacl,lanoid);
36323640
free(tmp);
@@ -3732,6 +3740,7 @@ dumpOneFunc(Archive *fout, FuncInfo *finfo)
37323740
char*prosecdef;
37333741
char*lanname;
37343742
char*rettypename;
3743+
char*funcproclang;/* Boolean : is this function a PLang handler ? */
37353744

37363745
if (finfo->dumped)
37373746
gotodone;
@@ -3747,7 +3756,8 @@ dumpOneFunc(Archive *fout, FuncInfo *finfo)
37473756
appendPQExpBuffer(query,
37483757
"SELECT proretset, prosrc, probin, "
37493758
"provolatile, proisstrict, prosecdef, "
3750-
"(SELECT lanname FROM pg_catalog.pg_language WHERE oid = prolang) as lanname "
3759+
"(SELECT lanname FROM pg_catalog.pg_language WHERE oid = prolang) as lanname, "
3760+
"exists (SELECT 'x' FROM pg_catalog.pg_language WHERE lanplcallfoid = pg_catalog.pg_proc.oid) as funcproclang "
37513761
"FROM pg_catalog.pg_proc "
37523762
"WHERE oid = '%s'::pg_catalog.oid",
37533763
finfo->oid);
@@ -3759,7 +3769,8 @@ dumpOneFunc(Archive *fout, FuncInfo *finfo)
37593769
"case when proiscachable then 'i' else 'v' end as provolatile, "
37603770
"proisstrict, "
37613771
"'f'::boolean as prosecdef, "
3762-
"(SELECT lanname FROM pg_language WHERE oid = prolang) as lanname "
3772+
"(SELECT lanname FROM pg_language WHERE oid = prolang) as lanname, "
3773+
"exists (SELECT 'x' FROM pg_language WHERE lanplcallfoid = pg_proc.oid) as funcproclang "
37633774
"FROM pg_proc "
37643775
"WHERE oid = '%s'::oid",
37653776
finfo->oid);
@@ -3771,7 +3782,8 @@ dumpOneFunc(Archive *fout, FuncInfo *finfo)
37713782
"case when proiscachable then 'i' else 'v' end as provolatile, "
37723783
"'f'::boolean as proisstrict, "
37733784
"'f'::boolean as prosecdef, "
3774-
"(SELECT lanname FROM pg_language WHERE oid = prolang) as lanname "
3785+
"(SELECT lanname FROM pg_language WHERE oid = prolang) as lanname, "
3786+
"exists (SELECT 'x' FROM pg_language WHERE lanplcallfoid = pg_proc.oid) as funcproclang "
37753787
"FROM pg_proc "
37763788
"WHERE oid = '%s'::oid",
37773789
finfo->oid);
@@ -3802,6 +3814,7 @@ dumpOneFunc(Archive *fout, FuncInfo *finfo)
38023814
proisstrict=PQgetvalue(res,0,PQfnumber(res,"proisstrict"));
38033815
prosecdef=PQgetvalue(res,0,PQfnumber(res,"prosecdef"));
38043816
lanname=PQgetvalue(res,0,PQfnumber(res,"lanname"));
3817+
funcproclang=PQgetvalue(res,0,PQfnumber(res,"funcproclang"));
38053818

38063819
/*
38073820
* See backend/commands/define.c for details of how the 'AS' clause is
@@ -3872,7 +3885,7 @@ dumpOneFunc(Archive *fout, FuncInfo *finfo)
38723885

38733886
ArchiveEntry(fout,finfo->oid,funcsig_tag,
38743887
finfo->pronamespace->nspname,
3875-
finfo->usename,"FUNCTION",NULL,
3888+
finfo->usename,strcmp(funcproclang,"t")?"FUNCTION":"FUNC PROCEDURAL LANGUAGE",NULL,
38763889
q->data,delqry->data,
38773890
NULL,NULL,NULL);
38783891

@@ -5024,11 +5037,21 @@ dumpACL(Archive *fout, const char *type, const char *name,
50245037
PQExpBuffersql,grantee,grantor,privs,privswgo;
50255038
boolfound_owner_privs= false;
50265039

5040+
/* acl_lang is a flag only true if we are dumping language's ACL,
5041+
* so we can set 'type' to a value that is suitable to build
5042+
* SQL requests as for other types.
5043+
*/
5044+
boolacl_lang= false;
5045+
if(!strcmp(type,"ACL LANGUAGE")){
5046+
type="LANGUAGE";
5047+
acl_lang= true;
5048+
}
5049+
50275050
if (strlen(acls)==0)
50285051
return;/* object has default permissions */
50295052

50305053
#defineMKENTRY(grantor,command) \
5031-
ArchiveEntry(fout, objoid, tag, nspname, grantor ? grantor : "", "ACL", NULL, command, "", NULL, NULL, NULL)
5054+
ArchiveEntry(fout, objoid, tag, nspname, grantor ? grantor : "",acl_lang ?"ACL LANGUAGE" : "ACL", NULL, command, "", NULL, NULL, NULL)
50325055

50335056
sql=createPQExpBuffer();
50345057
grantee=createPQExpBuffer();

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp