Teach psql's \lo slash commands to respect quiet mode, and to output

HTML in HTML mode. Patch from Jeremy Drake.
This commit is contained in:
Neil Conway 2007-01-20 16:57:31 +00:00
parent 24ac4c968c
commit 4945a8fad4
2 changed files with 45 additions and 10 deletions

View File

@ -1,5 +1,5 @@
<!--
$PostgreSQL: pgsql/doc/src/sgml/ref/psql-ref.sgml,v 1.179 2006/12/19 01:53:36 adunstan Exp $
$PostgreSQL: pgsql/doc/src/sgml/ref/psql-ref.sgml,v 1.180 2007/01/20 16:57:31 neilc Exp $
PostgreSQL documentation
-->
@ -1329,11 +1329,12 @@ Tue Oct 26 21:40:57 CEST 1999
foo=&gt; <userinput>\lo_import '/home/peter/pictures/photo.xcf' 'a picture of me'</userinput>
lo_import 152801
</programlisting>
The response indicates that the large object received object ID
152801 which one ought to remember if one wants to access the
object ever again. For that reason it is recommended to always
associate a human-readable comment with every object. Those can
then be seen with the <command>\lo_list</command> command.
The response indicates that the large object received object
ID 152801, which can be used to access the newly-created large
object in the future. For the sake of readability, it is
recommended to always associate a human-readable comment with
every object. Both OIDs and comments can be viewed with the
<command>\lo_list</command> command.
</para>
<para>

View File

@ -3,7 +3,7 @@
*
* Copyright (c) 2000-2007, PostgreSQL Global Development Group
*
* $PostgreSQL: pgsql/src/bin/psql/large_obj.c,v 1.47 2007/01/05 22:19:49 momjian Exp $
* $PostgreSQL: pgsql/src/bin/psql/large_obj.c,v 1.48 2007/01/20 16:57:31 neilc Exp $
*/
#include "postgres_fe.h"
#include "large_obj.h"
@ -12,6 +12,39 @@
#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);
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,7 +162,7 @@ do_lo_export(const char *loid_arg, const char *filename_arg)
if (!finish_lo_xact("\\lo_export", own_transaction))
return false;
fprintf(pset.queryFout, "lo_export\n");
print_lo_result("lo_export");
return true;
}
@ -189,7 +222,8 @@ do_lo_import(const char *filename_arg, const char *comment_arg)
if (!finish_lo_xact("\\lo_import", own_transaction))
return false;
fprintf(pset.queryFout, "lo_import %u\n", loid);
print_lo_result("lo_import %u", loid);
sprintf(oidbuf, "%u", loid);
SetVariable(pset.vars, "LASTOID", oidbuf);
@ -225,7 +259,7 @@ do_lo_unlink(const char *loid_arg)
if (!finish_lo_xact("\\lo_unlink", own_transaction))
return false;
fprintf(pset.queryFout, "lo_unlink %u\n", loid);
print_lo_result("lo_unlink %u", loid);
return true;
}