@ -112,7 +112,10 @@ describeAggregates(const char *pattern, bool verbose, bool showSystem)
" n.nspname " , " p.proname " , NULL ,
" pg_catalog.pg_function_is_visible(p.oid) " ,
NULL , 3 ) )
{
termPQExpBuffer ( & buf ) ;
return false ;
}
appendPQExpBufferStr ( & buf , " ORDER BY 1, 2, 4; " ) ;
@ -182,7 +185,10 @@ describeAccessMethods(const char *pattern, bool verbose)
NULL , " amname " , NULL ,
NULL ,
NULL , 1 ) )
{
termPQExpBuffer ( & buf ) ;
return false ;
}
appendPQExpBufferStr ( & buf , " ORDER BY 1; " ) ;
@ -244,7 +250,10 @@ describeTablespaces(const char *pattern, bool verbose)
NULL , " spcname " , NULL ,
NULL ,
NULL , 1 ) )
{
termPQExpBuffer ( & buf ) ;
return false ;
}
appendPQExpBufferStr ( & buf , " ORDER BY 1; " ) ;
@ -534,7 +543,7 @@ describeFunctions(const char *functypes, const char *func_pattern,
" n.nspname " , " p.proname " , NULL ,
" pg_catalog.pg_function_is_visible(p.oid) " ,
NULL , 3 ) )
return false ;
goto error_return ;
for ( int i = 0 ; i < num_arg_patterns ; i + + )
{
@ -561,7 +570,7 @@ describeFunctions(const char *functypes, const char *func_pattern,
true , false ,
nspname , typname , ft , tiv ,
NULL , 3 ) )
return false ;
goto error_return ;
}
else
{
@ -599,6 +608,10 @@ describeFunctions(const char *functypes, const char *func_pattern,
PQclear ( res ) ;
return true ;
error_return :
termPQExpBuffer ( & buf ) ;
return false ;
}
@ -682,7 +695,10 @@ describeTypes(const char *pattern, bool verbose, bool showSystem)
" pg_catalog.format_type(t.oid, NULL) " ,
" pg_catalog.pg_type_is_visible(t.oid) " ,
NULL , 3 ) )
{
termPQExpBuffer ( & buf ) ;
return false ;
}
appendPQExpBufferStr ( & buf , " ORDER BY 1, 2; " ) ;
@ -836,7 +852,7 @@ describeOperators(const char *oper_pattern,
" n.nspname " , " o.oprname " , NULL ,
" pg_catalog.pg_operator_is_visible(o.oid) " ,
NULL , 3 ) )
return false ;
goto error_return ;
if ( num_arg_patterns = = 1 )
appendPQExpBufferStr ( & buf , " AND o.oprleft = 0 \n " ) ;
@ -866,7 +882,7 @@ describeOperators(const char *oper_pattern,
true , false ,
nspname , typname , ft , tiv ,
NULL , 3 ) )
return false ;
goto error_return ;
}
else
{
@ -890,6 +906,10 @@ describeOperators(const char *oper_pattern,
PQclear ( res ) ;
return true ;
error_return :
termPQExpBuffer ( & buf ) ;
return false ;
}
@ -950,10 +970,15 @@ listAllDbs(const char *pattern, bool verbose)
" JOIN pg_catalog.pg_tablespace t on d.dattablespace = t.oid \n " ) ;
if ( pattern )
{
if ( ! validateSQLNamePattern ( & buf , pattern , false , false ,
NULL , " d.datname " , NULL , NULL ,
NULL , 1 ) )
{
termPQExpBuffer ( & buf ) ;
return false ;
}
}
appendPQExpBufferStr ( & buf , " ORDER BY 1; " ) ;
res = PSQLexec ( buf . data ) ;
@ -1106,16 +1131,13 @@ permissionsList(const char *pattern)
" n.nspname " , " c.relname " , NULL ,
" n.nspname !~ '^pg_' AND pg_catalog.pg_table_is_visible(c.oid) " ,
NULL , 3 ) )
return false ;
goto error_return ;
appendPQExpBufferStr ( & buf , " ORDER BY 1, 2; " ) ;
res = PSQLexec ( buf . data ) ;
if ( ! res )
{
termPQExpBuffer ( & buf ) ;
return false ;
}
goto error_return ;
myopt . nullPrint = NULL ;
printfPQExpBuffer ( & buf , _ ( " Access privileges " ) ) ;
@ -1129,6 +1151,10 @@ permissionsList(const char *pattern)
termPQExpBuffer ( & buf ) ;
PQclear ( res ) ;
return true ;
error_return :
termPQExpBuffer ( & buf ) ;
return false ;
}
@ -1177,16 +1203,13 @@ listDefaultACLs(const char *pattern)
" pg_catalog.pg_get_userbyid(d.defaclrole) " ,
NULL ,
NULL , 3 ) )
return false ;
goto error_return ;
appendPQExpBufferStr ( & buf , " ORDER BY 1, 2, 3; " ) ;
res = PSQLexec ( buf . data ) ;
if ( ! res )
{
termPQExpBuffer ( & buf ) ;
return false ;
}
goto error_return ;
myopt . nullPrint = NULL ;
printfPQExpBuffer ( & buf , _ ( " Default access privileges " ) ) ;
@ -1200,6 +1223,10 @@ listDefaultACLs(const char *pattern)
termPQExpBuffer ( & buf ) ;
PQclear ( res ) ;
return true ;
error_return :
termPQExpBuffer ( & buf ) ;
return false ;
}
@ -1253,7 +1280,7 @@ objectDescription(const char *pattern, bool showSystem)
false , " n.nspname " , " pgc.conname " , NULL ,
" pg_catalog.pg_table_is_visible(c.oid) " ,
NULL , 3 ) )
return false ;
goto error_return ;
/* Domain constraint descriptions */
appendPQExpBuffer ( & buf ,
@ -1277,7 +1304,7 @@ objectDescription(const char *pattern, bool showSystem)
false , " n.nspname " , " pgc.conname " , NULL ,
" pg_catalog.pg_type_is_visible(t.oid) " ,
NULL , 3 ) )
return false ;
goto error_return ;
/* Operator class descriptions */
appendPQExpBuffer ( & buf ,
@ -1301,7 +1328,7 @@ objectDescription(const char *pattern, bool showSystem)
" n.nspname " , " o.opcname " , NULL ,
" pg_catalog.pg_opclass_is_visible(o.oid) " ,
NULL , 3 ) )
return false ;
goto error_return ;
/* Operator family descriptions */
appendPQExpBuffer ( & buf ,
@ -1325,7 +1352,7 @@ objectDescription(const char *pattern, bool showSystem)
" n.nspname " , " opf.opfname " , NULL ,
" pg_catalog.pg_opfamily_is_visible(opf.oid) " ,
NULL , 3 ) )
return false ;
goto error_return ;
/* Rule descriptions (ignore rules for views) */
appendPQExpBuffer ( & buf ,
@ -1348,7 +1375,7 @@ objectDescription(const char *pattern, bool showSystem)
" n.nspname " , " r.rulename " , NULL ,
" pg_catalog.pg_table_is_visible(c.oid) " ,
NULL , 3 ) )
return false ;
goto error_return ;
/* Trigger descriptions */
appendPQExpBuffer ( & buf ,
@ -1370,7 +1397,7 @@ objectDescription(const char *pattern, bool showSystem)
" n.nspname " , " t.tgname " , NULL ,
" pg_catalog.pg_table_is_visible(c.oid) " ,
NULL , 3 ) )
return false ;
goto error_return ;
appendPQExpBufferStr ( & buf ,
" ) AS tt \n "
@ -1393,6 +1420,10 @@ objectDescription(const char *pattern, bool showSystem)
PQclear ( res ) ;
return true ;
error_return :
termPQExpBuffer ( & buf ) ;
return false ;
}
@ -1428,7 +1459,10 @@ describeTableDetails(const char *pattern, bool verbose, bool showSystem)
" n.nspname " , " c.relname " , NULL ,
" pg_catalog.pg_table_is_visible(c.oid) " ,
NULL , 3 ) )
{
termPQExpBuffer ( & buf ) ;
return false ;
}
appendPQExpBufferStr ( & buf , " ORDER BY 2, 3; " ) ;
@ -3614,7 +3648,10 @@ describeRoles(const char *pattern, bool verbose, bool showSystem)
if ( ! validateSQLNamePattern ( & buf , pattern , false , false ,
NULL , " r.rolname " , NULL , NULL ,
NULL , 1 ) )
{
termPQExpBuffer ( & buf ) ;
return false ;
}
appendPQExpBufferStr ( & buf , " ORDER BY 1; " ) ;
@ -3739,11 +3776,11 @@ listDbRoleSettings(const char *pattern, const char *pattern2)
gettext_noop ( " Settings " ) ) ;
if ( ! validateSQLNamePattern ( & buf , pattern , false , false ,
NULL , " r.rolname " , NULL , NULL , & havewhere , 1 ) )
return false ;
goto error_return ;
if ( ! validateSQLNamePattern ( & buf , pattern2 , havewhere , false ,
NULL , " d.datname " , NULL , NULL ,
NULL , 1 ) )
return false ;
goto error_return ;
appendPQExpBufferStr ( & buf , " ORDER BY 1, 2; " ) ;
res = PSQLexec ( buf . data ) ;
@ -3779,6 +3816,10 @@ listDbRoleSettings(const char *pattern, const char *pattern2)
PQclear ( res ) ;
return true ;
error_return :
termPQExpBuffer ( & buf ) ;
return false ;
}
@ -3940,7 +3981,10 @@ listTables(const char *tabtypes, const char *pattern, bool verbose, bool showSys
" n.nspname " , " c.relname " , NULL ,
" pg_catalog.pg_table_is_visible(c.oid) " ,
NULL , 3 ) )
{
termPQExpBuffer ( & buf ) ;
return false ;
}
appendPQExpBufferStr ( & buf , " ORDER BY 1,2; " ) ;
@ -4157,7 +4201,10 @@ listPartitionedTables(const char *reltypes, const char *pattern, bool verbose)
" n.nspname " , " c.relname " , NULL ,
" pg_catalog.pg_table_is_visible(c.oid) " ,
NULL , 3 ) )
{
termPQExpBuffer ( & buf ) ;
return false ;
}
appendPQExpBuffer ( & buf , " ORDER BY \" Schema \" , %s%s \" Name \" ; " ,
mixed_output ? " \" Type \" DESC, " : " " ,
@ -4230,10 +4277,15 @@ listLanguages(const char *pattern, bool verbose, bool showSystem)
gettext_noop ( " Description " ) ) ;
if ( pattern )
{
if ( ! validateSQLNamePattern ( & buf , pattern , false , false ,
NULL , " l.lanname " , NULL , NULL ,
NULL , 2 ) )
{
termPQExpBuffer ( & buf ) ;
return false ;
}
}
if ( ! showSystem & & ! pattern )
appendPQExpBufferStr ( & buf , " WHERE l.lanplcallfoid != 0 \n " ) ;
@ -4319,7 +4371,10 @@ listDomains(const char *pattern, bool verbose, bool showSystem)
" n.nspname " , " t.typname " , NULL ,
" pg_catalog.pg_type_is_visible(t.oid) " ,
NULL , 3 ) )
{
termPQExpBuffer ( & buf ) ;
return false ;
}
appendPQExpBufferStr ( & buf , " ORDER BY 1, 2; " ) ;
@ -4395,7 +4450,10 @@ listConversions(const char *pattern, bool verbose, bool showSystem)
" n.nspname " , " c.conname " , NULL ,
" pg_catalog.pg_conversion_is_visible(c.oid) " ,
NULL , 3 ) )
{
termPQExpBuffer ( & buf ) ;
return false ;
}
appendPQExpBufferStr ( & buf , " ORDER BY 1, 2; " ) ;
@ -4542,7 +4600,10 @@ listEventTriggers(const char *pattern, bool verbose)
if ( ! validateSQLNamePattern ( & buf , pattern , false , false ,
NULL , " evtname " , NULL , NULL ,
NULL , 1 ) )
{
termPQExpBuffer ( & buf ) ;
return false ;
}
appendPQExpBufferStr ( & buf , " ORDER BY 1 " ) ;
@ -4638,7 +4699,10 @@ listExtendedStats(const char *pattern)
" es.stxnamespace::pg_catalog.regnamespace::pg_catalog.text " , " es.stxname " ,
NULL , " pg_catalog.pg_statistics_obj_is_visible(es.oid) " ,
NULL , 3 ) )
{
termPQExpBuffer ( & buf ) ;
return false ;
}
appendPQExpBufferStr ( & buf , " ORDER BY 1, 2; " ) ;
@ -4742,7 +4806,7 @@ listCasts(const char *pattern, bool verbose)
" pg_catalog.format_type(ts.oid, NULL) " ,
" pg_catalog.pg_type_is_visible(ts.oid) " ,
NULL , 3 ) )
return false ;
goto error_return ;
appendPQExpBufferStr ( & buf , " ) OR (true " ) ;
@ -4751,7 +4815,7 @@ listCasts(const char *pattern, bool verbose)
" pg_catalog.format_type(tt.oid, NULL) " ,
" pg_catalog.pg_type_is_visible(tt.oid) " ,
NULL , 3 ) )
return false ;
goto error_return ;
appendPQExpBufferStr ( & buf , " ) ) \n ORDER BY 1, 2; " ) ;
@ -4770,6 +4834,10 @@ listCasts(const char *pattern, bool verbose)
PQclear ( res ) ;
return true ;
error_return :
termPQExpBuffer ( & buf ) ;
return false ;
}
/*
@ -4851,7 +4919,10 @@ listCollations(const char *pattern, bool verbose, bool showSystem)
" n.nspname " , " c.collname " , NULL ,
" pg_catalog.pg_collation_is_visible(c.oid) " ,
NULL , 3 ) )
{
termPQExpBuffer ( & buf ) ;
return false ;
}
appendPQExpBufferStr ( & buf , " ORDER BY 1, 2; " ) ;
@ -4914,16 +4985,13 @@ listSchemas(const char *pattern, bool verbose, bool showSystem)
NULL , " n.nspname " , NULL ,
NULL ,
NULL , 2 ) )
return false ;
goto error_return ;
appendPQExpBufferStr ( & buf , " ORDER BY 1; " ) ;
res = PSQLexec ( buf . data ) ;
if ( ! res )
{
termPQExpBuffer ( & buf ) ;
return false ;
}
goto error_return ;
myopt . nullPrint = NULL ;
myopt . title = _ ( " List of schemas " ) ;
@ -4944,10 +5012,7 @@ listSchemas(const char *pattern, bool verbose, bool showSystem)
pattern ) ;
result = PSQLexec ( buf . data ) ;
if ( ! result )
{
termPQExpBuffer ( & buf ) ;
return false ;
}
goto error_return ;
else
pub_schema_tuples = PQntuples ( result ) ;
@ -4994,6 +5059,10 @@ listSchemas(const char *pattern, bool verbose, bool showSystem)
}
return true ;
error_return :
termPQExpBuffer ( & buf ) ;
return false ;
}
@ -5029,7 +5098,10 @@ listTSParsers(const char *pattern, bool verbose)
" n.nspname " , " p.prsname " , NULL ,
" pg_catalog.pg_ts_parser_is_visible(p.oid) " ,
NULL , 3 ) )
{
termPQExpBuffer ( & buf ) ;
return false ;
}
appendPQExpBufferStr ( & buf , " ORDER BY 1, 2; " ) ;
@ -5072,7 +5144,10 @@ listTSParsersVerbose(const char *pattern)
" n.nspname " , " p.prsname " , NULL ,
" pg_catalog.pg_ts_parser_is_visible(p.oid) " ,
NULL , 3 ) )
{
termPQExpBuffer ( & buf ) ;
return false ;
}
appendPQExpBufferStr ( & buf , " ORDER BY 1, 2; " ) ;
@ -5215,7 +5290,10 @@ describeOneTSParser(const char *oid, const char *nspname, const char *prsname)
res = PSQLexec ( buf . data ) ;
termPQExpBuffer ( & buf ) ;
if ( ! res )
{
termPQExpBuffer ( & title ) ;
return false ;
}
myopt . nullPrint = NULL ;
if ( nspname )
@ -5281,7 +5359,10 @@ listTSDictionaries(const char *pattern, bool verbose)
" n.nspname " , " d.dictname " , NULL ,
" pg_catalog.pg_ts_dict_is_visible(d.oid) " ,
NULL , 3 ) )
{
termPQExpBuffer ( & buf ) ;
return false ;
}
appendPQExpBufferStr ( & buf , " ORDER BY 1, 2; " ) ;
@ -5344,7 +5425,10 @@ listTSTemplates(const char *pattern, bool verbose)
" n.nspname " , " t.tmplname " , NULL ,
" pg_catalog.pg_ts_template_is_visible(t.oid) " ,
NULL , 3 ) )
{
termPQExpBuffer ( & buf ) ;
return false ;
}
appendPQExpBufferStr ( & buf , " ORDER BY 1, 2; " ) ;
@ -5396,7 +5480,10 @@ listTSConfigs(const char *pattern, bool verbose)
" n.nspname " , " c.cfgname " , NULL ,
" pg_catalog.pg_ts_config_is_visible(c.oid) " ,
NULL , 3 ) )
{
termPQExpBuffer ( & buf ) ;
return false ;
}
appendPQExpBufferStr ( & buf , " ORDER BY 1, 2; " ) ;
@ -5440,7 +5527,10 @@ listTSConfigsVerbose(const char *pattern)
" n.nspname " , " c.cfgname " , NULL ,
" pg_catalog.pg_ts_config_is_visible(c.oid) " ,
NULL , 3 ) )
{
termPQExpBuffer ( & buf ) ;
return false ;
}
appendPQExpBufferStr ( & buf , " ORDER BY 3, 2; " ) ;
@ -5613,7 +5703,10 @@ listForeignDataWrappers(const char *pattern, bool verbose)
if ( ! validateSQLNamePattern ( & buf , pattern , false , false ,
NULL , " fdwname " , NULL , NULL ,
NULL , 1 ) )
{
termPQExpBuffer ( & buf ) ;
return false ;
}
appendPQExpBufferStr ( & buf , " ORDER BY 1; " ) ;
@ -5687,7 +5780,10 @@ listForeignServers(const char *pattern, bool verbose)
if ( ! validateSQLNamePattern ( & buf , pattern , false , false ,
NULL , " s.srvname " , NULL , NULL ,
NULL , 1 ) )
{
termPQExpBuffer ( & buf ) ;
return false ;
}
appendPQExpBufferStr ( & buf , " ORDER BY 1; " ) ;
@ -5740,7 +5836,10 @@ listUserMappings(const char *pattern, bool verbose)
if ( ! validateSQLNamePattern ( & buf , pattern , false , false ,
NULL , " um.srvname " , " um.usename " , NULL ,
NULL , 1 ) )
{
termPQExpBuffer ( & buf ) ;
return false ;
}
appendPQExpBufferStr ( & buf , " ORDER BY 1, 2; " ) ;
@ -5810,7 +5909,10 @@ listForeignTables(const char *pattern, bool verbose)
" n.nspname " , " c.relname " , NULL ,
" pg_catalog.pg_table_is_visible(c.oid) " ,
NULL , 3 ) )
{
termPQExpBuffer ( & buf ) ;
return false ;
}
appendPQExpBufferStr ( & buf , " ORDER BY 1, 2; " ) ;
@ -5859,7 +5961,10 @@ listExtensions(const char *pattern)
NULL , " e.extname " , NULL ,
NULL ,
NULL , 1 ) )
{
termPQExpBuffer ( & buf ) ;
return false ;
}
appendPQExpBufferStr ( & buf , " ORDER BY 1; " ) ;
@ -5900,7 +6005,10 @@ listExtensionContents(const char *pattern)
NULL , " e.extname " , NULL ,
NULL ,
NULL , 1 ) )
{
termPQExpBuffer ( & buf ) ;
return false ;
}
appendPQExpBufferStr ( & buf , " ORDER BY 1; " ) ;
@ -6014,8 +6122,7 @@ validateSQLNamePattern(PQExpBuffer buf, const char *pattern, bool have_where,
{
pg_log_error ( " improper qualified name (too many dotted names): %s " ,
pattern ) ;
termPQExpBuffer ( & dbbuf ) ;
return false ;
goto error_return ;
}
if ( maxparts > 1 & & dotcnt = = maxparts - 1 )
@ -6023,16 +6130,21 @@ validateSQLNamePattern(PQExpBuffer buf, const char *pattern, bool have_where,
if ( PQdb ( pset . db ) = = NULL )
{
pg_log_error ( " You are currently not connected to a database. " ) ;
return false ;
goto error_return ;
}
if ( strcmp ( PQdb ( pset . db ) , dbbuf . data ) ! = 0 )
{
pg_log_error ( " cross-database references are not implemented: %s " ,
pattern ) ;
return false ;
goto error_return ;
}
}
termPQExpBuffer ( & dbbuf ) ;
return true ;
error_return :
termPQExpBuffer ( & dbbuf ) ;
return false ;
}
/*
@ -6090,7 +6202,10 @@ listPublications(const char *pattern)
NULL , " pubname " , NULL ,
NULL ,
NULL , 1 ) )
{
termPQExpBuffer ( & buf ) ;
return false ;
}
appendPQExpBufferStr ( & buf , " ORDER BY 1; " ) ;
@ -6205,7 +6320,10 @@ describePublications(const char *pattern)
NULL , " pubname " , NULL ,
NULL ,
NULL , 1 ) )
{
termPQExpBuffer ( & buf ) ;
return false ;
}
appendPQExpBufferStr ( & buf , " ORDER BY 2; " ) ;
@ -6417,7 +6535,10 @@ describeSubscriptions(const char *pattern, bool verbose)
NULL , " subname " , NULL ,
NULL ,
NULL , 1 ) )
{
termPQExpBuffer ( & buf ) ;
return false ;
}
appendPQExpBufferStr ( & buf , " ORDER BY 1; " ) ;
@ -6521,7 +6642,7 @@ listOperatorClasses(const char *access_method_pattern,
if ( ! validateSQLNamePattern ( & buf , access_method_pattern ,
false , false , NULL , " am.amname " , NULL , NULL ,
& have_where , 1 ) )
return false ;
goto error_return ;
if ( type_pattern )
{
/* Match type name pattern against either internal or external name */
@ -6530,7 +6651,7 @@ listOperatorClasses(const char *access_method_pattern,
" pg_catalog.format_type(t.oid, NULL) " ,
" pg_catalog.pg_type_is_visible(t.oid) " ,
NULL , 3 ) )
return false ;
goto error_return ;
}
appendPQExpBufferStr ( & buf , " ORDER BY 1, 2, 4; " ) ;
@ -6549,6 +6670,10 @@ listOperatorClasses(const char *access_method_pattern,
PQclear ( res ) ;
return true ;
error_return :
termPQExpBuffer ( & buf ) ;
return false ;
}
/*
@ -6597,7 +6722,7 @@ listOperatorFamilies(const char *access_method_pattern,
if ( ! validateSQLNamePattern ( & buf , access_method_pattern ,
false , false , NULL , " am.amname " , NULL , NULL ,
& have_where , 1 ) )
return false ;
goto error_return ;
if ( type_pattern )
{
appendPQExpBuffer ( & buf ,
@ -6614,7 +6739,7 @@ listOperatorFamilies(const char *access_method_pattern,
" pg_catalog.format_type(t.oid, NULL) " ,
" pg_catalog.pg_type_is_visible(t.oid) " ,
NULL , 3 ) )
return false ;
goto error_return ;
appendPQExpBufferStr ( & buf , " ) \n " ) ;
}
@ -6634,6 +6759,10 @@ listOperatorFamilies(const char *access_method_pattern,
PQclear ( res ) ;
return true ;
error_return :
termPQExpBuffer ( & buf ) ;
return false ;
}
/*
@ -6692,17 +6821,21 @@ listOpFamilyOperators(const char *access_method_pattern,
" LEFT JOIN pg_catalog.pg_opfamily ofs ON ofs.oid = o.amopsortfamily \n " ) ;
if ( access_method_pattern )
{
if ( ! validateSQLNamePattern ( & buf , access_method_pattern ,
false , false , NULL , " am.amname " ,
NULL , NULL ,
& have_where , 1 ) )
return false ;
goto error_return ;
}
if ( family_pattern )
{
if ( ! validateSQLNamePattern ( & buf , family_pattern , have_where , false ,
" nsf.nspname " , " of.opfname " , NULL , NULL ,
NULL , 3 ) )
return false ;
goto error_return ;
}
appendPQExpBufferStr ( & buf , " ORDER BY 1, 2, \n "
" o.amoplefttype = o.amoprighttype DESC, \n "
@ -6725,6 +6858,10 @@ listOpFamilyOperators(const char *access_method_pattern,
PQclear ( res ) ;
return true ;
error_return :
termPQExpBuffer ( & buf ) ;
return false ;
}
/*
@ -6780,16 +6917,20 @@ listOpFamilyFunctions(const char *access_method_pattern,
" LEFT JOIN pg_catalog.pg_proc p ON ap.amproc = p.oid \n " ) ;
if ( access_method_pattern )
{
if ( ! validateSQLNamePattern ( & buf , access_method_pattern ,
false , false , NULL , " am.amname " ,
NULL , NULL ,
& have_where , 1 ) )
return false ;
goto error_return ;
}
if ( family_pattern )
{
if ( ! validateSQLNamePattern ( & buf , family_pattern , have_where , false ,
" ns.nspname " , " of.opfname " , NULL , NULL ,
NULL , 3 ) )
return false ;
goto error_return ;
}
appendPQExpBufferStr ( & buf , " ORDER BY 1, 2, \n "
" ap.amproclefttype = ap.amprocrighttype DESC, \n "
@ -6810,6 +6951,10 @@ listOpFamilyFunctions(const char *access_method_pattern,
PQclear ( res ) ;
return true ;
error_return :
termPQExpBuffer ( & buf ) ;
return false ;
}
/*