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

Commitdc391da

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 parent4191e37 commitdc391da

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
@@ -218,25 +218,32 @@ DOTypeNameCompare(const void *p1, const void *p2)
218218
DumpableObject*obj2=*(DumpableObject*const*)p2;
219219
intcmpval;
220220

221-
/* Sort by type */
221+
/* Sort by type's priority */
222222
cmpval=dbObjectTypePriority[obj1->objType]-
223223
dbObjectTypePriority[obj2->objType];
224224

225225
if (cmpval!=0)
226226
returncmpval;
227227

228228
/*
229-
* Sort by namespace.Note thatall objects of the sametype should
230-
* either have or not have a namespace link,so we needn't be fancy about
231-
*cases where one link is null and the other not.
229+
* Sort by namespace.Typically,all objects of the samepriority would
230+
* either have or not have a namespace link,but there are exceptions.
231+
*Sort NULL namespace after non-NULL in such cases.
232232
*/
233-
if (obj1->namespace&&obj2->namespace)
233+
if (obj1->namespace)
234234
{
235-
cmpval=strcmp(obj1->namespace->dobj.name,
236-
obj2->namespace->dobj.name);
237-
if (cmpval!=0)
238-
returncmpval;
235+
if (obj2->namespace)
236+
{
237+
cmpval=strcmp(obj1->namespace->dobj.name,
238+
obj2->namespace->dobj.name);
239+
if (cmpval!=0)
240+
returncmpval;
241+
}
242+
else
243+
return-1;
239244
}
245+
elseif (obj2->namespace)
246+
return1;
240247

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

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp