@ -234,9 +234,9 @@ static char *format_function_arguments_old(Archive *fout,
char * * argnames ) ;
static char * format_function_signature ( Archive * fout ,
FuncInfo * finfo , bool honor_quotes ) ;
static const char * convertRegProcReference ( Archive * fout ,
static char * convertRegProcReference ( Archive * fout ,
const char * proc ) ;
static const char * convertOperatorReference ( Archive * fout , const char * opr ) ;
static char * convertOperatorReference ( Archive * fout , const char * opr ) ;
static const char * convertTSFunction ( Archive * fout , Oid funcOid ) ;
static Oid findLastBuiltinOid_V71 ( Archive * fout , const char * ) ;
static Oid findLastBuiltinOid_V70 ( Archive * fout ) ;
@ -10246,6 +10246,8 @@ dumpOpr(Archive *fout, OprInfo *oprinfo)
char * oprjoin ;
char * oprcanmerge ;
char * oprcanhash ;
char * oprregproc ;
char * oprref ;
/* Skip if not to be dumped */
if ( ! oprinfo - > dobj . dump | | dataOnly )
@ -10352,8 +10354,12 @@ dumpOpr(Archive *fout, OprInfo *oprinfo)
oprcanmerge = PQgetvalue ( res , 0 , i_oprcanmerge ) ;
oprcanhash = PQgetvalue ( res , 0 , i_oprcanhash ) ;
appendPQExpBuffer ( details , " PROCEDURE = %s " ,
convertRegProcReference ( fout , oprcode ) ) ;
oprregproc = convertRegProcReference ( fout , oprcode ) ;
if ( oprregproc )
{
appendPQExpBuffer ( details , " PROCEDURE = %s " , oprregproc ) ;
free ( oprregproc ) ;
}
appendPQExpBuffer ( oprid , " %s ( " ,
oprinfo - > dobj . name ) ;
@ -10388,13 +10394,19 @@ dumpOpr(Archive *fout, OprInfo *oprinfo)
else
appendPQExpBufferStr ( oprid , " , NONE) " ) ;
name = convertOperatorReference ( fout , oprcom ) ;
if ( name )
appendPQExpBuffer ( details , " , \n COMMUTATOR = %s " , name ) ;
oprref = convertOperatorReference ( fout , oprcom ) ;
if ( oprref )
{
appendPQExpBuffer ( details , " , \n COMMUTATOR = %s " , oprref ) ;
free ( oprref ) ;
}
name = convertOperatorReference ( fout , oprnegate ) ;
if ( name )
appendPQExpBuffer ( details , " , \n NEGATOR = %s " , name ) ;
oprref = convertOperatorReference ( fout , oprnegate ) ;
if ( oprref )
{
appendPQExpBuffer ( details , " , \n NEGATOR = %s " , oprref ) ;
free ( oprref ) ;
}
if ( strcmp ( oprcanmerge , " t " ) = = 0 )
appendPQExpBufferStr ( details , " , \n MERGES " ) ;
@ -10402,13 +10414,19 @@ dumpOpr(Archive *fout, OprInfo *oprinfo)
if ( strcmp ( oprcanhash , " t " ) = = 0 )
appendPQExpBufferStr ( details , " , \n HASHES " ) ;
name = convertRegProcReference ( fout , oprrest ) ;
if ( name )
appendPQExpBuffer ( details , " , \n RESTRICT = %s " , name ) ;
oprregproc = convertRegProcReference ( fout , oprrest ) ;
if ( oprregproc )
{
appendPQExpBuffer ( details , " , \n RESTRICT = %s " , oprregproc ) ;
free ( oprregproc ) ;
}
name = convertRegProcReference ( fout , oprjoin ) ;
if ( name )
appendPQExpBuffer ( details , " , \n JOIN = %s " , name ) ;
oprregproc = convertRegProcReference ( fout , oprjoin ) ;
if ( oprregproc )
{
appendPQExpBuffer ( details , " , \n JOIN = %s " , oprregproc ) ;
free ( oprregproc ) ;
}
/*
* DROP must be fully qualified in case same name appears in pg_catalog
@ -10453,12 +10471,13 @@ dumpOpr(Archive *fout, OprInfo *oprinfo)
/*
* Convert a function reference obtained from pg_operator
*
* Returns what to print , or NULL if function references is InvalidOid
* Returns allocated string of what to print , or NULL if function references
* is InvalidOid . Returned string is expected to be free ' d by the caller .
*
* In 7.3 the input is a REGPROCEDURE display ; we have to strip the
* argument - types part . In prior versions , the input is a REGPROC display .
*/
static const char *
static char *
convertRegProcReference ( Archive * fout , const char * proc )
{
/* In all cases "-" means a null reference */
@ -10488,20 +10507,21 @@ convertRegProcReference(Archive *fout, const char *proc)
}
/* REGPROC before 7.3 does not quote its result */
return fmtId ( proc ) ;
return pg_strdup ( fmtId ( proc ) ) ;
}
/*
* Convert an operator cross - reference obtained from pg_operator
*
* Returns what to print , or NULL to print nothing
* Returns an allocated string of what to print , or NULL to print nothing .
* Caller is responsible for free ' ing result string .
*
* In 7.3 and up the input is a REGOPERATOR display ; we have to strip the
* argument - types part , and add OPERATOR ( ) decoration if the name is
* schema - qualified . In older versions , the input is just a numeric OID ,
* which we search our operator list for .
*/
static const char *
static char *
convertOperatorReference ( Archive * fout , const char * opr )
{
OprInfo * oprInfo ;
@ -10549,7 +10569,7 @@ convertOperatorReference(Archive *fout, const char *opr)
opr ) ;
return NULL ;
}
return oprInfo - > dobj . name ;
return pg_strdup ( oprInfo - > dobj . name ) ;
}
/*
@ -11522,6 +11542,7 @@ dumpAgg(Archive *fout, AggInfo *agginfo)
const char * aggtransfn ;
const char * aggfinalfn ;
const char * aggsortop ;
char * aggsortconvop ;
bool hypothetical ;
const char * aggtranstype ;
const char * aggtransspace ;
@ -11665,6 +11686,12 @@ dumpAgg(Archive *fout, AggInfo *agginfo)
{
write_msg ( NULL , " WARNING: aggregate function %s could not be dumped correctly for this database version; ignored \n " ,
aggsig ) ;
if ( aggfullsig )
free ( aggfullsig ) ;
free ( aggsig ) ;
return ;
}
@ -11709,11 +11736,12 @@ dumpAgg(Archive *fout, AggInfo *agginfo)
aggfinalfn ) ;
}
aggsortop = convertOperatorReference ( fout , aggsortop ) ;
if ( aggsortop )
aggsortconv op = convertOperatorReference ( fout , aggsortop ) ;
if ( aggsortconv op )
{
appendPQExpBuffer ( details , " , \n SORTOP = %s " ,
aggsortop ) ;
aggsortconvop ) ;
free ( aggsortconvop ) ;
}
if ( hypothetical )
@ -12413,6 +12441,7 @@ dumpUserMappings(Archive *fout,
destroyPQExpBuffer ( query ) ;
destroyPQExpBuffer ( delq ) ;
destroyPQExpBuffer ( tag ) ;
destroyPQExpBuffer ( q ) ;
}