d2429b17bb096f6c406a2ae03fb5593f27fa53c1 hiram Mon Mar 18 14:17:07 2019 -0700 hash up the output properly for hubPublic and dbDb outputs refs #18869 diff --git src/hg/hubApi/list.c src/hg/hubApi/list.c index d6c04aa..5ee114d 100644 --- src/hg/hubApi/list.c +++ src/hg/hubApi/list.c @@ -1,110 +1,149 @@ /* manage endpoint /list/ functions */ #include "dataApi.h" -static void hubPublicJsonData(struct jsonWrite *jw, struct hubPublic *el) +static void hubPublicJsonData(struct jsonWrite *jw, struct hubPublic *el, + int columnCount, char **columnNames) /* Print array data for one row from hubPublic table, order here * must be same as was stated in the columnName header element - * TODO: need to figure out how to use the order of the columns as - * they are in the 'desc' request * This code should be in hg/lib/hubPublic.c (which does not exist) */ { +int i = 0; +jsonWriteObjectStart(jw, NULL); +jsonWriteString(jw, columnNames[i++], el->hubUrl); +jsonWriteString(jw, columnNames[i++], el->shortLabel); +jsonWriteString(jw, columnNames[i++], el->longLabel); +jsonWriteString(jw, columnNames[i++], el->registrationTime); +jsonWriteNumber(jw, columnNames[i++], (long long)el->dbCount); +jsonWriteString(jw, columnNames[i++], el->dbList); +jsonWriteString(jw, columnNames[i++], el->descriptionUrl); +jsonWriteObjectEnd(jw); +#ifdef NOT jsonWriteListStart(jw, NULL); jsonWriteString(jw, NULL, el->hubUrl); jsonWriteString(jw, NULL, el->shortLabel); jsonWriteString(jw, NULL, el->longLabel); jsonWriteString(jw, NULL, el->registrationTime); jsonWriteNumber(jw, NULL, (long long)el->dbCount); jsonWriteString(jw, NULL, el->dbList); jsonWriteString(jw, NULL, el->descriptionUrl); jsonWriteListEnd(jw); +#endif } static void jsonPublicHubs() /* output the hubPublic SQL table */ { struct sqlConnection *conn = hConnectCentral(); char *dataTime = sqlTableUpdate(conn, hubPublicTableName()); time_t dataTimeStamp = sqlDateToUnixTime(dataTime); replaceChar(dataTime, ' ', 'T'); /* ISO 8601 */ struct hubPublic *el = hubPublicLoadAll(); struct jsonWrite *jw = apiStartOutput(); jsonWriteString(jw, "dataTime", dataTime); jsonWriteNumber(jw, "dataTimeStamp", (long long)dataTimeStamp); freeMem(dataTime); -jsonWriteString(jw, "tableName", hubPublicTableName()); -(void) tableColumns(conn, jw, hubPublicTableName()); -jsonWriteListStart(jw, "publicHubData"); +// redundant: jsonWriteString(jw, "tableName", hubPublicTableName()); +char **columnNames = NULL; +char **columnTypes = NULL; +int columnCount = tableColumns(conn, jw, hubPublicTableName(), &columnNames, &columnTypes); +jsonWriteListStart(jw, "publicHubs"); for ( ; el != NULL; el = el->next ) { - hubPublicJsonData(jw, el); + hubPublicJsonData(jw, el, columnCount, columnNames); } jsonWriteListEnd(jw); jsonWriteObjectEnd(jw); fputs(jw->dy->string,stdout); hDisconnectCentral(&conn); } -static void dbDbJsonData(struct jsonWrite *jw, struct dbDb *el) +static void dbDbJsonData(struct jsonWrite *jw, struct dbDb *el, int columnCount, + char **columnNames) /* Print out dbDb table element in JSON format. * must be same as was stated in the columnName header element - * TODO: need to figure out how to use the order of the columns as - * they are in the 'desc' request * This code should be over in hg/lib/dbDb.c */ { +int i = 0; +jsonWriteObjectStart(jw, el->name); +i++; +// redundant: jsonWriteString(jw, NULL, el->name); +jsonWriteString(jw, columnNames[i++], el->description); +jsonWriteString(jw, columnNames[i++], el->nibPath); +jsonWriteString(jw, columnNames[i++], el->organism); +jsonWriteString(jw, columnNames[i++], el->defaultPos); +jsonWriteNumber(jw, columnNames[i++], (long long)el->active); +jsonWriteNumber(jw, columnNames[i++], (long long)el->orderKey); +jsonWriteString(jw, columnNames[i++], el->genome); +jsonWriteString(jw, columnNames[i++], el->scientificName); +jsonWriteString(jw, columnNames[i++], el->htmlPath); +jsonWriteNumber(jw, columnNames[i++], (long long)el->hgNearOk); +jsonWriteNumber(jw, columnNames[i++], (long long)el->hgPbOk); +jsonWriteString(jw, columnNames[i++], el->sourceName); +jsonWriteNumber(jw, columnNames[i++], (long long)el->taxId); +jsonWriteObjectEnd(jw); +#ifdef NOT jsonWriteListStart(jw, NULL); jsonWriteString(jw, NULL, el->name); jsonWriteString(jw, NULL, el->description); jsonWriteString(jw, NULL, el->nibPath); jsonWriteString(jw, NULL, el->organism); jsonWriteString(jw, NULL, el->defaultPos); jsonWriteNumber(jw, NULL, (long long)el->active); jsonWriteNumber(jw, NULL, (long long)el->orderKey); jsonWriteString(jw, NULL, el->genome); jsonWriteString(jw, NULL, el->scientificName); jsonWriteString(jw, NULL, el->htmlPath); jsonWriteNumber(jw, NULL, (long long)el->hgNearOk); jsonWriteNumber(jw, NULL, (long long)el->hgPbOk); jsonWriteString(jw, NULL, el->sourceName); jsonWriteNumber(jw, NULL, (long long)el->taxId); jsonWriteListEnd(jw); +#endif } static void jsonDbDb() /* output the dbDb SQL table */ { struct sqlConnection *conn = hConnectCentral(); char *dataTime = sqlTableUpdate(conn, "dbDb"); time_t dataTimeStamp = sqlDateToUnixTime(dataTime); replaceChar(dataTime, ' ', 'T'); /* ISO 8601 */ struct dbDb *dbList = ucscDbDb(); struct dbDb *el; struct jsonWrite *jw = apiStartOutput(); jsonWriteString(jw, "dataTime", dataTime); jsonWriteNumber(jw, "dataTimeStamp", (long long)dataTimeStamp); freeMem(dataTime); -jsonWriteString(jw, "tableName", "dbDb"); -(void) tableColumns(conn, jw, "dbDb"); -jsonWriteListStart(jw, "ucscGenomes"); +// not needed: jsonWriteString(jw, "tableName", "dbDb"); +char **columnNames = NULL; +char **columnTypes = NULL; +int columnCount = tableColumns(conn, jw, "dbDb", &columnNames, &columnTypes); +if (columnCount) + { + } +// jsonWriteListStart(jw, "ucscGenomes"); +jsonWriteObjectStart(jw, "ucscGenomes"); for ( el=dbList; el != NULL; el = el->next ) { - dbDbJsonData(jw, el); + dbDbJsonData(jw, el, columnCount, columnNames); } -jsonWriteListEnd(jw); +// jsonWriteListEnd(jw); +jsonWriteObjectEnd(jw); jsonWriteObjectEnd(jw); fputs(jw->dy->string,stdout); hDisconnectCentral(&conn); } static void chromInfoJsonOutput(FILE *f, char *db) /* for given db, if there is a track, list the chromosomes in that track, * for no track, simply list the chromosomes in the sequence */ { char *table = cgiOptionalString("track"); struct sqlConnection *conn = hAllocConn(db); /* in trackDb language: track == table */ if (table) {