From 4945a8fad4efd34b79826f28836c40e294518f43 Mon Sep 17 00:00:00 2001 From: Neil Conway Date: Sat, 20 Jan 2007 16:57:31 +0000 Subject: [PATCH] Teach psql's \lo slash commands to respect quiet mode, and to output HTML in HTML mode. Patch from Jeremy Drake. --- doc/src/sgml/ref/psql-ref.sgml | 13 ++++++----- src/bin/psql/large_obj.c | 42 ++++++++++++++++++++++++++++++---- 2 files changed, 45 insertions(+), 10 deletions(-) diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml index cd92a21729..3a6af2b537 100644 --- a/doc/src/sgml/ref/psql-ref.sgml +++ b/doc/src/sgml/ref/psql-ref.sgml @@ -1,5 +1,5 @@ @@ -1329,11 +1329,12 @@ Tue Oct 26 21:40:57 CEST 1999 foo=> \lo_import '/home/peter/pictures/photo.xcf' 'a picture of me' lo_import 152801 - 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 \lo_list 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 + \lo_list command. diff --git a/src/bin/psql/large_obj.c b/src/bin/psql/large_obj.c index a55b3af4b1..87918a8850 100644 --- a/src/bin/psql/large_obj.c +++ b/src/bin/psql/large_obj.c @@ -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("

", pset.queryFout); + + va_start(ap, fmt); + vfprintf(pset.queryFout, fmt, ap); + va_end(ap); + + if (pset.popt.topt.format == PRINT_HTML) + fputs("

\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; }