I am hacking some GIST code for a research project and wanted clarification about what exactly a secondary split is in GIST. More specifically I am wondering why the supportSecondarySplit function (which is in src/backend/access/gist/gistsplit.c) can assume that the data is currently on the left side in order to swap it.
/* * Clean up when we did a secondary split but the user-defined PickSplit * method didn't support it (leaving spl_ldatum_exists or spl_rdatum_exists * true). * * We consider whether to swap the left and right outputs of the secondary * split; this can be worthwhile if the penalty for merging those tuples into * the previously chosen sets is less that way. * * In any case we must update the union datums for the current column by * adding in the previous union keys (oldL/oldR), since the user-defined * PickSplit method didn't do so. */ static void supportSecondarySplit(Relation r, GISTSTATE *giststate, int attno, GIST_SPLITVEC *sv, Datum oldL, Datum oldR) { Best, Peter -- Peter Griggs Masters of Engineering (Meng) in Computer Science Massachusetts Institute of Technology | 2020