Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit6b6327d

Browse files
committed
Ensure pg_dump_sort.c sorts null vs non-null namespace consistently.
The original coding here (which is, I believe, my fault) supposed thatit didn't need to concern itself with the possibility that one objectof a given type-priority has a namespace while another doesn't. Butthat's not reliably true anymore, if it ever was; and if it does happenthen it's possible that DOTypeNameCompare returns self-inconsistentcomparison results. That leads to unspecified behavior in qsort()and a resultant weird output order from pg_dump.This should end up being only a cosmetic problem, because any orderingconstraints that actually matter should be enforced by the laterdependency-based sort. Still, it's a bug, so back-patch.Report and fix by Jacob Champion, though I editorialized on hispatch to the extent of making NULL sort after non-NULL, for consistencywith our usual sorting definitions.Discussion:https://postgr.es/m/CABAq_6Hw+V-Kj7PNfD5tgOaWT_-qaYkc+SRmJkPLeUjYXLdxwQ@mail.gmail.com
1 parentca3489e commit6b6327d

File tree

1 file changed

+16
-9
lines changed

1 file changed

+16
-9
lines changed

‎src/bin/pg_dump/pg_dump_sort.c

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -265,25 +265,32 @@ DOTypeNameCompare(const void *p1, const void *p2)
265265
DumpableObject*obj2=*(DumpableObject*const*)p2;
266266
intcmpval;
267267

268-
/* Sort by type */
268+
/* Sort by type's priority */
269269
cmpval=newObjectTypePriority[obj1->objType]-
270270
newObjectTypePriority[obj2->objType];
271271

272272
if (cmpval!=0)
273273
returncmpval;
274274

275275
/*
276-
* Sort by namespace.Note thatall objects of the sametype should
277-
* either have or not have a namespace link,so we needn't be fancy about
278-
*cases where one link is null and the other not.
276+
* Sort by namespace.Typically,all objects of the samepriority would
277+
* either have or not have a namespace link,but there are exceptions.
278+
*Sort NULL namespace after non-NULL in such cases.
279279
*/
280-
if (obj1->namespace&&obj2->namespace)
280+
if (obj1->namespace)
281281
{
282-
cmpval=strcmp(obj1->namespace->dobj.name,
283-
obj2->namespace->dobj.name);
284-
if (cmpval!=0)
285-
returncmpval;
282+
if (obj2->namespace)
283+
{
284+
cmpval=strcmp(obj1->namespace->dobj.name,
285+
obj2->namespace->dobj.name);
286+
if (cmpval!=0)
287+
returncmpval;
288+
}
289+
else
290+
return-1;
286291
}
292+
elseif (obj2->namespace)
293+
return1;
287294

288295
/* Sort by name */
289296
cmpval=strcmp(obj1->name,obj2->name);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp