643fc5346b9416e784bdf9b169ae9405d651264d hiram Thu Jul 30 15:37:45 2026 -0700 definitions to load the assembly_summary files from NCBI refs #37958 diff --git src/hg/lib/assemblySummary.c src/hg/lib/assemblySummary.c new file mode 100644 index 00000000000..05b3af464b4 --- /dev/null +++ src/hg/lib/assemblySummary.c @@ -0,0 +1,596 @@ +/* assemblySummary.c was originally generated by the autoSql program, which also + * generated assemblySummary.h and assemblySummary.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 "assemblySummary.h" + + + +char *assemblySummaryCommaSepFieldNames = "assemblyAccession,bioproject,biosample,wgsMaster,refseqCategory,taxId,speciesTaxid,organismName,infraspecificName,isolate,versionStatus,assemblyLevel,releaseType,genomeRep,seqRelDate,asmName,asmSubmitter,gbrsPairedAsm,pairedAsmComp,ftpPath,excludedFromRefseq,relationToTypeMaterial,asmNotLiveDate,assemblyType,taxonGroup,genomeSize,genomeSizeUngapped,gcPercent,repliconCount,scaffoldCount,contigCount,annotationProvider,annotationName,annotationDate,totalGeneCount,proteinCodingGeneCount,nonCodingGeneCount,pubmedId"; + +void assemblySummaryStaticLoadWithNull(char **row, struct assemblySummary *ret) +/* Load a row from assemblySummary table into ret. The contents of ret will + * be replaced at the next call to this function. */ +{ + +ret->assemblyAccession = row[0]; +ret->bioproject = row[1]; +ret->biosample = row[2]; +ret->wgsMaster = row[3]; +ret->refseqCategory = row[4]; +if (row[5] != NULL) + { + ret->taxId = needMem(sizeof(*(ret->taxId))); + *(ret->taxId) = sqlUnsigned(row[5]); + } +else + { + ret->taxId = NULL; + } +if (row[6] != NULL) + { + ret->speciesTaxid = needMem(sizeof(*(ret->speciesTaxid))); + *(ret->speciesTaxid) = sqlUnsigned(row[6]); + } +else + { + ret->speciesTaxid = NULL; + } +ret->organismName = row[7]; +ret->infraspecificName = row[8]; +ret->isolate = row[9]; +ret->versionStatus = row[10]; +ret->assemblyLevel = row[11]; +ret->releaseType = row[12]; +ret->genomeRep = row[13]; +ret->seqRelDate = row[14]; +ret->asmName = row[15]; +ret->asmSubmitter = row[16]; +ret->gbrsPairedAsm = row[17]; +ret->pairedAsmComp = row[18]; +ret->ftpPath = row[19]; +ret->excludedFromRefseq = row[20]; +ret->relationToTypeMaterial = row[21]; +ret->asmNotLiveDate = row[22]; +ret->assemblyType = row[23]; +ret->taxonGroup = row[24]; +if (row[25] != NULL) + { + ret->genomeSize = needMem(sizeof(*(ret->genomeSize))); + *(ret->genomeSize) = sqlLongLong(row[25]); + } +else + { + ret->genomeSize = NULL; + } +if (row[26] != NULL) + { + ret->genomeSizeUngapped = needMem(sizeof(*(ret->genomeSizeUngapped))); + *(ret->genomeSizeUngapped) = sqlLongLong(row[26]); + } +else + { + ret->genomeSizeUngapped = NULL; + } +if (row[27] != NULL) + { + ret->gcPercent = needMem(sizeof(float)); + *(ret->gcPercent) = sqlFloat(row[27]); + } +if (row[28] != NULL) + { + ret->repliconCount = needMem(sizeof(*(ret->repliconCount))); + *(ret->repliconCount) = sqlUnsigned(row[28]); + } +else + { + ret->repliconCount = NULL; + } +if (row[29] != NULL) + { + ret->scaffoldCount = needMem(sizeof(*(ret->scaffoldCount))); + *(ret->scaffoldCount) = sqlUnsigned(row[29]); + } +else + { + ret->scaffoldCount = NULL; + } +if (row[30] != NULL) + { + ret->contigCount = needMem(sizeof(*(ret->contigCount))); + *(ret->contigCount) = sqlUnsigned(row[30]); + } +else + { + ret->contigCount = NULL; + } +ret->annotationProvider = row[31]; +ret->annotationName = row[32]; +ret->annotationDate = row[33]; +if (row[34] != NULL) + { + ret->totalGeneCount = needMem(sizeof(*(ret->totalGeneCount))); + *(ret->totalGeneCount) = sqlUnsigned(row[34]); + } +else + { + ret->totalGeneCount = NULL; + } +if (row[35] != NULL) + { + ret->proteinCodingGeneCount = needMem(sizeof(*(ret->proteinCodingGeneCount))); + *(ret->proteinCodingGeneCount) = sqlUnsigned(row[35]); + } +else + { + ret->proteinCodingGeneCount = NULL; + } +if (row[36] != NULL) + { + ret->nonCodingGeneCount = needMem(sizeof(*(ret->nonCodingGeneCount))); + *(ret->nonCodingGeneCount) = sqlUnsigned(row[36]); + } +else + { + ret->nonCodingGeneCount = NULL; + } +ret->pubmedId = row[37]; +} + +struct assemblySummary *assemblySummaryLoadByQuery(struct sqlConnection *conn, char *query) +/* Load all assemblySummary 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 assemblySummaryFreeList(). */ +{ +struct assemblySummary *list = NULL, *el; +struct sqlResult *sr; +char **row; + +sr = sqlGetResult(conn, query); +while ((row = sqlNextRow(sr)) != NULL) + { + el = assemblySummaryLoadWithNull(row); + slAddHead(&list, el); + } +slReverse(&list); +sqlFreeResult(&sr); +return list; +} + +void assemblySummarySaveToDb(struct sqlConnection *conn, struct assemblySummary *el, char *tableName, int updateSize) +/* Save assemblySummary 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 = dyStringNew(updateSize); +sqlDyStringPrintf(update, "insert into %s values ( '%s','%s','%s','%s','%s',%u,%u,'%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s',%lld,%lld,%g,%u,%u,%u,'%s','%s','%s',%u,%u,%u,'%s')", + tableName, el->assemblyAccession, el->bioproject, el->biosample, el->wgsMaster, el->refseqCategory, *(el->taxId), *(el->speciesTaxid), el->organismName, el->infraspecificName, el->isolate, el->versionStatus, el->assemblyLevel, el->releaseType, el->genomeRep, el->seqRelDate, el->asmName, el->asmSubmitter, el->gbrsPairedAsm, el->pairedAsmComp, el->ftpPath, el->excludedFromRefseq, el->relationToTypeMaterial, el->asmNotLiveDate, el->assemblyType, el->taxonGroup, *(el->genomeSize), *(el->genomeSizeUngapped), *(el->gcPercent), *(el->repliconCount), *(el->scaffoldCount), *(el->contigCount), el->annotationProvider, el->annotationName, el->annotationDate, *(el->totalGeneCount), *(el->proteinCodingGeneCount), *(el->nonCodingGeneCount), el->pubmedId); +sqlUpdate(conn, update->string); +dyStringFree(&update); +} + +struct assemblySummary *assemblySummaryLoadWithNull(char **row) +/* Load a assemblySummary from row fetched with select * from assemblySummary + * from database. Dispose of this with assemblySummaryFree(). */ +{ +struct assemblySummary *ret; + +AllocVar(ret); +ret->assemblyAccession = cloneString(row[0]); +ret->bioproject = cloneString(row[1]); +ret->biosample = cloneString(row[2]); +ret->wgsMaster = cloneString(row[3]); +ret->refseqCategory = cloneString(row[4]); +if (row[5] != NULL) + { + ret->taxId = needMem(sizeof(*(ret->taxId))); + *(ret->taxId) = sqlUnsigned(row[5]); + } +else + { + ret->taxId = NULL; + } +if (row[6] != NULL) + { + ret->speciesTaxid = needMem(sizeof(*(ret->speciesTaxid))); + *(ret->speciesTaxid) = sqlUnsigned(row[6]); + } +else + { + ret->speciesTaxid = NULL; + } +ret->organismName = cloneString(row[7]); +ret->infraspecificName = cloneString(row[8]); +ret->isolate = cloneString(row[9]); +ret->versionStatus = cloneString(row[10]); +ret->assemblyLevel = cloneString(row[11]); +ret->releaseType = cloneString(row[12]); +ret->genomeRep = cloneString(row[13]); +ret->seqRelDate = cloneString(row[14]); +ret->asmName = cloneString(row[15]); +ret->asmSubmitter = cloneString(row[16]); +ret->gbrsPairedAsm = cloneString(row[17]); +ret->pairedAsmComp = cloneString(row[18]); +ret->ftpPath = cloneString(row[19]); +ret->excludedFromRefseq = cloneString(row[20]); +ret->relationToTypeMaterial = cloneString(row[21]); +ret->asmNotLiveDate = cloneString(row[22]); +ret->assemblyType = cloneString(row[23]); +ret->taxonGroup = cloneString(row[24]); +if (row[25] != NULL) + { + ret->genomeSize = needMem(sizeof(*(ret->genomeSize))); + *(ret->genomeSize) = sqlLongLong(row[25]); + } +else + { + ret->genomeSize = NULL; + } +if (row[26] != NULL) + { + ret->genomeSizeUngapped = needMem(sizeof(*(ret->genomeSizeUngapped))); + *(ret->genomeSizeUngapped) = sqlLongLong(row[26]); + } +else + { + ret->genomeSizeUngapped = NULL; + } +if (row[27] != NULL) + { + ret->gcPercent = needMem(sizeof(float)); + *(ret->gcPercent) = sqlFloat(row[27]); + } +if (row[28] != NULL) + { + ret->repliconCount = needMem(sizeof(*(ret->repliconCount))); + *(ret->repliconCount) = sqlUnsigned(row[28]); + } +else + { + ret->repliconCount = NULL; + } +if (row[29] != NULL) + { + ret->scaffoldCount = needMem(sizeof(*(ret->scaffoldCount))); + *(ret->scaffoldCount) = sqlUnsigned(row[29]); + } +else + { + ret->scaffoldCount = NULL; + } +if (row[30] != NULL) + { + ret->contigCount = needMem(sizeof(*(ret->contigCount))); + *(ret->contigCount) = sqlUnsigned(row[30]); + } +else + { + ret->contigCount = NULL; + } +ret->annotationProvider = cloneString(row[31]); +ret->annotationName = cloneString(row[32]); +ret->annotationDate = cloneString(row[33]); +if (row[34] != NULL) + { + ret->totalGeneCount = needMem(sizeof(*(ret->totalGeneCount))); + *(ret->totalGeneCount) = sqlUnsigned(row[34]); + } +else + { + ret->totalGeneCount = NULL; + } +if (row[35] != NULL) + { + ret->proteinCodingGeneCount = needMem(sizeof(*(ret->proteinCodingGeneCount))); + *(ret->proteinCodingGeneCount) = sqlUnsigned(row[35]); + } +else + { + ret->proteinCodingGeneCount = NULL; + } +if (row[36] != NULL) + { + ret->nonCodingGeneCount = needMem(sizeof(*(ret->nonCodingGeneCount))); + *(ret->nonCodingGeneCount) = sqlUnsigned(row[36]); + } +else + { + ret->nonCodingGeneCount = NULL; + } +ret->pubmedId = cloneString(row[37]); +return ret; +} + +struct assemblySummary *assemblySummaryLoadAll(char *fileName) +/* Load all assemblySummary from a whitespace-separated file. + * Dispose of this with assemblySummaryFreeList(). */ +{ +struct assemblySummary *list = NULL, *el; +struct lineFile *lf = lineFileOpen(fileName, TRUE); +char *row[38]; + +while (lineFileRow(lf, row)) + { + el = assemblySummaryLoadWithNull(row); + slAddHead(&list, el); + } +lineFileClose(&lf); +slReverse(&list); +return list; +} + +struct assemblySummary *assemblySummaryLoadAllByChar(char *fileName, char chopper) +/* Load all assemblySummary from a chopper separated file. + * Dispose of this with assemblySummaryFreeList(). */ +{ +struct assemblySummary *list = NULL, *el; +struct lineFile *lf = lineFileOpen(fileName, TRUE); +char *row[38]; + +while (lineFileNextCharRow(lf, chopper, row, ArraySize(row))) + { + el = assemblySummaryLoadWithNull(row); + slAddHead(&list, el); + } +lineFileClose(&lf); +slReverse(&list); +return list; +} + +struct assemblySummary *assemblySummaryCommaIn(char **pS, struct assemblySummary *ret) +/* Create a assemblySummary out of a comma separated string. + * This will fill in ret if non-null, otherwise will + * return a new assemblySummary */ +{ +char *s = *pS; + +if (ret == NULL) + AllocVar(ret); +ret->assemblyAccession = sqlStringComma(&s); +ret->bioproject = sqlStringComma(&s); +ret->biosample = sqlStringComma(&s); +ret->wgsMaster = sqlStringComma(&s); +ret->refseqCategory = sqlStringComma(&s); +ret->taxId = needMem(sizeof(unsigned)); +*(ret->taxId) = sqlUnsignedComma(&s); +ret->speciesTaxid = needMem(sizeof(unsigned)); +*(ret->speciesTaxid) = sqlUnsignedComma(&s); +ret->organismName = sqlStringComma(&s); +ret->infraspecificName = sqlStringComma(&s); +ret->isolate = sqlStringComma(&s); +ret->versionStatus = sqlStringComma(&s); +ret->assemblyLevel = sqlStringComma(&s); +ret->releaseType = sqlStringComma(&s); +ret->genomeRep = sqlStringComma(&s); +ret->seqRelDate = sqlStringComma(&s); +ret->asmName = sqlStringComma(&s); +ret->asmSubmitter = sqlStringComma(&s); +ret->gbrsPairedAsm = sqlStringComma(&s); +ret->pairedAsmComp = sqlStringComma(&s); +ret->ftpPath = sqlStringComma(&s); +ret->excludedFromRefseq = sqlStringComma(&s); +ret->relationToTypeMaterial = sqlStringComma(&s); +ret->asmNotLiveDate = sqlStringComma(&s); +ret->assemblyType = sqlStringComma(&s); +ret->taxonGroup = sqlStringComma(&s); +ret->genomeSize = needMem(sizeof(*(ret->genomeSize))); +*(ret->genomeSize) = sqlLongLongComma(&s); +ret->genomeSizeUngapped = needMem(sizeof(*(ret->genomeSizeUngapped))); +*(ret->genomeSizeUngapped) = sqlLongLongComma(&s); +ret->gcPercent = needMem(sizeof(*(ret->gcPercent))); +*(ret->gcPercent) = sqlFloatComma(&s); +ret->repliconCount = needMem(sizeof(unsigned)); +*(ret->repliconCount) = sqlUnsignedComma(&s); +ret->scaffoldCount = needMem(sizeof(unsigned)); +*(ret->scaffoldCount) = sqlUnsignedComma(&s); +ret->contigCount = needMem(sizeof(unsigned)); +*(ret->contigCount) = sqlUnsignedComma(&s); +ret->annotationProvider = sqlStringComma(&s); +ret->annotationName = sqlStringComma(&s); +ret->annotationDate = sqlStringComma(&s); +ret->totalGeneCount = needMem(sizeof(unsigned)); +*(ret->totalGeneCount) = sqlUnsignedComma(&s); +ret->proteinCodingGeneCount = needMem(sizeof(unsigned)); +*(ret->proteinCodingGeneCount) = sqlUnsignedComma(&s); +ret->nonCodingGeneCount = needMem(sizeof(unsigned)); +*(ret->nonCodingGeneCount) = sqlUnsignedComma(&s); +ret->pubmedId = sqlStringComma(&s); +*pS = s; +return ret; +} + +void assemblySummaryFree(struct assemblySummary **pEl) +/* Free a single dynamically allocated assemblySummary such as created + * with assemblySummaryLoad(). */ +{ +struct assemblySummary *el; + +if ((el = *pEl) == NULL) return; +freeMem(el->assemblyAccession); +freeMem(el->bioproject); +freeMem(el->biosample); +freeMem(el->wgsMaster); +freeMem(el->refseqCategory); +freeMem(el->organismName); +freeMem(el->infraspecificName); +freeMem(el->isolate); +freeMem(el->versionStatus); +freeMem(el->assemblyLevel); +freeMem(el->releaseType); +freeMem(el->genomeRep); +freeMem(el->seqRelDate); +freeMem(el->asmName); +freeMem(el->asmSubmitter); +freeMem(el->gbrsPairedAsm); +freeMem(el->pairedAsmComp); +freeMem(el->ftpPath); +freeMem(el->excludedFromRefseq); +freeMem(el->relationToTypeMaterial); +freeMem(el->asmNotLiveDate); +freeMem(el->assemblyType); +freeMem(el->taxonGroup); +freeMem(el->annotationProvider); +freeMem(el->annotationName); +freeMem(el->annotationDate); +freeMem(el->pubmedId); +freez(pEl); +} + +void assemblySummaryFreeList(struct assemblySummary **pList) +/* Free a list of dynamically allocated assemblySummary's */ +{ +struct assemblySummary *el, *next; + +for (el = *pList; el != NULL; el = next) + { + next = el->next; + assemblySummaryFree(&el); + } +*pList = NULL; +} + +void assemblySummaryOutput(struct assemblySummary *el, FILE *f, char sep, char lastSep) +/* Print out assemblySummary. Separate fields with sep. Follow last field with lastSep. */ +{ +if (sep == ',') fputc('"',f); +fprintf(f, "%s", el->assemblyAccession); +if (sep == ',') fputc('"',f); +fputc(sep,f); +if (sep == ',') fputc('"',f); +fprintf(f, "%s", el->bioproject); +if (sep == ',') fputc('"',f); +fputc(sep,f); +if (sep == ',') fputc('"',f); +fprintf(f, "%s", el->biosample); +if (sep == ',') fputc('"',f); +fputc(sep,f); +if (sep == ',') fputc('"',f); +fprintf(f, "%s", el->wgsMaster); +if (sep == ',') fputc('"',f); +fputc(sep,f); +if (sep == ',') fputc('"',f); +fprintf(f, "%s", el->refseqCategory); +if (sep == ',') fputc('"',f); +fputc(sep,f); +fprintf(f, "%u", *(el->taxId)); +fputc(sep,f); +fprintf(f, "%u", *(el->speciesTaxid)); +fputc(sep,f); +if (sep == ',') fputc('"',f); +fprintf(f, "%s", el->organismName); +if (sep == ',') fputc('"',f); +fputc(sep,f); +if (sep == ',') fputc('"',f); +fprintf(f, "%s", el->infraspecificName); +if (sep == ',') fputc('"',f); +fputc(sep,f); +if (sep == ',') fputc('"',f); +fprintf(f, "%s", el->isolate); +if (sep == ',') fputc('"',f); +fputc(sep,f); +if (sep == ',') fputc('"',f); +fprintf(f, "%s", el->versionStatus); +if (sep == ',') fputc('"',f); +fputc(sep,f); +if (sep == ',') fputc('"',f); +fprintf(f, "%s", el->assemblyLevel); +if (sep == ',') fputc('"',f); +fputc(sep,f); +if (sep == ',') fputc('"',f); +fprintf(f, "%s", el->releaseType); +if (sep == ',') fputc('"',f); +fputc(sep,f); +if (sep == ',') fputc('"',f); +fprintf(f, "%s", el->genomeRep); +if (sep == ',') fputc('"',f); +fputc(sep,f); +if (sep == ',') fputc('"',f); +fprintf(f, "%s", el->seqRelDate); +if (sep == ',') fputc('"',f); +fputc(sep,f); +if (sep == ',') fputc('"',f); +fprintf(f, "%s", el->asmName); +if (sep == ',') fputc('"',f); +fputc(sep,f); +if (sep == ',') fputc('"',f); +fprintf(f, "%s", el->asmSubmitter); +if (sep == ',') fputc('"',f); +fputc(sep,f); +if (sep == ',') fputc('"',f); +fprintf(f, "%s", el->gbrsPairedAsm); +if (sep == ',') fputc('"',f); +fputc(sep,f); +if (sep == ',') fputc('"',f); +fprintf(f, "%s", el->pairedAsmComp); +if (sep == ',') fputc('"',f); +fputc(sep,f); +if (sep == ',') fputc('"',f); +fprintf(f, "%s", el->ftpPath); +if (sep == ',') fputc('"',f); +fputc(sep,f); +if (sep == ',') fputc('"',f); +fprintf(f, "%s", el->excludedFromRefseq); +if (sep == ',') fputc('"',f); +fputc(sep,f); +if (sep == ',') fputc('"',f); +fprintf(f, "%s", el->relationToTypeMaterial); +if (sep == ',') fputc('"',f); +fputc(sep,f); +if (sep == ',') fputc('"',f); +fprintf(f, "%s", el->asmNotLiveDate); +if (sep == ',') fputc('"',f); +fputc(sep,f); +if (sep == ',') fputc('"',f); +fprintf(f, "%s", el->assemblyType); +if (sep == ',') fputc('"',f); +fputc(sep,f); +if (sep == ',') fputc('"',f); +fprintf(f, "%s", el->taxonGroup); +if (sep == ',') fputc('"',f); +fputc(sep,f); +fprintf(f, "%lld", *(el->genomeSize)); +fputc(sep,f); +fprintf(f, "%lld", *(el->genomeSizeUngapped)); +fputc(sep,f); +fprintf(f, "%g", *(el->gcPercent)); +fputc(sep,f); +fprintf(f, "%u", *(el->repliconCount)); +fputc(sep,f); +fprintf(f, "%u", *(el->scaffoldCount)); +fputc(sep,f); +fprintf(f, "%u", *(el->contigCount)); +fputc(sep,f); +if (sep == ',') fputc('"',f); +fprintf(f, "%s", el->annotationProvider); +if (sep == ',') fputc('"',f); +fputc(sep,f); +if (sep == ',') fputc('"',f); +fprintf(f, "%s", el->annotationName); +if (sep == ',') fputc('"',f); +fputc(sep,f); +if (sep == ',') fputc('"',f); +fprintf(f, "%s", el->annotationDate); +if (sep == ',') fputc('"',f); +fputc(sep,f); +fprintf(f, "%u", *(el->totalGeneCount)); +fputc(sep,f); +fprintf(f, "%u", *(el->proteinCodingGeneCount)); +fputc(sep,f); +fprintf(f, "%u", *(el->nonCodingGeneCount)); +fputc(sep,f); +if (sep == ',') fputc('"',f); +fprintf(f, "%s", el->pubmedId); +if (sep == ',') fputc('"',f); +fputc(lastSep,f); +} + +/* -------------------------------- End autoSql Generated Code -------------------------------- */ +