src/hg/instinct/lib/raDb.c 1.2

1.2 2010/05/26 21:28:40 cszeto
Added microscope toggle support
Index: src/hg/instinct/lib/raDb.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/instinct/lib/raDb.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -b -B -U 1000000 -r1.1 -r1.2
--- src/hg/instinct/lib/raDb.c	12 Apr 2010 17:16:10 -0000	1.1
+++ src/hg/instinct/lib/raDb.c	26 May 2010 21:28:40 -0000	1.2
@@ -1,784 +1,784 @@
 /* raDb.c was originally generated by the autoSql program, which also 
  * generated raDb.h and raDb.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 "raDb.h"
 
 static char const rcsid[] = "$Id$";
 
 void raDbStaticLoadWithNull(char **row, struct raDb *ret)
 /* Load a row from raDb table into ret.  The contents of ret will
  * be replaced at the next call to this function. */
 {
 
 if (row[0] != NULL)
     {
     ret->id = needMem(sizeof(*(ret->id)));
     *(ret->id) = sqlUnsigned(row[0]);
     }
 else
     {
     ret->id = NULL;
     }
 ret->name = row[1];
 ret->accessTable = row[2];
 ret->shortLabel = row[3];
 ret->longLabel = row[4];
 if (row[5] != NULL)
     {
     ret->expCount = needMem(sizeof(*(ret->expCount)));
     *(ret->expCount) = sqlUnsigned(row[5]);
     }
 else
     {
     ret->expCount = NULL;
     }
 if (row[6] != NULL)
     {
     ret->height = needMem(sizeof(*(ret->height)));
     *(ret->height) = sqlUnsigned(row[6]);
     }
 else
     {
     ret->height = NULL;
     }
 ret->groupName = row[7];
 ret->raFile = row[8];
 ret->patDb = row[9];
-ret->sampleField = row[10];
-ret->patTable = row[11];
-ret->patField = row[12];
-ret->aliasTable = row[13];
-ret->displayNameTable = row[14];
-ret->dataType = row[15];
-ret->platform = row[16];
-if (row[17] != NULL)
+ret->microscope = row[10];
+ret->sampleField = row[11];
+ret->patTable = row[12];
+ret->patField = row[13];
+ret->aliasTable = row[14];
+ret->displayNameTable = row[15];
+ret->dataType = row[16];
+ret->platform = row[17];
+if (row[18] != NULL)
     {
     ret->expScale = needMem(sizeof(float));
-    *(ret->expScale) = sqlFloat(row[17]);
+    *(ret->expScale) = sqlFloat(row[18]);
     }
-if (row[18] != NULL)
+if (row[19] != NULL)
     {
     ret->gainFull = needMem(sizeof(float));
-    *(ret->gainFull) = sqlFloat(row[18]);
+    *(ret->gainFull) = sqlFloat(row[19]);
     }
-if (row[19] != NULL)
+if (row[20] != NULL)
     {
     ret->gainSet = needMem(sizeof(float));
-    *(ret->gainSet) = sqlFloat(row[19]);
+    *(ret->gainSet) = sqlFloat(row[20]);
     }
-ret->type = row[20];
-ret->visibility = row[21];
-if (row[22] != NULL)
+ret->type = row[21];
+ret->visibility = row[22];
+if (row[23] != NULL)
     {
     ret->priority = needMem(sizeof(float));
-    *(ret->priority) = sqlFloat(row[22]);
+    *(ret->priority) = sqlFloat(row[23]);
     }
-ret->url = row[23];
-ret->security = row[24];
-ret->local_url = row[25];
+ret->url = row[24];
+ret->security = row[25];
 ret->profile = row[26];
 ret->wrangler = row[27];
 ret->citation = row[28];
 ret->article_title = row[29];
 ret->author_list = row[30];
 ret->wrangling_procedure = row[31];
 }
 
 struct raDb *raDbLoadByQuery(struct sqlConnection *conn, char *query)
 /* Load all raDb 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 raDbFreeList(). */
 {
 struct raDb *list = NULL, *el;
 struct sqlResult *sr;
 char **row;
 
 sr = sqlGetResult(conn, query);
 while ((row = sqlNextRow(sr)) != NULL)
     {
     el = raDbLoadWithNull(row);
     slAddHead(&list, el);
     }
 slReverse(&list);
 sqlFreeResult(&sr);
 return list;
 }
 
 void raDbSaveToDb(struct sqlConnection *conn, struct raDb *el, char *tableName, int updateSize)
 /* Save raDb 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. Note that strings must be escaped to allow insertion into the database.
  * For example "autosql's features include" --> "autosql\'s features include" 
  * If worried about this use raDbSaveToDbEscaped() */
 {
 struct dyString *update = newDyString(updateSize);
-dyStringPrintf(update, "insert into %s values ( %u,'%s','%s','%s','%s',%u,%u,'%s','%s','%s','%s','%s','%s','%s','%s','%s','%s',%g,%g,%g,'%s','%s',%g,'%s','%s','%s','%s','%s','%s','%s','%s','%s')", 
-	tableName,  *(el->id),  el->name,  el->accessTable,  el->shortLabel,  el->longLabel,  *(el->expCount),  *(el->height),  el->groupName,  el->raFile,  el->patDb,  el->sampleField,  el->patTable,  el->patField,  el->aliasTable,  el->displayNameTable,  el->dataType,  el->platform,  *(el->expScale),  *(el->gainFull),  *(el->gainSet),  el->type,  el->visibility,  *(el->priority),  el->url,  el->security,  el->local_url,  el->profile,  el->wrangler,  el->citation, (el->article_title), (el->author_list),  (el->wrangling_procedure));
+dyStringPrintf(update, "insert into %s values ( %u,'%s','%s','%s','%s',%u,%u,'%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s',%g,%g,%g,'%s','%s',%g,'%s','%s','%s','%s','%s',%s,%s,%s)", 
+	tableName,  *(el->id),  el->name,  el->accessTable,  el->shortLabel,  el->longLabel,  *(el->expCount),  *(el->height),  el->groupName,  el->raFile,  el->patDb,  el->microscope,  el->sampleField,  el->patTable,  el->patField,  el->aliasTable,  el->displayNameTable,  el->dataType,  el->platform,  *(el->expScale),  *(el->gainFull),  *(el->gainSet),  el->type,  el->visibility,  *(el->priority),  el->url,  el->security,  el->profile,  el->wrangler,  el->citation,  (el->article_title),  (el->author_list),  (el->wrangling_procedure));
 sqlUpdate(conn, update->string);
 freeDyString(&update);
 }
 
 void raDbSaveToDbEscaped(struct sqlConnection *conn, struct raDb *el, char *tableName, int updateSize)
 /* Save raDb 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. Automatically 
  * escapes all simple strings (not arrays of string) but may be slower than raDbSaveToDb().
  * For example automatically copies and converts: 
  * "autosql's features include" --> "autosql\'s features include" 
  * before inserting into database. */ 
 {
 struct dyString *update = newDyString(updateSize);
-char  *name, *accessTable, *shortLabel, *longLabel, *groupName, *raFile, *patDb, *sampleField, *patTable, *patField, *aliasTable, *displayNameTable, *dataType, *platform, *type, *visibility, *url, *security, *local_url, *profile, *wrangler, *citation, *article_title, *author_list, *wrangling_procedure;
+char  *name, *accessTable, *shortLabel, *longLabel, *groupName, *raFile, *patDb, *microscope, *sampleField, *patTable, *patField, *aliasTable, *displayNameTable, *dataType, *platform, *type, *visibility, *url, *security, *profile, *wrangler, *citation, *article_title, *author_list, *wrangling_procedure;
 name = sqlEscapeString(el->name);
 accessTable = sqlEscapeString(el->accessTable);
 shortLabel = sqlEscapeString(el->shortLabel);
 longLabel = sqlEscapeString(el->longLabel);
 groupName = sqlEscapeString(el->groupName);
 raFile = sqlEscapeString(el->raFile);
 patDb = sqlEscapeString(el->patDb);
+microscope = sqlEscapeString(el->microscope);
 sampleField = sqlEscapeString(el->sampleField);
 patTable = sqlEscapeString(el->patTable);
 patField = sqlEscapeString(el->patField);
 aliasTable = sqlEscapeString(el->aliasTable);
 displayNameTable = sqlEscapeString(el->displayNameTable);
 dataType = sqlEscapeString(el->dataType);
 platform = sqlEscapeString(el->platform);
 type = sqlEscapeString(el->type);
 visibility = sqlEscapeString(el->visibility);
 url = sqlEscapeString(el->url);
 security = sqlEscapeString(el->security);
-local_url = sqlEscapeString(el->local_url);
 profile = sqlEscapeString(el->profile);
 wrangler = sqlEscapeString(el->wrangler);
 citation = sqlEscapeString(el->citation);
 article_title = sqlEscapeString(el->article_title);
 author_list = sqlEscapeString(el->author_list);
 wrangling_procedure = sqlEscapeString(el->wrangling_procedure);
 
-dyStringPrintf(update, "insert into %s values ( %u,'%s','%s','%s','%s',%u,%u,'%s','%s','%s','%s','%s','%s','%s','%s','%s','%s',%g,%g,%g,'%s','%s',%g,'%s','%s','%s','%s','%s','%s','%s','%s','%s')", 
-	tableName,  *(el->id),  name,  accessTable,  shortLabel,  longLabel,  *(el->expCount),  *(el->height),  groupName,  raFile,  patDb,  sampleField,  patTable,  patField,  aliasTable,  displayNameTable,  dataType,  platform,  *(el->expScale),  *(el->gainFull),  *(el->gainSet),  type,  visibility,  *(el->priority),  url,  security,  local_url,  profile,  wrangler,  citation,  article_title,  author_list,  wrangling_procedure);
+dyStringPrintf(update, "insert into %s values ( %u,'%s','%s','%s','%s',%u,%u,'%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s',%g,%g,%g,'%s','%s',%g,'%s','%s','%s','%s','%s','%s','%s','%s')", 
+	tableName,  *(el->id),  name,  accessTable,  shortLabel,  longLabel,  *(el->expCount),  *(el->height),  groupName,  raFile,  patDb,  microscope,  sampleField,  patTable,  patField,  aliasTable,  displayNameTable,  dataType,  platform,  *(el->expScale),  *(el->gainFull),  *(el->gainSet),  type,  visibility,  *(el->priority),  url,  security,  profile,  wrangler,  citation,  article_title,  author_list,  wrangling_procedure);
 sqlUpdate(conn, update->string);
 freeDyString(&update);
 freez(&name);
 freez(&accessTable);
 freez(&shortLabel);
 freez(&longLabel);
 freez(&groupName);
 freez(&raFile);
 freez(&patDb);
+freez(&microscope);
 freez(&sampleField);
 freez(&patTable);
 freez(&patField);
 freez(&aliasTable);
 freez(&displayNameTable);
 freez(&dataType);
 freez(&platform);
 freez(&type);
 freez(&visibility);
 freez(&url);
 freez(&security);
-freez(&local_url);
 freez(&profile);
 freez(&wrangler);
 freez(&citation);
 freez(&article_title);
 freez(&author_list);
 freez(&wrangling_procedure);
 }
 
 struct raDb *raDbLoadWithNull(char **row)
 /* Load a raDb from row fetched with select * from raDb
  * from database.  Dispose of this with raDbFree(). */
 {
 struct raDb *ret;
 
 AllocVar(ret);
 if (row[0] != NULL)
     {
     ret->id = needMem(sizeof(*(ret->id)));
     *(ret->id) = sqlUnsigned(row[0]);
     }
 else
     {
     ret->id = NULL;
     }
 ret->name = cloneString(row[1]);
 ret->accessTable = cloneString(row[2]);
 ret->shortLabel = cloneString(row[3]);
 ret->longLabel = cloneString(row[4]);
 if (row[5] != NULL)
     {
     ret->expCount = needMem(sizeof(*(ret->expCount)));
     *(ret->expCount) = sqlUnsigned(row[5]);
     }
 else
     {
     ret->expCount = NULL;
     }
 if (row[6] != NULL)
     {
     ret->height = needMem(sizeof(*(ret->height)));
     *(ret->height) = sqlUnsigned(row[6]);
     }
 else
     {
     ret->height = NULL;
     }
 ret->groupName = cloneString(row[7]);
 ret->raFile = cloneString(row[8]);
 ret->patDb = cloneString(row[9]);
-ret->sampleField = cloneString(row[10]);
-ret->patTable = cloneString(row[11]);
-ret->patField = cloneString(row[12]);
-ret->aliasTable = cloneString(row[13]);
-ret->displayNameTable = cloneString(row[14]);
-ret->dataType = cloneString(row[15]);
-ret->platform = cloneString(row[16]);
-if (row[17] != NULL)
+ret->microscope = cloneString(row[10]);
+ret->sampleField = cloneString(row[11]);
+ret->patTable = cloneString(row[12]);
+ret->patField = cloneString(row[13]);
+ret->aliasTable = cloneString(row[14]);
+ret->displayNameTable = cloneString(row[15]);
+ret->dataType = cloneString(row[16]);
+ret->platform = cloneString(row[17]);
+if (row[18] != NULL)
     {
     ret->expScale = needMem(sizeof(float));
-    *(ret->expScale) = sqlFloat(row[17]);
+    *(ret->expScale) = sqlFloat(row[18]);
     }
-if (row[18] != NULL)
+if (row[19] != NULL)
     {
     ret->gainFull = needMem(sizeof(float));
-    *(ret->gainFull) = sqlFloat(row[18]);
+    *(ret->gainFull) = sqlFloat(row[19]);
     }
-if (row[19] != NULL)
+if (row[20] != NULL)
     {
     ret->gainSet = needMem(sizeof(float));
-    *(ret->gainSet) = sqlFloat(row[19]);
+    *(ret->gainSet) = sqlFloat(row[20]);
     }
-ret->type = cloneString(row[20]);
-ret->visibility = cloneString(row[21]);
-if (row[22] != NULL)
+ret->type = cloneString(row[21]);
+ret->visibility = cloneString(row[22]);
+if (row[23] != NULL)
     {
     ret->priority = needMem(sizeof(float));
-    *(ret->priority) = sqlFloat(row[22]);
+    *(ret->priority) = sqlFloat(row[23]);
     }
-ret->url = cloneString(row[23]);
-ret->security = cloneString(row[24]);
-ret->local_url = cloneString(row[25]);
+ret->url = cloneString(row[24]);
+ret->security = cloneString(row[25]);
 ret->profile = cloneString(row[26]);
 ret->wrangler = cloneString(row[27]);
 ret->citation = cloneString(row[28]);
 ret->article_title = cloneString(row[29]);
 ret->author_list = cloneString(row[30]);
 ret->wrangling_procedure = cloneString(row[31]);
 return ret;
 }
 
 struct raDb *raDbLoadAll(char *fileName) 
 /* Load all raDb from a whitespace-separated file.
  * Dispose of this with raDbFreeList(). */
 {
 struct raDb *list = NULL, *el;
 struct lineFile *lf = lineFileOpen(fileName, TRUE);
 char *row[32];
 
 while (lineFileRow(lf, row))
     {
     el = raDbLoadWithNull(row);
     slAddHead(&list, el);
     }
 lineFileClose(&lf);
 slReverse(&list);
 return list;
 }
 
 struct raDb *raDbLoadAllByChar(char *fileName, char chopper) 
 /* Load all raDb from a chopper separated file.
  * Dispose of this with raDbFreeList(). */
 {
 struct raDb *list = NULL, *el;
 struct lineFile *lf = lineFileOpen(fileName, TRUE);
 char *row[32];
 
 while (lineFileNextCharRow(lf, chopper, row, ArraySize(row)))
     {
     el = raDbLoadWithNull(row);
     slAddHead(&list, el);
     }
 lineFileClose(&lf);
 slReverse(&list);
 return list;
 }
 
 struct raDb *raDbCommaIn(char **pS, struct raDb *ret)
 /* Create a raDb out of a comma separated string. 
  * This will fill in ret if non-null, otherwise will
  * return a new raDb */
 {
 char *s = *pS;
 
 if (ret == NULL)
     AllocVar(ret);
 ret->id = needMem(sizeof(unsigned));
 *(ret->id) = sqlUnsignedComma(&s);
 ret->name = sqlStringComma(&s);
 ret->accessTable = sqlStringComma(&s);
 ret->shortLabel = sqlStringComma(&s);
 ret->longLabel = sqlStringComma(&s);
 ret->expCount = needMem(sizeof(unsigned));
 *(ret->expCount) = sqlUnsignedComma(&s);
 ret->height = needMem(sizeof(unsigned));
 *(ret->height) = sqlUnsignedComma(&s);
 ret->groupName = sqlStringComma(&s);
 ret->raFile = sqlStringComma(&s);
 ret->patDb = sqlStringComma(&s);
+ret->microscope = sqlStringComma(&s);
 ret->sampleField = sqlStringComma(&s);
 ret->patTable = sqlStringComma(&s);
 ret->patField = sqlStringComma(&s);
 ret->aliasTable = sqlStringComma(&s);
 ret->displayNameTable = sqlStringComma(&s);
 ret->dataType = sqlStringComma(&s);
 ret->platform = sqlStringComma(&s);
 ret->expScale = needMem(sizeof(*(ret->expScale)));
 *(ret->expScale) = sqlFloatComma(&s);
 ret->gainFull = needMem(sizeof(*(ret->gainFull)));
 *(ret->gainFull) = sqlFloatComma(&s);
 ret->gainSet = needMem(sizeof(*(ret->gainSet)));
 *(ret->gainSet) = sqlFloatComma(&s);
 ret->type = sqlStringComma(&s);
 ret->visibility = sqlStringComma(&s);
 ret->priority = needMem(sizeof(*(ret->priority)));
 *(ret->priority) = sqlFloatComma(&s);
 ret->url = sqlStringComma(&s);
 ret->security = sqlStringComma(&s);
-ret->local_url = sqlStringComma(&s);
 ret->profile = sqlStringComma(&s);
 ret->wrangler = sqlStringComma(&s);
 ret->citation = sqlStringComma(&s);
 ret->article_title = sqlStringComma(&s);
 ret->author_list = sqlStringComma(&s);
 ret->wrangling_procedure = sqlStringComma(&s);
 *pS = s;
 return ret;
 }
 
 void raDbFree(struct raDb **pEl)
 /* Free a single dynamically allocated raDb such as created
  * with raDbLoad(). */
 {
 struct raDb *el;
 
 if ((el = *pEl) == NULL) return;
 freeMem(el->name);
 freeMem(el->accessTable);
 freeMem(el->shortLabel);
 freeMem(el->longLabel);
 freeMem(el->groupName);
 freeMem(el->raFile);
 freeMem(el->patDb);
+freeMem(el->microscope);
 freeMem(el->sampleField);
 freeMem(el->patTable);
 freeMem(el->patField);
 freeMem(el->aliasTable);
 freeMem(el->displayNameTable);
 freeMem(el->dataType);
 freeMem(el->platform);
 freeMem(el->type);
 freeMem(el->visibility);
 freeMem(el->url);
 freeMem(el->security);
-freeMem(el->local_url);
 freeMem(el->profile);
 freeMem(el->wrangler);
 freeMem(el->citation);
 freeMem(el->article_title);
 freeMem(el->author_list);
 freeMem(el->wrangling_procedure);
 freez(pEl);
 }
 
 void raDbFreeList(struct raDb **pList)
 /* Free a list of dynamically allocated raDb's */
 {
 struct raDb *el, *next;
 
 for (el = *pList; el != NULL; el = next)
     {
     next = el->next;
     raDbFree(&el);
     }
 *pList = NULL;
 }
 
 void raDbOutput(struct raDb *el, FILE *f, char sep, char lastSep) 
 /* Print out raDb.  Separate fields with sep. Follow last field with lastSep. */
 {
 fprintf(f, "%u", *(el->id));
 fputc(sep,f);
 if (sep == ',') fputc('"',f);
 fprintf(f, "%s", el->name);
 if (sep == ',') fputc('"',f);
 fputc(sep,f);
 if (sep == ',') fputc('"',f);
 fprintf(f, "%s", el->accessTable);
 if (sep == ',') fputc('"',f);
 fputc(sep,f);
 if (sep == ',') fputc('"',f);
 fprintf(f, "%s", el->shortLabel);
 if (sep == ',') fputc('"',f);
 fputc(sep,f);
 if (sep == ',') fputc('"',f);
 fprintf(f, "%s", el->longLabel);
 if (sep == ',') fputc('"',f);
 fputc(sep,f);
 fprintf(f, "%u", *(el->expCount));
 fputc(sep,f);
 fprintf(f, "%u", *(el->height));
 fputc(sep,f);
 if (sep == ',') fputc('"',f);
 fprintf(f, "%s", el->groupName);
 if (sep == ',') fputc('"',f);
 fputc(sep,f);
 if (sep == ',') fputc('"',f);
 fprintf(f, "%s", el->raFile);
 if (sep == ',') fputc('"',f);
 fputc(sep,f);
 if (sep == ',') fputc('"',f);
 fprintf(f, "%s", el->patDb);
 if (sep == ',') fputc('"',f);
 fputc(sep,f);
 if (sep == ',') fputc('"',f);
+fprintf(f, "%s", el->microscope);
+if (sep == ',') fputc('"',f);
+fputc(sep,f);
+if (sep == ',') fputc('"',f);
 fprintf(f, "%s", el->sampleField);
 if (sep == ',') fputc('"',f);
 fputc(sep,f);
 if (sep == ',') fputc('"',f);
 fprintf(f, "%s", el->patTable);
 if (sep == ',') fputc('"',f);
 fputc(sep,f);
 if (sep == ',') fputc('"',f);
 fprintf(f, "%s", el->patField);
 if (sep == ',') fputc('"',f);
 fputc(sep,f);
 if (sep == ',') fputc('"',f);
 fprintf(f, "%s", el->aliasTable);
 if (sep == ',') fputc('"',f);
 fputc(sep,f);
 if (sep == ',') fputc('"',f);
 fprintf(f, "%s", el->displayNameTable);
 if (sep == ',') fputc('"',f);
 fputc(sep,f);
 if (sep == ',') fputc('"',f);
 fprintf(f, "%s", el->dataType);
 if (sep == ',') fputc('"',f);
 fputc(sep,f);
 if (sep == ',') fputc('"',f);
 fprintf(f, "%s", el->platform);
 if (sep == ',') fputc('"',f);
 fputc(sep,f);
 fprintf(f, "%g", *(el->expScale));
 fputc(sep,f);
 fprintf(f, "%g", *(el->gainFull));
 fputc(sep,f);
 fprintf(f, "%g", *(el->gainSet));
 fputc(sep,f);
 if (sep == ',') fputc('"',f);
 fprintf(f, "%s", el->type);
 if (sep == ',') fputc('"',f);
 fputc(sep,f);
 if (sep == ',') fputc('"',f);
 fprintf(f, "%s", el->visibility);
 if (sep == ',') fputc('"',f);
 fputc(sep,f);
 fprintf(f, "%g", *(el->priority));
 fputc(sep,f);
 if (sep == ',') fputc('"',f);
 fprintf(f, "%s", el->url);
 if (sep == ',') fputc('"',f);
 fputc(sep,f);
 if (sep == ',') fputc('"',f);
 fprintf(f, "%s", el->security);
 if (sep == ',') fputc('"',f);
 fputc(sep,f);
 if (sep == ',') fputc('"',f);
-fprintf(f, "%s", el->local_url);
-if (sep == ',') fputc('"',f);
-fputc(sep,f);
-if (sep == ',') fputc('"',f);
 fprintf(f, "%s", el->profile);
 if (sep == ',') fputc('"',f);
 fputc(sep,f);
 if (sep == ',') fputc('"',f);
 fprintf(f, "%s", el->wrangler);
 if (sep == ',') fputc('"',f);
 fputc(sep,f);
 if (sep == ',') fputc('"',f);
 fprintf(f, "%s", el->citation);
 if (sep == ',') fputc('"',f);
 fputc(sep,f);
 if (sep == ',') fputc('"',f);
 fprintf(f, "%s", el->article_title);
 if (sep == ',') fputc('"',f);
 fputc(sep,f);
 if (sep == ',') fputc('"',f);
 fprintf(f, "%s", el->author_list);
 if (sep == ',') fputc('"',f);
 fputc(sep,f);
 if (sep == ',') fputc('"',f);
 fprintf(f, "%s", el->wrangling_procedure);
 if (sep == ',') fputc('"',f);
 fputc(lastSep,f);
 }
 
 void raDbJsonOutput(struct raDb *el, FILE *f) 
 /* Print out raDb in JSON format. */
 {
 fputc('{',f);
 fputc('"',f);
 fprintf(f,"id");
 fputc('"',f);
 fputc(':',f);
 fprintf(f, "%u", *(el->id));
 fputc(',',f);
 fputc('"',f);
 fprintf(f,"name");
 fputc('"',f);
 fputc(':',f);
 fputc('"',f);
 fprintf(f, "%s", el->name);
 fputc('"',f);
 fputc(',',f);
 fputc('"',f);
 fprintf(f,"accessTable");
 fputc('"',f);
 fputc(':',f);
 fputc('"',f);
 fprintf(f, "%s", el->accessTable);
 fputc('"',f);
 fputc(',',f);
 fputc('"',f);
 fprintf(f,"shortLabel");
 fputc('"',f);
 fputc(':',f);
 fputc('"',f);
 fprintf(f, "%s", el->shortLabel);
 fputc('"',f);
 fputc(',',f);
 fputc('"',f);
 fprintf(f,"longLabel");
 fputc('"',f);
 fputc(':',f);
 fputc('"',f);
 fprintf(f, "%s", el->longLabel);
 fputc('"',f);
 fputc(',',f);
 fputc('"',f);
 fprintf(f,"expCount");
 fputc('"',f);
 fputc(':',f);
 fprintf(f, "%u", *(el->expCount));
 fputc(',',f);
 fputc('"',f);
 fprintf(f,"height");
 fputc('"',f);
 fputc(':',f);
 fprintf(f, "%u", *(el->height));
 fputc(',',f);
 fputc('"',f);
 fprintf(f,"groupName");
 fputc('"',f);
 fputc(':',f);
 fputc('"',f);
 fprintf(f, "%s", el->groupName);
 fputc('"',f);
 fputc(',',f);
 fputc('"',f);
 fprintf(f,"raFile");
 fputc('"',f);
 fputc(':',f);
 fputc('"',f);
 fprintf(f, "%s", el->raFile);
 fputc('"',f);
 fputc(',',f);
 fputc('"',f);
 fprintf(f,"patDb");
 fputc('"',f);
 fputc(':',f);
 fputc('"',f);
 fprintf(f, "%s", el->patDb);
 fputc('"',f);
 fputc(',',f);
 fputc('"',f);
+fprintf(f,"microscope");
+fputc('"',f);
+fputc(':',f);
+fputc('"',f);
+fprintf(f, "%s", el->microscope);
+fputc('"',f);
+fputc(',',f);
+fputc('"',f);
 fprintf(f,"sampleField");
 fputc('"',f);
 fputc(':',f);
 fputc('"',f);
 fprintf(f, "%s", el->sampleField);
 fputc('"',f);
 fputc(',',f);
 fputc('"',f);
 fprintf(f,"patTable");
 fputc('"',f);
 fputc(':',f);
 fputc('"',f);
 fprintf(f, "%s", el->patTable);
 fputc('"',f);
 fputc(',',f);
 fputc('"',f);
 fprintf(f,"patField");
 fputc('"',f);
 fputc(':',f);
 fputc('"',f);
 fprintf(f, "%s", el->patField);
 fputc('"',f);
 fputc(',',f);
 fputc('"',f);
 fprintf(f,"aliasTable");
 fputc('"',f);
 fputc(':',f);
 fputc('"',f);
 fprintf(f, "%s", el->aliasTable);
 fputc('"',f);
 fputc(',',f);
 fputc('"',f);
 fprintf(f,"displayNameTable");
 fputc('"',f);
 fputc(':',f);
 fputc('"',f);
 fprintf(f, "%s", el->displayNameTable);
 fputc('"',f);
 fputc(',',f);
 fputc('"',f);
 fprintf(f,"dataType");
 fputc('"',f);
 fputc(':',f);
 fputc('"',f);
 fprintf(f, "%s", el->dataType);
 fputc('"',f);
 fputc(',',f);
 fputc('"',f);
 fprintf(f,"platform");
 fputc('"',f);
 fputc(':',f);
 fputc('"',f);
 fprintf(f, "%s", el->platform);
 fputc('"',f);
 fputc(',',f);
 fputc('"',f);
 fprintf(f,"expScale");
 fputc('"',f);
 fputc(':',f);
 fprintf(f, "%g", *(el->expScale));
 fputc(',',f);
 fputc('"',f);
 fprintf(f,"gainFull");
 fputc('"',f);
 fputc(':',f);
 fprintf(f, "%g", *(el->gainFull));
 fputc(',',f);
 fputc('"',f);
 fprintf(f,"gainSet");
 fputc('"',f);
 fputc(':',f);
 fprintf(f, "%g", *(el->gainSet));
 fputc(',',f);
 fputc('"',f);
 fprintf(f,"type");
 fputc('"',f);
 fputc(':',f);
 fputc('"',f);
 fprintf(f, "%s", el->type);
 fputc('"',f);
 fputc(',',f);
 fputc('"',f);
 fprintf(f,"visibility");
 fputc('"',f);
 fputc(':',f);
 fputc('"',f);
 fprintf(f, "%s", el->visibility);
 fputc('"',f);
 fputc(',',f);
 fputc('"',f);
 fprintf(f,"priority");
 fputc('"',f);
 fputc(':',f);
 fprintf(f, "%g", *(el->priority));
 fputc(',',f);
 fputc('"',f);
 fprintf(f,"url");
 fputc('"',f);
 fputc(':',f);
 fputc('"',f);
 fprintf(f, "%s", el->url);
 fputc('"',f);
 fputc(',',f);
 fputc('"',f);
 fprintf(f,"security");
 fputc('"',f);
 fputc(':',f);
 fputc('"',f);
 fprintf(f, "%s", el->security);
 fputc('"',f);
 fputc(',',f);
 fputc('"',f);
-fprintf(f,"local_url");
-fputc('"',f);
-fputc(':',f);
-fputc('"',f);
-fprintf(f, "%s", el->local_url);
-fputc('"',f);
-fputc(',',f);
-fputc('"',f);
 fprintf(f,"profile");
 fputc('"',f);
 fputc(':',f);
 fputc('"',f);
 fprintf(f, "%s", el->profile);
 fputc('"',f);
 fputc(',',f);
 fputc('"',f);
 fprintf(f,"wrangler");
 fputc('"',f);
 fputc(':',f);
 fputc('"',f);
 fprintf(f, "%s", el->wrangler);
 fputc('"',f);
 fputc(',',f);
 fputc('"',f);
 fprintf(f,"citation");
 fputc('"',f);
 fputc(':',f);
 fputc('"',f);
 fprintf(f, "%s", el->citation);
 fputc('"',f);
 fputc(',',f);
 fputc('"',f);
 fprintf(f,"article_title");
 fputc('"',f);
 fputc(':',f);
 fputc('"',f);
 fprintf(f, "%s", el->article_title);
 fputc('"',f);
 fputc(',',f);
 fputc('"',f);
 fprintf(f,"author_list");
 fputc('"',f);
 fputc(':',f);
 fputc('"',f);
 fprintf(f, "%s", el->author_list);
 fputc('"',f);
 fputc(',',f);
 fputc('"',f);
 fprintf(f,"wrangling_procedure");
 fputc('"',f);
 fputc(':',f);
 fputc('"',f);
 fprintf(f, "%s", el->wrangling_procedure);
 fputc('"',f);
 fputc('}',f);
 }
 
 /* -------------------------------- End autoSql Generated Code -------------------------------- */