8479716afe2a31901141de47a23bcddf06325fa3 hiram Thu Mar 26 17:28:55 2020 -0700 unsigned int is a poor choice for numbers that need to have operations such as subtraction on them, MySQL keeps everything in unsigned int and is confused by negative results refs #21074 diff --git src/hg/lib/asmEquivalent.c src/hg/lib/asmEquivalent.c new file mode 100644 index 0000000..917694c --- /dev/null +++ src/hg/lib/asmEquivalent.c @@ -0,0 +1,255 @@ +/* asmEquivalent.c was originally generated by the autoSql program, which also + * generated asmEquivalent.h and asmEquivalent.sql. This module links the database and + * the RAM representation of objects. */ + +#include "common.h" +#include "linefile.h" +#include "dystring.h" +#include "jksql.h" +#include "asmEquivalent.h" + + + +char *asmEquivalentCommaSepFieldNames = "source,destination,sourceAuthority,destinationAuthority,matchCount,sourceCount,destinationCount"; + +/* definitions for sourceAuthority column */ +static char *values_sourceAuthority[] = {"ensembl", "ucsc", "genbank", "refseq", NULL}; +static struct hash *valhash_sourceAuthority = NULL; + +/* definitions for destinationAuthority column */ +static char *values_destinationAuthority[] = {"ensembl", "ucsc", "genbank", "refseq", NULL}; +static struct hash *valhash_destinationAuthority = NULL; + +void asmEquivalentStaticLoad(char **row, struct asmEquivalent *ret) +/* Load a row from asmEquivalent table into ret. The contents of ret will + * be replaced at the next call to this function. */ +{ + +ret->source = row[0]; +ret->destination = row[1]; +ret->sourceAuthority = sqlEnumParse(row[2], values_sourceAuthority, &valhash_sourceAuthority); +ret->destinationAuthority = sqlEnumParse(row[3], values_destinationAuthority, &valhash_destinationAuthority); +ret->matchCount = sqlLongLong(row[4]); +ret->sourceCount = sqlLongLong(row[5]); +ret->destinationCount = sqlLongLong(row[6]); +} + +struct asmEquivalent *asmEquivalentLoadByQuery(struct sqlConnection *conn, char *query) +/* Load all asmEquivalent from table that satisfy the query given. + * Where query is of the form 'select * from example where something=something' + * or 'select example.* from example, anotherTable where example.something = + * anotherTable.something'. + * Dispose of this with asmEquivalentFreeList(). */ +{ +struct asmEquivalent *list = NULL, *el; +struct sqlResult *sr; +char **row; + +sr = sqlGetResult(conn, query); +while ((row = sqlNextRow(sr)) != NULL) + { + el = asmEquivalentLoad(row); + slAddHead(&list, el); + } +slReverse(&list); +sqlFreeResult(&sr); +return list; +} + +void asmEquivalentSaveToDb(struct sqlConnection *conn, struct asmEquivalent *el, char *tableName, int updateSize) +/* Save asmEquivalent as a row to the table specified by tableName. + * As blob fields may be arbitrary size updateSize specifies the approx size + * of a string that would contain the entire query. Arrays of native types are + * converted to comma separated strings and loaded as such, User defined types are + * inserted as NULL. This function automatically escapes quoted strings for mysql. */ +{ +struct dyString *update = newDyString(updateSize); +sqlDyStringPrintf(update, "insert into %s values ( '%s','%s',(null),(null),%lld,%lld,%lld)", + tableName, el->source, el->destination, el->sourceAuthority, el->destinationAuthority, el->matchCount, el->sourceCount, el->destinationCount); +sqlUpdate(conn, update->string); +freeDyString(&update); +} + +struct asmEquivalent *asmEquivalentLoad(char **row) +/* Load a asmEquivalent from row fetched with select * from asmEquivalent + * from database. Dispose of this with asmEquivalentFree(). */ +{ +struct asmEquivalent *ret; + +AllocVar(ret); +ret->source = cloneString(row[0]); +ret->destination = cloneString(row[1]); +ret->sourceAuthority = sqlEnumParse(row[2], values_sourceAuthority, &valhash_sourceAuthority); +ret->destinationAuthority = sqlEnumParse(row[3], values_destinationAuthority, &valhash_destinationAuthority); +ret->matchCount = sqlLongLong(row[4]); +ret->sourceCount = sqlLongLong(row[5]); +ret->destinationCount = sqlLongLong(row[6]); +return ret; +} + +struct asmEquivalent *asmEquivalentLoadAll(char *fileName) +/* Load all asmEquivalent from a whitespace-separated file. + * Dispose of this with asmEquivalentFreeList(). */ +{ +struct asmEquivalent *list = NULL, *el; +struct lineFile *lf = lineFileOpen(fileName, TRUE); +char *row[7]; + +while (lineFileRow(lf, row)) + { + el = asmEquivalentLoad(row); + slAddHead(&list, el); + } +lineFileClose(&lf); +slReverse(&list); +return list; +} + +struct asmEquivalent *asmEquivalentLoadAllByChar(char *fileName, char chopper) +/* Load all asmEquivalent from a chopper separated file. + * Dispose of this with asmEquivalentFreeList(). */ +{ +struct asmEquivalent *list = NULL, *el; +struct lineFile *lf = lineFileOpen(fileName, TRUE); +char *row[7]; + +while (lineFileNextCharRow(lf, chopper, row, ArraySize(row))) + { + el = asmEquivalentLoad(row); + slAddHead(&list, el); + } +lineFileClose(&lf); +slReverse(&list); +return list; +} + +struct asmEquivalent *asmEquivalentCommaIn(char **pS, struct asmEquivalent *ret) +/* Create a asmEquivalent out of a comma separated string. + * This will fill in ret if non-null, otherwise will + * return a new asmEquivalent */ +{ +char *s = *pS; + +if (ret == NULL) + AllocVar(ret); +ret->source = sqlStringComma(&s); +ret->destination = sqlStringComma(&s); +ret->sourceAuthority = sqlEnumComma(&s, values_sourceAuthority, &valhash_sourceAuthority); +ret->destinationAuthority = sqlEnumComma(&s, values_destinationAuthority, &valhash_destinationAuthority); +ret->matchCount = sqlLongLongComma(&s); +ret->sourceCount = sqlLongLongComma(&s); +ret->destinationCount = sqlLongLongComma(&s); +*pS = s; +return ret; +} + +void asmEquivalentFree(struct asmEquivalent **pEl) +/* Free a single dynamically allocated asmEquivalent such as created + * with asmEquivalentLoad(). */ +{ +struct asmEquivalent *el; + +if ((el = *pEl) == NULL) return; +freeMem(el->source); +freeMem(el->destination); +freez(pEl); +} + +void asmEquivalentFreeList(struct asmEquivalent **pList) +/* Free a list of dynamically allocated asmEquivalent's */ +{ +struct asmEquivalent *el, *next; + +for (el = *pList; el != NULL; el = next) + { + next = el->next; + asmEquivalentFree(&el); + } +*pList = NULL; +} + +void asmEquivalentOutput(struct asmEquivalent *el, FILE *f, char sep, char lastSep) +/* Print out asmEquivalent. Separate fields with sep. Follow last field with lastSep. */ +{ +if (sep == ',') fputc('"',f); +fprintf(f, "%s", el->source); +if (sep == ',') fputc('"',f); +fputc(sep,f); +if (sep == ',') fputc('"',f); +fprintf(f, "%s", el->destination); +if (sep == ',') fputc('"',f); +fputc(sep,f); +if (sep == ',') fputc('"',f); +sqlEnumPrint(f, el->sourceAuthority, values_sourceAuthority); +if (sep == ',') fputc('"',f); +fputc(sep,f); +if (sep == ',') fputc('"',f); +sqlEnumPrint(f, el->destinationAuthority, values_destinationAuthority); +if (sep == ',') fputc('"',f); +fputc(sep,f); +fprintf(f, "%lld", el->matchCount); +fputc(sep,f); +fprintf(f, "%lld", el->sourceCount); +fputc(sep,f); +fprintf(f, "%lld", el->destinationCount); +fputc(lastSep,f); +} + +void asmEquivalentJsonOutput(struct asmEquivalent *el, FILE *f) +/* Print out asmEquivalent in JSON format. */ +{ +fputc('{',f); +fputc('"',f); +fprintf(f,"source"); +fputc('"',f); +fputc(':',f); +fputc('"',f); +fprintf(f, "%s", el->source); +fputc('"',f); +fputc(',',f); +fputc('"',f); +fprintf(f,"destination"); +fputc('"',f); +fputc(':',f); +fputc('"',f); +fprintf(f, "%s", el->destination); +fputc('"',f); +fputc(',',f); +fputc('"',f); +fprintf(f,"sourceAuthority"); +fputc('"',f); +fputc(':',f); +fputc('"',f); +sqlEnumPrint(f, el->sourceAuthority, values_sourceAuthority); +fputc('"',f); +fputc(',',f); +fputc('"',f); +fprintf(f,"destinationAuthority"); +fputc('"',f); +fputc(':',f); +fputc('"',f); +sqlEnumPrint(f, el->destinationAuthority, values_destinationAuthority); +fputc('"',f); +fputc(',',f); +fputc('"',f); +fprintf(f,"matchCount"); +fputc('"',f); +fputc(':',f); +fprintf(f, "%lld", el->matchCount); +fputc(',',f); +fputc('"',f); +fprintf(f,"sourceCount"); +fputc('"',f); +fputc(':',f); +fprintf(f, "%lld", el->sourceCount); +fputc(',',f); +fputc('"',f); +fprintf(f,"destinationCount"); +fputc('"',f); +fputc(':',f); +fprintf(f, "%lld", el->destinationCount); +fputc('}',f); +} + +/* -------------------------------- End autoSql Generated Code -------------------------------- */ +