psql_process_multiple_files.patch
application/octet-stream
Filename: psql_process_multiple_files.patch
Type: application/octet-stream
Part: 0
Message:
Re: Explicit psqlrc
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: unified
| File | + | − |
|---|---|---|
| src/bin/psql/startup.c | 0 | 0 |
diff --git a/src/bin/psql/startup.c b/src/bin/psql/startup.c
index 61c7f11..34c124c 100644
*** a/src/bin/psql/startup.c
--- b/src/bin/psql/startup.c
*************** PsqlSettings pset;
*** 43,48 ****
--- 43,50 ----
#define PSQLRC "psqlrc.conf"
#endif
+ #define FILE_ALLOC_BLOCKS 16
+
/*
* Structures to pass information between the option parsing routine
* and the main function
*************** struct adhoc_opts
*** 68,73 ****
--- 70,77 ----
bool no_readline;
bool no_psqlrc;
bool single_txn;
+ int num_files;
+ char **files;
};
static void parse_psql_options(int argc, char *argv[],
*************** main(int argc, char *argv[])
*** 243,256 ****
*/
/*
! * process file given by -f
*/
if (options.action == ACT_FILE)
{
if (!options.no_psqlrc)
process_psqlrc(argv[0]);
! successResult = process_file(options.action_string, options.single_txn);
}
/*
--- 247,275 ----
*/
/*
! * process file(s) given by -f
! *
! * not sure how to handle the successResult on this first
*/
if (options.action == ACT_FILE)
{
+ int i;
+
if (!options.no_psqlrc)
process_psqlrc(argv[0]);
! if (options.single_txn)
! PSQLexec("BEGIN", false);
!
! for (i = 0; i<options.num_files; i++) {
! successResult = process_file(options.files[i], false);
! }
!
! free(options.files);
!
! if (options.single_txn) {
! PSQLexec("COMMIT", false);
! }
}
/*
*************** parse_psql_options(int argc, char *argv[
*** 365,370 ****
--- 384,391 ----
int c;
memset(options, 0, sizeof *options);
+ options->files = (char**)malloc(FILE_ALLOC_BLOCKS*sizeof(char*));
+ memset(options->files, 0, FILE_ALLOC_BLOCKS*sizeof(char*));
while ((c = getopt_long(argc, argv, "aAc:d:eEf:F:h:HlL:no:p:P:qR:sStT:U:v:VwWxX?1",
long_options, &optindex)) != -1)
*************** parse_psql_options(int argc, char *argv[
*** 398,404 ****
break;
case 'f':
options->action = ACT_FILE;
! options->action_string = optarg;
break;
case 'F':
pset.popt.topt.fieldSep = pg_strdup(optarg);
--- 419,429 ----
break;
case 'f':
options->action = ACT_FILE;
! options->num_files++;
! if (!options->num_files % FILE_ALLOC_BLOCKS) {
! options->files = realloc(options->files, sizeof(char*) * (options->num_files + FILE_ALLOC_BLOCKS));
! }
! options->files[options->num_files - 1] = optarg;
break;
case 'F':
pset.popt.topt.fieldSep = pg_strdup(optarg);