v2-0002-pg_resetwal-Add-char-signedness-option-to-change-.patch
application/octet-stream
Filename: v2-0002-pg_resetwal-Add-char-signedness-option-to-change-.patch
Type: application/octet-stream
Part: 4
Patch
Format: format-patch
Series: patch v2-0002
Subject: pg_resetwal: Add --char-signedness option to change the default char signedness.
| File | + | − |
|---|---|---|
| doc/src/sgml/ref/pg_resetwal.sgml | 10 | 0 |
| src/bin/pg_resetwal/pg_resetwal.c | 25 | 0 |
| src/bin/pg_resetwal/t/001_basic.pl | 6 | 0 |
From d32cb3c21734cdebe2ea1d41f8fa9999f2fe257c Mon Sep 17 00:00:00 2001
From: Masahiko Sawada <sawada.mshk@gmail.com>
Date: Wed, 2 Oct 2024 15:08:26 -0700
Subject: [PATCH v2 2/5] pg_resetwal: Add --char-signedness option to change
the default char signedness.
With the newly added option --char-signedness, pg_resetwal updates the
default char signeness flag in the controlfile.
Reviewed-by:
Discussion: https://postgr.es/m/CB11ADBC-0C3F-4FE0-A678-666EE80CBB07%40amazon.com
---
doc/src/sgml/ref/pg_resetwal.sgml | 10 ++++++++++
src/bin/pg_resetwal/pg_resetwal.c | 25 +++++++++++++++++++++++++
src/bin/pg_resetwal/t/001_basic.pl | 6 ++++++
3 files changed, 41 insertions(+)
diff --git a/doc/src/sgml/ref/pg_resetwal.sgml b/doc/src/sgml/ref/pg_resetwal.sgml
index cf9c7e70f2..f1a349d364 100644
--- a/doc/src/sgml/ref/pg_resetwal.sgml
+++ b/doc/src/sgml/ref/pg_resetwal.sgml
@@ -171,6 +171,16 @@ PostgreSQL documentation
</para>
<variablelist>
+ <varlistentry>
+ <term><option>--char-signedness=<replaceable class="parameter">option</replaceable></option></term>
+ <listitem>
+ <para>
+ Manually set the default char signedness. Possible values are
+ <literal>signed</literal> and <literal>unsigned</literal>.
+ </para>
+ </listitem>
+ </varlistentry>
+
<varlistentry>
<term><option>-c <replaceable class="parameter">xid</replaceable>,<replaceable class="parameter">xid</replaceable></option></term>
<term><option>--commit-timestamp-ids=<replaceable class="parameter">xid</replaceable>,<replaceable class="parameter">xid</replaceable></option></term>
diff --git a/src/bin/pg_resetwal/pg_resetwal.c b/src/bin/pg_resetwal/pg_resetwal.c
index e9dcb5a6d8..55eb584d0a 100644
--- a/src/bin/pg_resetwal/pg_resetwal.c
+++ b/src/bin/pg_resetwal/pg_resetwal.c
@@ -75,6 +75,7 @@ static TimeLineID minXlogTli = 0;
static XLogSegNo minXlogSegNo = 0;
static int WalSegSz;
static int set_wal_segsize;
+static int set_char_signedness = -1;
static void CheckDataVersion(void);
static bool read_controlfile(void);
@@ -106,6 +107,7 @@ main(int argc, char *argv[])
{"oldest-transaction-id", required_argument, NULL, 'u'},
{"next-transaction-id", required_argument, NULL, 'x'},
{"wal-segsize", required_argument, NULL, 1},
+ {"char-signedness", required_argument, NULL, 2},
{NULL, 0, NULL, 0}
};
@@ -302,6 +304,23 @@ main(int argc, char *argv[])
break;
}
+ case 2:
+ {
+ errno = 0;
+
+ if (pg_strcasecmp(optarg, "signed") == 0)
+ set_char_signedness = 1;
+ else if (pg_strcasecmp(optarg, "unsigned") == 0)
+ set_char_signedness = 0;
+ else
+ {
+ pg_log_error("invalid argument for option %s", "--char-signedness");
+ pg_log_error_hint("Try \"%s --help\" for more information.", progname);
+ exit(1);
+ }
+ break;
+ }
+
default:
/* getopt_long already emitted a complaint */
pg_log_error_hint("Try \"%s --help\" for more information.", progname);
@@ -456,6 +475,9 @@ main(int argc, char *argv[])
if (set_wal_segsize != 0)
ControlFile.xlog_seg_size = WalSegSz;
+ if (set_char_signedness != -1)
+ ControlFile.default_char_signedness = (set_char_signedness == 1);
+
if (minXlogSegNo > newXlogSegNo)
newXlogSegNo = minXlogSegNo;
@@ -779,6 +801,8 @@ PrintControlValues(bool guessed)
(ControlFile.float8ByVal ? _("by value") : _("by reference")));
printf(_("Data page checksum version: %u\n"),
ControlFile.data_checksum_version);
+ printf(_("Default char data signedness: %s\n"),
+ (ControlFile.default_char_signedness ? _("signed") : _("unsigned")));
}
@@ -1189,6 +1213,7 @@ usage(void)
printf(_(" -u, --oldest-transaction-id=XID set oldest transaction ID\n"));
printf(_(" -x, --next-transaction-id=XID set next transaction ID\n"));
printf(_(" --wal-segsize=SIZE size of WAL segments, in megabytes\n"));
+ printf(_(" --char-signedness=OPTION set char signedness to \"signed\" or \"unsigned\"\n"));
printf(_("\nReport bugs to <%s>.\n"), PACKAGE_BUGREPORT);
printf(_("%s home page: <%s>\n"), PACKAGE_NAME, PACKAGE_URL);
diff --git a/src/bin/pg_resetwal/t/001_basic.pl b/src/bin/pg_resetwal/t/001_basic.pl
index 9829e48106..3ec3302804 100644
--- a/src/bin/pg_resetwal/t/001_basic.pl
+++ b/src/bin/pg_resetwal/t/001_basic.pl
@@ -172,6 +172,12 @@ command_fails_like(
qr/must be greater than/,
'fails with -x value too small');
+# --char-signedness
+command_fails_like(
+ [ 'pg_resetwal', '--char-signedness', 'foo', $node->data_dir ],
+ qr/error: invalid argument for option --char-signedness/,
+ 'fails with incorrect --char-signedness option');
+
# run with control override options
my $out = (run_command([ 'pg_resetwal', '-n', $node->data_dir ]))[0];
--
2.39.3