a48e4a31e870414b9ed4a9731bf4ca694e6ff008 chmalee Wed Oct 30 11:36:15 2019 -0700 Fixes to hub searching after code review: Angie noticed that links were broken due to a bug, but it turns out they were broken in a much bigger way as subtrack search hits were not linking out to the right parent tracks. This has been fixed by adding a new column to the hubSearchText table to encode the parent type of the parent tracks (comp, super, etc), and then building the links the correct way, refs #24338 diff --git src/hg/inc/hubSearchText.h src/hg/inc/hubSearchText.h index 6e3b9b4..9d98def 100644 --- src/hg/inc/hubSearchText.h +++ src/hg/inc/hubSearchText.h @@ -1,81 +1,82 @@ /* hubSearchText.h was originally generated by the autoSql program, which also * generated hubSearchText.c and hubSearchText.sql. This header links the database and * the RAM representation of objects. */ #ifndef HUBSEARCHTEXT_H #define HUBSEARCHTEXT_H #define HUBSEARCHTEXT_NUM_COLS 7 extern char *hubSearchTextCommaSepFieldNames; enum hubSearchTextTextLength { hubSearchTextShort = 0, hubSearchTextLong = 1, hubSearchTextMeta = 2, }; struct hubSearchText /* Track hub descriptions */ { struct hubSearchText *next; /* Next in singly linked list. */ char *hubUrl; /* Hub URL */ char *db; /* Assembly name (UCSC format) for Assembly and Track descriptions, NULL for hub descriptions */ char *track; /* Track name for track descriptions, NULL for others */ char *label; /* Name to display in search results */ - char *parents; /* Comma separated list of parent track of this track, NULL for others */ enum hubSearchTextTextLength textLength; /* Length of text (short for labels, long for description pages, meta for metadata) */ char *text; /* Description text */ + char *parents; /* Comma separated list of parent track of this track, NULL for others */ + char *parentTypes; /* Comma separated list of parent track types */ }; void hubSearchTextStaticLoadWithNull(char **row, struct hubSearchText *ret); /* Load a row from hubSearchText table into ret. The contents of ret will * be replaced at the next call to this function. */ struct hubSearchText *hubSearchTextLoadWithNull(char **row); /* Load a hubSearchText from row fetched with select * from hubSearchText * from database. Dispose of this with hubSearchTextFree(). */ struct hubSearchText *hubSearchTextLoadAll(char *fileName); /* Load all hubSearchText from whitespace-separated file. * Dispose of this with hubSearchTextFreeList(). */ struct hubSearchText *hubSearchTextLoadAllByChar(char *fileName, char chopper); /* Load all hubSearchText from chopper separated file. * Dispose of this with hubSearchTextFreeList(). */ #define hubSearchTextLoadAllByTab(a) hubSearchTextLoadAllByChar(a, '\t'); /* Load all hubSearchText from tab separated file. * Dispose of this with hubSearchTextFreeList(). */ struct hubSearchText *hubSearchTextCommaIn(char **pS, struct hubSearchText *ret); /* Create a hubSearchText out of a comma separated string. * This will fill in ret if non-null, otherwise will * return a new hubSearchText */ void hubSearchTextFree(struct hubSearchText **pEl); /* Free a single dynamically allocated hubSearchText such as created * with hubSearchTextLoad(). */ void hubSearchTextFreeList(struct hubSearchText **pList); /* Free a list of dynamically allocated hubSearchText's */ void hubSearchTextOutput(struct hubSearchText *el, FILE *f, char sep, char lastSep); /* Print out hubSearchText. Separate fields with sep. Follow last field with lastSep. */ #define hubSearchTextTabOut(el,f) hubSearchTextOutput(el,f,'\t','\n'); /* Print out hubSearchText as a line in a tab-separated file. */ #define hubSearchTextCommaOut(el,f) hubSearchTextOutput(el,f,',',','); /* Print out hubSearchText as a comma separated list including final comma. */ /* -------------------------------- End autoSql Generated Code -------------------------------- */ struct hubSearchText *hubSearchTextLoadWithNullGiveContext(char **row, char *searchTerms); /* Load a hubSearchText from row fetched with select * from hubSearchText * from database, but instead of loading the entire text field for long text results, * only load the pieces that provide context for the supplied searchTerms. * Dispose of this with hubSearchTextFree(). */ #endif /* HUBSEARCHTEXT_H */