public inbox for [email protected]help / color / mirror / Atom feed
[PATCH 1/1] work-in-progress: fix pg_upgrade output 5+ messages / 5 participants [nested] [flat]
* [PATCH 1/1] work-in-progress: fix pg_upgrade output @ 2023-08-02 17:20 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 5+ messages in thread From: Nathan Bossart @ 2023-08-02 17:20 UTC (permalink / raw) --- src/bin/pg_upgrade/util.c | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/bin/pg_upgrade/util.c b/src/bin/pg_upgrade/util.c index 21ba4c8f12..bea6d7289d 100644 --- a/src/bin/pg_upgrade/util.c +++ b/src/bin/pg_upgrade/util.c @@ -50,10 +50,10 @@ end_progress_output(void) if (log_opts.isatty) { printf("\r"); - pg_log(PG_REPORT_NONL, "%-*s", MESSAGE_WIDTH, ""); + pg_log(PG_REPORT_NONL, "%-*s\r ", MESSAGE_WIDTH, ""); } else if (log_opts.verbose) - pg_log(PG_REPORT_NONL, "%-*s", MESSAGE_WIDTH, ""); + pg_log(PG_REPORT_NONL, " "); } /* @@ -114,9 +114,6 @@ cleanup_output_dirs(void) * prep_status * * Displays a message that describes an operation we are about to begin. - * We pad the message out to MESSAGE_WIDTH characters so that all of the - * "ok" and "failed" indicators line up nicely. (Overlength messages - * will be truncated, so don't get too verbose.) * * A typical sequence would look like this: * prep_status("about to flarb the next %d files", fileCount); @@ -135,8 +132,7 @@ prep_status(const char *fmt,...) vsnprintf(message, sizeof(message), fmt, args); va_end(args); - /* trim strings */ - pg_log(PG_REPORT_NONL, "%-*s", MESSAGE_WIDTH, message); + pg_log(PG_REPORT_NONL, "%s ... ", message); } /* @@ -167,9 +163,9 @@ prep_status_progress(const char *fmt,...) * put the individual progress items onto the next line. */ if (log_opts.isatty || log_opts.verbose) - pg_log(PG_REPORT, "%-*s", MESSAGE_WIDTH, message); + pg_log(PG_REPORT, "%s ...", message); else - pg_log(PG_REPORT_NONL, "%-*s", MESSAGE_WIDTH, message); + pg_log(PG_REPORT_NONL, "%s ... ", message); } static void -- 2.25.1 --gBBFr7Ir9EOA20Yy-- ^ permalink raw reply [nested|flat] 5+ messages in thread
* Re: [PATCH] Add min/max aggregate functions to BYTEA @ 2024-09-23 01:05 David Rowley <[email protected]> 0 siblings, 1 reply; 5+ messages in thread From: David Rowley @ 2024-09-23 01:05 UTC (permalink / raw) To: Marat Bukharov <[email protected]>; +Cc: Aleksander Alekseev <[email protected]>; pgsql-hackers On Thu, 25 Jul 2024 at 02:42, Marat Bukharov <[email protected]> wrote: > V5 patch. I've added more tests with different bytea sizes I just glanced over this patch. Are you still planning on working on it? There's been no adjustments made since the last feedback you got in early August. Can you address Andrey's feedback on point #1? Also, for bytea_larger() and bytea_smaller(), I suggest copying what's been done in record_larger() and record_smaller() except use byteacmp(). That'll remove all the duplicated code. If you fix those up, I see no reason not to commit the patch. David ^ permalink raw reply [nested|flat] 5+ messages in thread
* Re: [PATCH] Add min/max aggregate functions to BYTEA @ 2024-10-08 14:23 Aleksander Alekseev <[email protected]> parent: David Rowley <[email protected]> 0 siblings, 1 reply; 5+ messages in thread From: Aleksander Alekseev @ 2024-10-08 14:23 UTC (permalink / raw) To: pgsql-hackers; +Cc: Marat Bukharov <[email protected]>; David Rowley <[email protected]>; Andrey Borodin <[email protected]>; Tom Lane <[email protected]> Hi, > I just glanced over this patch. Are you still planning on working on > it? There's been no adjustments made since the last feedback you got > in early August. > > Can you address Andrey's feedback on point #1? > > Also, for bytea_larger() and bytea_smaller(), I suggest copying what's > been done in record_larger() and record_smaller() except use > byteacmp(). That'll remove all the duplicated code. > > If you fix those up, I see no reason not to commit the patch. Since we haven't heard from Marat since July I decided to rebase the patch and address the feedback received so far. PFA patch v6. -- Best regards, Aleksander Alekseev Attachments: [application/octet-stream] v6-0001-Add-min-and-max-aggregates-for-bytea-type.patch (9.0K, ../../CAJ7c6TMQWB92tJ0YgAVuihXsJjtuK-b3oSz-ZDKjz5chv-TvLA@mail.gmail.com/2-v6-0001-Add-min-and-max-aggregates-for-bytea-type.patch) download | inline diff: From bd6115e9d27dba3e681966ec84b2b78bd323d34d Mon Sep 17 00:00:00 2001 From: Marat Bukharov <[email protected]> Date: Wed, 24 Jul 2024 17:37:31 +0300 Subject: [PATCH v6] Add min and max aggregates for bytea type This is a rather straightforward change: SELECT min(x), max(x) FROM unnest(ARRAY['\xaa' :: bytea, '\xbbbb']) AS x; min | max ------+-------- \xaa | \xbbbb Marat Buharov, Aleksander Alekseev. Reviewed by Andrey Borodin, Tom Lane. Discussion: https://postgr.es/m/CAPCEVGXiASjodos4P8pgyV7ixfVn-ZgG9YyiRZRbVqbGmfuDyg@mail.gmail.com BUMP CATVERSION --- doc/src/sgml/func.sgml | 4 +-- src/backend/utils/adt/varlena.c | 38 ++++++++++++++++++++++++ src/include/catalog/pg_aggregate.dat | 6 ++++ src/include/catalog/pg_proc.dat | 13 ++++++++ src/test/regress/expected/aggregates.out | 28 ++++++++++++++++- src/test/regress/expected/opr_sanity.out | 2 ++ src/test/regress/sql/aggregates.sql | 11 ++++++- 7 files changed, 98 insertions(+), 4 deletions(-) diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml index 7b4fbb5047..b26db3b04b 100644 --- a/doc/src/sgml/func.sgml +++ b/doc/src/sgml/func.sgml @@ -22125,7 +22125,7 @@ SELECT NULLIF(value, '(none)') ... <para> Computes the maximum of the non-null input values. Available for any numeric, string, date/time, or enum type, - as well as <type>inet</type>, <type>interval</type>, + as well as <type>bytea</type>, <type>inet</type>, <type>interval</type>, <type>money</type>, <type>oid</type>, <type>pg_lsn</type>, <type>tid</type>, <type>xid8</type>, and also arrays and composite types containing sortable data types. @@ -22144,7 +22144,7 @@ SELECT NULLIF(value, '(none)') ... <para> Computes the minimum of the non-null input values. Available for any numeric, string, date/time, or enum type, - as well as <type>inet</type>, <type>interval</type>, + as well as <type>bytea</type>, <type>inet</type>, <type>interval</type>, <type>money</type>, <type>oid</type>, <type>pg_lsn</type>, <type>tid</type>, <type>xid8</type>, and also arrays and composite types containing sortable data types. diff --git a/src/backend/utils/adt/varlena.c b/src/backend/utils/adt/varlena.c index d46ed3ccf9..533bebc1c7 100644 --- a/src/backend/utils/adt/varlena.c +++ b/src/backend/utils/adt/varlena.c @@ -3931,6 +3931,44 @@ byteacmp(PG_FUNCTION_ARGS) PG_RETURN_INT32(cmp); } +Datum +bytea_larger(PG_FUNCTION_ARGS) +{ + bytea *arg1 = PG_GETARG_BYTEA_PP(0); + bytea *arg2 = PG_GETARG_BYTEA_PP(1); + bytea *result; + int len1, + len2; + int cmp; + + len1 = VARSIZE_ANY_EXHDR(arg1); + len2 = VARSIZE_ANY_EXHDR(arg2); + + cmp = memcmp(VARDATA_ANY(arg1), VARDATA_ANY(arg2), Min(len1, len2)); + result = ((cmp > 0) || ((cmp == 0) && (len1 > len2)) ? arg1 : arg2); + + PG_RETURN_BYTEA_P(result); +} + +Datum +bytea_smaller(PG_FUNCTION_ARGS) +{ + bytea *arg1 = PG_GETARG_BYTEA_PP(0); + bytea *arg2 = PG_GETARG_BYTEA_PP(1); + bytea *result; + int len1, + len2; + int cmp; + + len1 = VARSIZE_ANY_EXHDR(arg1); + len2 = VARSIZE_ANY_EXHDR(arg2); + + cmp = memcmp(VARDATA_ANY(arg1), VARDATA_ANY(arg2), Min(len1, len2)); + result = ((cmp < 0) || ((cmp == 0) && (len1 < len2)) ? arg1 : arg2); + + PG_RETURN_BYTEA_P(result); +} + Datum bytea_sortsupport(PG_FUNCTION_ARGS) { diff --git a/src/include/catalog/pg_aggregate.dat b/src/include/catalog/pg_aggregate.dat index b6b6352d91..6ba6a997c2 100644 --- a/src/include/catalog/pg_aggregate.dat +++ b/src/include/catalog/pg_aggregate.dat @@ -161,6 +161,9 @@ { aggfnoid => 'max(xid8)', aggtransfn => 'xid8_larger', aggcombinefn => 'xid8_larger', aggsortop => '>(xid8,xid8)', aggtranstype => 'xid8' }, +{ aggfnoid => 'max(bytea)', aggtransfn => 'bytea_larger', + aggcombinefn => 'bytea_larger', aggsortop => '>(bytea,bytea)', + aggtranstype => 'bytea' }, # min { aggfnoid => 'min(int8)', aggtransfn => 'int8smaller', @@ -232,6 +235,9 @@ { aggfnoid => 'min(xid8)', aggtransfn => 'xid8_smaller', aggcombinefn => 'xid8_smaller', aggsortop => '<(xid8,xid8)', aggtranstype => 'xid8' }, +{ aggfnoid => 'min(bytea)', aggtransfn => 'bytea_smaller', + aggcombinefn => 'bytea_smaller', aggsortop => '<(bytea,bytea)', + aggtranstype => 'bytea' }, # count { aggfnoid => 'count(any)', aggtransfn => 'int8inc_any', diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat index 77f54a79e6..3ae31a614c 100644 --- a/src/include/catalog/pg_proc.dat +++ b/src/include/catalog/pg_proc.dat @@ -1314,6 +1314,13 @@ proname => 'text_smaller', proleakproof => 't', prorettype => 'text', proargtypes => 'text text', prosrc => 'text_smaller' }, +{ oid => '8920', descr => 'larger of two', + proname => 'bytea_larger', proleakproof => 't', prorettype => 'bytea', + proargtypes => 'bytea bytea', prosrc => 'bytea_larger' }, +{ oid => '8921', descr => 'smaller of two', + proname => 'bytea_smaller', proleakproof => 't', prorettype => 'bytea', + proargtypes => 'bytea bytea', prosrc => 'bytea_smaller' }, + { oid => '460', descr => 'I/O', proname => 'int8in', prorettype => 'int8', proargtypes => 'cstring', prosrc => 'int8in' }, @@ -6879,6 +6886,9 @@ { oid => '5099', descr => 'maximum value of all xid8 input values', proname => 'max', prokind => 'a', proisstrict => 'f', prorettype => 'xid8', proargtypes => 'xid8', prosrc => 'aggregate_dummy' }, +{ oid => '8922', descr => 'maximum value of all bytea input values', + proname => 'max', prokind => 'a', proisstrict => 'f', prorettype => 'bytea', + proargtypes => 'bytea', prosrc => 'aggregate_dummy' }, { oid => '2131', descr => 'minimum value of all bigint input values', proname => 'min', prokind => 'a', proisstrict => 'f', prorettype => 'int8', @@ -6952,6 +6962,9 @@ { oid => '5100', descr => 'minimum value of all xid8 input values', proname => 'min', prokind => 'a', proisstrict => 'f', prorettype => 'xid8', proargtypes => 'xid8', prosrc => 'aggregate_dummy' }, +{ oid => '8923', descr => 'minimum value of all bytea input values', + proname => 'min', prokind => 'a', proisstrict => 'f', prorettype => 'bytea', + proargtypes => 'bytea', prosrc => 'aggregate_dummy' }, # count has two forms: count(any) and count(*) { oid => '2147', diff --git a/src/test/regress/expected/aggregates.out b/src/test/regress/expected/aggregates.out index 8ac13b562c..e14e735656 100644 --- a/src/test/regress/expected/aggregates.out +++ b/src/test/regress/expected/aggregates.out @@ -1950,7 +1950,7 @@ select string_agg(distinct f1::text, ',' order by f1::text) from varchar_tbl; - a,ab,abcd (1 row) --- string_agg bytea tests +-- string_agg, min, max bytea tests create table bytea_test_table(v bytea); select string_agg(v, '') from bytea_test_table; string_agg @@ -1984,6 +1984,32 @@ select string_agg(v, decode('ee', 'hex')) from bytea_test_table; \xffeeaa (1 row) +select min(v) from bytea_test_table; + min +------ + \xaa +(1 row) + +select max(v) from bytea_test_table; + max +------ + \xff +(1 row) + +insert into bytea_test_table values(decode('ffff','hex')); +insert into bytea_test_table values(decode('aaaa','hex')); +select min(v) from bytea_test_table; + min +------ + \xaa +(1 row) + +select max(v) from bytea_test_table; + max +-------- + \xffff +(1 row) + drop table bytea_test_table; -- Test parallel string_agg and array_agg create table pagg_test (x int, y int) with (autovacuum_enabled = off); diff --git a/src/test/regress/expected/opr_sanity.out b/src/test/regress/expected/opr_sanity.out index 0d734169f1..34a32bd11d 100644 --- a/src/test/regress/expected/opr_sanity.out +++ b/src/test/regress/expected/opr_sanity.out @@ -876,6 +876,8 @@ uuid_extract_timestamp(uuid) uuid_extract_version(uuid) crc32(bytea) crc32c(bytea) +bytea_larger(bytea,bytea) +bytea_smaller(bytea,bytea) -- restore normal output mode \a\t -- List of functions used by libpq's fe-lobj.c diff --git a/src/test/regress/sql/aggregates.sql b/src/test/regress/sql/aggregates.sql index ca6d1bcfb7..ddf38bafb4 100644 --- a/src/test/regress/sql/aggregates.sql +++ b/src/test/regress/sql/aggregates.sql @@ -747,7 +747,7 @@ select string_agg(distinct f1::text, ',' order by f1) from varchar_tbl; -- not select string_agg(distinct f1, ',' order by f1::text) from varchar_tbl; -- not ok select string_agg(distinct f1::text, ',' order by f1::text) from varchar_tbl; -- ok --- string_agg bytea tests +-- string_agg, min, max bytea tests create table bytea_test_table(v bytea); select string_agg(v, '') from bytea_test_table; @@ -762,6 +762,15 @@ select string_agg(v, '') from bytea_test_table; select string_agg(v, NULL) from bytea_test_table; select string_agg(v, decode('ee', 'hex')) from bytea_test_table; +select min(v) from bytea_test_table; +select max(v) from bytea_test_table; + +insert into bytea_test_table values(decode('ffff','hex')); +insert into bytea_test_table values(decode('aaaa','hex')); + +select min(v) from bytea_test_table; +select max(v) from bytea_test_table; + drop table bytea_test_table; -- Test parallel string_agg and array_agg -- 2.46.0 ^ permalink raw reply [nested|flat] 5+ messages in thread
* Re: [PATCH] Add min/max aggregate functions to BYTEA @ 2024-10-08 14:33 Andrey M. Borodin <[email protected]> parent: Aleksander Alekseev <[email protected]> 0 siblings, 1 reply; 5+ messages in thread From: Andrey M. Borodin @ 2024-10-08 14:33 UTC (permalink / raw) To: Aleksander Alekseev <[email protected]>; +Cc: pgsql-hackers; Marat Bukharov <[email protected]>; David Rowley <[email protected]>; Tom Lane <[email protected]> > On 8 Oct 2024, at 19:23, Aleksander Alekseev <[email protected]> wrote: > > PFA patch v6. IMO the patch looks RfC. Best regards, Andrey Borodin. ^ permalink raw reply [nested|flat] 5+ messages in thread
* Re: [PATCH] Add min/max aggregate functions to BYTEA @ 2024-10-08 17:52 Tom Lane <[email protected]> parent: Andrey M. Borodin <[email protected]> 0 siblings, 0 replies; 5+ messages in thread From: Tom Lane @ 2024-10-08 17:52 UTC (permalink / raw) To: Andrey M. Borodin <[email protected]>; +Cc: Aleksander Alekseev <[email protected]>; pgsql-hackers; Marat Bukharov <[email protected]>; David Rowley <[email protected]> "Andrey M. Borodin" <[email protected]> writes: > IMO the patch looks RfC. LGTM too. Pushed. regards, tom lane ^ permalink raw reply [nested|flat] 5+ messages in thread
end of thread, other threads:[~2024-10-08 17:52 UTC | newest] Thread overview: 5+ messages (download: mbox mbox.gz follow: Atom feed) -- links below jump to the message on this page -- 2023-08-02 17:20 [PATCH 1/1] work-in-progress: fix pg_upgrade output Nathan Bossart <[email protected]> 2024-09-23 01:05 Re: [PATCH] Add min/max aggregate functions to BYTEA David Rowley <[email protected]> 2024-10-08 14:23 ` Re: [PATCH] Add min/max aggregate functions to BYTEA Aleksander Alekseev <[email protected]> 2024-10-08 14:33 ` Re: [PATCH] Add min/max aggregate functions to BYTEA Andrey M. Borodin <[email protected]> 2024-10-08 17:52 ` Re: [PATCH] Add min/max aggregate functions to BYTEA Tom Lane <[email protected]>
This inbox is served by agora; see mirroring instructions for how to clone and mirror all data and code used for this inbox