@ -6067,15 +6067,16 @@ listOperatorClasses(const char *access_method_pattern,
printfPQExpBuffer ( & buf ,
" SELECT DISTINCT "
" am.amname AS \" %s \" , \n "
" c.opcintype::pg_catalog.regtype AS \" %s \" , \n "
" (CASE WHEN c.opckeytype <> 0 AND c.opckeytype <> c.opcintype \n "
" THEN c.opckeytype \n "
" ELSE NULL -- c.opcintype \n "
" END)::pg_catalog.regtype AS \" %s \" , \n "
" pg_catalog.format_type(c.opcintype, NULL) AS \" %s \" , \n "
" CASE \n "
" WHEN c.opckeytype <> 0 AND c.opckeytype <> c.opcintype \n "
" THEN pg_catalog.format_type(c.opckeytype, NULL) \n "
" ELSE NULL \n "
" END AS \" %s \" , \n "
" CASE \n "
" WHEN pg_catalog.pg_opclass_is_visible(c.oid) \n "
" THEN format('%%I', c.opcname) \n "
" ELSE format('%%I.%%I', n.nspname, c.opcname) \n "
" THEN pg_catalog. format('%%I', c.opcname) \n "
" ELSE pg_catalog. format('%%I.%%I', n.nspname, c.opcname) \n "
" END AS \" %s \" , \n "
" (CASE WHEN c.opcdefault \n "
" THEN '%s' \n "
@ -6092,8 +6093,8 @@ listOperatorClasses(const char *access_method_pattern,
appendPQExpBuffer ( & buf ,
" , \n CASE \n "
" WHEN pg_catalog.pg_opfamily_is_visible(of.oid) \n "
" THEN format('%%I', of.opfname) \n "
" ELSE format('%%I.%%I', ofn.nspname, of.opfname) \n "
" THEN pg_catalog. format('%%I', of.opfname) \n "
" ELSE pg_catalog. format('%%I.%%I', ofn.nspname, of.opfname) \n "
" END AS \" %s \" , \n "
" pg_catalog.pg_get_userbyid(c.opcowner) AS \" %s \" \n " ,
gettext_noop ( " Operator family " ) ,
@ -6157,12 +6158,12 @@ listOperatorFamilies(const char *access_method_pattern,
" am.amname AS \" %s \" , \n "
" CASE \n "
" WHEN pg_catalog.pg_opfamily_is_visible(f.oid) \n "
" THEN format('%%I', f.opfname) \n "
" ELSE format('%%I.%%I', n.nspname, f.opfname) \n "
" THEN pg_catalog. format('%%I', f.opfname) \n "
" ELSE pg_catalog. format('%%I.%%I', n.nspname, f.opfname) \n "
" END AS \" %s \" , \n "
" (SELECT \n "
" string_agg(format_type(oc.opcintype, -1 ), ', ') \n "
" FROM pg_opclass oc \n "
" pg_catalog.string_agg(pg_catalog.format_type(oc.opcintype, NULL ), ', ') \n "
" FROM pg_catalog.pg_ opclass oc \n "
" WHERE oc.opcfamily = f.oid) \" %s \" " ,
gettext_noop ( " AM " ) ,
gettext_noop ( " Operator family " ) ,
@ -6185,8 +6186,8 @@ listOperatorFamilies(const char *access_method_pattern,
appendPQExpBuffer ( & buf ,
" \n %s EXISTS ( \n "
" SELECT 1 \n "
" FROM pg_type t \n "
" JOIN pg_opclass oc ON oc.opcintype = t.oid \n "
" FROM pg_catalog.pg_ type t \n "
" JOIN pg_catalog.pg_ opclass oc ON oc.opcintype = t.oid \n "
" WHERE oc.opcfamily = f.oid " ,
have_where ? " AND " : " WHERE " ) ;
processSQLNamePattern ( pset . db , & buf , type_pattern , true , false ,
@ -6237,38 +6238,29 @@ listOpFamilyOperators(const char *access_method_pattern,
" am.amname AS \" %s \" , \n "
" CASE \n "
" WHEN pg_catalog.pg_opfamily_is_visible(of.oid) \n "
" THEN format('%%I', of.opfname) \n "
" ELSE format('%%I.%%I', nsf.nspname, of.opfname) \n "
" THEN pg_catalog. format('%%I', of.opfname) \n "
" ELSE pg_catalog. format('%%I.%%I', nsf.nspname, of.opfname) \n "
" END AS \" %s \" , \n "
" format ('%%s (%%s, %%s)', \n "
" CASE \n "
" WHEN pg_catalog.pg_operator_is_visible(op.oid) \n "
" THEN op.oprname::pg_catalog.text \n "
" ELSE o.amopopr::pg_catalog.regoper::pg_catalog.text \n "
" END, \n "
" pg_catalog.format_type(o.amoplefttype, NULL), \n "
" pg_catalog.format_type(o.amoprighttype, NULL) \n "
" ) AS \" %s \" \n " ,
" o.amopopr::pg_catalog.regoperator AS \" %s \" \n , "
" o.amopstrategy AS \" %s \" , \n "
" CASE o.amoppurpose \n "
" WHEN 'o' THEN '%s' \n "
" WHEN 's' THEN '%s' \n "
" END AS \" %s \" \n " ,
gettext_noop ( " AM " ) ,
gettext_noop ( " Operator family " ) ,
gettext_noop ( " Operator " ) ) ;
gettext_noop ( " Operator " ) ,
gettext_noop ( " Strategy " ) ,
gettext_noop ( " ordering " ) ,
gettext_noop ( " search " ) ,
gettext_noop ( " Purpose " ) ) ;
if ( verbose )
appendPQExpBuffer ( & buf ,
" , o.amopstrategy AS \" %s \" , \n "
" CASE o.amoppurpose \n "
" WHEN 'o' THEN '%s' \n "
" WHEN 's' THEN '%s' \n "
" END AS \" %s \" , \n "
" ofs.opfname AS \" %s \" \n " ,
gettext_noop ( " Strategy " ) ,
gettext_noop ( " ordering " ) ,
gettext_noop ( " search " ) ,
gettext_noop ( " Purpose " ) ,
" , ofs.opfname AS \" %s \" \n " ,
gettext_noop ( " Sort opfamily " ) ) ;
appendPQExpBuffer ( & buf ,
" FROM pg_catalog.pg_amop o \n "
" LEFT JOIN pg_catalog.pg_operator op ON op.oid = o.amopopr \n "
" LEFT JOIN pg_catalog.pg_opfamily of ON of.oid = o.amopfamily \n "
" LEFT JOIN pg_catalog.pg_am am ON am.oid = of.opfmethod AND am.oid = o.amopmethod \n "
" LEFT JOIN pg_catalog.pg_namespace nsf ON of.opfnamespace = nsf.oid \n " ) ;
@ -6317,7 +6309,7 @@ listOpFamilyOperators(const char *access_method_pattern,
*/
bool
listOpFamilyFunctions ( const char * access_method_pattern ,
const char * family_pattern )
const char * family_pattern , bool verbose )
{
PQExpBufferData buf ;
PGresult * res ;
@ -6332,19 +6324,26 @@ listOpFamilyFunctions(const char *access_method_pattern,
" am.amname AS \" %s \" , \n "
" CASE \n "
" WHEN pg_catalog.pg_opfamily_is_visible(of.oid) \n "
" THEN format('%%I', of.opfname) \n "
" ELSE format('%%I.%%I', ns.nspname, of.opfname) \n "
" THEN pg_catalog. format('%%I', of.opfname) \n "
" ELSE pg_catalog. format('%%I.%%I', ns.nspname, of.opfname) \n "
" END AS \" %s \" , \n "
" pg_catalog.format_type(ap.amproclefttype, NULL) AS \" %s \" , \n "
" pg_catalog.format_type(ap.amprocrighttype, NULL) AS \" %s \" , \n "
" ap.amprocnum AS \" %s \" \n , "
" p.proname AS \" %s \" \n " ,
" ap.amprocnum AS \" %s \" \n " ,
gettext_noop ( " AM " ) ,
gettext_noop ( " Operator family " ) ,
gettext_noop ( " Left arg type " ) ,
gettext_noop ( " Right arg type " ) ,
gettext_noop ( " Number " ) ,
gettext_noop ( " Function " ) ) ;
gettext_noop ( " Registered left type " ) ,
gettext_noop ( " Registered right type " ) ,
gettext_noop ( " Number " ) ) ;
if ( ! verbose )
appendPQExpBuffer ( & buf ,
" , p.proname AS \" %s \" \n " ,
gettext_noop ( " Function " ) ) ;
else
appendPQExpBuffer ( & buf ,
" , ap.amproc::pg_catalog.regprocedure AS \" %s \" \n " ,
gettext_noop ( " Function " ) ) ;
appendPQExpBuffer ( & buf ,
" FROM pg_catalog.pg_amproc ap \n "