On Sun, Dec 4, 2011 at 2:17 PM, Tom Lane <t...@sss.pgh.pa.us> wrote: > * I invented a "SortKey" struct that replaces ScanKey for tuplesort's > purposes. Right now that's local in tuplesort.c, but we're more than > likely going to need it elsewhere as well. Should we just define it > in sortsupport.h? Or perhaps we should just add the few additional > fields to SortSupportInfoData, and not bother with two struct types? > Before you answer, consider the next point.
+1 for not bothering with two struct types. We might want to consider calling the resulting structure SortKey rather than SortSupportInfoData, however. > * I wonder whether it would be worthwhile to elide inlineApplyComparator > altogether, pushing what it does down to the level of the > datatype-specific functions. That would require changing the > "comparator" API to include isnull flags, and exposing the > reverse/nulls_first sort flags to the comparators (presumably by > including them in SortSupportInfoData). The main way in which that > could be a win would be if the setup function could choose one of four > comparator functions that are pre-specialized for each flags > combination; but that seems like it would add a lot of code bulk, and > the bigger problem is that we need to be able to change the flags after > sort initialization (cf. the reversedirection code in tuplesort.c), so > we'd also need some kind of "re-select the comparator" call API. On the > whole this doesn't seem promising, but maybe somebody else has a > different idea. I thought about this, too, but it didn't seem promising to me, either. > * We're going to want to expose PrepareSortSupportComparisonShim > for use outside tuplesort.c too, and possibly refactor > tuplesort_begin_heap so that the SortKey setup logic inside it > can be extracted for use elsewhere. Shall we just add those to > tuplesort's API, or would it be better to create a sortsupport.c > with these sorts of functions? Why are we going to want to do that? If it's because there are other places in the code that can make use of a fast comparator that don't go through tuplesort.c, then we should probably break it off into a separate file (sortkey.c?). But if it's because we think that clients of the tuplesort code are going to need it for some reason, then we may as well keep it in tuplesort.c. -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company -- Sent via pgsql-hackers mailing list (email@example.com) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers