From be8d4cb13cb477fe45db31acf74e97eced51dfce Mon Sep 17 00:00:00 2001 From: Heikki Linnakangas Date: Mon, 2 Oct 2023 11:46:25 +0300 Subject: [PATCH] Add regression tests for psql \g piped into a program MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Author: Daniel Vérité Reviewed-by: Peter Eisentraut Discussion: https://www.postgresql.org/message-id/33ce8350-8cd1-45ff-a5fe-f9be7bc70649%40manitou-mail.org --- src/bin/psql/t/001_basic.pl | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/bin/psql/t/001_basic.pl b/src/bin/psql/t/001_basic.pl index 89aeec46e5..95f4e60ab2 100644 --- a/src/bin/psql/t/001_basic.pl +++ b/src/bin/psql/t/001_basic.pl @@ -405,4 +405,32 @@ psql_fails_like( qr/iteration count is specified more than once/, '\watch, iteration count is specified more than once'); +# Test \g output piped into a program. +# The program is perl -pe '' to simply copy the input to the output. +my $g_file = "$tempdir/g_file_1.out"; +my $perlbin = $^X; +$perlbin =~ s!\\!/!g if $PostgreSQL::Test::Utils::windows_os; +my $pipe_cmd = "$perlbin -pe '' >$g_file"; + +psql_like($node, "SELECT 'one' \\g | $pipe_cmd", qr//, "one command \\g"); +my $c1 = slurp_file($g_file); +like($c1, qr/one/); + +psql_like($node, "SELECT 'two' \\; SELECT 'three' \\g | $pipe_cmd", qr//, "two commands \\g"); +my $c2 = slurp_file($g_file); +like($c2, qr/two.*three/s); + + +psql_like($node, "\\set SHOW_ALL_RESULTS 0\nSELECT 'four' \\; SELECT 'five' \\g | $pipe_cmd", qr//, + "two commands \\g with only last result"); +my $c3 = slurp_file($g_file); +like($c3, qr/five/); +unlike($c3, qr/four/); + +psql_like($node, "copy (values ('foo'),('bar')) to stdout \\g | $pipe_cmd", + qr//, + "copy output passed to \\g pipe"); +my $c4 = slurp_file($g_file); +like($c4, qr/foo.*bar/s); + done_testing();