Skip to content

Commit

Permalink
pg_dump: Dump colliculocale
Browse files Browse the repository at this point in the history
This was forgotten when the new column was introduced.

Author: Marina Polyakova <m.polyakova@postgrespro.ru>
Reviewed-by: Julien Rouhaud <rjuju123@gmail.com>
Discussion: https://www.postgresql.org/message-id/7ad26354e75259f59c4a6c6997b8ee32%40postgrespro.ru
  • Loading branch information
petere committed Aug 24, 2022
1 parent 3d3c05c commit 72b6828
Show file tree
Hide file tree
Showing 3 changed files with 70 additions and 9 deletions.
1 change: 1 addition & 0 deletions src/bin/pg_dump/Makefile
Expand Up @@ -17,6 +17,7 @@ top_builddir = ../../..
include $(top_builddir)/src/Makefile.global

export GZIP_PROGRAM=$(GZIP)
export with_icu

override CPPFLAGS := -I$(libpq_srcdir) $(CPPFLAGS)
LDFLAGS_INTERNAL += -L$(top_builddir)/src/fe_utils -lpgfeutils $(libpq_pgport)
Expand Down
50 changes: 42 additions & 8 deletions src/bin/pg_dump/pg_dump.c
Expand Up @@ -13077,9 +13077,11 @@ dumpCollation(Archive *fout, const CollInfo *collinfo)
int i_collisdeterministic;
int i_collcollate;
int i_collctype;
int i_colliculocale;
const char *collprovider;
const char *collcollate;
const char *collctype;
const char *colliculocale;

/* Do nothing in data-only dump */
if (dopt->dataOnly)
Expand Down Expand Up @@ -13110,6 +13112,13 @@ dumpCollation(Archive *fout, const CollInfo *collinfo)
appendPQExpBufferStr(query,
"true AS collisdeterministic, ");

if (fout->remoteVersion >= 150000)
appendPQExpBufferStr(query,
"colliculocale, ");
else
appendPQExpBufferStr(query,
"NULL AS colliculocale, ");

appendPQExpBuffer(query,
"collcollate, "
"collctype "
Expand All @@ -13123,10 +13132,24 @@ dumpCollation(Archive *fout, const CollInfo *collinfo)
i_collisdeterministic = PQfnumber(res, "collisdeterministic");
i_collcollate = PQfnumber(res, "collcollate");
i_collctype = PQfnumber(res, "collctype");
i_colliculocale = PQfnumber(res, "colliculocale");

collprovider = PQgetvalue(res, 0, i_collprovider);
collcollate = PQgetvalue(res, 0, i_collcollate);
collctype = PQgetvalue(res, 0, i_collctype);

if (!PQgetisnull(res, 0, i_collcollate))
collcollate = PQgetvalue(res, 0, i_collcollate);
else
collcollate = NULL;

if (!PQgetisnull(res, 0, i_collctype))
collctype = PQgetvalue(res, 0, i_collctype);
else
collctype = NULL;

if (!PQgetisnull(res, 0, i_colliculocale))
colliculocale = PQgetvalue(res, 0, i_colliculocale);
else
colliculocale = NULL;

appendPQExpBuffer(delq, "DROP COLLATION %s;\n",
fmtQualifiedDumpable(collinfo));
Expand All @@ -13149,17 +13172,28 @@ dumpCollation(Archive *fout, const CollInfo *collinfo)
if (strcmp(PQgetvalue(res, 0, i_collisdeterministic), "f") == 0)
appendPQExpBufferStr(q, ", deterministic = false");

if (strcmp(collcollate, collctype) == 0)
if (colliculocale != NULL)
{
appendPQExpBufferStr(q, ", locale = ");
appendStringLiteralAH(q, collcollate, fout);
appendStringLiteralAH(q, colliculocale, fout);
}
else
{
appendPQExpBufferStr(q, ", lc_collate = ");
appendStringLiteralAH(q, collcollate, fout);
appendPQExpBufferStr(q, ", lc_ctype = ");
appendStringLiteralAH(q, collctype, fout);
Assert(collcollate != NULL);
Assert(collctype != NULL);

if (strcmp(collcollate, collctype) == 0)
{
appendPQExpBufferStr(q, ", locale = ");
appendStringLiteralAH(q, collcollate, fout);
}
else
{
appendPQExpBufferStr(q, ", lc_collate = ");
appendStringLiteralAH(q, collcollate, fout);
appendPQExpBufferStr(q, ", lc_ctype = ");
appendStringLiteralAH(q, collctype, fout);
}
}

/*
Expand Down
28 changes: 27 additions & 1 deletion src/bin/pg_dump/t/002_pg_dump.pl
Expand Up @@ -1593,6 +1593,15 @@
like => { %full_runs, section_pre_data => 1, },
},

'CREATE COLLATION icu_collation' => {
create_order => 76,
create_sql => "CREATE COLLATION icu_collation (PROVIDER = icu, LOCALE = 'C');",
regexp =>
qr/CREATE COLLATION public.icu_collation \(provider = icu, locale = 'C'(, version = '[^']*')?\);/m,
icu => 1,
like => { %full_runs, section_pre_data => 1, },
},

'CREATE CAST FOR timestamptz' => {
create_order => 51,
create_sql =>
Expand Down Expand Up @@ -3868,7 +3877,7 @@
$collation_support = 1;
}
# Determine whether build supports LZ4 and gzip.
my $supports_icu = ($ENV{with_icu} eq 'yes');
my $supports_lz4 = check_pg_config("#define USE_LZ4 1");
my $supports_gzip = check_pg_config("#define HAVE_LIBZ 1");
Expand Down Expand Up @@ -3909,6 +3918,11 @@
$test_db = $tests{$test}->{database};
}
if (defined($tests{$test}->{icu}))
{
$tests{$test}->{collation} = 1;
}
if ($tests{$test}->{create_sql})
{
Expand All @@ -3918,6 +3932,12 @@
next;
}
# Skip any icu-related collation commands if build was without icu
if (!$supports_icu && defined($tests{$test}->{icu}))
{
next;
}
# Skip tests specific to LZ4 if this build does not support
# this option.
if (!$supports_lz4 && defined($tests{$test}->{lz4}))
Expand Down Expand Up @@ -4119,6 +4139,12 @@
next;
}
# Skip any icu-related collation commands if build was without icu
if (!$supports_icu && defined($tests{$test}->{icu}))
{
next;
}
# Skip tests specific to LZ4 if this build does not support
# this option.
if (!$supports_lz4 && defined($tests{$test}->{lz4}))
Expand Down

0 comments on commit 72b6828

Please sign in to comment.