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 -------------------------------- */
+