* PrintQueryTuples: assuming query result is OK, print its tuples * * Returns true if successful, false otherwise. */
| 709 | * Returns true if successful, false otherwise. |
| 710 | */ |
| 711 | static bool |
| 712 | PrintQueryTuples(const PGresult *results) |
| 713 | { |
| 714 | bool result = true; |
| 715 | |
| 716 | /* write output to \g argument, if any */ |
| 717 | if (pset.gfname) |
| 718 | { |
| 719 | FILE *fout; |
| 720 | bool is_pipe; |
| 721 | |
| 722 | if (!openQueryOutputFile(pset.gfname, &fout, &is_pipe)) |
| 723 | return false; |
| 724 | if (is_pipe) |
| 725 | disable_sigpipe_trap(); |
| 726 | |
| 727 | printQuery(results, &pset.popt, fout, false, pset.logfile); |
| 728 | if (ferror(fout)) |
| 729 | { |
| 730 | pg_log_error("could not print result table: %m"); |
| 731 | result = false; |
| 732 | } |
| 733 | |
| 734 | if (is_pipe) |
| 735 | { |
| 736 | pclose(fout); |
| 737 | restore_sigpipe_trap(); |
| 738 | } |
| 739 | else |
| 740 | fclose(fout); |
| 741 | } |
| 742 | else |
| 743 | { |
| 744 | printQuery(results, &pset.popt, pset.queryFout, false, pset.logfile); |
| 745 | if (ferror(pset.queryFout)) |
| 746 | { |
| 747 | pg_log_error("could not print result table: %m"); |
| 748 | result = false; |
| 749 | } |
| 750 | } |
| 751 | |
| 752 | return result; |
| 753 | } |
| 754 | |
| 755 | |
| 756 | /* |
no test coverage detected