On Mon, 25 Sep 2006, Jeremy Drake wrote:

>
> It looks like the large_obj.c output is missing much of the output
> settings handling which is in the PrintQueryStatus function in common.c,
> such as handling quiet mode, and html output.  I will try to dig around
> and try to put together a patch to make it respect the settings like other
> commands...

I put together a patch for psql's large_obj.c to make it respect the
output settings.  Is this reasonable?

-- 
For every complex problem, there is a solution that is simple, neat,
and wrong.
                -- H. L. Mencken
Index: src/bin/psql/large_obj.c
===================================================================
RCS file: 
/home/jeremyd/local/postgres/cvsuproot/pgsql/src/bin/psql/large_obj.c,v
retrieving revision 1.46
diff -c -r1.46 large_obj.c
*** src/bin/psql/large_obj.c    29 Aug 2006 15:19:51 -0000      1.46
--- src/bin/psql/large_obj.c    25 Sep 2006 23:02:33 -0000
***************
*** 12,17 ****
--- 12,54 ----
  #include "settings.h"
  #include "common.h"
  
+ static void
+ print_lo_result(const char *fmt,...)
+ __attribute__((format(printf, 1, 2)));
+ 
+ static void
+ print_lo_result(const char *fmt,...)
+ {
+       va_list         ap;
+ 
+       if (!pset.quiet)
+       {
+               if (pset.popt.topt.format == PRINT_HTML)
+               {
+                       fputs("<p>", pset.queryFout);
+                       // XXX should probably use html_escaped_print here
+                       // but I know the strings have no bad chars
+               }
+ 
+               va_start(ap, fmt);
+               vfprintf(pset.queryFout, fmt, ap);
+               va_end(ap);
+ 
+               if (pset.popt.topt.format == PRINT_HTML)
+                       fputs("</p>\n", pset.queryFout);
+               else
+                       fputs("\n", pset.queryFout);
+       }
+ 
+       if (pset.logfile)
+       {
+               va_start(ap, fmt);
+               vfprintf(pset.logfile, fmt, ap);
+               va_end(ap);
+               fputs("\n", pset.logfile);
+       }
+ }
+ 
  
  /*
   * Prepare to do a large-object operation.    We *must* be inside a 
transaction
***************
*** 129,135 ****
        if (!finish_lo_xact("\\lo_export", own_transaction))
                return false;
  
!       fprintf(pset.queryFout, "lo_export\n");
  
        return true;
  }
--- 166,172 ----
        if (!finish_lo_xact("\\lo_export", own_transaction))
                return false;
  
!       print_lo_result("lo_export");
  
        return true;
  }
***************
*** 189,195 ****
        if (!finish_lo_xact("\\lo_import", own_transaction))
                return false;
  
!       fprintf(pset.queryFout, "lo_import %u\n", loid);
        sprintf(oidbuf, "%u", loid);
        SetVariable(pset.vars, "LASTOID", oidbuf);
  
--- 226,233 ----
        if (!finish_lo_xact("\\lo_import", own_transaction))
                return false;
  
!       print_lo_result("lo_import %u", loid);
! 
        sprintf(oidbuf, "%u", loid);
        SetVariable(pset.vars, "LASTOID", oidbuf);
  
***************
*** 225,231 ****
        if (!finish_lo_xact("\\lo_unlink", own_transaction))
                return false;
  
!       fprintf(pset.queryFout, "lo_unlink %u\n", loid);
  
        return true;
  }
--- 263,269 ----
        if (!finish_lo_xact("\\lo_unlink", own_transaction))
                return false;
  
!       print_lo_result("lo_unlink %u", loid);
  
        return true;
  }
---------------------------(end of broadcast)---------------------------
TIP 5: don't forget to increase your free space map settings

Reply via email to