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 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> foo=&gt; <userinput>\lo_import '/home/peter/pictures/photo.xcf' 'a picture of me'</userinput>
lo_import 152801 lo_import 152801
</programlisting> </programlisting>
The response indicates that the large object received object ID The response indicates that the large object received object
152801 which one ought to remember if one wants to access the ID 152801, which can be used to access the newly-created large
object ever again. For that reason it is recommended to always object in the future. For the sake of readability, it is
associate a human-readable comment with every object. Those can recommended to always associate a human-readable comment with
then be seen with the <command>\lo_list</command> command. every object. Both OIDs and comments can be viewed with the
<command>\lo_list</command> command.
</para> </para>
<para> <para>

View File

@ -3,7 +3,7 @@
* *
* Copyright (c) 2000-2007, PostgreSQL Global Development Group * 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 "postgres_fe.h"
#include "large_obj.h" #include "large_obj.h"
@ -12,6 +12,39 @@
#include "settings.h" #include "settings.h"
#include "common.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 * 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)) if (!finish_lo_xact("\\lo_export", own_transaction))
return false; return false;
fprintf(pset.queryFout, "lo_export\n"); print_lo_result("lo_export");
return true; 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)) if (!finish_lo_xact("\\lo_import", own_transaction))
return false; return false;
fprintf(pset.queryFout, "lo_import %u\n", loid); print_lo_result("lo_import %u", loid);
sprintf(oidbuf, "%u", loid); sprintf(oidbuf, "%u", loid);
SetVariable(pset.vars, "LASTOID", oidbuf); SetVariable(pset.vars, "LASTOID", oidbuf);
@ -225,7 +259,7 @@ do_lo_unlink(const char *loid_arg)
if (!finish_lo_xact("\\lo_unlink", own_transaction)) if (!finish_lo_xact("\\lo_unlink", own_transaction))
return false; return false;
fprintf(pset.queryFout, "lo_unlink %u\n", loid); print_lo_result("lo_unlink %u", loid);
return true; return true;
} }